44 unsigned int major, minor, patch;
52 size_t num_descrs = 0, size_descrs = 8;
56 if (num_descrs == size_descrs) {
58 descrs = realloc(descrs, size_descrs *
sizeof(*descrs));
66 for (
size_t i = 0; i < num_descrs; ++i) {
80 t_comin_entry_point before_output = EP_ATM_WRITE_OUTPUT_BEFORE;
81 pres = comin_var_get(1, &before_output, pres_d, COMIN_FLAG_READ);
87 simple_c_var = comin_var_get(1, &before_output, var_d, COMIN_FLAG_WRITE);
94 comin_var_get(1, &before_output, tracer_d, COMIN_FLAG_WRITE);
99 comin_print_info(
"Metadata:");
102 const char *metadata_keys[32] = {};
109 if (n_keys >=
sizeof(metadata_keys) /
sizeof(metadata_keys[0])) {
111 "Too many metadata items. "
112 "Increase key array size and recompile.");
120 qsort(metadata_keys, n_keys,
sizeof(metadata_keys[0]),
compare_keys);
123 for (
size_t i = 0; i < n_keys; ++i) {
124 const char *
const key = metadata_keys[i];
129 if (type == COMIN_METADATA_TYPEID_INT) {
137 int dim_semantics[5];
138 comin_var_get_dim_semantics(
pres, dim_semantics);
139 if (dim_semantics[0] != COMIN_DIM_SEMANTICS_NPROMA) {
142 if (dim_semantics[1] != COMIN_DIM_SEMANTICS_LEVEL) {
145 if (dim_semantics[2] != COMIN_DIM_SEMANTICS_BLOCK) {
151 comin_print_info(
"simple_c_diagfct called!");
158 "simple_c_diagfct called unexpectedly inside domain loop.");
166 int start_block_f, end_block_f;
167 comin_descrdata_get_cell_block_limits(
jg, start_prog_cells, end_prog_cells,
168 &start_block_f, &end_block_f);
171 comin_var_get_shape(
pres, pres_shape);
179 typedef double(*double_3d)[nlev][nproma];
180 double_3d simple_c_var_data =
182 double_3d pres_data = (double_3d)comin_var_get_ptr_double(
pres);
184 for (
int blk = start_block_f - 1; blk <= end_block_f - 1; ++blk) {
185 int start_cell_f, end_cell_f;
186 comin_descrdata_get_cell_indices(
jg, blk + 1, start_block_f, end_block_f,
187 &start_cell_f, &end_cell_f,
188 start_prog_cells, end_prog_cells);
190 for (
int lev = 0; lev < nlev; ++lev) {
191 for (
int i = start_cell_f - 1; i <= end_cell_f - 1; ++i) {
192 simple_c_var_data[blk][lev][i] = pres_data[blk][lev][i] + 42.;
202 if (0 != memcmp(tracer_shape, pres_shape,
sizeof(pres_shape))) {
204 "simple_c_tracer and pres must have same shape.");
207 double_3d simple_c_tracer_data =
210 for (
int blk = start_block_f - 1; blk <= end_block_f - 1; ++blk) {
211 int start_cell_f, end_cell_f;
212 comin_descrdata_get_cell_indices(
jg, blk + 1, start_block_f, end_block_f,
213 &start_cell_f, &end_cell_f,
214 start_prog_cells, end_prog_cells);
216 for (
int lev = 0; lev < nlev; ++lev) {
217 for (
int i = start_cell_f - 1; i <= end_cell_f - 1; ++i) {
218 simple_c_tracer_data[blk][lev][i] = 1337. / (lev + 1);
234 comin_metadata_set_integer(simple_var_d,
"zaxis_id", COMIN_ZAXIS_3D);
235 comin_metadata_set_logical(simple_var_d,
"restart",
false);
236 comin_metadata_set_logical(simple_var_d,
"tracer",
false);
237 comin_metadata_set_integer(simple_var_d,
"tracer_vlimit", 0);
238 comin_metadata_set_integer(simple_var_d,
"tracer_hlimit", 0);
243 comin_metadata_set_integer(simple_tracer_d,
"zaxis_id", COMIN_ZAXIS_3D);
244 comin_metadata_set_logical(simple_tracer_d,
"restart",
false);
245 comin_metadata_set_logical(simple_tracer_d,
"tracer",
true);
246 comin_metadata_set_integer(simple_tracer_d,
"tracer_vlimit", 0);
247 comin_metadata_set_integer(simple_tracer_d,
"tracer_hlimit", 0);
254 if (strncmp(ep_name,
"EP_DESTRUCTOR", (
size_t)13)) {
256 "Expected EP_DESTRUCTOR; got |%s|", ep_name);