YAC 3.21.0
Yet Another Coupler
Loading...
Searching...
No Matches
grid_reg2d.c
Go to the documentation of this file.
1// Copyright (c) 2024 The YAC Authors
2//
3// SPDX-License-Identifier: BSD-3-Clause
4
6#include "grid_reg2d_common.h"
7#include "geometry.h"
8#include "utils_common.h"
9
11 size_t nbr_vertices[2], int cyclic[2],
12 double *lon_vertices, double *lat_vertices,
13 void (*LLtoXYZ_ptr)(double, double, double[])) {
14
15 YAC_ASSERT(!cyclic[1], "cyclic[1] != 0 not yet supported")
16
17 size_t num_cells_2d[2] =
18 {nbr_vertices[0] - (cyclic[0]?0:1), nbr_vertices[1] - (cyclic[1]?0:1)};
19 size_t num_vertices_2d[2] = {num_cells_2d[0] + (cyclic[0]?0:1), num_cells_2d[1] + 1};
20 size_t num_vertices = num_vertices_2d[0] * num_vertices_2d[1];
21 size_t num_edges =
22 (num_cells_2d[0] + (cyclic[0]?0:1)) * num_cells_2d[1] +
23 num_cells_2d[0] * (num_cells_2d[1] + 1);
24
27 for (size_t i = 0, k = 0; i < num_vertices_2d[1]; ++i) {
28 for (size_t j = 0; j < num_vertices_2d[0]; ++j, ++k) {
29 LLtoXYZ_ptr(lon_vertices[j], lat_vertices[i],
30 &(vertex_coordinates[k][0]));
31 }
32 }
33
35 if (!cyclic[0]) {
36 for (size_t i = 0, k = 0; i < num_cells_2d[1]; ++i) {
37 for (size_t j = 0; j < num_vertices_2d[0]; ++j, k += 2) {
40 }
41 --k;
43 }
44 } else {
45 for (size_t i = 1; i < num_edges; ++i)
47 for (size_t i = 0; i < num_cells_2d[1]; ++i) {
48 edge_type[2*i*num_cells_2d[0]] = YAC_LAT_CIRCLE_EDGE;
49 edge_type[2*(i+1)*num_cells_2d[0]-1] = YAC_LON_CIRCLE_EDGE;
50 }
51 }
52 for (size_t i = num_edges - num_cells_2d[0]; i < num_edges; ++i)
54
55 struct yac_basic_grid_data grid =
57 grid.vertex_coordinates = vertex_coordinates;
58 grid.edge_type = edge_type;
59 return grid;
60}
61
63 size_t nbr_vertices[2], int cyclic[2],
64 double *lon_vertices, double *lat_vertices) {
65
66 return
68 nbr_vertices, cyclic, lon_vertices, lat_vertices, LLtoXYZ);
69}
70
72 size_t nbr_vertices[2], int cyclic[2],
73 double *lon_vertices, double *lat_vertices) {
74
75 return
77 nbr_vertices, cyclic, lon_vertices, lat_vertices, LLtoXYZ_deg);
78}
#define YAC_ASSERT(exp, msg)
static void LLtoXYZ_deg(double lon, double lat, double p_out[])
Definition geometry.h:278
yac_edge_type
Definition grid_cell.h:12
@ YAC_LAT_CIRCLE_EDGE
latitude circle
Definition grid_cell.h:14
@ YAC_LON_CIRCLE_EDGE
longitude circle
Definition grid_cell.h:15
struct yac_basic_grid_data yac_generate_basic_grid_data_reg_2d(size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices)
Definition grid_reg2d.c:62
static struct yac_basic_grid_data yac_generate_basic_grid_data_reg_2d_(size_t nbr_vertices[2], int cyclic[2], double *lon_vertices, double *lat_vertices, void(*LLtoXYZ_ptr)(double, double, double[]))
Definition grid_reg2d.c:10
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)
Definition grid_reg2d.c:71
struct yac_basic_grid_data yac_generate_basic_grid_data_reg2d_common(size_t nbr_vertices[2], int cyclic[2])
#define xmalloc(size)
Definition ppm_xfuncs.h:66
yac_coordinate_pointer vertex_coordinates
enum yac_edge_type * edge_type
unsigned cyclic[2]
static void LLtoXYZ(double lon, double lat, double p_out[])
Definition toy_scrip.c:587
double(* yac_coordinate_pointer)[3]
Definition yac_types.h:21