MONC
dummy_netcdf.F90
Go to the documentation of this file.
1 ! Dummy NetCDF module that can be used instead of the real NetCDF for testing purposes.
2 ! Lots of the functionality is just stubbed out, but the aim is for memory to hold the specific
3 ! values so that testing can be done by changing/inspecting these data structures
5  use collections_mod, only : map_type, c_put, c_contains, c_get, c_free
7  use fruit, only : assert_false
9  implicit none
10 
11  ! Whether we are in define mode or not
12  logical :: define_mode = .false.
13 
14  ! Allows us to wrap integer arrays for generic conversion
16  integer size
17  integer, allocatable, dimension(:) :: data
19 
20  ! NetCDF state_mod - note these are global to all currently "open" files
22 
23  ! Parameters that the source code uses
24  integer, parameter :: nf90_noerr = 0, dummy_error=100, nf90_global=0, nf90_ebaddim=1000, nf90_enotatt=2000, &
27 
28  ! Internal counters to keep track of the latest ids
30 
31  ! Generic put to support a variety of data types
32  interface nf90_put_var
35  end interface nf90_put_var
36 
37  ! Generic define to support different sizes of define calls
38  interface nf90_def_var
40  end interface nf90_def_var
41 
42  ! Generic variable get to support different types of variable data
43  interface nf90_get_var
46  end interface nf90_get_var
47 contains
48 
49  ! Resets the NetCDF state_mod (useful between tests)
50  subroutine dummy_netcdf_reset()
51  call c_free(variable_ids)
53  call c_free(dimension_ids)
55  current_ncid=0
56  current_dim=0
57  current_var_id = 0
58  define_mode = .false.
59  end subroutine dummy_netcdf_reset
60 
61  ! Stub for open a NetCDF file
62  integer function nf90_open(path, mode, ncid)
63  character(len=*), intent(in) :: path
64  integer, intent(in) :: mode
65  integer, intent(out) :: ncid
66 
68  ncid = current_ncid
70  end function nf90_open
71 
72  ! Stub for creating a NetCDF file
73  integer function nf90_create(path, mode, ncid, comm, info)
74  character(len=*), intent(in) :: path
75  integer, intent(in) :: mode
76  integer, intent(in), optional :: comm, info
77  integer, intent(out) :: ncid
78 
79  ncid = 1
80  define_mode = .true.
82  end function nf90_create
83 
84  ! Stub for putting an attribute into the NetCDF
85  integer function nf90_put_att(ncid, attribute, key, value)
86  integer, intent(in) :: ncid, attribute
87  character(len=*), intent(in) :: key, value
88  class(*), pointer :: raw_data
89 
90  if (attribute == nf90_global) then
91  raw_data=>conv_to_generic(value, .true.)
92  call c_put(global_attributes, key, raw_data)
93  else
94 
95  end if
97  end function nf90_put_att
98 
99  ! Stub for the enddef call
100  integer function nf90_enddef(ncid)
101  integer, intent(in) :: ncid
102 
103  define_mode = .false.
105  end function nf90_enddef
106 
107  ! Stub for closing the NetCDF file
108  integer function nf90_close(ncid)
109  integer, intent(in) :: ncid
110 
112  end function nf90_close
113 
114  ! Stub for inquiring about an attributes size
115  integer function nf90_inquire_attribute(ncid, attributeid, key, len)
116  integer, intent(in) :: ncid, attributeid
117  character(len=*), intent(in) :: key
118  integer, intent(out) :: len
119 
120  len = 200 ! Dummy 200
122  end function nf90_inquire_attribute
123 
124  ! Stub for getting an attribute, currently works for global attributes
125  integer function nf90_get_att(ncid, attributeid, key, value)
126  integer, intent(in) :: ncid, attributeid
127  character(len=*), intent(in) :: key
128  character(len=100), intent(out) :: value
129 
130  class(*), pointer :: raw_data
131 
132  if (attributeid == nf90_global) then
133  raw_data=>c_get(global_attributes, key)
134  value = conv_to_string(raw_data, .true., 100)
135  end if
137  end function nf90_get_att
138 
139  ! Stub for grabbing the id of a variable's key
140  integer function nf90_inq_varid(ncid, key, varid)
141  character(len=*), intent(in) :: key
142  integer, intent(in) :: ncid
143  integer, intent(out) :: varid
144 
145  class(*), pointer :: raw_data
146 
147  if (c_contains(variable_ids, key)) then
148  raw_data=>c_get(variable_ids, key)
149  if (associated(raw_data)) then
150  varid = conv_to_integer(raw_data, .false.)
152  return
153  end if
155  else
157  end if
158  end function nf90_inq_varid
159 
160  ! Stub for getting character variable data
161  integer function nf90_get_var_char(ncid, varid, target, indexes, start, count, map)
162  integer, intent(in) :: ncid, varid
163  character(len=100), intent(out) :: target
164  integer, dimension(:), optional, intent(in) :: indexes, start, count, map
165 
167  end function nf90_get_var_char
168 
169  ! Stub for getting integer variable data
170  integer function nf90_get_var_integer(ncid, varid, target, indexes, start, count, map)
171  integer, intent(in) :: ncid, varid
172  integer, dimension(*), intent(out) :: target
173  integer, dimension(:), optional, intent(in) :: indexes, start, count, map
174 
175  class(*), pointer :: raw_data
176  raw_data=>c_get(var_data, conv_to_string(varid))
177  target(1) = conv_to_integer(raw_data, .false.)
178 
180  end function nf90_get_var_integer
181 
182  ! Stub for getting real variable data
183  integer function nf90_get_var_real(ncid, varid, target, indexes, start, count, map)
184  integer, intent(in) :: ncid, varid
185  real(kind=single_precision), dimension(*), intent(out) :: target
186  integer, dimension(:), optional, intent(in) :: indexes, start, count, map
187 
189  end function nf90_get_var_real
190 
191  ! Stub for getting real scalar variable data
192  integer function nf90_get_var_real_scalar(ncid, varid, target, indexes, start, count, map)
193  integer, intent(in) :: ncid, varid
194  real(kind=single_precision), intent(out) :: target
195  integer, dimension(:), optional, intent(in) :: indexes, start, count, map
196 
198  end function nf90_get_var_real_scalar
199 
200  ! Stub for getting read array (rank 3) variable data
201  integer function nf90_get_var_real3d(ncid, varid, target, indexes, start, count, map)
202  integer, intent(in) :: ncid, varid
203  real(kind=single_precision), dimension(:,:,:), intent(out) :: target
204  integer, dimension(:), optional, intent(in) :: indexes, start, count, map
205 
207  end function nf90_get_var_real3d
208 
209  ! Stub for getting real variable data
210  integer function nf90_get_var_double(ncid, varid, target, indexes, start, count, map)
211  integer, intent(in) :: ncid, varid
212  real(kind=double_precision), dimension(*), intent(out) :: target
213  integer, dimension(:), optional, intent(in) :: indexes, start, count, map
214 
216  end function nf90_get_var_double
217 
218  ! Stub for getting real scalar variable data
219  integer function nf90_get_var_double_scalar(ncid, varid, target, indexes, start, count, map)
220  integer, intent(in) :: ncid, varid
221  real(kind=double_precision), intent(out) :: target
222  integer, dimension(:), optional, intent(in) :: indexes, start, count, map
223 
225  end function nf90_get_var_double_scalar
226 
227  ! Stub for getting read array (rank 3) variable data
228  integer function nf90_get_var_double3d(ncid, varid, target, indexes, start, count, map)
229  integer, intent(in) :: ncid, varid
230  real(kind=double_precision), dimension(:,:,:), intent(out) :: target
231  integer, dimension(:), optional, intent(in) :: indexes, start, count, map
232 
234  end function nf90_get_var_double3d
235 
236  ! Stub for putting character variable data
237  integer function nf90_put_var_char(ncid, varid, source, indexes, start, count, map)
238  integer, intent(in) :: ncid, varid
239  character(len=*), intent(in) :: source
240  integer, dimension(:), optional , intent(in) :: indexes, start, count, map
241 
242  class(*), pointer :: raw_data
243 
244  call assert_false(define_mode, "Switched from define mode")
245  raw_data=>conv_to_generic(source, .true.)
246  call c_put(var_data, conv_to_string(varid), raw_data)
247 
249  end function nf90_put_var_char
250 
251  ! Stub for putting integer variable data
252  integer function nf90_put_var_integer(ncid, varid, source, indexes, start, count, map)
253  integer, intent(in) :: ncid, varid
254  integer, intent(in) :: source
255  integer, dimension(:), optional , intent(in) :: indexes, start, count, map
256 
257  class(*), pointer :: raw_data
258 
259  call assert_false(define_mode, "Switched from define mode")
260  raw_data=>conv_to_generic(source, .true.)
261  call c_put(var_data, conv_to_string(varid), raw_data)
263  end function nf90_put_var_integer
264 
265  ! Stub for putting real variable data
266  integer function nf90_put_var_real(ncid, varid, source, indexes, start, count, map)
267  integer, intent(in) :: ncid, varid
268  real(kind=single_precision), dimension(*), intent(in) :: source
269  integer, dimension(:), optional , intent(in) :: indexes, start, count, map
270 
271  call assert_false(define_mode, "Switched from define mode")
273  end function nf90_put_var_real
274 
275  ! Stub for putting real scalar variable data
276  integer function nf90_put_var_real_scalar(ncid, varid, source, indexes, start, count, map)
277  integer, intent(in) :: ncid, varid
278  real(kind=single_precision), intent(in) :: source
279  integer, dimension(:), optional , intent(in) :: indexes, start, count, map
280 
281  call assert_false(define_mode, "Switched from define mode")
283  end function nf90_put_var_real_scalar
284 
285  ! Stub for putting real array (rank 3) variable data
286  integer function nf90_put_var_real_3d(ncid, varid, source, indexes, start, count, map)
287  integer, intent(in) :: ncid, varid
288  real(kind=single_precision), dimension(:,:,:), intent(in) :: source
289  integer, dimension(:), optional , intent(in) :: indexes, start, count, map
290 
291  call assert_false(define_mode, "Switched from define mode")
293  end function nf90_put_var_real_3d
294 
295  ! Stub for putting real variable data
296  integer function nf90_put_var_double(ncid, varid, source, indexes, start, count, map)
297  integer, intent(in) :: ncid, varid
298  real(kind=double_precision), dimension(*), intent(in) :: source
299  integer, dimension(:), optional , intent(in) :: indexes, start, count, map
300 
301  call assert_false(define_mode, "Switched from define mode")
303  end function nf90_put_var_double
304 
305  ! Stub for putting real scalar variable data
306  integer function nf90_put_var_double_scalar(ncid, varid, source, indexes, start, count, map)
307  integer, intent(in) :: ncid, varid
308  real(kind=double_precision), intent(in) :: source
309  integer, dimension(:), optional , intent(in) :: indexes, start, count, map
310 
311  call assert_false(define_mode, "Switched from define mode")
313  end function nf90_put_var_double_scalar
314 
315  ! Stub for putting real array (rank 3) variable data
316  integer function nf90_put_var_double_3d(ncid, varid, source, indexes, start, count, map)
317  integer, intent(in) :: ncid, varid
318  real(kind=double_precision), dimension(:,:,:), intent(in) :: source
319  integer, dimension(:), optional , intent(in) :: indexes, start, count, map
320 
321  call assert_false(define_mode, "Switched from define mode")
323  end function nf90_put_var_double_3d
324 
325  ! Stub for getting the corresponding id of a dimension name. If none is found returns the appropriate error code
326  integer function nf90_inq_dimid(ncid, key, dim_id)
327  integer, intent(in) :: ncid
328  character(len=*), intent(in) :: key
329  integer, intent(out) :: dim_id
330 
331  class(*), pointer :: raw_data
332 
333  if (c_contains(dimension_ids, key)) then
334  raw_data=>c_get(dimension_ids, key)
335  dim_id = conv_to_integer(raw_data, .false.)
337  else
339  end if
340  end function nf90_inq_dimid
341 
342  ! Gets the length of a dimension from its id
343  integer function nf90_inquire_dimension(ncid, id, len)
344  integer, intent(in) :: ncid, id
345  integer, intent(out) :: len
346 
347  class(*), pointer :: raw_data
348 
350  raw_data => c_get(dimension_lengths, conv_to_string(id))
351  len = conv_to_integer(raw_data, .false.)
353  else
355  end if
356  end function nf90_inquire_dimension
357 
358  ! Stub for getting the string of an error code
359  character(len=10) function nf90_strerror(status)
360  integer, intent(in) :: status
361 
362  nf90_strerror = "dummy"
363  end function nf90_strerror
364 
365  ! Defines a dimension of a specific length
366  integer function nf90_def_dim(ncid, key, length, dimension_id)
367  integer, intent(in) :: ncid, length
368  character(len=*), intent(in) :: key
369  integer, intent(out) :: dimension_id
370 
371  class(*), pointer :: raw_data
372 
374  dimension_id = current_dim
375  raw_data=>conv_to_generic(length, .true.)
376  call c_put(dimension_lengths, conv_to_string(dimension_id), raw_data)
378  end function nf90_def_dim
379 
380  ! Defines a variable with a single dimension
381  integer function nf90_def_var_single(ncid, key, type, dim_id, varid)
382  integer, intent(in) :: ncid, type, dim_id
383  character(len=*), intent(in) :: key
384  integer, intent(out) :: varid
385 
386  class(*), pointer :: raw_data
387 
389  varid = current_var_id
390  raw_data=>conv_to_generic(varid, .true.)
391  call c_put(variable_ids, key, raw_data)
392  raw_data=>conv_to_generic(dim_id, .true.)
393  call c_put(variable_data, key, raw_data)
395  end function nf90_def_var_single
396 
397  ! Defines a variable with no dimension (size=1, rank=1)
398  integer function nf90_def_var_atomic(ncid, key, type, varid)
399  integer, intent(in) :: ncid, type
400  character(len=*), intent(in) :: key
401  integer, intent(out) :: varid
402 
403  class(*), pointer :: raw_data
404 
406  varid = current_var_id
407  raw_data=>conv_to_generic(varid, .true.)
408  call c_put(variable_ids, key, raw_data)
409  raw_data=>conv_to_generic(1, .true.)
410  call c_put(variable_data, key, raw_data)
412  end function nf90_def_var_atomic
413 
414  ! Defines a variable with multiple dimensions
415  integer function nf90_def_var_multiple(ncid, key, type, dim_ids, varid)
416  integer, intent(in) :: ncid, type
417  integer, dimension(:) :: dim_ids
418  character(len=*), intent(in) :: key
419  integer, intent(out) :: varid
420 
421  integer :: i
422  type(integer_array_wrapper_type), pointer :: wrapper
423  class(*), pointer :: raw_data, raw_id_data
424 
425  allocate(wrapper)
426  wrapper%size=size(dim_ids)
427  allocate(wrapper%data(wrapper%size))
428 
429  do i=1,wrapper%size
430  wrapper%data(i) = dim_ids(i)
431  end do
432  raw_data => wrapper
434  varid = current_var_id
435  raw_id_data=>conv_to_generic(varid, .true.)
436  call c_put(variable_ids, key, raw_id_data)
437  call c_put(variable_data, key, raw_data)
439  end function nf90_def_var_multiple
440 end module dummy_netcdf_mod
conversions_mod
Conversion between common inbuilt FORTRAN data types.
Definition: conversions.F90:5
collections_mod::map_type
Map data structure that holds string (length 20 maximum) key value pairs.
Definition: collections.F90:86
dummy_netcdf_mod::nf90_def_var_multiple
integer function nf90_def_var_multiple(ncid, key, type, dim_ids, varid)
Definition: dummy_netcdf.F90:416
dummy_netcdf_mod::nf90_def_var_atomic
integer function nf90_def_var_atomic(ncid, key, type, varid)
Definition: dummy_netcdf.F90:399
dummy_netcdf_mod::define_mode
logical define_mode
Definition: dummy_netcdf.F90:12
conversions_mod::conv_to_integer
Converts data types to integers.
Definition: conversions.F90:49
dummy_netcdf_mod::current_dim
integer current_dim
Definition: dummy_netcdf.F90:29
dummy_netcdf_mod::global_attributes
type(map_type), save global_attributes
Definition: dummy_netcdf.F90:21
collections_mod
Collection data structures.
Definition: collections.F90:7
dummy_netcdf_mod::nf90_get_var
Definition: dummy_netcdf.F90:43
dummy_netcdf_mod::nf90_create
integer function nf90_create(path, mode, ncid, comm, info)
Definition: dummy_netcdf.F90:74
dummy_netcdf_mod::nf90_close
integer function nf90_close(ncid)
Definition: dummy_netcdf.F90:109
dummy_netcdf_mod::dimension_ids
type(map_type), save dimension_ids
Definition: dummy_netcdf.F90:21
dummy_netcdf_mod::nf90_netcdf4
integer, parameter nf90_netcdf4
Definition: dummy_netcdf.F90:24
dummy_netcdf_mod::nf90_enotvar
integer, parameter nf90_enotvar
Definition: dummy_netcdf.F90:24
dummy_netcdf_mod::nf90_get_var_real
integer function nf90_get_var_real(ncid, varid, target, indexes, start, count, map)
Definition: dummy_netcdf.F90:184
conversions_mod::conv_to_generic
Converts a data type into the generic (class *) form.
Definition: conversions.F90:25
dummy_netcdf_mod::nf90_def_dim
integer function nf90_def_dim(ncid, key, length, dimension_id)
Definition: dummy_netcdf.F90:367
dummy_netcdf_mod::nf90_get_var_double
integer function nf90_get_var_double(ncid, varid, target, indexes, start, count, map)
Definition: dummy_netcdf.F90:211
dummy_netcdf_mod::dummy_netcdf_reset
subroutine dummy_netcdf_reset()
Definition: dummy_netcdf.F90:51
dummy_netcdf_mod::nf90_put_var_real
integer function nf90_put_var_real(ncid, varid, source, indexes, start, count, map)
Definition: dummy_netcdf.F90:267
dummy_netcdf_mod::current_var_id
integer current_var_id
Definition: dummy_netcdf.F90:29
dummy_netcdf_mod::variable_data
type(map_type), save variable_data
Definition: dummy_netcdf.F90:21
dummy_netcdf_mod::nf90_char
integer, parameter nf90_char
Definition: dummy_netcdf.F90:24
dummy_netcdf_mod::nf90_mpiio
integer, parameter nf90_mpiio
Definition: dummy_netcdf.F90:24
dummy_netcdf_mod::integer_array_wrapper_type
Definition: dummy_netcdf.F90:15
dummy_netcdf_mod::nf90_ebaddim
integer, parameter nf90_ebaddim
Definition: dummy_netcdf.F90:24
dummy_netcdf_mod::nf90_strerror
character(len=10) function nf90_strerror(status)
Definition: dummy_netcdf.F90:360
collections_mod::c_contains
Determines whether or not a map contains a specific key.
Definition: collections.F90:447
dummy_netcdf_mod::nf90_get_var_char
integer function nf90_get_var_char(ncid, varid, target, indexes, start, count, map)
Definition: dummy_netcdf.F90:162
dummy_netcdf_mod::nf90_put_var_double_3d
integer function nf90_put_var_double_3d(ncid, varid, source, indexes, start, count, map)
Definition: dummy_netcdf.F90:317
dummy_netcdf_mod::nf90_inquire_dimension
integer function nf90_inquire_dimension(ncid, id, len)
Definition: dummy_netcdf.F90:344
dummy_netcdf_mod
Definition: dummy_netcdf.F90:4
dummy_netcdf_mod::nf90_put_var_char
integer function nf90_put_var_char(ncid, varid, source, indexes, start, count, map)
Definition: dummy_netcdf.F90:238
dummy_netcdf_mod::dummy_error
integer, parameter dummy_error
Definition: dummy_netcdf.F90:24
datadefn_mod::single_precision
integer, parameter, public single_precision
Single precision (32 bit) kind.
Definition: datadefn.F90:13
dummy_netcdf_mod::nf90_open
integer function nf90_open(path, mode, ncid)
Definition: dummy_netcdf.F90:63
dummy_netcdf_mod::var_data
type(map_type), save var_data
Definition: dummy_netcdf.F90:21
dummy_netcdf_mod::nf90_def_var
Definition: dummy_netcdf.F90:38
dummy_netcdf_mod::nf90_noerr
integer, parameter nf90_noerr
Definition: dummy_netcdf.F90:24
conversions_mod::conv_to_string
Converts data types to strings.
Definition: conversions.F90:38
dummy_netcdf_mod::nf90_get_var_real_scalar
integer function nf90_get_var_real_scalar(ncid, varid, target, indexes, start, count, map)
Definition: dummy_netcdf.F90:193
dummy_netcdf_mod::nf90_get_var_double_scalar
integer function nf90_get_var_double_scalar(ncid, varid, target, indexes, start, count, map)
Definition: dummy_netcdf.F90:220
dummy_netcdf_mod::nf90_get_att
integer function nf90_get_att(ncid, attributeid, key, value)
Definition: dummy_netcdf.F90:126
dummy_netcdf_mod::nf90_get_var_real3d
integer function nf90_get_var_real3d(ncid, varid, target, indexes, start, count, map)
Definition: dummy_netcdf.F90:202
dummy_netcdf_mod::nf90_put_var_real_3d
integer function nf90_put_var_real_3d(ncid, varid, source, indexes, start, count, map)
Definition: dummy_netcdf.F90:287
dummy_netcdf_mod::variable_ids
type(map_type), save variable_ids
Definition: dummy_netcdf.F90:21
dummy_netcdf_mod::nf90_put_var_double_scalar
integer function nf90_put_var_double_scalar(ncid, varid, source, indexes, start, count, map)
Definition: dummy_netcdf.F90:307
dummy_netcdf_mod::nf90_int
integer, parameter nf90_int
Definition: dummy_netcdf.F90:24
dummy_netcdf_mod::nf90_inquire_attribute
integer function nf90_inquire_attribute(ncid, attributeid, key, len)
Definition: dummy_netcdf.F90:116
collections_mod::c_free
Frees up all the allocatable, heap, memory associated with a list, stack, queue or map.
Definition: collections.F90:577
dummy_netcdf_mod::nf90_inq_dimid
integer function nf90_inq_dimid(ncid, key, dim_id)
Definition: dummy_netcdf.F90:327
dummy_netcdf_mod::nf90_put_var_real_scalar
integer function nf90_put_var_real_scalar(ncid, varid, source, indexes, start, count, map)
Definition: dummy_netcdf.F90:277
dummy_netcdf_mod::dimension_lengths
type(map_type), save dimension_lengths
Definition: dummy_netcdf.F90:21
dummy_netcdf_mod::nf90_put_var
Definition: dummy_netcdf.F90:32
dummy_netcdf_mod::nf90_real
integer, parameter nf90_real
Definition: dummy_netcdf.F90:24
dummy_netcdf_mod::nf90_double
integer, parameter nf90_double
Definition: dummy_netcdf.F90:24
datadefn_mod::double_precision
integer, parameter, public double_precision
Double precision (64 bit) kind.
Definition: datadefn.F90:14
dummy_netcdf_mod::nf90_put_var_integer
integer function nf90_put_var_integer(ncid, varid, source, indexes, start, count, map)
Definition: dummy_netcdf.F90:253
datadefn_mod
Contains common definitions for the data and datatypes used by MONC.
Definition: datadefn.F90:2
dummy_netcdf_mod::nf90_enotatt
integer, parameter nf90_enotatt
Definition: dummy_netcdf.F90:24
dummy_netcdf_mod::nf90_global
integer, parameter nf90_global
Definition: dummy_netcdf.F90:24
dummy_netcdf_mod::nf90_enddef
integer function nf90_enddef(ncid)
Definition: dummy_netcdf.F90:101
dummy_netcdf_mod::nf90_def_var_single
integer function nf90_def_var_single(ncid, key, type, dim_id, varid)
Definition: dummy_netcdf.F90:382
dummy_netcdf_mod::nf90_get_var_integer
integer function nf90_get_var_integer(ncid, varid, target, indexes, start, count, map)
Definition: dummy_netcdf.F90:171
dummy_netcdf_mod::current_ncid
integer current_ncid
Definition: dummy_netcdf.F90:29
dummy_netcdf_mod::nf90_nowrite
integer, parameter nf90_nowrite
Definition: dummy_netcdf.F90:24
dummy_netcdf_mod::nf90_inq_varid
integer function nf90_inq_varid(ncid, key, varid)
Definition: dummy_netcdf.F90:141
dummy_netcdf_mod::nf90_get_var_double3d
integer function nf90_get_var_double3d(ncid, varid, target, indexes, start, count, map)
Definition: dummy_netcdf.F90:229
dummy_netcdf_mod::nf90_clobber
integer, parameter nf90_clobber
Definition: dummy_netcdf.F90:24
dummy_netcdf_mod::nf90_put_att
integer function nf90_put_att(ncid, attribute, key, value)
Definition: dummy_netcdf.F90:86
dummy_netcdf_mod::nf90_put_var_double
integer function nf90_put_var_double(ncid, varid, source, indexes, start, count, map)
Definition: dummy_netcdf.F90:297