9#ifdef YAC_NETCDF_ENABLED
19#ifdef YAC_NETCDF_ENABLED
22 for (
int i = 0; i < 2; ++i) {
26 ndims == 1,
"coordinate array has more than one dimension")
30 for (
int i = 0; i < 2; ++i)
34 dimids[0] == dimids[1],
35 "lon lat coordinate arrays have differing dimensions")
45#ifndef YAC_NETCDF_ENABLED
49 die(
"ERROR(yac_check_coord_units): YAC is built without the NetCDF support");
57 int status = nc_inq_att(ncid, varid,
"units", &att_type, &att_len);
59 if (status != NC_ENOTATT) {
63 (att_type == NC_CHAR) && (att_len <= 8),
"invalid units type or len")
65 memset(units, 0, 8 *
sizeof(units[0]));
67 is_degree = !strcmp(units,
"degree");
69 is_degree || !strcmp(units,
"radian"),
"unsupported units type")
75#ifdef YAC_NETCDF_ENABLED
76static double *
read_coord(
int ncid,
int varid,
size_t varlen) {
80 double * coord =
xmalloc(varlen *
sizeof(*coord));
84 if (is_degree)
for (
size_t i = 0; i < varlen; ++i) coord[i] *=
YAC_RAD;
91 int ncid,
char const * lon_name,
char const * lat_name,
92 double ** lon,
double ** lat,
size_t * len) {
94#ifndef YAC_NETCDF_ENABLED
102 die(
"ERROR(yac_read_coords): YAC is built without the NetCDF support");
109 size_t varlen = (*len =
check_dimension(ncid, (
int[]){vlonid, vlatid}));
#define YAC_ASSERT(exp, msg)
void yac_nc_inq_varid(int ncid, char const *name, int *varidp)
static size_t check_dimension(int ncid, int varids[2])
int yac_check_coord_units(int ncid, int varid)
void yac_read_coords(int ncid, char const *lon_name, char const *lat_name, double **lon, double **lat, size_t *len)
static double * read_coord(int ncid, int varid, size_t varlen)
#define YAC_HANDLE_ERROR(exp)