@@ -13,13 +13,14 @@ module h5fortran
1313type :: hdf5_file
1414
1515character (:),allocatable :: filename
16- integer (HID_T) :: lid, & ! < location identifier
17- gid, & ! < group identifier
18- glid, & ! < group location identifier
19- sid, did, pid
20-
21- integer :: comp_lvl = 0 ! < compression level (1-9) 0: disable compression
22- integer (HSIZE_T) :: chunk_size(7 ) = [64 ,64 ,1 ,1 ,1 ,1 ,1 ] ! < chunk size per dimension (arbitrary)
16+ integer (HID_T) :: lid, & ! < location ID
17+ gid, & ! < group ID
18+ glid, & ! < group location ID
19+ sid, & ! < dataspace ID
20+ did ! < dataset ID
21+
22+ integer :: comp_lvl = 0 ! < compression level (1-9) 0: disable compression
23+ integer (HSIZE_T) :: chunk_size(7 ) = [1 ,1 ,1 ,1 ,1 ,1 ,1 ] ! < chunk size per dimension
2324logical :: verbose= .false.
2425
2526contains
@@ -70,10 +71,11 @@ module subroutine hdf_wrapup(self, ierr)
7071integer , intent (out ) :: ierr
7172end subroutine hdf_wrapup
7273
73- module subroutine hdf_set_deflate (self , dims , ierr )
74+ module subroutine hdf_set_deflate (self , dims , ierr , chunk_size )
7475class(hdf5_file), intent (inout ) :: self
7576integer (HSIZE_T), intent (in ) :: dims(:)
7677integer , intent (out ) :: ierr
78+ integer , intent (in ), optional :: chunk_size(:)
7779end subroutine hdf_set_deflate
7880
7981module subroutine hdf_write_scalar (self ,dname ,value , ierr )
@@ -94,47 +96,47 @@ module subroutine hdf_write_2d(self,dname,value, ierr, chunk_size)
9496class(hdf5_file), intent (inout ) :: self
9597character (* ), intent (in ) :: dname
9698class(* ), intent (in ) :: value(:,:)
97- integer , intent (in ), optional :: chunk_size(: )
99+ integer , intent (in ), optional :: chunk_size(rank(value) )
98100integer , intent (out ) :: ierr
99101end subroutine hdf_write_2d
100102
101103module subroutine hdf_write_3d (self ,dname ,value , ierr , chunk_size )
102104class(hdf5_file), intent (inout ) :: self
103105character (* ), intent (in ) :: dname
104106class(* ), intent (in ) :: value(:,:,:)
105- integer , intent (in ), optional :: chunk_size(: )
107+ integer , intent (in ), optional :: chunk_size(rank(value) )
106108integer , intent (out ) :: ierr
107109end subroutine hdf_write_3d
108110
109111module subroutine hdf_write_4d (self ,dname ,value , ierr , chunk_size )
110112class(hdf5_file), intent (inout ) :: self
111113character (* ), intent (in ) :: dname
112114class(* ), intent (in ) :: value(:,:,:,:)
113- integer , intent (in ), optional :: chunk_size(: )
115+ integer , intent (in ), optional :: chunk_size(rank(value) )
114116integer , intent (out ) :: ierr
115117end subroutine hdf_write_4d
116118
117119module subroutine hdf_write_5d (self ,dname ,value , ierr , chunk_size )
118120class(hdf5_file), intent (inout ) :: self
119121character (* ), intent (in ) :: dname
120122class(* ), intent (in ) :: value(:,:,:,:,:)
121- integer , intent (in ), optional :: chunk_size(: )
123+ integer , intent (in ), optional :: chunk_size(rank(value) )
122124integer , intent (out ) :: ierr
123125end subroutine hdf_write_5d
124126
125127module subroutine hdf_write_6d (self ,dname ,value , ierr , chunk_size )
126128class(hdf5_file), intent (inout ) :: self
127129character (* ), intent (in ) :: dname
128130class(* ), intent (in ) :: value(:,:,:,:,:,:)
129- integer , intent (in ), optional :: chunk_size(: )
131+ integer , intent (in ), optional :: chunk_size(rank(value) )
130132integer , intent (out ) :: ierr
131133end subroutine hdf_write_6d
132134
133135module subroutine hdf_write_7d (self ,dname ,value , ierr , chunk_size )
134136class(hdf5_file), intent (inout ) :: self
135137character (* ), intent (in ) :: dname
136138class(* ), intent (in ) :: value(:,:,:,:,:,:,:)
137- integer , intent (in ), optional :: chunk_size(: )
139+ integer , intent (in ), optional :: chunk_size(rank(value) )
138140integer , intent (out ) :: ierr
139141end subroutine hdf_write_7d
140142
@@ -232,7 +234,7 @@ end subroutine writeattr
232234contains
233235
234236
235- subroutine hdf_initialize (self ,filename ,ierr , status ,action ,comp_lvl )
237+ subroutine hdf_initialize (self ,filename ,ierr , status ,action ,comp_lvl , chunk_size )
236238! ! Opens hdf5 file
237239
238240class(hdf5_file), intent (inout ) :: self
@@ -241,16 +243,17 @@ subroutine hdf_initialize(self,filename,ierr, status,action,comp_lvl)
241243character (* ), intent (in ), optional :: status
242244character (* ), intent (in ), optional :: action
243245integer , intent (in ), optional :: comp_lvl
246+ integer , intent (in ), optional :: chunk_size(:)
244247
245248character (:), allocatable :: lstatus, laction
246249logical :: exists
247250
248- self% pid = 0
249251self% sid = 0
250252! ! arbitrary sentinel values, telling us it hasn't been used by HDF5
251253self% filename = filename
252254
253255if (present (comp_lvl)) self% comp_lvl = comp_lvl
256+ if (present (chunk_size)) self% chunk_size(1 :size (chunk_size)) = chunk_size
254257
255258! > Initialize FORTRAN interface.
256259call h5open_f(ierr)
0 commit comments