2Test plugin for the ICON Community Interface (ComIn)
4This simple test plugin shows how to use the basic features of
5ComIn analogous to simple_c_plugin and simple_fortran_plugin.
7@authors 11/2023 :: ICON Community Interface <comin@icon-model.org>
9SPDX-License-Identifier: BSD-3-Clause
11Please see the file LICENSE in the root of the source tree for this code.
12Where software is supplied by third parties, it is indicated in the
13headers of the routines.
17import numpy.ma
as npma
19from itertools
import product
21rank = comin.parallel_get_host_mpi_rank()
28 np.asarray(domains[jg - 1].cells.decomp_domain) == 0
29 for jg
in range(1, glob.n_dom + 1)
33 np.full((glob.nproma, domains[jg - 1].cells.nblks),
False)
34 for jg
in range(1, glob.n_dom + 1)
36for jg
in range(1, glob.n_dom + 1):
37 promz_c_masks[jg - 1][comin.descrdata_get_cell_npromz(jg) :, -1] =
True
39dim2comin_zaxis = {2: comin.COMIN_ZAXIS_2D, 3: comin.COMIN_ZAXIS_3D}
42 comin.COMIN_VAR_DATATYPE_DOUBLE,
43 comin.COMIN_VAR_DATATYPE_FLOAT,
44 comin.COMIN_VAR_DATATYPE_INT,
49 (f
"test_var_{dim}D_{dtype}_{sync_mode}", jg),
50 {
"zaxis_id": dim2comin_zaxis[dim],
"datatype": dtype},
53 for dim, dtype, jg, sync_mode
in product(
54 [2, 3], comin_dtypes, range(1, glob.n_dom + 1), [
"after_write",
"before_read"]
58for var_descr, metadata, _
in var_descriptors:
59 comin.var_request_add(var_descr,
False)
63@comin.register_callback(comin.EP_SECONDARY_CONSTRUCTOR)
65 global test_vars_before_sync, test_vars_after_sync
67 test_vars_before_sync = [
69 [comin.EP_ATM_TIMELOOP_START],
71 comin.COMIN_FLAG_WRITE
72 | (comin.COMIN_FLAG_SYNC_HALO
if sm ==
"after_write" else 0),
74 for var_descr, _, sm
in var_descriptors
77 test_vars_after_sync = [
79 [comin.EP_ATM_TIMELOOP_END],
82 | (comin.COMIN_FLAG_SYNC_HALO
if sm ==
"before_read" else 0),
84 for var_descr, _, sm
in var_descriptors
88@comin.register_callback(comin.EP_ATM_TIMELOOP_START)
91 for test_var
in test_vars_before_sync:
92 comin.print_info(f
"Filling {test_var.descriptor}")
93 name, jg = test_var.descriptor
94 if comin.COMIN_DIM_SEMANTICS_LEVEL
in test_var.dim_semantics:
96 owner_masks[jg - 1][:,
None, :], domains[jg - 1].nlev, axis=1
99 mask = owner_masks[jg - 1]
100 test_var_np = np.asarray(test_var)
101 test_var_np[mask] = rank + 1
102 test_var_np[~mask] = -1.0
105@comin.register_callback(comin.EP_ATM_TIMELOOP_END)
107 for test_var
in test_vars_after_sync:
108 comin.print_info(f
"Checking {test_var.descriptor}")
109 name, jg = test_var.descriptor
110 if comin.COMIN_DIM_SEMANTICS_LEVEL
in test_var.dim_semantics:
111 test_var_np = npma.array(
114 promz_c_masks[jg - 1][:,
None, :], domains[jg - 1].nlev, axis=1
118 owner_masks[jg - 1][:,
None, :], domains[jg - 1].nlev, axis=1
121 test_var_np = npma.array(test_var, mask=promz_c_masks[jg - 1])
122 mask = owner_masks[jg - 1]
125 ),
"Invalid value. (Non-owner cell was probably not overwritten."
127 test_var_np[mask] == (rank + 1)
128 ),
"Invaid value. Owner cell was overwritten."
var_get(context, var_descriptor, flag)
get variable object, arguments: [entry point], (name string, domain id), access flag)
metadata_set(var_descriptor, **kwargs)
sets metadata for a requested field, arguments: name string, domain id, metadata key,...
descrdata_get_domain(jg)
returns descriptive data for a given domain, arguments: jg
descrdata_get_global()
returns global descriptive data object
simple_python_constructor()