Skip to content

Commit 953ffbd

Browse files
committed
tkr-distinct 1d-7d write
1 parent b825672 commit 953ffbd

File tree

8 files changed

+384
-103
lines changed

8 files changed

+384
-103
lines changed

src/CMakeLists.txt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@ configure_file(pathlib.in.f90 pathlib.f90 @ONLY)
88
file(READ reader_template.in.f90 reader_template)
99
configure_file(reader.in.f90 reader.f90 @ONLY)
1010

11-
file(READ writer_template.in.f90 writer_template)
11+
file(READ writer_template_r32.in.f90 writer_template_r32)
12+
file(READ writer_template_r64.in.f90 writer_template_r64)
13+
file(READ writer_template_i32.in.f90 writer_template_i32)
14+
file(READ writer_template_i64.in.f90 writer_template_i64)
1215
configure_file(writer.in.f90 writer.f90 @ONLY)
1316

1417
set_directory_properties(PROPERTIES CMAKE_CONFIGURE_DEPENDS
15-
"reader_template.in.f90;writer_template.in.f90")
18+
"reader_template.in.f90;writer_template_r32.in.f90;writer_template_r64.in.f90;writer_template_i32.in.f90;writer_template_i64.in.f90")
1619

1720
target_sources(nc4fortran PRIVATE
1821
interface.f90

src/interface.f90

Lines changed: 207 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,24 @@ module nc4fortran
4242
!> generic procedures mapped over type / rank
4343
generic, public :: write => &
4444
nc_write_scalar_r32, nc_write_scalar_r64, nc_write_scalar_i32, nc_write_scalar_i64, nc_write_scalar_char, &
45-
nc_write_1d, nc_write_2d, nc_write_3d, &
46-
nc_write_4d, nc_write_5d, nc_write_6d, nc_write_7d
45+
nc_write_1d_r32, nc_write_1d_r64, nc_write_1d_i32, nc_write_1d_i64, &
46+
nc_write_2d_r32, nc_write_2d_r64, nc_write_2d_i32, nc_write_2d_i64, &
47+
nc_write_3d_r32, nc_write_3d_r64, nc_write_3d_i32, nc_write_3d_i64, &
48+
nc_write_4d_r32, nc_write_4d_r64, nc_write_4d_i32, nc_write_4d_i64, &
49+
nc_write_5d_r32, nc_write_5d_r64, nc_write_5d_i32, nc_write_5d_i64, &
50+
nc_write_6d_r32, nc_write_6d_r64, nc_write_6d_i32, nc_write_6d_i64, &
51+
nc_write_7d_r32, nc_write_7d_r64, nc_write_7d_i32, nc_write_7d_i64
4752

4853
generic, public :: read => nc_read_scalar, nc_read_1d, nc_read_2d, nc_read_3d, nc_read_4d, nc_read_5d, nc_read_6d, nc_read_7d
4954

5055
procedure, private :: nc_write_scalar_r32, nc_write_scalar_r64, nc_write_scalar_i32, nc_write_scalar_i64, nc_write_scalar_char, &
51-
nc_write_1d, nc_write_2d, nc_write_3d, nc_write_4d, nc_write_5d, nc_write_6d, nc_write_7d, &
56+
nc_write_1d_r32, nc_write_1d_r64, nc_write_1d_i32, nc_write_1d_i64, &
57+
nc_write_2d_r32, nc_write_2d_r64, nc_write_2d_i32, nc_write_2d_i64, &
58+
nc_write_3d_r32, nc_write_3d_r64, nc_write_3d_i32, nc_write_3d_i64, &
59+
nc_write_4d_r32, nc_write_4d_r64, nc_write_4d_i32, nc_write_4d_i64, &
60+
nc_write_5d_r32, nc_write_5d_r64, nc_write_5d_i32, nc_write_5d_i64, &
61+
nc_write_6d_r32, nc_write_6d_r64, nc_write_6d_i32, nc_write_6d_i64, &
62+
nc_write_7d_r32, nc_write_7d_r64, nc_write_7d_i32, nc_write_7d_i64, &
5263
nc_read_scalar, nc_read_1d, nc_read_2d, nc_read_3d, nc_read_4d, nc_read_5d, nc_read_6d, nc_read_7d, &
5364
def_dims
5465

@@ -107,61 +118,233 @@ module subroutine nc_write_scalar_i64(self, dname, value, ierr)
107118
integer, intent(out), optional :: ierr
108119
end subroutine nc_write_scalar_i64
109120

110-
module subroutine nc_write_1d(self, dname, value, dims, ierr)
121+
module subroutine nc_write_1d_r32(self, dname, value, dims, ierr)
111122
class(netcdf_file), intent(in) :: self
112123
character(*), intent(in) :: dname
113-
class(*), intent(in) :: value(:)
124+
real(real32), intent(in) :: value(:)
114125
character(*), intent(in), optional :: dims(:)
115126
integer, intent(out), optional :: ierr
116-
end subroutine nc_write_1d
127+
end subroutine nc_write_1d_r32
117128

118-
module subroutine nc_write_2d(self, dname, value, dims, ierr)
129+
module subroutine nc_write_1d_r64(self, dname, value, dims, ierr)
119130
class(netcdf_file), intent(in) :: self
120131
character(*), intent(in) :: dname
121-
class(*), intent(in) :: value(:,:)
132+
real(real64), intent(in) :: value(:)
122133
character(*), intent(in), optional :: dims(:)
123134
integer, intent(out), optional :: ierr
124-
end subroutine nc_write_2d
135+
end subroutine nc_write_1d_r64
125136

126-
module subroutine nc_write_3d(self, dname, value, dims, ierr)
137+
module subroutine nc_write_1d_i32(self, dname, value, dims, ierr)
127138
class(netcdf_file), intent(in) :: self
128139
character(*), intent(in) :: dname
129-
class(*), intent(in) :: value(:,:,:)
140+
integer(int32), intent(in) :: value(:)
130141
character(*), intent(in), optional :: dims(:)
131142
integer, intent(out), optional :: ierr
132-
end subroutine nc_write_3d
143+
end subroutine nc_write_1d_i32
133144

134-
module subroutine nc_write_4d(self, dname, value, dims, ierr)
145+
module subroutine nc_write_1d_i64(self, dname, value, dims, ierr)
135146
class(netcdf_file), intent(in) :: self
136147
character(*), intent(in) :: dname
137-
class(*), intent(in) :: value(:,:,:,:)
148+
integer(int64), intent(in) :: value(:)
138149
character(*), intent(in), optional :: dims(:)
139150
integer, intent(out), optional :: ierr
140-
end subroutine nc_write_4d
151+
end subroutine nc_write_1d_i64
141152

142-
module subroutine nc_write_5d(self, dname, value, dims, ierr)
153+
module subroutine nc_write_2d_r32(self, dname, value, dims, ierr)
143154
class(netcdf_file), intent(in) :: self
144155
character(*), intent(in) :: dname
145-
class(*), intent(in) :: value(:,:,:,:,:)
156+
real(real32), intent(in) :: value(:,:)
146157
character(*), intent(in), optional :: dims(:)
147158
integer, intent(out), optional :: ierr
148-
end subroutine nc_write_5d
159+
end subroutine nc_write_2d_r32
149160

150-
module subroutine nc_write_6d(self, dname, value, dims, ierr)
161+
module subroutine nc_write_2d_r64(self, dname, value, dims, ierr)
151162
class(netcdf_file), intent(in) :: self
152163
character(*), intent(in) :: dname
153-
class(*), intent(in) :: value(:,:,:,:,:,:)
164+
real(real64), intent(in) :: value(:,:)
154165
character(*), intent(in), optional :: dims(:)
155166
integer, intent(out), optional :: ierr
156-
end subroutine nc_write_6d
167+
end subroutine nc_write_2d_r64
157168

158-
module subroutine nc_write_7d(self, dname, value, dims, ierr)
169+
module subroutine nc_write_2d_i32(self, dname, value, dims, ierr)
159170
class(netcdf_file), intent(in) :: self
160171
character(*), intent(in) :: dname
161-
class(*), intent(in) :: value(:,:,:,:,:,:,:)
172+
integer(int32), intent(in) :: value(:,:)
162173
character(*), intent(in), optional :: dims(:)
163174
integer, intent(out), optional :: ierr
164-
end subroutine nc_write_7d
175+
end subroutine nc_write_2d_i32
176+
177+
module subroutine nc_write_2d_i64(self, dname, value, dims, ierr)
178+
class(netcdf_file), intent(in) :: self
179+
character(*), intent(in) :: dname
180+
integer(int64), intent(in) :: value(:,:)
181+
character(*), intent(in), optional :: dims(:)
182+
integer, intent(out), optional :: ierr
183+
end subroutine nc_write_2d_i64
184+
185+
module subroutine nc_write_3d_r32(self, dname, value, dims, ierr)
186+
class(netcdf_file), intent(in) :: self
187+
character(*), intent(in) :: dname
188+
real(real32), intent(in) :: value(:,:,:)
189+
character(*), intent(in), optional :: dims(:)
190+
integer, intent(out), optional :: ierr
191+
end subroutine nc_write_3d_r32
192+
193+
module subroutine nc_write_3d_r64(self, dname, value, dims, ierr)
194+
class(netcdf_file), intent(in) :: self
195+
character(*), intent(in) :: dname
196+
real(real64), intent(in) :: value(:,:,:)
197+
character(*), intent(in), optional :: dims(:)
198+
integer, intent(out), optional :: ierr
199+
end subroutine nc_write_3d_r64
200+
201+
module subroutine nc_write_3d_i32(self, dname, value, dims, ierr)
202+
class(netcdf_file), intent(in) :: self
203+
character(*), intent(in) :: dname
204+
integer(int32), intent(in) :: value(:,:,:)
205+
character(*), intent(in), optional :: dims(:)
206+
integer, intent(out), optional :: ierr
207+
end subroutine nc_write_3d_i32
208+
209+
module subroutine nc_write_3d_i64(self, dname, value, dims, ierr)
210+
class(netcdf_file), intent(in) :: self
211+
character(*), intent(in) :: dname
212+
integer(int64), intent(in) :: value(:,:,:)
213+
character(*), intent(in), optional :: dims(:)
214+
integer, intent(out), optional :: ierr
215+
end subroutine nc_write_3d_i64
216+
217+
module subroutine nc_write_4d_r32(self, dname, value, dims, ierr)
218+
class(netcdf_file), intent(in) :: self
219+
character(*), intent(in) :: dname
220+
real(real32), intent(in) :: value(:,:,:,:)
221+
character(*), intent(in), optional :: dims(:)
222+
integer, intent(out), optional :: ierr
223+
end subroutine nc_write_4d_r32
224+
225+
module subroutine nc_write_4d_r64(self, dname, value, dims, ierr)
226+
class(netcdf_file), intent(in) :: self
227+
character(*), intent(in) :: dname
228+
real(real64), intent(in) :: value(:,:,:,:)
229+
character(*), intent(in), optional :: dims(:)
230+
integer, intent(out), optional :: ierr
231+
end subroutine nc_write_4d_r64
232+
233+
module subroutine nc_write_4d_i32(self, dname, value, dims, ierr)
234+
class(netcdf_file), intent(in) :: self
235+
character(*), intent(in) :: dname
236+
integer(int32), intent(in) :: value(:,:,:,:)
237+
character(*), intent(in), optional :: dims(:)
238+
integer, intent(out), optional :: ierr
239+
end subroutine nc_write_4d_i32
240+
241+
module subroutine nc_write_4d_i64(self, dname, value, dims, ierr)
242+
class(netcdf_file), intent(in) :: self
243+
character(*), intent(in) :: dname
244+
integer(int64), intent(in) :: value(:,:,:,:)
245+
character(*), intent(in), optional :: dims(:)
246+
integer, intent(out), optional :: ierr
247+
end subroutine nc_write_4d_i64
248+
249+
250+
module subroutine nc_write_5d_r32(self, dname, value, dims, ierr)
251+
class(netcdf_file), intent(in) :: self
252+
character(*), intent(in) :: dname
253+
real(real32), intent(in) :: value(:,:,:,:,:)
254+
character(*), intent(in), optional :: dims(:)
255+
integer, intent(out), optional :: ierr
256+
end subroutine nc_write_5d_r32
257+
258+
module subroutine nc_write_5d_r64(self, dname, value, dims, ierr)
259+
class(netcdf_file), intent(in) :: self
260+
character(*), intent(in) :: dname
261+
real(real64), intent(in) :: value(:,:,:,:,:)
262+
character(*), intent(in), optional :: dims(:)
263+
integer, intent(out), optional :: ierr
264+
end subroutine nc_write_5d_r64
265+
266+
module subroutine nc_write_5d_i32(self, dname, value, dims, ierr)
267+
class(netcdf_file), intent(in) :: self
268+
character(*), intent(in) :: dname
269+
integer(int32), intent(in) :: value(:,:,:,:,:)
270+
character(*), intent(in), optional :: dims(:)
271+
integer, intent(out), optional :: ierr
272+
end subroutine nc_write_5d_i32
273+
274+
module subroutine nc_write_5d_i64(self, dname, value, dims, ierr)
275+
class(netcdf_file), intent(in) :: self
276+
character(*), intent(in) :: dname
277+
integer(int64), intent(in) :: value(:,:,:,:,:)
278+
character(*), intent(in), optional :: dims(:)
279+
integer, intent(out), optional :: ierr
280+
end subroutine nc_write_5d_i64
281+
282+
283+
module subroutine nc_write_6d_r32(self, dname, value, dims, ierr)
284+
class(netcdf_file), intent(in) :: self
285+
character(*), intent(in) :: dname
286+
real(real32), intent(in) :: value(:,:,:,:,:,:)
287+
character(*), intent(in), optional :: dims(:)
288+
integer, intent(out), optional :: ierr
289+
end subroutine nc_write_6d_r32
290+
291+
module subroutine nc_write_6d_r64(self, dname, value, dims, ierr)
292+
class(netcdf_file), intent(in) :: self
293+
character(*), intent(in) :: dname
294+
real(real64), intent(in) :: value(:,:,:,:,:,:)
295+
character(*), intent(in), optional :: dims(:)
296+
integer, intent(out), optional :: ierr
297+
end subroutine nc_write_6d_r64
298+
299+
module subroutine nc_write_6d_i32(self, dname, value, dims, ierr)
300+
class(netcdf_file), intent(in) :: self
301+
character(*), intent(in) :: dname
302+
integer(int32), intent(in) :: value(:,:,:,:,:,:)
303+
character(*), intent(in), optional :: dims(:)
304+
integer, intent(out), optional :: ierr
305+
end subroutine nc_write_6d_i32
306+
307+
module subroutine nc_write_6d_i64(self, dname, value, dims, ierr)
308+
class(netcdf_file), intent(in) :: self
309+
character(*), intent(in) :: dname
310+
integer(int64), intent(in) :: value(:,:,:,:,:,:)
311+
character(*), intent(in), optional :: dims(:)
312+
integer, intent(out), optional :: ierr
313+
end subroutine nc_write_6d_i64
314+
315+
316+
module subroutine nc_write_7d_r32(self, dname, value, dims, ierr)
317+
class(netcdf_file), intent(in) :: self
318+
character(*), intent(in) :: dname
319+
real(real32), intent(in) :: value(:,:,:,:,:,:,:)
320+
character(*), intent(in), optional :: dims(:)
321+
integer, intent(out), optional :: ierr
322+
end subroutine nc_write_7d_r32
323+
324+
module subroutine nc_write_7d_r64(self, dname, value, dims, ierr)
325+
class(netcdf_file), intent(in) :: self
326+
character(*), intent(in) :: dname
327+
real(real64), intent(in) :: value(:,:,:,:,:,:,:)
328+
character(*), intent(in), optional :: dims(:)
329+
integer, intent(out), optional :: ierr
330+
end subroutine nc_write_7d_r64
331+
332+
module subroutine nc_write_7d_i32(self, dname, value, dims, ierr)
333+
class(netcdf_file), intent(in) :: self
334+
character(*), intent(in) :: dname
335+
integer(int32), intent(in) :: value(:,:,:,:,:,:,:)
336+
character(*), intent(in), optional :: dims(:)
337+
integer, intent(out), optional :: ierr
338+
end subroutine nc_write_7d_i32
339+
340+
module subroutine nc_write_7d_i64(self, dname, value, dims, ierr)
341+
class(netcdf_file), intent(in) :: self
342+
character(*), intent(in) :: dname
343+
integer(int64), intent(in) :: value(:,:,:,:,:,:,:)
344+
character(*), intent(in), optional :: dims(:)
345+
integer, intent(out), optional :: ierr
346+
end subroutine nc_write_7d_i64
347+
165348
end interface
166349

167350

0 commit comments

Comments
 (0)