14 use,
INTRINSIC :: iso_c_binding, only: c_int, c_ptr, c_loc, c_bool
41#include "comin_global.inc"
49 state%comin_descrdata_global = comin_global_info
56 ALLOCATE(
state%comin_descrdata_domain, source=comin_domain_info)
63 state%comin_descrdata_simulation_interval = comin_time_info
69 CHARACTER(LEN=:),
ALLOCATABLE,
INTENT(OUT) :: sim_time_current
70 sim_time_current =
state%current_datetime
74 SUBROUTINE comin_current_get_datetime_c(val, len) &
75 &
BIND(C, NAME="comin_current_get_datetime")
76 TYPE(c_ptr),
INTENT(OUT) :: val
77 INTEGER(kind=c_int),
INTENT(OUT) :: len
79 val = c_loc(
state%current_datetime)
80 len = len_trim(
state%current_datetime)
81 END SUBROUTINE comin_current_get_datetime_c
86 CHARACTER(LEN=*),
INTENT(IN) :: sim_time_current
87 state%current_datetime = sim_time_current
106 INTEGER,
INTENT(IN) :: jg
125 CALL comin_plugin_finish(
"comin_descrdata_get_simulation_interval",
" ERROR: Pointer not associated.")
130 SUBROUTINE comin_descrdata_get_simulation_interval_exp_start(val, len) &
131 &
BIND(C, NAME="comin_descrdata_get_simulation_interval_exp_start")
132 TYPE(c_ptr),
INTENT(OUT) :: val
133 INTEGER(kind=c_int),
INTENT(OUT) :: len
135 val = c_loc(
state%comin_descrdata_simulation_interval%exp_start)
136 len = len_trim(
state%comin_descrdata_simulation_interval%exp_start)
137 END SUBROUTINE comin_descrdata_get_simulation_interval_exp_start
140 SUBROUTINE comin_descrdata_get_simulation_interval_exp_stop(val, len) &
141 &
BIND(C, NAME="comin_descrdata_get_simulation_interval_exp_stop")
142 TYPE(c_ptr),
INTENT(OUT) :: val
143 INTEGER(kind=c_int),
INTENT(OUT) :: len
145 val = c_loc(
state%comin_descrdata_simulation_interval%exp_stop)
146 len = len_trim(
state%comin_descrdata_simulation_interval%exp_stop)
147 END SUBROUTINE comin_descrdata_get_simulation_interval_exp_stop
150 SUBROUTINE comin_descrdata_get_simulation_interval_run_start(val, len) &
151 &
BIND(C, NAME="comin_descrdata_get_simulation_interval_run_start")
152 TYPE(c_ptr),
INTENT(OUT) :: val
153 INTEGER(kind=c_int),
INTENT(OUT) :: len
155 val = c_loc(
state%comin_descrdata_simulation_interval%run_start)
156 len = len_trim(
state%comin_descrdata_simulation_interval%run_start)
157 END SUBROUTINE comin_descrdata_get_simulation_interval_run_start
160 SUBROUTINE comin_descrdata_get_simulation_interval_run_stop(val, len) &
161 &
BIND(C, NAME="comin_descrdata_get_simulation_interval_run_stop")
162 TYPE(c_ptr),
INTENT(OUT) :: val
163 INTEGER(kind=c_int),
INTENT(OUT) :: len
165 val = c_loc(
state%comin_descrdata_simulation_interval%run_stop)
166 len = len_trim(
state%comin_descrdata_simulation_interval%run_stop)
167 END SUBROUTINE comin_descrdata_get_simulation_interval_run_stop
173 INTEGER(c_int),
INTENT(IN),
VALUE :: jg
181 INTEGER,
INTENT(IN) :: jg
182 REAL(
wp),
INTENT(IN) :: dt_current
184 IF (.NOT.
ALLOCATED(
state%comin_descrdata_timesteplength))
THEN
185 ALLOCATE(
state%comin_descrdata_timesteplength(
state%comin_descrdata_global%n_dom+4))
187 state%comin_descrdata_timesteplength(jg) = dt_current
231 INTEGER(c_int),
INTENT(IN),
VALUE :: idx1d
238 INTEGER(c_int),
INTENT(IN),
VALUE :: idx1d
252 i_endidx, irl_start, irl_end) &
253 &
BIND(C, NAME="comin_descrdata_get_cell_indices")
255 INTEGER(c_int),
INTENT(IN),
VALUE :: jg
256 INTEGER(c_int),
INTENT(IN),
VALUE :: i_blk
257 INTEGER(c_int),
INTENT(IN),
VALUE :: i_startblk
258 INTEGER(c_int),
INTENT(IN),
VALUE :: i_endblk
259 INTEGER(c_int),
INTENT(IN),
VALUE :: irl_start
260 INTEGER(c_int),
INTENT(IN),
VALUE :: irl_end
262 INTEGER(c_int),
INTENT(OUT) :: i_startidx, i_endidx
264 IF (i_blk == i_startblk)
THEN
265 i_startidx = max(1,
state%comin_descrdata_domain(jg)%cells%start_index(irl_start))
266 i_endidx =
state%comin_descrdata_global%nproma
267 IF (i_blk == i_endblk) i_endidx =
state%comin_descrdata_domain(jg)%cells%end_index(irl_end)
268 ELSE IF (i_blk == i_endblk)
THEN
270 i_endidx =
state%comin_descrdata_domain(jg)%cells%end_index(irl_end)
273 i_endidx =
state%comin_descrdata_global%nproma
284 i_endidx, irl_start, irl_end) &
285 &
BIND(C, NAME="comin_descrdata_get_edge_indices")
287 INTEGER(c_int),
INTENT(IN),
VALUE :: jg
288 INTEGER(c_int),
INTENT(IN),
VALUE :: i_blk
289 INTEGER(c_int),
INTENT(IN),
VALUE :: i_startblk
290 INTEGER(c_int),
INTENT(IN),
VALUE :: i_endblk
291 INTEGER(c_int),
INTENT(IN),
VALUE :: irl_start
292 INTEGER(c_int),
INTENT(IN),
VALUE :: irl_end
294 INTEGER(c_int),
INTENT(OUT) :: i_startidx, i_endidx
296 i_startidx = merge(1, &
297 max(1,
state%comin_descrdata_domain(jg)%edges%start_index(irl_start)), &
299 i_endidx = merge(
state%comin_descrdata_global%nproma, &
300 state%comin_descrdata_domain(jg)%edges%end_index(irl_end), &
311 i_endidx, irl_start, irl_end) &
312 &
BIND(C, NAME="comin_descrdata_get_vert_indices")
314 INTEGER(c_int),
INTENT(IN),
VALUE :: jg
315 INTEGER(c_int),
INTENT(IN),
VALUE :: i_blk
316 INTEGER(c_int),
INTENT(IN),
VALUE :: i_startblk
317 INTEGER(c_int),
INTENT(IN),
VALUE :: i_endblk
318 INTEGER(c_int),
INTENT(IN),
VALUE :: irl_start
319 INTEGER(c_int),
INTENT(IN),
VALUE :: irl_end
321 INTEGER(c_int),
INTENT(OUT) :: i_startidx, i_endidx
323 IF (i_blk == i_startblk)
THEN
324 i_startidx =
state%comin_descrdata_domain(jg)%verts%start_index(irl_start)
325 i_endidx =
state%comin_descrdata_global%nproma
326 IF (i_blk == i_endblk) i_endidx =
state%comin_descrdata_domain(jg)%verts%end_index(irl_end)
327 ELSE IF (i_blk == i_endblk)
THEN
329 i_endidx =
state%comin_descrdata_domain(jg)%verts%end_index(irl_end)
332 i_endidx =
state%comin_descrdata_global%nproma
346 INTEGER(c_int),
INTENT(IN),
VALUE :: jg
349 & (
state%comin_descrdata_domain(jg)%cells%nblks-1)*
state%comin_descrdata_global%nproma
361 INTEGER(c_int),
INTENT(IN),
VALUE :: jg
364 & (
state%comin_descrdata_domain(jg)%edges%nblks-1)*
state%comin_descrdata_global%nproma
376 INTEGER(c_int),
INTENT(IN),
VALUE :: jg
379 & (
state%comin_descrdata_domain(jg)%verts%nblks-1)*
state%comin_descrdata_global%nproma
385 & result(loc)
BIND(C)
386 INTEGER(kind=C_INT),
INTENT(IN),
VALUE :: jg
387 INTEGER(kind=C_INT),
INTENT(IN),
VALUE :: global_idx
388 loc =
state%comin_descrdata_fct_glb2loc_cell(jg, int(global_idx))
392#include "comin_descrdata_query_domain.inc"
395#include "comin_descrdata_query_global.inc"
integer, parameter, public wp
working precision
subroutine, public comin_descrdata_finalize()
Clean descriptive data structure in ComIn currently no content but keep for future use.
subroutine, public comin_descrdata_set_simulation_interval(comin_time_info)
Fill time stamp info.
subroutine, public comin_descrdata_set_domain(comin_domain_info)
Set up data type for grid data.
subroutine, public comin_current_set_datetime(sim_time_current)
Update time stamp info, current time information.
subroutine, public comin_descrdata_set_timesteplength(jg, dt_current)
Fill array with timestep.
subroutine, public comin_descrdata_set_global(comin_global_info)
Fill global data.
subroutine, public comin_plugin_finish(routine, text)
Wrapper function for callback to ICON's "finish" routine.
subroutine, public comin_current_get_datetime(sim_time_current)
Retrieve time stamp info, current time information.
type(t_comin_descrdata_simulation_interval) function, pointer, public comin_descrdata_get_simulation_interval()
request a pointer to simulation status
integer(c_int) function, public comin_descrdata_get_block(idx1d)
auxiliary functions taken from ICON, version 2.6.5
type(t_comin_descrdata_global) function, pointer, public comin_descrdata_get_global()
request a pointer to the global data type
subroutine, public comin_descrdata_get_cell_indices(jg, i_blk, i_startblk, i_endblk, i_startidx, i_endidx, irl_start, irl_end)
Computes the start and end indices of do loops for cell-based variables.
real(wp) function, public comin_descrdata_get_timesteplength(jg)
Receive pointer on array storing timestep information for all domains.
subroutine, public comin_descrdata_get_vert_indices(jg, i_blk, i_startblk, i_endblk, i_startidx, i_endidx, irl_start, irl_end)
Computes the start and end indices of do loops for vertex-based variables.
integer(c_int) function, public comin_descrdata_index_lookup_glb2loc_cell(jg, global_idx)
Conversion of global cell index to MPI-process local index.
integer(c_int) function, public comin_descrdata_get_index(idx1d)
Auxiliary function: conversion of 1D to 2D indices.
subroutine, public comin_descrdata_get_edge_indices(jg, i_blk, i_startblk, i_endblk, i_startidx, i_endidx, irl_start, irl_end)
Computes the start and end indices of do loops for edge-based variables.
integer(c_int) function, public comin_descrdata_get_edge_npromz(jg)
Calculate npromz value for the blocking, needed for patch allocation. ... for the edges.
integer(c_int) function, public comin_descrdata_get_cell_npromz(jg)
Calculate npromz value for the blocking, needed for patch allocation. ... for the cells.
type(t_comin_descrdata_domain) function, pointer, public comin_descrdata_get_domain(jg)
request a pointer to the grid data type for a specific computational domain
integer(c_int) function, public comin_descrdata_get_vert_npromz(jg)
Calculate npromz value for the blocking, needed for patch allocation. ... for the vertices.
type(t_comin_state), pointer, public state
Cell information for grid data structures.
Edge information for grid data structures.
Vertex information for grid data structures.
Patch grid data structure, gathering information on grids.
Global data is invariant wrt the computational grid and never changed or updated.
Simulation status information, sim_current contains current time step.