24USE iso_c_binding,
ONLY: c_int, c_float, c_double, c_ptr, c_size_t,c_char
32 Integer(C_INT) Function create_metadata_c(xyzdim,vdctype)
BIND(C)
34 Integer(C_SIZE_T),
Intent(IN) :: xyzdim(3)
35 Integer(C_INT),
Intent(IN),
VALUE :: vdctype
36 End Function create_metadata_c
38 Integer(C_INT) Function create_writer_c(filename)
BIND(C)
40 Character(C_CHAR),
Intent(IN) :: filename
41 End Function create_writer_c
43 Integer(C_INT) Function create_metadata_from_file_c(filename)
BIND(C)
45 Character(C_CHAR),
Intent(IN) :: filename
46 End Function create_metadata_from_file_c
48 Integer(C_INT) Function set_num_timesteps_c(ntime )
BIND(C)
50 Integer(C_SIZE_T),
Intent(IN),
VALUE :: ntime
51 end Function set_num_timesteps_c
54 Integer(C_INT) Function set_variables_names_c(nvar, varnames, len )
BIND(C)
56 Integer(C_SIZE_T),
Intent(IN),
VALUE :: nvar
57 Character(C_CHAR),
Intent(IN) :: varnames(nvar)
58 Integer(C_SIZE_T),
Intent(IN),
VALUE :: len
59 end Function set_variables_names_c
61 Integer(C_INT) function vdf4f_set_comment_c(comment)
BIND(C)
63 Character(C_CHAR),
Intent(IN) :: comment
64 end function vdf4f_set_comment_c
66 Integer(C_INT) function vdf4f_set_ts_comment_c(ts,comment)
BIND(C)
68 Integer(C_SIZE_T),
Intent(IN),
VALUE :: ts
69 Character(C_CHAR),
Intent(IN) :: comment
70 end function vdf4f_set_ts_comment_c
72 Integer(C_INT) function vdf4f_set_v_comment_c(ts,var,comment)
BIND(C)
74 Integer(C_SIZE_T),
Intent(IN),
VALUE :: ts
75 Character(C_CHAR),
Intent(IN) :: var
76 Character(C_CHAR),
Intent(IN) :: comment
77 end function vdf4f_set_v_comment_c
79 Integer(C_INT) function vdf4f_set_grid_extents_c(extents)
BIND(C)
81 Real(C_DOUBLE),
Intent(IN) :: extents(6)
82 end function vdf4f_set_grid_extents_c
84 Integer(C_INT) function vdf4f_set_coord_system_type_c(coordsystemtype)
BIND(C)
86 Character(C_CHAR),
Intent(IN) :: coordsystemtype
87 end function vdf4f_set_coord_system_type_c
89 Integer(C_INT) function vdf4f_set_grid_type_c(gridtype)
BIND(C)
91 Character(C_CHAR),
Intent(IN) :: gridtype
92 end function vdf4f_set_grid_type_c
94 Integer(C_INT) function vdf4f_set_map_projection_c(mapprojection)
BIND(C)
96 Character(C_CHAR),
Intent(IN) :: mapprojection
97 end function vdf4f_set_map_projection_c
101 Integer(C_INT) function write_metadata_c(filename)
BIND(C)
103 Character(C_CHAR),
Intent(IN) :: filename
104 end function write_metadata_c
106 Integer(C_INT) Function vdf4f_write_c(volume, xyzdim, ntime,nvar,varnames,len, rzscan)
BIND(C)
108 Integer(C_SIZE_T),
Intent(IN) :: xyzdim(3)
109 Integer(C_SIZE_T),
Intent(IN),
VALUE :: ntime
110 Integer(C_SIZE_T),
Intent(IN),
VALUE :: nvar
111 Real(C_FLOAT),
Intent(IN) :: volume(xyzdim(1),xyzdim(2),xyzdim(3),ntime,nvar)
112 Character(C_CHAR),
Intent(IN) :: varnames(nvar)
113 Integer(C_SIZE_T),
Intent(IN),
VALUE :: len
114 Integer(C_INT),
Intent(IN),
VALUE :: rzscan
115 End Function vdf4f_write_c
117 Integer(C_INT) function destroy_metadata_c()
BIND(C)
119 end function destroy_metadata_c
121 Integer(C_INT) function destroy_writer_c()
BIND(C)
123 end function destroy_writer_c
125 Integer(C_INT) function get_err_msg_c(errmsg,len)
BIND(C)
127 Character(C_CHAR),
Intent(OUT) :: errmsg
128 Integer(C_SIZE_T),
Intent(OUT) :: len
129 end function get_err_msg_c
131 Integer(C_INT) function set_missing_value_c(missingv )
BIND(C)
133 Real(C_DOUBLE),
VALUE :: missingv
134 end function set_missing_value_c
136 Integer(C_INT) function get_missing_value_c(missingv )
BIND(C)
138 Real(C_DOUBLE),
Intent(OUT) :: missingv
139 end function get_missing_value_c
141 Integer(C_INT) Function set_variables_2d_xy_c(nvar, varnames, len )
BIND(C)
143 Integer(C_SIZE_T),
Intent(IN),
VALUE :: nvar
144 Character(C_CHAR),
Intent(IN) :: varnames(nvar)
145 Integer(C_SIZE_T),
Intent(IN),
VALUE :: len
146 end Function set_variables_2d_xy_c
149 Integer(C_INT) Function vdf4f_write_2d_xy_c(volume, xydim, ntime,nvar,varnames,len)
BIND(C)
151 Integer(C_SIZE_T),
Intent(IN) :: xydim(2)
152 Integer(C_SIZE_T),
Intent(IN),
VALUE :: ntime
153 Integer(C_SIZE_T),
Intent(IN),
VALUE :: nvar
154 Real(C_FLOAT),
Intent(IN) :: volume(xydim(1),xydim(2),ntime,nvar)
155 Character(C_CHAR),
Intent(IN) :: varnames(nvar)
156 Integer(C_SIZE_T),
Intent(IN),
VALUE :: len
157 End Function vdf4f_write_2d_xy_c
161public vdf4f_write, vdf4f_create_metadata, vdf4f_create_metadata_from_file, vdf4f_create_writer,&
162 vdf4f_set_num_timesteps, vdf4f_set_variables_names, &
163 vdf4f_set_comment, vdf4f_set_ts_comment, vdf4f_set_v_comment, vdf4f_set_grid_extents, &
164 vdf4f_set_coord_system_type, vdf4f_set_grid_type, &
165 vdf4f_set_map_projection, vdf4f_write_metadata, destroy_metadata_c, destroy_writer_c, vdf4f_get_err_msg, &
166 vdf4f_set_missing_value, vdf4f_get_missing_value, vdf4f_set_variables_2d_xy, vdf4f_write_2d_xy
171#if SIZEOF_SIZE_T == 8
172 module procedure vdf4f_write_amd64
174 module procedure vdf4f_write_i386
178interface vdf4f_create_metadata
179#if SIZEOF_SIZE_T == 8
180 module procedure create_metadata_amd64
182 module procedure create_metadata_i386
186interface vdf4f_set_num_timesteps
187#if SIZEOF_SIZE_T == 8
188 module procedure set_num_timesteps_amd64
190 module procedure set_num_timesteps_i386
193interface vdf4f_set_variables_names
194#if SIZEOF_SIZE_T == 8
195 module procedure set_variables_names_amd64
197 module procedure set_variables_names_i386
200interface vdf4f_set_ts_comment
201#if SIZEOF_SIZE_T == 8
202 module procedure vdf4f_set_ts_comment_amd64
204 module procedure vdf4f_set_ts_comment_i386
208interface vdf4f_set_v_comment
209#if SIZEOF_SIZE_T == 8
210 module procedure vdf4f_set_v_comment_amd64
212 module procedure vdf4f_set_v_comment_i386
215interface vdf4f_set_variables_2d_xy
216#if SIZEOF_SIZE_T == 8
217 module procedure set_variables_2d_xy_amd64
219 module procedure set_variables_2d_xy_i386
223interface vdf4f_write_2d_xy
224#if SIZEOF_SIZE_T == 8
225 module procedure vdf4f_write_2d_xy_amd64
227 module procedure vdf4f_write_2d_xy_i386
228end interface vdf4f_write_2d_xy
233integer function vdf4f_write_i386(volume, xyzdim, ntime,nvar,varnames, rzscan)
235Real,
intent(in) :: volume(:,:,:,:,:)
236Integer(C_SIZE_T),
intent(in) :: xyzdim(3)
237integer(C_SIZE_T),
intent(in) :: nvar, ntime
238Character(len=*),
intent(in) :: varnames(nvar)
239Integer,
intent(in) :: rzscan
245integer(C_SIZE_T) :: len_c
246Character(len=LEN(varnames)+1) :: varnames_c(nvar)
247integer(C_SIZE_T) :: i
255 varnames_c(i)=trim(varnames(i))//char(0)
258vdf4f_write_i386 = vdf4f_write_c(volume, xyzdim, ntime, nvar, varnames_c, len_c, rzscan)
262end function vdf4f_write_i386
265integer function vdf4f_write_amd64(volume, xyzdim, ntime,nvar,varnames,rzscan)
268Real,
intent(in) :: volume(:,:,:,:,:)
269Integer,
intent(in) :: xyzdim(3)
270Integer,
intent(in) :: nvar,ntime
271Character(len=*),
intent(in) :: varnames(nvar)
272integer,
intent(in) :: rzscan
275Integer(C_SIZE_T) :: nvar_c
276Integer(C_SIZE_T) :: xyzdim_c(3)
277Integer(C_SIZE_T) :: ntime_c
278Integer(C_SIZE_T) :: len_c
279Character(len=LEN(varnames)+1) :: varnames_c(nvar)
289 varnames_c(i)=trim(varnames(i))//char(0)
292vdf4f_write_amd64 = vdf4f_write_c(volume, xyzdim_c, ntime_c, nvar_c, varnames_c, len_c, rzscan)
296end function vdf4f_write_amd64
300Integer Function create_metadata_i386(xyzdim, vdctype)
301Integer(C_SIZE_T),
intent(in) :: xyzdim(3)
302Integer(C_INT),
Intent(IN),
VALUE :: vdctype
304create_metadata_i386 = create_metadata_c(xyzdim, vdctype)
305End Function create_metadata_i386
307Integer Function create_metadata_amd64(xyzdim, vdctype)
308Integer,
intent(in) :: xyzdim(3)
309Integer(C_INT),
Intent(IN),
VALUE :: vdctype
310Integer(C_SIZE_T) :: xyzdim_c(3)
312create_metadata_amd64 = create_metadata_c(xyzdim_c,vdctype)
313End Function create_metadata_amd64
315Integer function vdf4f_create_metadata_from_file(filename)
316Character(len=*),
Intent(IN) :: filename
317vdf4f_create_metadata_from_file = create_metadata_from_file_c(trim(filename)//char(0))
318end function vdf4f_create_metadata_from_file
320Integer function vdf4f_create_writer(filename)
321Character(len=*),
Intent(IN) :: filename
322vdf4f_create_writer = create_writer_c(trim(filename)//char(0))
323end function vdf4f_create_writer
325Integer Function set_num_timesteps_i386(ntime )
326Integer(C_SIZE_T),
Intent(IN),
VALUE :: ntime
327set_num_timesteps_i386 = set_num_timesteps_c(ntime)
328end Function set_num_timesteps_i386
330Integer Function set_num_timesteps_amd64(ntime )
331Integer,
Intent(IN) :: ntime
332Integer(C_SIZE_T) :: ntime_c
334set_num_timesteps_amd64 = set_num_timesteps_c(ntime_c)
335end Function set_num_timesteps_amd64
338Integer Function set_variables_names_i386(nvar, varnames)
339Integer(C_SIZE_T),
Intent(IN),
VALUE :: nvar
340Character(len=*),
Intent(IN) :: varnames(nvar)
342integer(C_SIZE_T) :: len_c
343Character(len=LEN(varnames)+1) :: varnames_c(nvar)
344integer(C_SIZE_T) :: i
348 varnames_c(i)=trim(varnames(i))//char(0)
351set_variables_names_i386 = set_variables_names_c(nvar, varnames_c, len_c)
353end Function set_variables_names_i386
355Integer Function set_variables_names_amd64(nvar, varnames)
357Integer(C_SIZE_T) :: nvar_c
358Character(len=*),
Intent(IN) :: varnames(nvar)
360integer(C_SIZE_T) :: len_c
361Character(len=LEN(varnames)+1) :: varnames_c(nvar)
366 varnames_c(i)=trim(varnames(i))//char(0)
371set_variables_names_amd64 = set_variables_names_c(nvar_c, varnames_c, len_c)
373end Function set_variables_names_amd64
376Integer function vdf4f_set_comment(comment)
377Character(len=*),
intent(in) :: comment
378vdf4f_set_comment = vdf4f_set_comment_c(trim(comment)//char(0))
379end function vdf4f_set_comment
381Integer function vdf4f_set_ts_comment_i386(ts,comment)
382Integer(C_SIZE_T),
Intent(IN),
VALUE :: ts
383Character(len=*),
intent(in) :: comment
384vdf4f_set_ts_comment_i386 = vdf4f_set_ts_comment_c(ts,trim(comment)//char(0))
385end function vdf4f_set_ts_comment_i386
388Integer function vdf4f_set_ts_comment_amd64(ts,comment)
390Integer(C_SIZE_T) :: ts_c
391Character(len=*),
intent(in) :: comment
393vdf4f_set_ts_comment_amd64 = vdf4f_set_ts_comment_c(ts_c,trim(comment)//char(0))
394end function vdf4f_set_ts_comment_amd64
397Integer function vdf4f_set_v_comment_i386(ts,var,comment)
398Integer(C_SIZE_T),
Intent(IN),
VALUE :: ts
399Character(len=*),
intent(in) :: var
400Character(len=*),
intent(in) :: comment
401vdf4f_set_v_comment_i386 = vdf4f_set_v_comment_c(ts, trim(var)//char(0), trim(comment)//char(0))
402end function vdf4f_set_v_comment_i386
404Integer function vdf4f_set_v_comment_amd64(ts,var,comment)
406Integer(C_SIZE_T) :: ts_c
407Character(len=*),
intent(in) :: var
408Character(len=*),
intent(in) :: comment
412vdf4f_set_v_comment_amd64 = vdf4f_set_v_comment_c(ts_c, trim(var)//char(0), trim(comment)//char(0))
413end function vdf4f_set_v_comment_amd64
415Integer function vdf4f_set_grid_extents(extents)
416Doubleprecision,
Intent(IN) :: extents(6)
417vdf4f_set_grid_extents = vdf4f_set_grid_extents_c(extents)
418end function vdf4f_set_grid_extents
420Integer function vdf4f_set_coord_system_type(coordsystemtype)
421Character(len=*),
Intent(IN) :: coordsystemtype
422vdf4f_set_coord_system_type = vdf4f_set_coord_system_type_c(trim(coordsystemtype)//char(0))
423end function vdf4f_set_coord_system_type
425Integer function vdf4f_set_grid_type(gridtype)
426Character(len=*),
Intent(IN) :: gridtype
427vdf4f_set_grid_type = vdf4f_set_grid_type_c(trim(gridtype)//char(0))
428end function vdf4f_set_grid_type
430Integer function vdf4f_set_map_projection(mapprojection)
431Character(len=*),
Intent(IN) :: mapprojection
432vdf4f_set_map_projection = vdf4f_set_map_projection_c(trim(mapprojection)//char(0))
433end function vdf4f_set_map_projection
436function vdf4f_get_err_msg()
438integer,
parameter :: lenfun=255
439character(len=lenfun) :: vdf4f_get_err_msg
440Integer(C_SIZE_T) :: len
441Character(len=lenfun) :: errmsg
446ier = get_err_msg_c(errmsg,len)
447vdf4f_get_err_msg=errmsg(:min(len,lenfun))
450end function vdf4f_get_err_msg
453Integer function vdf4f_write_metadata(filename)
454Character(len=*),
Intent(IN) :: filename
455vdf4f_write_metadata = write_metadata_c(trim(filename)//char(0))
456end function vdf4f_write_metadata
459Integer function vdf4f_set_missing_value(missingv)
460doubleprecision,
Intent(IN) :: missingv
461vdf4f_set_missing_value = set_missing_value_c(missingv)
462end function vdf4f_set_missing_value
464Integer function vdf4f_get_missing_value(missingv)
465doubleprecision,
Intent(OUT) :: missingv
466vdf4f_get_missing_value = get_missing_value_c(missingv)
467end function vdf4f_get_missing_value
470Integer Function set_variables_2d_xy_i386(nvar, varnames)
471Integer(C_SIZE_T),
Intent(IN),
VALUE :: nvar
472Character(len=*),
Intent(IN) :: varnames(nvar)
474integer(C_SIZE_T) :: len_c
475Character(len=LEN(varnames)+1) :: varnames_c(nvar)
476integer(C_SIZE_T) :: i
480 varnames_c(i)=trim(varnames(i))//char(0)
483set_variables_2d_xy_i386 = set_variables_2d_xy_c(nvar, varnames_c, len_c)
485end Function set_variables_2d_xy_i386
487Integer Function set_variables_2d_xy_amd64(nvar, varnames)
489Integer(C_SIZE_T) :: nvar_c
490Character(len=*),
Intent(IN) :: varnames(nvar)
492integer(C_SIZE_T) :: len_c
493Character(len=LEN(varnames)+1) :: varnames_c(nvar)
498 varnames_c(i)=trim(varnames(i))//char(0)
503set_variables_2d_xy_amd64 = set_variables_2d_xy_c(nvar_c, varnames_c, len_c)
505end Function set_variables_2d_xy_amd64
509integer function vdf4f_write_2d_xy_i386(volume, xydim, ntime,nvar,varnames)
511Real,
intent(in) :: volume(:,:,:,:)
512Integer(C_SIZE_T),
intent(in) :: xydim(2)
513integer(C_SIZE_T),
intent(in) :: nvar, ntime
514Character(len=*),
intent(in) :: varnames(nvar)
519integer(C_SIZE_T) :: len_c
520Character(len=LEN(varnames)+1) :: varnames_c(nvar)
521integer(C_SIZE_T) :: i
529 varnames_c(i)=trim(varnames(i))//char(0)
532vdf4f_write_2d_xy_i386 = vdf4f_write_2d_xy_c(volume, xydim, ntime, nvar, varnames_c, len_c)
536end function vdf4f_write_2d_xy_i386
539integer function vdf4f_write_2d_xy_amd64(volume, xydim, ntime,nvar,varnames)
541Real,
intent(in) :: volume(:,:,:,:)
542Integer,
intent(in) :: xydim(2)
543Integer,
intent(in) :: nvar,ntime
544Character(len=*),
intent(in) :: varnames(nvar)
546Integer(C_SIZE_T) :: nvar_c
547Integer(C_SIZE_T) :: xydim_c(2)
548Integer(C_SIZE_T) :: ntime_c
549Integer(C_SIZE_T) :: len_c
550Character(len=LEN(varnames)+1) :: varnames_c(nvar)
559 varnames_c(i)=trim(varnames(i))//char(0)
562vdf4f_write_2d_xy_amd64 = vdf4f_write_2d_xy_c(volume, xydim_c, ntime_c, nvar_c, varnames_c, len_c)
566end function vdf4f_write_2d_xy_amd64
interface to different architectures (cast some type)