24#define DUMMY_GRID_NAME ("dummy_grid")
30 int comm_size, comm_rank;
32 MPI_Comm_size(MPI_COMM_WORLD, &comm_size);
33 MPI_Comm_rank(MPI_COMM_WORLD, &comm_rank);
35 if ((comm_size != 4) && (comm_rank == 0)) {
36 fputs(
"wrong number of processes (has to be four)\n", stderr);
40#ifdef HAVE_OASIS_FILES
41 char * grid_filename =
"../examples/OASIS-grid/grids.nc";
42 char * mask_filename =
"../examples/OASIS-grid/masks_no_atm.nc";
44 char * grid_filename =
"test_read_scrip_parallel_c_grids.nc";
45 char * mask_filename =
"test_read_scrip_parallel_c_masks.nc";
49 360, 180, (
double[]){0.0,360.0}, (
double[]){-90.0, 90.0});
50 MPI_Barrier(MPI_COMM_WORLD);
53 int valid_mask_value = 0;
59#ifdef HAVE_OASIS_FILES
64 char * gridname =
"sse7";
71 size_t * duplicated_cell_idx = NULL;
72 yac_int * orig_cell_global_ids = NULL;
73 size_t nbr_duplicated_cells = 0;
75 size_t cell_coord_idx;
79 for (
int reader_idx = 0; reader_idx < 2; ++reader_idx) {
86 grid_filename, mask_filename, MPI_COMM_WORLD,
87 gridname, valid_mask_value, gridname,
88 0, &cell_coord_idx, &duplicated_cell_idx,
89 &orig_cell_global_ids, &nbr_duplicated_cells);
94 grid_filename, mask_filename, MPI_COMM_WORLD,
95 gridname, valid_mask_value, gridname,
96 0, &cell_coord_idx, &duplicated_cell_idx,
97 &orig_cell_global_ids, &nbr_duplicated_cells, &point_location);
99 PUT_ERR(
"error in yac_read_scrip_generic_basic_grid_parallel")
102 free(duplicated_cell_idx);
103 free(orig_cell_global_ids);
105#ifdef WRITE_VTK_GRID_FILE
106 char vtk_gridname[64];
107 snprintf(vtk_gridname,
sizeof(vtk_gridname),
"%s_%d", gridname, comm_rank);
117#ifdef HAVE_OASIS_FILES
123 char * gridname =
"torc";
132 grid_filename, mask_filename, MPI_COMM_WORLD,
133 gridname, valid_mask_value, gridname,
134 1, NULL, NULL, NULL, NULL);
136#ifdef WRITE_VTK_GRID_FILE
137 char vtk_gridname[64];
139 vtk_gridname,
sizeof(vtk_gridname),
"%s_ll_%d", gridname, comm_rank);
149 enum {NUM_LAT = 181, NUM_LON = 380};
152 char * grid_filename =
"test_read_scrip_cloud_parallel_c_grids.nc";
153 char * mask_filename =
"test_read_scrip_cloud_parallel_c_masks.nc";
157 NUM_LON, NUM_LAT, (
double[]){0.0, 380.0}, (
double[]){-90.0, 90.0});
158 MPI_Barrier(MPI_COMM_WORLD);
160 setenv(
"YAC_IO_RANK_LIST",
"0,1,2,3", 1);
161 setenv(
"YAC_IO_MAX_NUM_RANKS_PER_NODE",
"4", 1);
163 for (
int reader_idx = 0; reader_idx < 2; ++reader_idx) {
165 size_t vertex_coord_idx;
166 size_t * duplicated_vertex_idx;
167 yac_int * orig_vertex_global_ids;
168 size_t nbr_duplicated_vertices;
176 &orig_vertex_global_ids, &nbr_duplicated_vertices);
183 &orig_vertex_global_ids, &nbr_duplicated_vertices, &point_location);
185 PUT_ERR(
"error in yac_read_scrip_generic_basic_grid_parallel");
188#ifdef WRITE_VTK_GRID_FILE
189 char vtk_gridname[64];
191 vtk_gridname,
sizeof(vtk_gridname),
"%s_%d",
"scrip_cloud", comm_rank);
201 if (scrip_cloud_grid_data->
num_cells != 0)
202 PUT_ERR(
"wrong number of cells");
204 int local_num_vertices = (int)scrip_cloud_grid_data->
num_vertices;
205 int local_num_unique_vertices =
206 local_num_vertices - (int)nbr_duplicated_vertices;
207 int global_num_vertices, global_num_unique_vertices;
209 &local_num_vertices, &global_num_vertices, 1,
210 MPI_INT, MPI_SUM, MPI_COMM_WORLD);
212 &local_num_unique_vertices, &global_num_unique_vertices, 1,
213 MPI_INT, MPI_SUM, MPI_COMM_WORLD);
214 if (global_num_vertices != NUM_LAT * NUM_LON)
215 PUT_ERR(
"wrong global number of vertices");
216 if (global_num_unique_vertices != 181 * 360)
217 PUT_ERR(
"wrong global number of unique vertices");
219 if (scrip_cloud_grid_data->
num_edges != 0)
220 PUT_ERR(
"wrong number of edges");
222 free(duplicated_vertex_idx);
223 free(orig_vertex_global_ids);
230 MPI_Barrier(MPI_COMM_WORLD);
231 if (comm_rank == 0) {
232 unlink(grid_filename);
233 unlink(mask_filename);
237#ifndef HAVE_OASIS_FILES
238 MPI_Barrier(MPI_COMM_WORLD);
239 if (comm_rank == 0) {
240 unlink(grid_filename);
241 unlink(mask_filename);
struct yac_basic_grid_data * yac_basic_grid_get_data(struct yac_basic_grid *grid)
char const * yac_basic_grid_get_name(struct yac_basic_grid *grid)
void yac_basic_grid_delete(struct yac_basic_grid *grid)
void yac_write_basic_grid_to_file(struct yac_basic_grid *grid, char const *name)
void write_dummy_scrip_grid_file(char *grid_name, char *grid_filename, char *mask_filename, int with_corners, size_t num_lon, size_t num_lat, double lon_range[2], double lat_range[2])
int yac_file_exists(const char *filename)
struct yac_basic_grid * yac_read_scrip_basic_grid_parallel(char const *grid_filename, char const *mask_filename, MPI_Comm comm, char const *grid_name, int valid_mask_value, char const *name, int use_ll_edges, size_t *cell_coord_idx, size_t **duplicated_cell_idx, yac_int **orig_cell_global_ids, size_t *nbr_duplicated_cells)
struct yac_basic_grid * yac_read_scrip_cloud_basic_grid_parallel(char const *grid_filename, char const *mask_filename, MPI_Comm comm, char const *grid_name, int valid_mask_value, char const *name, size_t *vertex_coord_idx, size_t **duplicated_vertex_idx, yac_int **orig_vertex_global_ids, size_t *nbr_duplicated_vertices)
struct yac_basic_grid * yac_read_scrip_generic_basic_grid_parallel(char const *grid_filename, char const *mask_filename, MPI_Comm comm, char const *grid_name, int valid_mask_value, char const *name, int use_ll_edges, size_t *point_coord_idx, size_t **duplicated_point_idx, yac_int **orig_point_global_ids, size_t *nbr_duplicated_points, int *point_location)
void set_even_io_rank_list(MPI_Comm comm)