14 USE iso_c_binding,
ONLY: c_int, c_ptr, c_bool, c_double, c_char, c_loc, c_associated
47#include "comin_global.inc"
53 MODULE PROCEDURE comin_request_set_var_metadata_logical
54 MODULE PROCEDURE comin_request_set_var_metadata_integer
55 MODULE PROCEDURE comin_request_set_var_metadata_real
56 MODULE PROCEDURE comin_request_set_var_metadata_character
62 MODULE PROCEDURE comin_metadata_host_set_logical
63 MODULE PROCEDURE comin_metadata_host_set_integer
64 MODULE PROCEDURE comin_metadata_host_set_real
65 MODULE PROCEDURE comin_metadata_host_set_character
71 MODULE PROCEDURE comin_metadata_get_logical
72 MODULE PROCEDURE comin_metadata_get_integer
73 MODULE PROCEDURE comin_metadata_get_real
74 MODULE PROCEDURE comin_metadata_get_character
78 MODULE PROCEDURE comin_metadata_get_or_integer
79 MODULE PROCEDURE comin_metadata_get_or_real
80 MODULE PROCEDURE comin_metadata_get_or_character
81 MODULE PROCEDURE comin_metadata_get_or_logical
85 SUBROUTINE comin_metadata_host_set_int_c(descriptor, key, val) &
86 &
BIND(C, name="comin_metadata_host_set_int")
88 TYPE(t_comin_var_descriptor_c),
VALUE,
INTENT(IN) :: descriptor
89 TYPE(C_PTR),
VALUE,
INTENT(IN) :: key
90 INTEGER(C_INT),
VALUE,
INTENT(IN) :: val
91 END SUBROUTINE comin_metadata_host_set_int_c
93 SUBROUTINE comin_metadata_host_set_bool_c(descriptor, key, val) &
94 &
BIND(C, name="comin_metadata_host_set_bool")
96 TYPE(t_comin_var_descriptor_c),
VALUE,
INTENT(IN) :: descriptor
97 TYPE(C_PTR),
VALUE,
INTENT(IN) :: key
98 LOGICAL(C_BOOL),
VALUE,
INTENT(IN) :: val
99 END SUBROUTINE comin_metadata_host_set_bool_c
101 SUBROUTINE comin_metadata_host_set_double_c(descriptor, key, val) &
102 &
BIND(C, name="comin_metadata_host_set_double")
104 TYPE(t_comin_var_descriptor_c),
VALUE,
INTENT(IN) :: descriptor
105 TYPE(C_PTR),
VALUE,
INTENT(IN) :: key
106 REAL(C_DOUBLE),
VALUE,
INTENT(IN) :: val
107 END SUBROUTINE comin_metadata_host_set_double_c
109 SUBROUTINE comin_metadata_host_set_string_c(descriptor, key, val) &
110 &
BIND(C, name="comin_metadata_host_set_string")
112 TYPE(t_comin_var_descriptor_c),
VALUE,
INTENT(IN) :: descriptor
113 TYPE(C_PTR),
VALUE,
INTENT(IN) :: key
114 TYPE(C_PTR),
VALUE,
INTENT(IN) :: val
115 END SUBROUTINE comin_metadata_host_set_string_c
117 FUNCTION comin_metadata_get_int_c(descriptor, key)
RESULT(val) &
118 BIND(C, name="comin_metadata_get_int")
120 TYPE(t_comin_var_descriptor_c),
VALUE,
INTENT(IN) :: descriptor
121 TYPE(C_PTR),
VALUE,
INTENT(IN) :: key
122 INTEGER(C_INT) :: val
123 END FUNCTION comin_metadata_get_int_c
125 FUNCTION comin_metadata_get_bool_c(descriptor, key)
RESULT(val) &
126 BIND(C, name="comin_metadata_get_bool")
128 TYPE(t_comin_var_descriptor_c),
VALUE,
INTENT(IN) :: descriptor
129 TYPE(C_PTR),
VALUE,
INTENT(IN) :: key
130 LOGICAL(C_BOOL) :: val
131 END FUNCTION comin_metadata_get_bool_c
133 FUNCTION comin_metadata_get_double_c(descriptor, key)
RESULT(val) &
134 BIND(C, name="comin_metadata_get_double")
136 TYPE(t_comin_var_descriptor_c),
VALUE,
INTENT(IN) :: descriptor
137 TYPE(C_PTR),
VALUE,
INTENT(IN) :: key
138 REAL(C_DOUBLE) :: val
139 END FUNCTION comin_metadata_get_double_c
141 FUNCTION comin_metadata_get_string_c(descriptor, key)
RESULT(val) &
142 BIND(C, name="comin_metadata_get_string")
144 TYPE(t_comin_var_descriptor_c),
VALUE,
INTENT(IN) :: descriptor
145 TYPE(C_PTR),
VALUE,
INTENT(IN) :: key
147 END FUNCTION comin_metadata_get_string_c
149 FUNCTION comin_metadata_get_typeid_c(descriptor, key)
RESULT(typeid) &
150 BIND(C, name="comin_metadata_get_typeid")
152 TYPE(t_comin_var_descriptor_c),
VALUE,
INTENT(IN) :: descriptor
153 TYPE(C_PTR),
VALUE,
INTENT(IN) :: key
154 INTEGER(C_INT) :: typeid
155 END FUNCTION comin_metadata_get_typeid_c
160 TYPE(t_comin_var_descriptor_c),
VALUE,
INTENT(IN) :: descriptor
167 TYPE(t_comin_var_descriptor_c),
VALUE,
INTENT(IN) :: descriptor
175 SUBROUTINE comin_metadata_host_set_integer(descriptor, key, val)
177 CHARACTER(LEN=*),
INTENT(IN) :: key
178 INTEGER,
INTENT(IN) :: val
181 CHARACTER(len=1, kind=c_char),
ALLOCATABLE,
TARGET :: key_c(:)
183 descriptor_c%id = descriptor%id
185 ALLOCATE(key_c(len_trim(key)+1))
187 CALL comin_metadata_host_set_int_c(descriptor_c, c_loc(key_c), val)
188 END SUBROUTINE comin_metadata_host_set_integer
191 SUBROUTINE comin_metadata_host_set_logical(descriptor, key, val)
193 CHARACTER(LEN=*),
INTENT(IN) :: key
194 LOGICAL,
INTENT(IN) :: val
197 CHARACTER(len=1, kind=c_char),
ALLOCATABLE,
TARGET :: key_c(:)
199 descriptor_c%id = descriptor%id
201 ALLOCATE(key_c(len_trim(key)+1))
203 CALL comin_metadata_host_set_bool_c(descriptor_c, c_loc(key_c),
LOGICAL(val, C_BOOL))
204 END SUBROUTINE comin_metadata_host_set_logical
207 SUBROUTINE comin_metadata_host_set_real(descriptor, key, val)
209 CHARACTER(LEN=*),
INTENT(IN) :: key
210 REAL(wp),
INTENT(IN) :: val
213 CHARACTER(len=1, kind=c_char),
ALLOCATABLE,
TARGET :: key_c(:)
215 descriptor_c%id = descriptor%id
217 ALLOCATE(key_c(len_trim(key)+1))
219 CALL comin_metadata_host_set_double_c(descriptor_c, c_loc(key_c), val)
220 END SUBROUTINE comin_metadata_host_set_real
223 SUBROUTINE comin_metadata_host_set_character(descriptor, key, val)
225 CHARACTER(LEN=*),
INTENT(IN) :: key
226 CHARACTER(LEN=*),
INTENT(IN) :: val
229 CHARACTER(len=1, kind=c_char),
ALLOCATABLE,
TARGET :: key_c(:)
230 CHARACTER(len=1, kind=c_char),
ALLOCATABLE,
TARGET :: val_c(:)
232 descriptor_c%id = descriptor%id
234 ALLOCATE(key_c(len_trim(key)+1))
236 ALLOCATE(val_c(len_trim(val)+1))
238 CALL comin_metadata_host_set_string_c(descriptor_c, c_loc(key_c), c_loc(val_c))
239 END SUBROUTINE comin_metadata_host_set_character
242 SUBROUTINE comin_metadata_get_integer(var_descriptor, key, val)
244 CHARACTER(LEN=*),
INTENT(IN) :: key
245 INTEGER,
INTENT(OUT) :: val
248 CHARACTER(len=1, kind=c_char),
ALLOCATABLE,
TARGET :: key_c(:)
250 descriptor_c%id = var_descriptor%id
252 ALLOCATE(key_c(len_trim(key)+1))
255 val = comin_metadata_get_int_c(descriptor_c, c_loc(key_c))
256 END SUBROUTINE comin_metadata_get_integer
259 SUBROUTINE comin_metadata_get_logical(var_descriptor, key, val)
261 CHARACTER(LEN=*),
INTENT(IN) :: key
262 LOGICAL,
INTENT(OUT) :: val
265 CHARACTER(len=1, kind=c_char),
ALLOCATABLE,
TARGET :: key_c(:)
267 descriptor_c%id = var_descriptor%id
269 ALLOCATE(key_c(len_trim(key)+1))
272 val = comin_metadata_get_bool_c(descriptor_c, c_loc(key_c))
273 END SUBROUTINE comin_metadata_get_logical
276 SUBROUTINE comin_metadata_get_real(var_descriptor, key, val)
278 CHARACTER(LEN=*),
INTENT(IN) :: key
279 REAL(wp),
INTENT(OUT) :: val
282 CHARACTER(len=1, kind=c_char),
ALLOCATABLE,
TARGET :: key_c(:)
284 descriptor_c%id = var_descriptor%id
286 ALLOCATE(key_c(len_trim(key)+1))
289 val = comin_metadata_get_double_c(descriptor_c, c_loc(key_c))
290 END SUBROUTINE comin_metadata_get_real
293 SUBROUTINE comin_metadata_get_character(var_descriptor, key, val)
295 CHARACTER(LEN=*),
INTENT(IN) :: key
296 CHARACTER(LEN=:),
ALLOCATABLE,
INTENT(OUT) :: val
299 CHARACTER(len=1, kind=c_char),
ALLOCATABLE,
TARGET :: key_c(:)
302 descriptor_c%id = var_descriptor%id
304 ALLOCATE(key_c(len_trim(key)+1))
307 val_c = comin_metadata_get_string_c(descriptor_c, c_loc(key_c))
309 END SUBROUTINE comin_metadata_get_character
311 SUBROUTINE comin_metadata_get_or_integer(metadata, key, val, defaultval)
313 CHARACTER(LEN=*),
INTENT(in) :: key
314 INTEGER,
INTENT(out) :: val
315 INTEGER,
INTENT(in) :: defaultval
317 SELECT CASE ( metadata%query(key) )
319 CALL metadata%get(key, val)
325 END SUBROUTINE comin_metadata_get_or_integer
327 SUBROUTINE comin_metadata_get_or_real(metadata, key, val, defaultval)
329 CHARACTER(LEN=*),
INTENT(in) :: key
330 REAL(wp),
INTENT(out) :: val
331 REAL(wp),
INTENT(in) :: defaultval
333 SELECT CASE ( metadata%query(key) )
335 CALL metadata%get(key, val)
341 END SUBROUTINE comin_metadata_get_or_real
343 SUBROUTINE comin_metadata_get_or_character(metadata, key, val, defaultval)
345 CHARACTER(LEN=*),
INTENT(in) :: key
346 CHARACTER(LEN=:),
ALLOCATABLE,
INTENT(out) :: val
347 CHARACTER(LEN=*),
INTENT(in) :: defaultval
349 SELECT CASE ( metadata%query(key) )
351 CALL metadata%get(key, val)
357 END SUBROUTINE comin_metadata_get_or_character
359 SUBROUTINE comin_metadata_get_or_logical(metadata, key, val, defaultval)
361 CHARACTER(LEN=*),
INTENT(in) :: key
362 LOGICAL,
INTENT(out) :: val
363 LOGICAL,
INTENT(in) :: defaultval
365 SELECT CASE ( metadata%query(key) )
367 CALL metadata%get(key, val)
373 END SUBROUTINE comin_metadata_get_or_logical
376 &
BIND(C, name="comin_metadata_set_integer")
378 TYPE(c_ptr),
VALUE,
INTENT(IN) :: key
379 INTEGER(kind=c_int),
VALUE,
INTENT(IN) :: val
384 CALL comin_request_set_var_metadata_integer(var_descriptor_fortran, &
389 &
BIND(C, name="comin_metadata_set_logical")
391 TYPE(c_ptr),
VALUE,
INTENT(IN) :: key
392 LOGICAL(C_BOOL),
VALUE,
INTENT(IN) :: val
397 CALL comin_request_set_var_metadata_logical(var_descriptor_fortran, &
402 &
BIND(C, name="comin_metadata_set_real")
404 TYPE(c_ptr),
VALUE,
INTENT(IN) :: key
405 REAL(
wp),
VALUE,
INTENT(IN) :: val
410 CALL comin_request_set_var_metadata_real(var_descriptor_fortran, &
415 &
BIND(C, name="comin_metadata_set_character")
417 TYPE(c_ptr),
VALUE,
INTENT(IN) :: key
418 TYPE(c_ptr),
VALUE,
INTENT(IN) :: val
423 CALL comin_request_set_var_metadata_character(var_descriptor_fortran, &
434 SUBROUTINE comin_request_set_var_metadata_integer(var_descriptor, key, val)
435 TYPE (t_comin_var_descriptor),
INTENT(IN) :: var_descriptor
436 CHARACTER(LEN=*),
INTENT(IN) :: key
437 INTEGER,
INTENT(IN) :: val
439 INTEGER :: domain_id, domain_id_start, domain_id_end
450 IF (var_descriptor%id == -1)
THEN
452 domain_id_end =
state%comin_descrdata_global_data%n_dom
454 domain_id_start = var_descriptor%id
455 domain_id_end = var_descriptor%id
462 DO domain_id = domain_id_start, domain_id_end
463 var_descriptor_domain%id = domain_id
467 IF (c_associated(req))
THEN
471 IF (all(metadata%query(trim(key)) /= &
475 CALL metadata%set(key, val)
479 IF (.NOT. lfound)
THEN
482 END SUBROUTINE comin_request_set_var_metadata_integer
491 SUBROUTINE comin_request_set_var_metadata_logical(var_descriptor, key, val)
492 TYPE (t_comin_var_descriptor),
INTENT(IN) :: var_descriptor
493 CHARACTER(LEN=*),
INTENT(IN) :: key
494 LOGICAL,
INTENT(IN) :: val
496 INTEGER :: domain_id, domain_id_start, domain_id_end
507 IF (var_descriptor%id == -1)
THEN
509 domain_id_end =
state%comin_descrdata_global_data%n_dom
511 IF ((key ==
"tracer") .AND. val)
THEN
515 domain_id_start = var_descriptor%id
516 domain_id_end = var_descriptor%id
523 DO domain_id = domain_id_start, domain_id_end
524 var_descriptor_domain%id = domain_id
528 IF (c_associated(req))
THEN
532 IF (all(metadata%query(trim(key)) /= &
536 CALL metadata%set(key, val)
540 IF (.NOT. lfound)
THEN
543 END SUBROUTINE comin_request_set_var_metadata_logical
552 SUBROUTINE comin_request_set_var_metadata_real(var_descriptor, key, val)
553 TYPE (t_comin_var_descriptor),
INTENT(IN) :: var_descriptor
554 CHARACTER(LEN=*),
INTENT(IN) :: key
555 REAL(wp),
INTENT(IN) :: val
557 INTEGER :: domain_id, domain_id_start, domain_id_end
568 IF (var_descriptor%id == -1)
THEN
570 domain_id_end =
state%comin_descrdata_global_data%n_dom
572 domain_id_start = var_descriptor%id
573 domain_id_end = var_descriptor%id
580 DO domain_id = domain_id_start, domain_id_end
581 var_descriptor_domain%id = domain_id
585 IF (c_associated(req))
THEN
589 IF (all(metadata%query(trim(key)) /= &
593 CALL metadata%set(key, val)
597 IF (.NOT. lfound)
THEN
600 END SUBROUTINE comin_request_set_var_metadata_real
609 SUBROUTINE comin_request_set_var_metadata_character(var_descriptor, key, val)
610 TYPE (t_comin_var_descriptor),
INTENT(IN) :: var_descriptor
611 CHARACTER(LEN=*),
INTENT(IN) :: key
612 CHARACTER(LEN=*),
INTENT(IN) :: val
614 INTEGER :: domain_id, domain_id_start, domain_id_end
625 IF (var_descriptor%id == -1)
THEN
627 domain_id_end =
state%comin_descrdata_global_data%n_dom
629 domain_id_start = var_descriptor%id
630 domain_id_end = var_descriptor%id
637 DO domain_id = domain_id_start, domain_id_end
638 var_descriptor_domain%id = domain_id
642 IF (c_associated(req))
THEN
646 IF (all(metadata%query(trim(key)) /= &
650 CALL metadata%set(key, val)
654 IF (.NOT. lfound)
THEN
657 END SUBROUTINE comin_request_set_var_metadata_character
663 CHARACTER(LEN=*),
INTENT(IN) :: key
666 CHARACTER(len=1, kind=c_char),
ALLOCATABLE,
TARGET :: key_c(:)
668 descriptor_c%id = var_descriptor%id
670 ALLOCATE(key_c(len_trim(key)+1))
673 typeid = comin_metadata_get_typeid_c(descriptor_c, c_loc(key_c))
683 descriptor_c%id = var_descriptor%id
comin::keyval::Map * comin_var_request_get_metadata(t_comin_request_item *req)
integer, parameter wp
working precision
subroutine, public comin_metadata_get_iterator(var_descriptor, iterator)
Return a metadata container iterator.
@ comin_metadata_typeid_character
@ comin_metadata_typeid_real
@ comin_metadata_typeid_logical
@ comin_metadata_typeid_integer
@ comin_metadata_typeid_undefined
Return the request item for the given C descriptor.
subroutine, public convert_f_string(string, arr)
Convert Fortran string into C-style character array.
@ comin_error_var_descriptor_not_found
@ comin_error_var_metadata_inconsistent_type
@ comin_error_tracer_request_not_for_all_domains
@ comin_error_metadata_set_outside_primaryconstructor
type(t_comin_state), pointer, public state