19int vertex_of_cell[3][16] = {{1,2,6,7,10,11,13,11,8,7,3,2,3,4,4,8},
20 {2,6,7,10,11,13,14,12,11,8,7,3,4,5,8,9},
21 {6,7,10,11,13,14,15,14,12,11,8,7,8,9,9,12}};
22int edge_of_cell[3][16] = {{1,4,13,16,22,25,28,24,19,15,7,3,6,9,10,18},
23 {4,13,16,22,25,28,30,27,24,19,15,7,10,12,18,21},
24 {2,5,14,17,23,26,29,26,20,17,8,5,8,11,11,20}};
25int cells_of_vertex[6][15] = {{1, 1,11,13,14,1, 2, 9,14,3, 4, 8,5,6,7},
26 {0, 2,12,14, 0,2, 3,10,15,4, 5, 9,6,7,0},
27 {0,12,13,15, 0,3, 4,11,16,5, 6,16,7,8,0},
28 {0, 0, 0, 0, 0,0,10,13, 0,0, 8, 0,0,0,0},
29 {0, 0, 0, 0, 0,0,11,15, 0,0, 9, 0,0,0,0},
30 {0, 0, 0, 0, 0,0,12,16, 0,0,10, 0,0,0,0}};
31int vertex_of_edge[2][30] = {{1,1,2,2,2,3,3,3,4,4,4,5, 6,6,7,7,7,8,8,8,9, 10,10,11,11,11,12, 13,13,14},
32 {2,6,3,6,7,4,7,8,5,8,9,9, 7,10,8,10,11,9,11,12,12, 11,13,12,13,14,14, 14,15,15}};
67 int dim_cell_id, dim_vertex_id, dim_edge_id, dim_nv_id, dim_ne_id, dim_nc_id;
78 int var_vlon_id, var_vlat_id, var_clon_id, var_clat_id, var_mask_id,
79 var_v2c_id, var_c2v_id, var_c2e_id, var_v2e_id;
90 YAC_HANDLE_ERROR(nc_def_var(ncid,
"cell_sea_land_mask", NC_INT, 1, &dim_cell_id,
98 ncid,
"vertex_of_cell", NC_INT, 2, (
int[]){dim_nv_id, dim_cell_id},
102 ncid,
"edge_of_cell", NC_INT, 2, (
int[]){dim_nv_id, dim_cell_id},
106 ncid,
"cells_of_vertex", NC_INT, 2, (
int[]){dim_ne_id, dim_vertex_id},
110 ncid,
"edge_vertices", NC_INT, 2, (
int[]){dim_nc_id, dim_edge_id},
142 char * grid_name,
char * grid_filename,
char * mask_filename,
143 int with_corners,
size_t num_lon,
size_t num_lat,
144 double lon_range[2],
double lat_range[2]) {
146#ifndef YAC_NETCDF_ENABLED
155 die(
"ERROR(write_dummy_grid_file): YAC is built without the NetCDF support");
164 char crn_dim_name[128];
165 char x_dim_name[128];
166 char y_dim_name[128];
168 sprintf(crn_dim_name,
"crn_%s", grid_name);
169 sprintf(x_dim_name,
"x_%s", grid_name);
170 sprintf(y_dim_name,
"y_%s", grid_name);
182 char cla_var_name[128];
183 char clo_var_name[128];
184 char lat_var_name[128];
185 char lon_var_name[128];
187 sprintf(cla_var_name,
"%s.cla", grid_name);
188 sprintf(clo_var_name,
"%s.clo", grid_name);
189 sprintf(lat_var_name,
"%s.lat", grid_name);
190 sprintf(lon_var_name,
"%s.lon", grid_name);
192 int corner_dim_ids[3] = {dim_crn_id, dim_y_id, dim_x_id};
193 int cell_dim_ids[2] = {dim_y_id, dim_x_id};
200 char degree[] =
"degree";
201 char title[] =
"This is a reg lon-lat dummy grid";
207 ncid, cla_var_name, NC_DOUBLE, 3, corner_dim_ids, &var_cla_id));
209 nc_put_att_text(ncid, var_cla_id,
"units", strlen(degree), degree));
211 nc_put_att_text(ncid, var_cla_id,
"title", strlen(title), title));
215 ncid, clo_var_name, NC_DOUBLE, 3, corner_dim_ids, &var_clo_id));
217 nc_put_att_text(ncid, var_clo_id,
"units", strlen(degree), degree));
219 nc_put_att_text(ncid, var_clo_id,
"title", strlen(title), title));
224 ncid, lat_var_name, NC_DOUBLE, 2, cell_dim_ids, &var_lat_id));
226 nc_put_att_text(ncid, var_lat_id,
"units", strlen(degree), degree));
228 nc_put_att_text(ncid, var_lat_id,
"title", strlen(title), title));
232 ncid, lon_var_name, NC_DOUBLE, 2, cell_dim_ids, &var_lon_id));
234 nc_put_att_text(ncid, var_lon_id,
"units", strlen(degree), degree));
236 nc_put_att_text(ncid, var_lon_id,
"title", strlen(title), title));
244 double cla[4][num_lat][num_lon];
245 double clo[4][num_lat][num_lon];
246 double lat[num_lat][num_lon];
247 double lon[num_lat][num_lon];
249 for (
size_t i = 0; i < num_lon; ++i) {
250 double vertex_lon[2] =
251 {((lon_range[1] - lon_range[0]) * (
double)i)/(
double)num_lon,
252 ((lon_range[1] - lon_range[0]) * (
double)(i+1))/(double)num_lon};
253 for (
size_t j = 0; j < num_lat; ++j) {
254 double vertex_lat[2] =
255 {((lat_range[1] - lat_range[0]) * (
double)j)/(
double)num_lat,
256 ((lat_range[1] - lat_range[0]) * (
double)(j+1))/(double)num_lat};
257 cla[0][j][i] = lat_range[0] + vertex_lat[0];
258 cla[1][j][i] = lat_range[0] + vertex_lat[0];
259 cla[2][j][i] = lat_range[0] + vertex_lat[1];
260 cla[3][j][i] = lat_range[0] + vertex_lat[1];
261 clo[0][j][i] = lon_range[0] + vertex_lon[0];
262 clo[1][j][i] = lon_range[0] + vertex_lon[1];
263 clo[2][j][i] = lon_range[0] + vertex_lon[1];
264 clo[3][j][i] = lon_range[0] + vertex_lon[0];
265 lat[j][i] = lat_range[0] + (vertex_lat[0] + vertex_lat[1]) * 0.5;
266 lon[j][i] = lon_range[0] + (vertex_lon[0] + vertex_lon[1]) * 0.5;
287 char x_dim_name[128];
288 char y_dim_name[128];
290 sprintf(x_dim_name,
"x_%s", grid_name);
291 sprintf(y_dim_name,
"y_%s", grid_name);
300 char frc_var_name[128];
301 char msk_var_name[128];
303 sprintf(frc_var_name,
"%s.frc", grid_name);
304 sprintf(msk_var_name,
"%s.msk", grid_name);
306 int dim_ids[2] = {dim_y_id, dim_x_id};
311 char adim[] =
"adim";
316 ncid, frc_var_name, NC_DOUBLE, 2, dim_ids, &var_frc_id));
318 nc_put_att_text(ncid, var_frc_id,
"units", strlen(adim), adim));
322 ncid, msk_var_name, NC_INT, 2, dim_ids, &var_msk_id));
324 nc_put_att_text(ncid, var_msk_id,
"units", strlen(adim), adim));
332 double frc[num_lat][num_lon];
333 int msk[num_lat][num_lon];
335 for (
size_t i = 0; i < num_lon; ++i) {
336 for (
size_t j = 0; j < num_lat; ++j) {