11 use,
intrinsic :: iso_c_binding
34 #include "ioda/obsspace_interface.f"
58 use fckit_configuration_module,
only: fckit_configuration
59 use datetime_mod,
only: datetime
61 type(fckit_configuration),
intent(in) :: c_conf
62 type(datetime),
intent(in) :: tbegin, tend
63 type(c_ptr) :: c_tbegin, c_tend
65 call f_c_datetime(tbegin, c_tbegin)
66 call f_c_datetime(tend, c_tend)
74 type(c_ptr),
intent(inout) :: c_obss
88 type(c_ptr),
value,
intent(in) :: obss
89 character(*),
intent(inout) :: obsname
91 integer(c_size_t) :: lcname
95 character(kind=c_char,len=1) :: cname(101)
98 call c_f_string(cname, obsname)
99 obsname = obsname(1:lcname)
108 use oops_variables_mod
110 type(c_ptr),
value,
intent(in) :: obss
120 type(c_ptr),
intent(in) :: c_obss
131 type(c_ptr),
intent(in) :: c_obss
142 type(c_ptr),
intent(in) :: c_obss
153 type(c_ptr),
intent(in) :: c_obss
162 use fckit_mpi_module,
only: fckit_mpi_comm
166 type(c_ptr),
intent(in) :: obss
167 type(fckit_mpi_comm),
intent(out) :: f_comm
171 character(kind=c_char,len=1) :: cname(101)
172 character(len=100) :: name
173 character(len=:),
allocatable :: name_comm
176 call c_f_string(cname, name)
178 name_comm = name(1:lcname)
179 f_comm = fckit_mpi_comm(name_comm)
186 type(c_ptr),
intent(in) :: obss
187 integer(c_size_t),
intent(inout) :: recnum(:)
189 integer(c_size_t) :: length
191 length =
size(recnum)
199 type(c_ptr),
intent(in) :: obss
200 integer(c_size_t),
intent(inout) :: indx(:)
202 integer(c_size_t) :: length
214 type(c_ptr),
intent(in) :: c_obss
215 character(len=*),
intent(in) :: group
216 character(len=*),
intent(in) :: vname
218 character(kind=c_char,len=1),
allocatable :: c_group(:), c_vname(:)
220 call f_c_string(group, c_group)
221 call f_c_string(vname, c_vname)
231 type(c_ptr),
value,
intent(in) :: obss
232 character(len=*),
intent(in) :: group
233 character(len=*),
intent(in) :: vname
234 integer(c_int32_t),
intent(inout) :: vect(:)
236 character(kind=c_char,len=1),
allocatable :: c_group(:), c_vname(:)
237 integer(c_size_t) :: length
240 call f_c_string(group, c_group)
241 call f_c_string(vname, c_vname)
246 deallocate(c_group, c_vname)
256 type(c_ptr),
value,
intent(in) :: obss
257 character(len=*),
intent(in) :: group
258 character(len=*),
intent(in) :: vname
259 integer(c_int64_t),
intent(inout) :: vect(:)
261 character(kind=c_char,len=1),
allocatable :: c_group(:), c_vname(:)
262 integer(c_size_t) :: length
265 call f_c_string(group, c_group)
266 call f_c_string(vname, c_vname)
271 deallocate(c_group, c_vname)
280 type(c_ptr),
value,
intent(in) :: obss
281 character(len=*),
intent(in) :: group
282 character(len=*),
intent(in) :: vname
283 real(c_float),
intent(inout) :: vect(:)
285 character(kind=c_char,len=1),
allocatable :: c_group(:), c_vname(:)
286 integer(c_size_t) :: length
289 call f_c_string(group, c_group)
290 call f_c_string(vname, c_vname)
295 deallocate(c_group, c_vname)
304 type(c_ptr),
value,
intent(in) :: obss
305 character(len=*),
intent(in) :: group
306 character(len=*),
intent(in) :: vname
307 real(c_double),
intent(inout) :: vect(:)
309 character(kind=c_char,len=1),
allocatable :: c_group(:), c_vname(:)
310 integer(c_size_t) :: length
313 call f_c_string(group, c_group)
314 call f_c_string(vname, c_vname)
319 deallocate(c_group, c_vname)
328 type(c_ptr),
value,
intent(in) :: obss
329 character(len=*),
intent(in) :: group
330 character(len=*),
intent(in) :: vname
331 type(datetime),
intent(inout) :: vect(:)
333 integer(c_size_t) :: length, i
334 character(kind=c_char,len=1),
allocatable :: c_group(:), c_vname(:)
335 integer(c_int32_t),
dimension(:),
allocatable :: date
336 integer(c_int32_t),
dimension(:),
allocatable :: time
337 character(len=20) :: fstring
339 call f_c_string(group, c_group)
340 call f_c_string(vname, c_vname)
343 allocate(date(length), time(length))
348 write(fstring,
"(i4.4, a, i2.2, a, i2.2, a, i2.2, a, i2.2, a, i2.2, a)") &
349 date(i)/10000,
'-', mod(date(i), 10000)/100,
'-', mod(mod(date(i), 10000), 100),
'T', &
350 time(i)/10000,
':', mod(time(i), 10000)/100,
':', mod(mod(time(i), 10000), 100),
'Z'
351 call datetime_create(fstring, vect(i))
355 deallocate(date, time)
364 type(c_ptr),
value,
intent(in) :: obss
365 character(len=*),
intent(in) :: group
366 character(len=*),
intent(in) :: vname
367 integer(c_int32_t),
intent(in) :: vect(:)
369 character(kind=c_char,len=1),
allocatable :: c_group(:), c_vname(:)
370 integer(c_size_t) :: length
373 call f_c_string(group, c_group)
374 call f_c_string(vname, c_vname)
379 deallocate(c_group, c_vname)
388 type(c_ptr),
value,
intent(in) :: obss
389 character(len=*),
intent(in) :: group
390 character(len=*),
intent(in) :: vname
391 integer(c_int64_t),
intent(in) :: vect(:)
393 character(kind=c_char,len=1),
allocatable :: c_group(:), c_vname(:)
394 integer(c_size_t) :: length
397 call f_c_string(group, c_group)
398 call f_c_string(vname, c_vname)
403 deallocate(c_group, c_vname)
412 type(c_ptr),
value,
intent(in) :: obss
413 character(len=*),
intent(in) :: group
414 character(len=*),
intent(in) :: vname
415 real(c_float),
intent(in) :: vect(:)
417 character(kind=c_char,len=1),
allocatable :: c_group(:), c_vname(:)
418 integer(c_size_t) :: length
421 call f_c_string(group, c_group)
422 call f_c_string(vname, c_vname)
427 deallocate(c_group, c_vname)
436 type(c_ptr),
value,
intent(in) :: obss
437 character(len=*),
intent(in) :: group
438 character(len=*),
intent(in) :: vname
439 real(c_double),
intent(in) :: vect(:)
441 character(kind=c_char,len=1),
allocatable :: c_group(:), c_vname(:)
442 integer(c_size_t) :: length
445 call f_c_string(group, c_group)
446 call f_c_string(vname, c_vname)
451 deallocate(c_group, c_vname)