From 7ad2b632334dd041c6b50b2f5741f8fc92e56137 Mon Sep 17 00:00:00 2001 From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de> Date: Sat, 23 Nov 2024 11:21:13 +0100 Subject: [PATCH] Added function find_dimtypes() --- src/stream_cdf_i.c | 59 +++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/src/stream_cdf_i.c b/src/stream_cdf_i.c index 67a210971..748939062 100644 --- a/src/stream_cdf_i.c +++ b/src/stream_cdf_i.c @@ -1702,6 +1702,31 @@ verify_vars_attr(int nvars, ncvar_t *ncvars, ncdim_t *ncdims) } } +static void +find_dimtypes(ncvar_t *ncvars, ncvar_t *ncvar, bool *plxdim, bool *plydim, bool *plzdim, int *plcdim) +{ + bool lxdim = false, lydim = false, lzdim = false /*, ltdim = false */; + int lcdim = 0; + int ndims = ncvar->ndims; + for (int i = 0; i < ndims; i++) + { + int dimtype = ncvar->dimtypes[i]; + lxdim |= (dimtype == X_AXIS); + lydim |= (dimtype == Y_AXIS); + lzdim |= (dimtype == Z_AXIS); + if (ncvar->cvarids[i] != CDI_UNDEFID) lcdim++; + // ltdim |= (dimtype == T_AXIS); + } + + if (!lxdim && ncvar->xvarid != CDI_UNDEFID && ncvars[ncvar->xvarid].ndims == 0) lxdim = true; + if (!lydim && ncvar->yvarid != CDI_UNDEFID && ncvars[ncvar->yvarid].ndims == 0) lydim = true; + + *plxdim = lxdim; + *plydim = lydim; + *plzdim = lzdim; + *plcdim = lcdim; +} + static void cdf_set_dimtype(int nvars, ncvar_t *ncvars, ncdim_t *ncdims) { @@ -1733,22 +1758,10 @@ cdf_set_dimtype(int nvars, ncvar_t *ncvars, ncdim_t *ncdims) if (ncvar->varStatus == DataVar) { bool lxdim = false, lydim = false, lzdim = false /* , ltdim = false */; - int lcdim = 0; - int ndims = ncvar->ndims; - for (int i = 0; i < ndims; i++) - { - int dimtype = ncvar->dimtypes[i]; - lxdim |= (dimtype == X_AXIS); - lydim |= (dimtype == Y_AXIS); - lzdim |= (dimtype == Z_AXIS); - if (ncvar->cvarids[i] != CDI_UNDEFID) lcdim++; - // ltdim |= (dimtype == T_AXIS); - } - + int lcdim; + find_dimtypes(ncvars, ncvar, &lxdim, &lydim, &lzdim, &lcdim); int allcdims = lcdim; - - if (!lxdim && ncvar->xvarid != CDI_UNDEFID && ncvars[ncvar->xvarid].ndims == 0) lxdim = true; - if (!lydim && ncvar->yvarid != CDI_UNDEFID && ncvars[ncvar->yvarid].ndims == 0) lydim = true; + int ndims = ncvar->ndims; if (lxdim && (lydim || ncvar->gridtype == GRID_UNSTRUCTURED)) for (int i = ndims - 1; i >= 0; i--) @@ -1796,21 +1809,9 @@ cdf_set_dimtype(int nvars, ncvar_t *ncvars, ncdim_t *ncdims) { bool lxdim = false, lydim = false, lzdim = false /*, ltdim = false */; int lcdim = 0; - int ndims = ncvar->ndims; - for (int i = 0; i < ndims; i++) - { - int dimtype = ncvar->dimtypes[i]; - lxdim |= (dimtype == X_AXIS); - lydim |= (dimtype == Y_AXIS); - lzdim |= (dimtype == Z_AXIS); - if (ncvar->cvarids[i] != CDI_UNDEFID) lcdim++; - // ltdim |= (dimtype == T_AXIS); - } - + find_dimtypes(ncvars, ncvar, &lxdim, &lydim, &lzdim, &lcdim); int allcdims = lcdim; - - if (!lxdim && ncvar->xvarid != CDI_UNDEFID && ncvars[ncvar->xvarid].ndims == 0) lxdim = true; - if (!lydim && ncvar->yvarid != CDI_UNDEFID && ncvars[ncvar->yvarid].ndims == 0) lydim = true; + int ndims = ncvar->ndims; // if ( ndims > 1 ) for (int i = ndims - 1; i >= 0; i--) -- GitLab