ComIn 0.5.1
ICON Community Interface
Loading...
Searching...
No Matches
comin_descrdata_types.F90
Go to the documentation of this file.
1!> @file comin_descrdata_types.F90
2!! @brief ComIn descriptive data structures.
3!
4! @authors 10/2021 :: ICON Community Interface <comin@icon-model.org>
5!
6! SPDX-License-Identifier: BSD-3-Clause
7!
8! See LICENSES for license information.
9! Where software is supplied by third parties, it is indicated in the
10! headers of the routines.
11!
13 USE iso_c_binding, ONLY : c_signed_char, c_int, c_bool
14 USE comin_setup_constants, ONLY : wp
15 IMPLICIT NONE
16
17 PRIVATE
18
26
27#include "comin_global.inc"
28
29 ! ------------------------------------
30 ! data types for descriptive data structures
31 ! ------------------------------------
32
33 ! Descriptive data from p_patch apart from few exceptions (e.g. lon and lat)
34 ! handed to ComIn as pointer, all other descriptive data are copies from
35 ! host model, which need to be updated during the model simulation if changed
36
37 !> Global data is invariant wrt the computational grid and never changed
38 !! or updated.
39 !! @ingroup fortran_interface
41 !> @brief Number of logical domains
42 !!
43 !! Fortran indexing. Starting with 1.
44 INTEGER(C_INT) :: n_dom
45 !> @brief Maximum number of model domains
46 INTEGER(C_INT) :: max_dom
47 !> @brief Loop chunk length
48 !!
49 !! Often used as the first dimension of variables
50 INTEGER(C_INT) :: nproma
51 !> @brief Working precision
52 !!
53 !! Fortan KIND VALUE (REAL)
54 INTEGER(C_INT) :: wp
55 !> @brief Cell row ordering (block index): halo cells have a negative numbering ranging between `min_rlcell` and `min_rlcell_int-1`.
56 INTEGER(C_INT) :: min_rlcell_int
57 !> @brief Cell row ordering (block index): halo cells have a negative numbering ranging between `min_rlcell` and `min_rlcell_int-1`.
58 INTEGER(C_INT) :: min_rlcell
59 !> @brief Cell row ordering (block index): cell rows in the lateral domain boundary have positive `refin_c_ctrl` numbers.
60 !!
61 !! In total, `max_rlcell = 5` cell rows are part of this section.
62 INTEGER(C_INT) :: max_rlcell
63 !> @brief Vertex row ordering (block index). See the corresponding documentation for cells.
64 INTEGER(C_INT) :: min_rlvert_int
65 !> @brief Vertex row ordering (block index). See the corresponding documentation for cells.
66 INTEGER(C_INT) :: min_rlvert
67 !> @brief Vertex row ordering (block index). See the corresponding documentation for cells.
68 INTEGER(C_INT) :: max_rlvert
69 !> @brief Vertex row ordering (block index). See the corresponding documentation for cells.
70 INTEGER(C_INT) :: min_rledge_int
71 !> @brief Edge row ordering (block index). See the corresponding documentation for cells.
72 INTEGER(C_INT) :: min_rledge
73 !> @brief Edge row ordering (block index). See the corresponding documentation for cells.
74 INTEGER(C_INT) :: max_rledge
75 !> @brief Cell row ordering (block index): width of lateral boundary region, not including the nudging zone
76 INTEGER(C_INT) :: grf_bdywidth_c
77 !> @brief Edge row ordering (block index): See the corresponding documentation for cells.
78 INTEGER(C_INT) :: grf_bdywidth_e
79 !> @brief Whether this is a restarted run
80 LOGICAL(C_BOOL) :: lrestartrun
81 !> @brief Parameter A of the vertical coordinate (without influence of topography)
82 !!
83 !! index1=1,nlev+1
84 REAL(wp), ALLOCATABLE :: vct_a(:)
85 !> @brief Limited area setup where forcing comes from the sides
86 LOGICAL(C_BOOL) :: l_limited_area
87 !> @brief The yac instance id used by the host model
88 !!
89 !! See comments in the technical documentation and the examples
90 INTEGER(C_INT) :: yac_instance_id
91 !> @brief Host model version information - Git remote URL
92 CHARACTER(LEN=:), ALLOCATABLE :: host_git_remote_url
93 !> @brief Host model version information - Git branch name
94 CHARACTER(LEN=:), ALLOCATABLE :: host_git_branch
95 !> @brief Host model version information - Git tag name
96 CHARACTER(LEN=:), ALLOCATABLE :: host_git_tag
97 !> @brief Host model version information - revision version number
98 CHARACTER(LEN=:), ALLOCATABLE :: host_revision
99 !> @brief Information about the computation device (accelerator)
100 !!
101 !! Whether the host model uses an acceleraor (e.g. GPU). In this case the
102 !! memory can be accessed directly on the device. See technical
103 !! documentation and examples for further details.
104 LOGICAL(C_BOOL) :: has_device
105 !> @brief Name of the accelerator device
106 CHARACTER(LEN=:), ALLOCATABLE :: device_name
107 !> @brief Vendor of the accelerator device
108 CHARACTER(LEN=:), ALLOCATABLE :: device_vendor
109 !> @brief Driver of the accelerator device
110 CHARACTER(LEN=:), ALLOCATABLE :: device_driver
112
113 !> Cell information for grid data structures
114 !! @ingroup fortran_interface
116 !> @brief Number of local cells
117 INTEGER(C_INT) :: ncells
118 !> @brief Number of global cells
119 INTEGER(C_INT) :: ncells_global
120 !> @brief Number of blocks for cells
121 !! @see nproma
122 INTEGER(C_INT) :: nblks
123 !> @brief Maximum number of connected neighbors (usually 3)
124 INTEGER(C_INT) :: max_connectivity
125 !> @brief Number of edges connected to cell
126 !!
127 !! index1=1,nproma, index2=1,nblks_c
128 INTEGER(C_INT), POINTER, CONTIGUOUS :: num_edges(:,:) => null()
129 !> @brief Lateral boundary distance indices
130 !!
131 !! index1=1,nproma, index2=1,nblks_c
132 INTEGER(C_INT), POINTER, CONTIGUOUS :: refin_ctrl(:,:) => null()
133 !> @brief List of start indices for each refin_ctrl level
134 !!
135 !! index1=min_rlcell,max_rlcell (defined in mo_impl_constants)
136 INTEGER(C_INT), POINTER, CONTIGUOUS :: start_index(:) => null()
137 !> @brief List of end indices for each refin_ctrl level
138 !!
139 !! index1=min_rlcell,max_rlcell
140 INTEGER(C_INT), POINTER, CONTIGUOUS :: end_index(:) => null()
141 !> @brief List of start block for each refin_ctrl level
142 !!
143 !! index1=min_rlcell,max_rlcell
144 INTEGER(C_INT), POINTER, CONTIGUOUS :: start_block(:) => null()
145 !> @brief List of end block for each refin_ctrl level
146 !!
147 !! index1=min_rlcell,max_rlcell
148 INTEGER(C_INT), POINTER, CONTIGUOUS :: end_block(:) => null()
149 !> @brief Domain ID of child triangles
150 !!
151 !! index1=1,nproma, index2=1,nblks_c
152 INTEGER(C_INT), POINTER, CONTIGUOUS :: child_id(:,:) => null()
153 !> @brief Line index of parent triangle
154 !!
155 !! index1=1,nproma, index2=1,nblks_c
156 INTEGER(C_INT), POINTER, CONTIGUOUS :: parent_glb_idx(:,:) => null()
157 !> @brief Block index of parent triangle
158 !!
159 !! index1=1,nproma, index2=1,nblks_c
160 INTEGER(C_INT), POINTER, CONTIGUOUS :: parent_glb_blk(:,:) => null()
161 !> @brief Line indices of verts of triangle
162 !!
163 !! index1=1,nproma, index2=1,nblks_c, index3=1,3
164 INTEGER(C_INT), POINTER, CONTIGUOUS :: vertex_idx(:,:,:) => null()
165 !> @brief Block indices of verts of triangle
166 !!
167 !! index1=1,nproma, index2=1,nblks_c, index3=1,3
168 INTEGER(C_INT), POINTER, CONTIGUOUS :: vertex_blk(:,:,:) => null()
169 !> @brief Line indices of neighbors of triangle
170 !!
171 !! index1=1,nproma, index2=1,nblks_c, index3=1,3
172 INTEGER(C_INT), POINTER, CONTIGUOUS :: neighbor_idx(:,:,:) => null()
173 !> @brief Block indices of neighbors of triangle
174 !!
175 !! index1=1,nproma, index2=1,nblks_c, index3=1,3
176 INTEGER(C_INT), POINTER, CONTIGUOUS :: neighbor_blk(:,:,:) => null()
177 !> @brief Line indices of edges of triangle
178 !!
179 !! index1=1,nproma, index2=1,nblks_c, index3=1,3
180 INTEGER(C_INT), POINTER, CONTIGUOUS :: edge_idx(:,:,:) => null()
181 !> @brief Block indices of edges of triangle
182 !!
183 !! index1=1,nproma, index2=1,nblks_c, index3=1,3
184 INTEGER(C_INT), POINTER, CONTIGUOUS :: edge_blk(:,:,:) => null()
185 !> @brief Longitude of centers of triangular cells
186 !!
187 !! index1=1,nproma, index2=1,nblks_c
188 REAL(wp), ALLOCATABLE :: clon(:,:)
189 !> @brief Latitude of centers of triangular cells
190 !!
191 !! index1=1,nproma, index2=1,nblks_c
192 REAL(wp), ALLOCATABLE :: clat(:,:)
193 !> @brief Area of triangle
194 !!
195 !! index1=1,nproma, index2=1,nblks_c
196 REAL(wp), POINTER, CONTIGUOUS :: area(:,:) => null()
197 !> @brief Geometrical height of half levels at cell centre
198 !!
199 !! index1=1,nproma, index2=1,nlev+1, index3=1,nblks_c
200 REAL(wp), ALLOCATABLE :: hhl(:,:,:)
201 !> @brief Coefficient for bilinear interpolation from edges to cells for scalar quantities
202 !! index1=nproma, index2=3, index3=nblks_c
203 REAL(wp), POINTER, CONTIGUOUS :: e_bln_c_s(:,:,:)
204 !> @brief Factor for divergence
205 !! index1=nproma , index2=cell_type, index3=nblks_c
206 REAL(wp), POINTER, CONTIGUOUS :: geofac_div(:,:,:)
207 !> @brief Factor for nabla2-scalar
208 !! index1=nproma, index2=cell_type+1, index3=nblks_c
209 REAL(wp), POINTER, CONTIGUOUS :: geofac_n2s(:,:,:)
210 !> @brief Factor for Green-Gauss gradient
211 !! index1=nproma, index2=4, index3=nblks_c, index4=2
212 REAL(wp), POINTER, CONTIGUOUS :: geofac_grg(:,:,:,:)
213 !> @brief Indices of the stencil of surrounding edges for vector rbf interpolation at each
214 !! cell center
215 !! index1=rbf_vec_dim_c(=9), index2=nproma, inedx3=nblks_c
216 INTEGER(C_INT), POINTER, CONTIGUOUS :: rbf_vec_idx(:,:,:)
217 !> @brief Block-Indices of the stencil of surrounding edges for vector rbf
218 !> interpolation at each
219 !! cell center
220 !! index1=rbf_vec_dim_c(=9), index2=nproma, inedx3=nblks_c
221 INTEGER(C_INT), POINTER, CONTIGUOUS :: rbf_vec_blk(:,:,:)
222 !> @brief Number of surrounding edges in the stencil for vector rbf
223 !! interpolation at each cell center
224 !! index1=nproma, index2=nblks_c
225 INTEGER(C_INT), POINTER, CONTIGUOUS :: rbf_vec_stencil(:,:)
226 !> @brief coefficients used for vector rbf interpolation at
227 !! each cell center
228 !! index1=rbf_vec_dim_c(=9), index2=2, INdex3=nproma, index4=nblks_c
229 REAL(wp), POINTER, CONTIGUOUS :: rbf_vec_coeff(:,:,:,:)
230 !> @brief Global cell indices
231 !!
232 !! index1=1,ncells
233 INTEGER(C_INT), POINTER, CONTIGUOUS :: glb_index(:) => null()
234 !> @brief Domain decomposition flag
235 !!
236 !! * decomp_domain==0: inner domain
237 !! * decomp_domain>0: boundary
238 !! * decomp_domain<0: undefined
239 !!
240 !! For cells:
241 !! * 0=owned
242 !! * 1=shared edge with owned cell
243 !! * 2=shared vertex with owned cell
244 !!
245 !! index1=1,nproma, index2=1,nblks_c
246 INTEGER(C_INT), POINTER, CONTIGUOUS :: decomp_domain(:,:) => null()
248
249 !> Vertex information for grid data structures
250 !! @ingroup fortran_interface
252 !> @brief Number of local verts
253 INTEGER(C_INT) :: nverts
254 !> @brief Number of global verts
255 INTEGER(C_INT) :: nverts_global
256 !> @brief Number of blocks for verts
257 !!
258 !! @see nproma
259 INTEGER(C_INT) :: nblks
260 !> @brief Number of edges connected to vertex
261 !!
262 !! index1=1,nproma, index2=1,nblks_v
263 INTEGER(C_INT), POINTER, CONTIGUOUS :: num_edges(:,:) => null()
264 !> @brief Lateral boundary distance indices
265 !!
266 !! index1=1,nproma, index2=1,nblks_v
267 INTEGER(C_INT), POINTER, CONTIGUOUS :: refin_ctrl(:,:) => null()
268 !> @brief List of start indices for each refin_ctrl level
269 !!
270 !! index1=min_rlvert,max_rlvert
271 INTEGER(C_INT), POINTER, CONTIGUOUS :: start_index(:) => null()
272 !> @brief List of end indices for each refin_ctrl level
273 !!
274 !! index1=min_rlvert,max_rlvert
275 INTEGER(C_INT), POINTER, CONTIGUOUS :: end_index(:) => null()
276 !> @brief List of start block for each refin_ctrl level
277 !!
278 !! index1=min_rlvert,max_rlvert
279 INTEGER(C_INT), POINTER, CONTIGUOUS :: start_block(:) => null()
280 !> @brief List of end block for each refin_ctrl level
281 !!
282 !! index1=min_rlvert,max_rlvert
283 INTEGER(C_INT), POINTER, CONTIGUOUS :: end_block(:) => null()
284 !> @brief Block indices of neighbor vertices
285 !!
286 !! index1=1,nproma, index2=1,nblks_v, index3=1,6
287 INTEGER(C_INT), POINTER, CONTIGUOUS :: neighbor_blk(:,:,:) => null()
288 !> @brief Line indices of neighbor vertices
289 !!
290 !! index1=1,nproma, index2=1,nblks_v, index3=1,6
291 INTEGER(C_INT), POINTER, CONTIGUOUS :: neighbor_idx(:,:,:) => null()
292 !> @brief Line indices of cells around each vertex
293 !!
294 !! index1=1,nproma, index2=1,nblks_v, index3=1,6
295 INTEGER(C_INT), POINTER, CONTIGUOUS :: cell_idx(:,:,:) => null()
296 !> @brief Block indices of cells around each vertex
297 !!
298 !! index1=1,nproma, index2=1,nblks_v, index3=1,6
299 INTEGER(C_INT), POINTER, CONTIGUOUS :: cell_blk(:,:,:) => null()
300 !> @brief Line indices of edges around a vertex
301 !!
302 !! index1=1,nproma, index2=1,nblks_v, index3=1,6
303 INTEGER(C_INT), POINTER, CONTIGUOUS :: edge_idx(:,:,:) => null()
304 !> @brief Block indices of edges around a vertex
305 !!
306 !! index1=1,nproma, index2=1,nblks_v, index3=1,6
307 INTEGER(C_INT), POINTER, CONTIGUOUS :: edge_blk(:,:,:) => null()
308 !> @brief Longitude of vertex
309 !!
310 !! index1=1,nproma, index2=1,nblks_v
311 REAL(wp), ALLOCATABLE :: vlon(:,:)
312 !> @brief Latitude of vertex
313 !!
314 !! index1=1,nproma, index2=1,nblks_v
315 REAL(wp), ALLOCATABLE :: vlat(:,:)
316 !> Indices of the stencil of surrounding edges for vector rbf interpolation
317 !! at each triangle vertex
318 !! index1=rbf_vec_dim_v(=6), index2=nproma, index3=nblks_v
319 INTEGER(C_INT), POINTER, CONTIGUOUS :: rbf_vec_idx(:,:,:)
320 !> Block-indices of the stencil of surrounding edges for vector rbf
321 !! interpolation at each triangle vertex
322 !! index1=rbf_vec_dim_v(=6), index2=nproma, index3=nblks_v
323 INTEGER(C_INT), POINTER, CONTIGUOUS :: rbf_vec_blk(:,:,:)
324 !> @brief Number of surrounding edges in the stencil for vector rbf
325 !! interpolation at each triangle vertex
326 !! index1=nproma, index2=nblks_v
327 INTEGER(C_INT), POINTER, CONTIGUOUS :: rbf_vec_stencil(:,:)
328 !> @brief Coefficients used for vector rbf interpolation at each tringle vertex.
329 !! input is normal component
330 !! index1=rbf_vec_dim_v(=6), index2=2, index3=nproma, index4=nblks_v
331 REAL(wp), POINTER, CONTIGUOUS :: rbf_vec_coeff(:,:,:,:)
332 !> @brief Global vertex indices
333 !!
334 !! index1=1,nverts
335 INTEGER(C_INT), POINTER, CONTIGUOUS :: glb_index(:) => null()
336 !> @brief Domain decomposition flag for vertices
337 !!
338 !! * decomp_domain==0: inner domain
339 !! * decomp_domain>0: boundary
340 !! * decomp_domain<0: undefined
341 !!
342 !! For vertices:
343 !! * 0=owned
344 !! * 1=on owned cell
345 !! * 2=on level 1 cell
346 !!
347 !! index1=nproma, index2=1,nblks_v
348 INTEGER(C_INT), POINTER, CONTIGUOUS :: decomp_domain(:,:) => null()
350
351 !> Edge information for grid data structures
352 !! @ingroup fortran_interface
354 !> @brief Number of local edges
355 INTEGER(C_INT) :: nedges
356 !> @brief Number of global edges
357 INTEGER(C_INT) :: nedges_global
358 !> @brief Number of blocks for edges
359 INTEGER(C_INT) :: nblks
360 !> @brief Lateral boundary distance indices
361 !!
362 !! index1=1,nproma, index2=1,nblks_e
363 INTEGER(C_INT), POINTER, CONTIGUOUS :: refin_ctrl(:,:) => null()
364 !> @brief List of start indices for each refin_ctrl level
365 !!
366 !! index1=min_rledge,max_rledge
367 INTEGER(C_INT), POINTER, CONTIGUOUS :: start_index(:) => null()
368 !> @brief List of end indices for each refin_ctrl level
369 !!
370 !! index1=min_rledge,max_rledge
371 INTEGER(C_INT), POINTER, CONTIGUOUS :: end_index(:) => null()
372 !> @brief List of start block for each refin_ctrl level
373 !!
374 !! index1=min_rledge,max_rledge
375 INTEGER(C_INT), POINTER, CONTIGUOUS :: start_block(:) => null()
376 !> @brief List of end block for each refin_ctrl level
377 !!
378 !! index1=min_rledge,max_rledge
379 INTEGER(C_INT), POINTER, CONTIGUOUS :: end_block(:) => null()
380 !> @brief Domain ID of child edges
381 !!
382 !! index1=1,nproma, index2=1,nblks_e
383 INTEGER(C_INT), POINTER, CONTIGUOUS :: child_id(:,:) => null()
384 !> @brief Line index of parent edges
385 !!
386 !! index1=1,nproma, index2=1,nblks_e
387 INTEGER(C_INT), POINTER, CONTIGUOUS :: parent_glb_idx(:,:) => null()
388 !> @brief block index of parent edges
389 !!
390 !! index1=1,nproma, index2=1,nblks_e
391 INTEGER(C_INT), POINTER, CONTIGUOUS :: parent_glb_blk(:,:) => null()
392 !> @brief Line indices of adjacent cells
393 !!
394 !! index1=1,nproma, index2=1,nblks_e, index3=1,2
395 INTEGER(C_INT), POINTER, CONTIGUOUS :: cell_idx(:,:,:) => null()
396 !> @brief Block indices of adjacent cells
397 !!
398 !! index1=1,nproma, index2=1,nblks_e, index3=1,2
399 INTEGER(C_INT), POINTER, CONTIGUOUS :: cell_blk(:,:,:) => null()
400 !> @brief Line indices of edge vertices
401 !!
402 !! vertex indices 3 and 4 are the non-edge-aligned vertices of cells 1 and 2
403 !!
404 !! index1=1,nproma, index2=1,nblks_e, index3=1,4
405 INTEGER(C_INT), POINTER, CONTIGUOUS :: vertex_idx(:,:,:) => null()
406 !> @brief Block indices of edge vertices
407 !!
408 !! index1=1,nproma, index2=1,nblks_e, index3=1,4
409 INTEGER(C_INT), POINTER, CONTIGUOUS :: vertex_blk(:,:,:) => null()
410 !> @brief Longitude of edge midpoint
411 !!
412 !! index=1,nproma, index2=1,nblks_e
413 REAL(wp), ALLOCATABLE :: elon(:,:)
414 !> @brief Latitude of edge midpoint
415 !!
416 !! index=1,nproma, index2=1,nblks_e
417 REAL(wp), ALLOCATABLE :: elat(:,:)
418 !> @brief Orientation of the edge
419 !! =1 if vector product of vector from vertex1 to vertex 2 (v2-v1) by vector
420 !! from cell c1 to cell c2 (c2-c1) goes outside the sphere
421 !! =-1 if vector product ... goes inside the sphere
422 !! index=1,nproma, index2=1,nblks_e
423 REAL(wp), POINTER, CONTIGUOUS :: tangent_orientation(:,:) => null()
424 !> @brief Nudging coefficient for cells
425 !! index1=nproma, index2=nblks_e
426 REAL(wp), POINTER, CONTIGUOUS :: nudgecoeff_e(:,:)
427 !> @brief Indices for stencil of surrounding edges for vector rbf
428 !! interpolation at each triangle edge
429 !! index1=rbf_vec_dim_e(=4), index2=nproma, index3=nblks_e
430 INTEGER(C_INT), POINTER, CONTIGUOUS :: rbf_vec_idx(:,:,:)
431 !> @brief Block-indices for stencil of surrounding edges for vector rbf
432 !! interpolation at each triangle edge
433 !! index1=rbf_vec_dim_e(=4), index2=nproma, index3=nblks_e
434 INTEGER(C_INT), POINTER, CONTIGUOUS :: rbf_vec_blk(:,:,:)
435 !> @brief Number of surrounding edges in the stencil for vector rbf
436 !! interpolation at each triangle edge
437 !! index1=nproma, index2=nblks_e
438 INTEGER(C_INT), POINTER, CONTIGUOUS :: rbf_vec_stencil(:,:)
439 !> @brief Coefficients used for rbf inter- polation of the tangential velocity component
440 !! (from the surrounding normals) at each triangle edge
441 !! index1=rbf_vec_dim_e(=4), index2=nproma, index3=nblks_e
442 REAL(wp), POINTER, CONTIGUOUS :: rbf_vec_coeff(:,:,:)
443 ! @brief Coefficient for interpolation from adjacent cells onto edge
444 ! index1=nproma, index2=2, index3=nblks_e
445 REAL(wp), POINTER, CONTIGUOUS :: c_lin_e(:,:,:)
446 !> @brief Global edge indices
447 !!
448 !! index1=1,nedges
449 INTEGER(C_INT), POINTER, CONTIGUOUS :: glb_index(:) => null()
450 !> @brief Domain decomposition flag for edges
451 !!
452 !! * decomp_domain==0: inner domain
453 !! * decomp_domain>0: boundary
454 !! * decomp_domain<0: undefined
455 !!
456 !! For edges:
457 !! * 0=owned
458 !! * 1=on owned cell
459 !! * 2=exactly one shared vertex with owned cell
460 !! index1=nproma, index2=1,nblks_e
461 INTEGER(C_INT), POINTER, CONTIGUOUS :: decomp_domain(:,:) => null()
463
464 !> Patch grid data structure, gathering information on grids
465 !! @ingroup fortran_interface
467 !> @brief Horizontal grid filename
468 CHARACTER(LEN=:), POINTER :: grid_filename => null()
469 !> @brief Alphanumerical hash of grid
470 INTEGER(c_signed_char), POINTER, CONTIGUOUS :: grid_uuid(:) => null()
471 !> @brief Number of grid used (GRIB2 key)
472 INTEGER(C_INT) :: number_of_grid_used
473 !> @brief Domain ID of current domain
474 INTEGER(C_INT) :: id
475 !> @brief Domain id of parent
476 INTEGER(C_INT) :: parent_id
477 !> @brief IDs for all child domains
478 !!
479 !! index=1,max_dom (usually 10) but only has meaningful data in 1,n_dom
480 INTEGER(C_INT), POINTER :: child_id(:) => null()
481 !> @brief Actual number of child domains
482 INTEGER(C_INT) :: n_childdom
483 !> @brief Time at which execution of a (nested) model domain starts
484 REAL(wp) :: dom_start
485 !> @brief Time at which execution of a (nested) model domain terminates
486 REAL(wp) :: dom_end
487 !> @brief Number of vertical model levels
488 INTEGER(C_INT) :: nlev
489 !> @brief Half level of parent domain that coincides with upper margin of current domain
490 INTEGER(C_INT) :: nshift
491 !> @brief Total shift of model top w.r.t. global domain
492 INTEGER(C_INT) :: nshift_total
493
498
499 !> Simulation status information, sim_current contains current time step
500 !! @ingroup fortran_interface
502 !> @brief Start datetime of experiment
503 CHARACTER(LEN=COMIN_MAX_DATETIME_STR_LEN) :: exp_start
504 !> @brief Stop datetime of experiment
505 CHARACTER(LEN=COMIN_MAX_DATETIME_STR_LEN) :: exp_stop
506 !> @brief Start datetime of current run
507 CHARACTER(LEN=COMIN_MAX_DATETIME_STR_LEN) :: run_start
508 !> @brief Stop datetime of current run
509 CHARACTER(LEN=COMIN_MAX_DATETIME_STR_LEN) :: run_stop
511
512 INTERFACE
513 FUNCTION comin_glb2loc_index_lookup_fct(jg, glb) RESULT(loc) BIND(C)
514 IMPORT c_int
515 INTEGER(C_INT), VALUE :: jg
516 INTEGER(C_INT), VALUE :: glb
517 INTEGER(C_INT) :: loc
519 END INTERFACE
520
521END MODULE comin_descrdata_types
Global data is invariant wrt the computational grid and never changed or updated.
Patch grid data structure, gathering information on grids.
Simulation status information, sim_current contains current time step.
integer, parameter wp
working precision