30 xt_initialize(MPI_COMM_WORLD);
32 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
33 MPI_Comm_size(MPI_COMM_WORLD, &size);
37 PUT_ERR(
"ERROR: wrong number of processes\n");
47 instance,
"2008-03-09T16:05:07",
"2008-03-10T16:05:07");
52 int mapping_side[3][3] = {{-1, 0, 0},
55 for (
size_t src_comp_idx = 0; src_comp_idx < 3; ++src_comp_idx) {
57 sprintf(src_comp_name,
"comp_%zu", src_comp_idx + 1);
59 for (
size_t tgt_comp_idx = 0; tgt_comp_idx < 3; ++tgt_comp_idx) {
61 sprintf(tgt_comp_name,
"comp_%zu", tgt_comp_idx + 1);
63 if (src_comp_idx == tgt_comp_idx)
continue;
65 sprintf(field_name,
"field_from_%zu_to_%zu",
66 src_comp_idx + 1, tgt_comp_idx + 1);
72 mapping_side[src_comp_idx][tgt_comp_idx], 1.0, 0.0, 0, NULL, NULL,
79 char const * local_component_names[2];
81 int comp_idx[3][2] = {{0,1},{0,2},{1,2}};
83 for (
unsigned i = 0;
i < 2; ++
i)
88 for (
unsigned i = 0;
i < 2; ++
i) {
89 MPI_Comm component_comm =
91 instance, &(local_component_names[i]), 1);
92 MPI_Comm_rank(component_comm, comp_ranks + i);
93 MPI_Comm_free(&component_comm);
97 size_t num_vertices[2] = {2,2};
102 yac_int global_corner_ids[2][4];
105 int corner_core_mask[4] = {1,1,1,1};
106 int edge_core_mask[4] = {1,1,1,1};
107 int ref_global_edge_ids[6][4] = {{0,3,13,1},{2,5,14,3},{4,7,15,5},
108 {6,9,16,7},{8,11,17,9},{10,12,18,11}};
110 for (
unsigned i = 0;
i < 2; ++
i) {
111 char grid_name[1024];
112 sprintf(grid_name,
"grid_%d", comp_idx[rank/3][i] + 1);
115 global_cell_ids[
i][0] = comp_ranks[
i];
116 global_corner_ids[
i][0] = comp_ranks[
i] + 0;
117 global_corner_ids[
i][1] = comp_ranks[
i] + 1;
118 global_corner_ids[
i][2] = comp_ranks[
i] + 7;
119 global_corner_ids[
i][3] = comp_ranks[
i] + 8;
120 global_edge_ids[
i][0] = ref_global_edge_ids[comp_ranks[
i]][0];
121 global_edge_ids[
i][1] = ref_global_edge_ids[comp_ranks[
i]][1];
122 global_edge_ids[
i][2] = ref_global_edge_ids[comp_ranks[
i]][2];
123 global_edge_ids[
i][3] = ref_global_edge_ids[comp_ranks[
i]][3];
139 for (
unsigned i = 0;
i < 2; ++
i) {
141 interp_fields[
i].coordinates_idx = 0;
142 interp_fields[
i].masks_idx = SIZE_MAX;
145 char field_name[2][2][2][1024];
147 for (
unsigned i = 0;
i < 2; ++
i) {
148 int curr_comp_idx = comp_idx[
rank/3][
i];
149 for (
unsigned j = 0; j < 2; ++j) {
150 int remote_comp_idx = (3 + curr_comp_idx + j + 1) % 3;
151 sprintf(field_name[i][j][0],
"field_from_%d_to_%d",
152 curr_comp_idx + 1, remote_comp_idx + 1);
153 sprintf(field_name[i][j][1],
"field_from_%d_to_%d",
154 remote_comp_idx + 1, curr_comp_idx + 1);
159 for (
unsigned i = 0;
i < 2; ++
i)
160 for (
unsigned j = 0; j < 2; ++j)
161 for (
unsigned k = 0; k < 2; ++k)
163 instance, field_name[i][j][k], local_component_names[i],
164 grid[i], &interp_fields[i], 1, 1, timestep);
char const * component_names[]
struct yac_basic_grid * yac_basic_grid_new(char const *name, struct yac_basic_grid_data grid_data)
size_t yac_basic_grid_add_coordinates_nocpy(struct yac_basic_grid *grid, enum yac_location location, yac_coordinate_pointer coordinates)
void yac_basic_grid_delete(struct yac_basic_grid *grid)
struct yac_basic_grid_data yac_generate_basic_grid_data_reg_2d_deg(size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices)
char const * yac_time_to_ISO(char const *time, enum yac_time_unit_type time_unit)
void yac_instance_delete(struct yac_instance *instance)
void yac_instance_def_datetime(struct yac_instance *instance, const char *start_datetime, const char *end_datetime)
void yac_instance_setup(struct yac_instance *instance, struct yac_basic_grid **grids, size_t num_grids)
struct yac_instance * yac_instance_new(MPI_Comm comm)
struct coupling_field * yac_instance_add_field(struct yac_instance *instance, char const *field_name, char const *comp_name, struct yac_basic_grid *grid, struct yac_interp_field *interp_fields, size_t num_interp_fields, int collection_size, char const *timestep)
void yac_instance_def_components(struct yac_instance *instance, char const **comp_names, size_t num_comps)
void yac_instance_def_couple(struct yac_instance *instance, char const *src_comp_name, char const *src_grid_name, char const *src_field_name, char const *tgt_comp_name, char const *tgt_grid_name, char const *tgt_field_name, char const *coupling_period, int time_reduction, struct yac_interp_stack_config *interp_stack_config, int src_lag, int tgt_lag, const char *weight_file_name, int weight_file_on_existing, int mapping_on_source, double scale_factor, double scale_summand, size_t num_src_mask_names, char const *const *src_mask_names, char const *tgt_mask_name, char const *yaxt_exchanger_name, struct yac_collection_selection const *collection_selection, int use_raw_exchange)
MPI_Comm yac_instance_get_comps_comm(struct yac_instance *instance, char const **comp_names, size_t num_comp_names)
void yac_interp_stack_config_add_fixed(struct yac_interp_stack_config *interp_stack_config, double value)
void yac_interp_stack_config_delete(struct yac_interp_stack_config *interp_stack_config)
Free an interpolation stack configuration object.
struct yac_interp_stack_config * yac_interp_stack_config_new()
Allocate a new empty interpolation stack configuration object.
#define YAC_WEIGHT_FILE_ON_EXISTING_DEFAULT_VALUE
enum yac_location location
char const src_grid_name[]
char const tgt_grid_name[]
int const YAC_REDUCTION_TIME_ACCUMULATE
void yac_cdef_calendar(int calendar)
int const YAC_PROLEPTIC_GREGORIAN