14 USE iso_c_binding,
ONLY: c_int, c_ptr, c_loc, c_null_ptr, c_f_pointer, &
15 & c_bool, c_funptr, c_funloc, c_int64_t, c_char
70#include "comin_global.inc"
77 INTEGER(c_int),
VALUE :: ep
78 INTEGER(c_int),
VALUE :: plugin_id
79 TYPE(C_PTR),
VALUE :: var_item
80 INTEGER(C_INT),
VALUE :: access_flag
84 FUNCTION comin_var_is_used_c(var_descriptor)
BIND(C,name="comin_var_is_used")
86 TYPE(t_comin_var_descriptor_c),
INTENT(IN) :: var_descriptor
87 LOGICAL(C_BOOL) :: comin_var_is_used_c
88 END FUNCTION comin_var_is_used_c
106 TYPE(c_ptr),
INTENT(IN),
VALUE :: current
114 TYPE(c_ptr),
INTENT(INOUT) :: it
122 SUBROUTINE comin_var_get_descr_list_var_desc_c(it, var_desc_out)
BIND(C, name="comin_var_get_descr_list_var_desc")
124 TYPE(c_ptr),
INTENT(IN),
VALUE :: it
126 END SUBROUTINE comin_var_get_descr_list_var_desc_c
128 SUBROUTINE comin_state_set_sync_device_fct_c(sync_device_fct) &
129 BIND(C, name="comin_state_set_sync_device_fct")
131 TYPE(c_funptr),
VALUE,
INTENT(IN) :: sync_device_fct
132 END SUBROUTINE comin_state_set_sync_device_fct_c
134 SUBROUTINE comin_state_set_sync_halo_fct_c(sync_halo_fct) &
135 BIND(C, name="comin_state_set_sync_halo_fct")
137 TYPE(c_funptr),
VALUE,
INTENT(IN) :: sync_halo_fct
138 END SUBROUTINE comin_state_set_sync_halo_fct_c
143 TYPE(c_ptr) :: metadata_ptr
149 TYPE(c_ptr),
VALUE,
intent(in) :: metadata_ptr
157 TYPE(c_ptr),
INTENT(OUT) :: map
161 TYPE(c_ptr),
VALUE :: map
165 TYPE(c_ptr),
VALUE :: map
167 TYPE(c_ptr) FUNCTION comin_varmap_get_c (map, name, len, id)
BIND(C)
168 IMPORT c_ptr, c_int64_t, c_char, c_int
169 TYPE(c_ptr),
VALUE,
INTENT(IN) :: map
170 INTEGER(c_int64_t),
VALUE,
INTENT(IN) :: len
171 CHARACTER(kind=c_char),
INTENT(IN) :: name(len)
172 INTEGER(c_int),
VALUE,
INTENT(IN) :: id
176 TYPE(c_ptr),
VALUE :: map
177 INTEGER(c_int64_t),
VALUE,
INTENT(IN) :: len
178 CHARACTER(kind=c_char),
INTENT(IN) :: name(len)
179 INTEGER(c_int),
VALUE,
INTENT(IN) :: id
184 TYPE(c_ptr),
VALUE :: map
185 TYPE(c_ptr),
INTENT(OUT) :: it
189 TYPE(c_ptr),
VALUE :: it
193 TYPE(c_ptr),
VALUE :: it
197 TYPE(c_ptr),
VALUE,
INTENT(IN) :: map
198 TYPE(c_ptr),
VALUE,
INTENT(IN) :: it
202 TYPE(c_ptr),
VALUE,
INTENT(IN) :: it
203 TYPE(c_ptr),
INTENT(OUT) :: ptr
214 TYPE(c_ptr),
INTENT(IN),
VALUE :: it
219 CALL comin_var_get_descr_list_var_desc_c(it, var_desc_c)
226 & array_shape, type_id, &
228 & lcontainer, ncontained, &
231 TYPE(c_ptr),
INTENT(IN) :: cptr, device_ptr
232 INTEGER,
INTENT(IN) :: array_shape(5), type_id
233 INTEGER,
INTENT(IN) :: dim_semantics(5)
234 LOGICAL,
INTENT(IN) :: lcontainer
235 INTEGER,
INTENT(IN) :: ncontained
240 TYPE(c_ptr) :: var_list
248 var_item%device_ptr = device_ptr
249 var_item%array_shape = array_shape
250 var_item%type_id = type_id
251 var_item%dim_semantics = dim_semantics
252 var_item%lcontainer = lcontainer
253 var_item%ncontained = ncontained
264 TYPE(c_ptr) :: it, cptr, var_list
272 CALL c_f_pointer(cptr, item)
275 item%metadata = c_null_ptr
282 FUNCTION comin_var_get_c(context_len, context, var_descriptor, flag) &
283 & result(var_pointer) &
284 &
BIND(C, name="comin_var_get")
285 INTEGER(c_int),
VALUE,
INTENT(IN) :: context_len
286 INTEGER(c_int),
INTENT(IN) :: context(context_len)
288 INTEGER(c_int),
VALUE,
INTENT(IN) :: flag
289 TYPE(c_ptr) :: var_pointer
294 var_pointer = c_null_ptr
298 CALL comin_var_get_internal(context, var_descriptor_fortran, flag, var_item)
299 IF(
ASSOCIATED(var_item)) var_pointer = c_loc(var_item)
300 END FUNCTION comin_var_get_c
302 FUNCTION comin_var_get_ptr(handle) &
304 &
BIND(C, NAME="comin_var_get_ptr")
305 TYPE(c_ptr),
INTENT(IN),
VALUE :: handle
306 TYPE(c_ptr) :: dataptr
309 CALL c_f_pointer(handle, p)
310 IF (.NOT.
ASSOCIATED(p))
THEN
315 END FUNCTION comin_var_get_ptr
317 FUNCTION comin_var_get_ptr_double(handle) &
319 &
BIND(C, NAME="comin_var_get_ptr_double")
320 TYPE(c_ptr),
INTENT(IN),
VALUE :: handle
321 TYPE(c_ptr) :: dataptr
325 CALL c_f_pointer(handle, p)
326 IF (
ASSOCIATED(p))
THEN
332 END FUNCTION comin_var_get_ptr_double
334 FUNCTION comin_var_get_ptr_float(handle) &
336 &
BIND(C, NAME="comin_var_get_ptr_float")
337 TYPE(c_ptr),
INTENT(IN),
VALUE :: handle
338 TYPE(c_ptr) :: dataptr
342 CALL c_f_pointer(handle, p)
343 IF (
ASSOCIATED(p))
THEN
349 END FUNCTION comin_var_get_ptr_float
351 FUNCTION comin_var_get_ptr_int(handle) &
353 &
BIND(C, NAME="comin_var_get_ptr_int")
354 TYPE(c_ptr),
INTENT(IN),
VALUE :: handle
355 TYPE(c_ptr) :: dataptr
359 CALL c_f_pointer(handle, p)
360 IF (
ASSOCIATED(p))
THEN
366 END FUNCTION comin_var_get_ptr_int
368 FUNCTION comin_var_get_device_ptr(handle) &
369 & result(device_ptr) &
370 &
BIND(C, NAME="comin_var_get_device_ptr")
371 TYPE(c_ptr),
INTENT(IN),
VALUE :: handle
372 TYPE(c_ptr) :: device_ptr
375 CALL c_f_pointer(handle, p)
376 device_ptr = p%device_ptr
377 END FUNCTION comin_var_get_device_ptr
379 FUNCTION comin_var_get_device_ptr_double(handle) &
380 & result(device_ptr) &
381 &
BIND(C, NAME="comin_var_get_device_ptr_double")
382 TYPE(c_ptr),
INTENT(IN),
VALUE :: handle
383 TYPE(c_ptr) :: device_ptr
387 device_ptr = c_null_ptr
388 CALL c_f_pointer(handle, p)
389 IF (
ASSOCIATED(p))
THEN
393 device_ptr = p%device_ptr
395 END FUNCTION comin_var_get_device_ptr_double
397 FUNCTION comin_var_get_device_ptr_float(handle) &
398 & result(device_ptr) &
399 &
BIND(C, NAME="comin_var_get_device_ptr_float")
400 TYPE(c_ptr),
INTENT(IN),
VALUE :: handle
401 TYPE(c_ptr) :: device_ptr
405 device_ptr = c_null_ptr
406 CALL c_f_pointer(handle, p)
407 IF (
ASSOCIATED(p))
THEN
411 device_ptr = p%device_ptr
413 END FUNCTION comin_var_get_device_ptr_float
415 FUNCTION comin_var_get_device_ptr_int(handle) &
416 & result(device_ptr) &
417 &
BIND(C, NAME="comin_var_get_device_ptr_int")
418 TYPE(c_ptr),
INTENT(IN),
VALUE :: handle
419 TYPE(c_ptr) :: device_ptr
423 device_ptr = c_null_ptr
424 CALL c_f_pointer(handle, p)
425 IF (
ASSOCIATED(p))
THEN
429 device_ptr = p%device_ptr
431 END FUNCTION comin_var_get_device_ptr_int
433 SUBROUTINE comin_var_get_shape(handle, data_shape) &
434 &
BIND(C, NAME="comin_var_get_shape")
435 TYPE(c_ptr),
INTENT(IN),
VALUE :: handle
436 INTEGER(C_INT),
INTENT(INOUT) :: data_shape(5)
439 CALL c_f_pointer(handle, p)
440 IF (.NOT.
ASSOCIATED(p))
THEN
443 data_shape = p%array_shape
445 END SUBROUTINE comin_var_get_shape
447 SUBROUTINE comin_var_get_dim_semantics(handle, dim_semantics) &
448 &
BIND(C, NAME="comin_var_get_dim_semantics")
449 TYPE(c_ptr),
INTENT(IN),
VALUE :: handle
450 INTEGER(C_INT),
INTENT(OUT) :: dim_semantics(5)
453 CALL c_f_pointer(handle, p)
454 IF (.NOT.
ASSOCIATED(p))
THEN
457 dim_semantics = p%dim_semantics
459 END SUBROUTINE comin_var_get_dim_semantics
461 SUBROUTINE comin_var_get_ncontained(handle, ncontained) &
462 &
BIND(C, NAME="comin_var_get_ncontained")
463 TYPE(c_ptr),
INTENT(IN),
VALUE :: handle
464 INTEGER(C_INT),
INTENT(OUT) :: ncontained
467 CALL c_f_pointer(handle, p)
468 IF (.NOT.
ASSOCIATED(p))
THEN
472 ncontained = p%ncontained - 1
474 END SUBROUTINE comin_var_get_ncontained
476 SUBROUTINE comin_var_get_descriptor(handle, descr) &
477 &
BIND(C, NAME="comin_var_get_descriptor")
478 TYPE(c_ptr),
INTENT(IN),
VALUE :: handle
482 CALL c_f_pointer(handle, p)
483 IF (.NOT.
ASSOCIATED(p))
THEN
488 END SUBROUTINE comin_var_get_descriptor
493 INTEGER,
INTENT(IN) :: context(:)
495 INTEGER,
INTENT(IN) :: flag
500 CALL comin_var_get_internal(context, var_descriptor, flag, var_item)
509 TYPE(c_ptr) :: var_list
512 comin_get_var =>
comin_varmap_get(var_list, var_descriptor%name, var_descriptor%id)
516 FUNCTION comin_var_get_from_exposed_c(var_descriptor) &
517 & result(var_item_ptr) &
518 &
BIND(C, name="comin_var_get_from_exposed")
520 TYPE (c_ptr) :: var_item_ptr
523 TYPE(c_ptr) :: var_list
528 var_item_ptr_f =>
comin_varmap_get(var_list, var_descriptor_fortran%name, var_descriptor_fortran%id)
529 var_item_ptr = c_loc(var_item_ptr_f)
530 END FUNCTION comin_var_get_from_exposed_c
534 TYPE(c_funptr) :: ptr
535 ptr = c_funloc(sync_device_mem)
536 CALL comin_state_set_sync_device_fct_c(ptr)
541 TYPE(c_funptr) :: ptr
542 ptr = c_funloc(sync_halo)
543 CALL comin_state_set_sync_halo_fct_c(ptr)
546 SUBROUTINE comin_var_get_internal(context, var_descriptor, flag, var_item)
547 INTEGER,
INTENT(IN) :: context(:)
549 INTEGER,
INTENT(IN) :: flag
553 INTEGER(C_INT) :: plugin_id
563 IF ((.NOT.
state%comin_descrdata_global_data%has_device) .AND. &
569 IF (.NOT.
ASSOCIATED(var_item))
THEN
573 IF ((var_item%lcontainer) .AND. &
583 DO ic = 1,
SIZE(context)
588 END SUBROUTINE comin_var_get_internal
592 TYPE(c_ptr),
INTENT(IN) :: cptr
600 var_descriptor_c%id = var_descriptor%id
606 TYPE(c_ptr),
INTENT(INOUT) :: map
607 CHARACTER(kind=c_char, len=*),
INTENT(IN) :: name
608 INTEGER(c_int),
INTENT(IN) :: id
616 TYPE(c_ptr),
INTENT(IN) :: map
617 CHARACTER(kind=c_char, len=*),
INTENT(IN) :: name
618 INTEGER(c_int),
INTENT(IN) :: id
619 TYPE(c_ptr) :: tmp_ptr
const t_comin_var_item * comin_varmap_get_c(const t_comin_var_map *map, const char *name, size_t len, int id)
void comin_varmap_put_c(t_comin_var_map *map, const char *name, size_t len, int id, const t_comin_var_item *ptr)
void comin_var_get_descr_list_var_desc(t_comin_var_descr_list_iterator *current, t_comin_var_descriptor *var_desc)
bool comin_var_is_used(const t_comin_var_descriptor *descr)
void comin_destruct_metadata(comin::keyval::Map *metadata)
comin::keyval::Map * comin_construct_metadata()
void comin_var_list_context_append(t_comin_entry_point ep, int plugin_id, t_comin_var_item *var_item, int access_flag)
Variable pointer. Fortran interface for accessing variables.
Get first element of variable descriptor list. Returns a C-pointer that can be evaluated with the aux...
Get next element of variable descriptor list. Returns a C-pointer that can be evaluated with the auxi...
subroutine, public comin_var_get(context, var_descriptor, flag, var_ptr)
Request a pointer to an ICON variable in context(s).
@ ep_secondary_constructor
@ comin_var_datatype_double
@ comin_var_datatype_float
@ comin_dim_semantics_undef
subroutine, public convert_f_string(string, arr)
Convert Fortran string into C-style character array.
@ comin_error_var_get_irregular_var_can_not_halo_synchronized
@ comin_error_pointer_not_associated
@ comin_error_var_get_variable_not_found
@ comin_error_var_get_no_device
@ comin_error_var_get_container_can_not_halo_synchronized
@ comin_error_var_get_outside_secondary_constructor
@ comin_error_var_get_variable_wrong_type
type(t_comin_state), pointer, public state
type(t_comin_var_handle) function comin_var_ptr_init(var_item)
subroutine comin_var_handle_set_cptr(var, cptr)
subroutine, public comin_var_set_cptr(var, cptr)
subroutine, public comin_var_list_finalize()
Destruct variable list, deallocate memory.
subroutine, public comin_var_set_sync_device_mem(sync_device_mem)
subroutine, public comin_var_set_sync_halo(sync_halo)
subroutine, public comin_var_list_append(var_descr, cptr, device_ptr, array_shape, type_id, dim_semantics, lcontainer, ncontained, var_handle)
Append item to variable list.
type(t_comin_var_item) function, pointer, public comin_var_get_from_exposed(var_descriptor)
get pointer to a variable exposed by ICON
type(t_comin_var_item) function, pointer, public comin_varmap_get(map, name, id)
subroutine, public comin_varmap_put(map, name, id, var_item)