Commit 384bfcac authored by Uwe Schulzweida's avatar Uwe Schulzweida
Browse files

Replaced cdiGridInqKeyStr() by cdiInqKeyString() for CDI_KEY_DIMNAME.

parent 017d99d7
......@@ -832,12 +832,8 @@ int cdiInqKeyLen(int cdiID, int varID, int key, int *length);
int cdiCopyKeys(int cdiID1, int varID1, int cdiID2, int varID2);
// CDI grid keys
#define CDI_KEY_XNAME 901 // X-axis name
#define CDI_KEY_XDIMNAME 902 // X-axis dimension name
#define CDI_KEY_XLONGNAME 903 // X-axis longname
#define CDI_KEY_XUNITS 904 // X-axis units
#define CDI_KEY_YNAME 911 // Y-axis name
#define CDI_KEY_YDIMNAME 912 // Y-axis dimension name
#define CDI_KEY_YLONGNAME 913 // Y-axis longname
#define CDI_KEY_YUNITS 914 // Y-axis units
#define CDI_KEY_VDIMNAME 920 // Vertex dimension name
......@@ -846,8 +842,8 @@ int cdiCopyKeys(int cdiID1, int varID1, int cdiID2, int varID2);
#define CDI_KEY_GRIDMAP_NAME 923 // Grid mapping name
// CDI zaxis keys
#define CDI_KEY_NAME 941 // Z-axis name
#define CDI_KEY_DIMNAME 942 // Z-axis dimension name
#define CDI_KEY_NAME 941 // Variable name
#define CDI_KEY_DIMNAME 942 // Dimension name
#define CDI_KEY_LONGNAME 943 // Z-axis longname
#define CDI_KEY_UNITS 944 // Z-axis units
#define CDI_KEY_PSNAME 950 // Z-axis surface pressure name
......
......@@ -4,7 +4,7 @@
!
! Author:
! -------
! Uwe Schulzweida, MPI-MET, Hamburg, October 2019
! Uwe Schulzweida, MPI-MET, Hamburg, November 2019
!
INTEGER CDI_MAX_NAME
......@@ -13,6 +13,10 @@
PARAMETER (CDI_UNDEFID = -1)
INTEGER CDI_GLOBAL
PARAMETER (CDI_GLOBAL = -1)
INTEGER CDI_XAXIS
PARAMETER (CDI_XAXIS = 1)
INTEGER CDI_YAXIS
PARAMETER (CDI_YAXIS = 2)
!
! Byte order
!
......@@ -1604,6 +1608,8 @@
PARAMETER (CDI_KEY_UVRELATIVETOGRID = 821)
INTEGER CDI_KEY_CONSTITUENTTYPE
PARAMETER (CDI_KEY_CONSTITUENTTYPE = 822)
INTEGER CDI_KEY_TYPEOFTIMEINCREMENT
PARAMETER (CDI_KEY_TYPEOFTIMEINCREMENT = 823)
INTEGER cdiDefKeyInt
! (INTEGER cdiID,
! INTEGER varID,
......@@ -1650,28 +1656,22 @@
!
! CDI grid keys
!
INTEGER CDI_KEY_XNAME
PARAMETER (CDI_KEY_XNAME = 901)
INTEGER CDI_KEY_XDIMNAME
PARAMETER (CDI_KEY_XDIMNAME = 902)
INTEGER CDI_KEY_XLONGNAME
PARAMETER (CDI_KEY_XLONGNAME = 903)
INTEGER CDI_KEY_XUNITS
PARAMETER (CDI_KEY_XUNITS = 904)
INTEGER CDI_KEY_YNAME
PARAMETER (CDI_KEY_YNAME = 911)
INTEGER CDI_KEY_YDIMNAME
PARAMETER (CDI_KEY_YDIMNAME = 912)
INTEGER CDI_KEY_YLONGNAME
PARAMETER (CDI_KEY_YLONGNAME = 913)
INTEGER CDI_KEY_YUNITS
PARAMETER (CDI_KEY_YUNITS = 914)
INTEGER CDI_KEY_VDIMNAME
PARAMETER (CDI_KEY_VDIMNAME = 920)
INTEGER CDI_KEY_MAPPING
PARAMETER (CDI_KEY_MAPPING = 921)
INTEGER CDI_KEY_MAPNAME
PARAMETER (CDI_KEY_MAPNAME = 922)
INTEGER CDI_KEY_GRIDMAP_VARTYPE
PARAMETER (CDI_KEY_GRIDMAP_VARTYPE = 921)
INTEGER CDI_KEY_GRIDMAP_VARNAME
PARAMETER (CDI_KEY_GRIDMAP_VARNAME = 922)
INTEGER CDI_KEY_GRIDMAP_NAME
PARAMETER (CDI_KEY_GRIDMAP_NAME = 923)
!
! CDI zaxis keys
!
......
......@@ -145,16 +145,38 @@ void cdiDeleteVarKeys(cdi_keys_t *keysp)
}
int cdiDeleteKeys(int cdiID, int varID)
void cdiDeleteKeys(int cdiID, int varID)
{
int status = CDI_NOERR;
cdi_keys_t *keysp = cdi_get_keysp(cdiID, varID);
xassert(keysp != NULL);
cdiDeleteVarKeys(keysp);
}
return status;
void cdiPrintVarKeys(cdi_keys_t *keysp)
{
for ( int keyid = 0; keyid < (int)keysp->nelems; keyid++ )
{
cdi_key_t *keyp = &(keysp->value[keyid]);
if (keyp->type == KEY_BYTES)
{
printf("%d key %d length %d value %s\n", keyid+1, keyp->key, keyp->length, keyp->v.s);
}
else if (keyp->type == KEY_INT)
{
printf("%d key %d value %d\n", keyid+1, keyp->key, keyp->v.i);
}
}
}
void cdiPrintKeys(int cdiID, int varID)
{
cdi_keys_t *keysp = cdi_get_keysp(cdiID, varID);
xassert(keysp != NULL);
cdiPrintVarKeys(keysp);
}
// cdiInqKeyLen: Get the length of the string representation of the key
......@@ -375,6 +397,8 @@ int cdiInqKeyString(int cdiID, int varID, int key, char *string, int *length)
int status = cdiInqKeyBytes(cdiID, varID, key, (unsigned char *) string, length);
if (status != CDI_NOERR) length = 0;
return status;
}
......
......@@ -31,7 +31,8 @@ const char *cdiInqVarKeyStringPtr(cdi_keys_t *keysp, int key);
void cdiCopyVarKeys(cdi_keys_t *keysp, int cdiID2, int varID2);
void cdiDeleteVarKeys(cdi_keys_t *keysp);
int cdiDeleteKeys(int cdiID, int varID);
void cdiDeleteKeys(int cdiID, int varID);
void cdiPrintKeys(int cdiID, int varID);
#endif
......
......@@ -126,7 +126,6 @@ void grid_axis_init(struct gridaxis_t *axisptr)
axisptr->clength = 0;
axisptr->cvals = NULL;
#endif
axisptr->dimname[0] = 0;
axisptr->longname[0] = 0;
axisptr->units[0] = 0;
axisptr->stdname = NULL;
......@@ -642,8 +641,6 @@ void *grid_key_to_ptr(grid_t *gridptr, int key)
case CDI_KEY_XUNITS: keyptr = (void*)gridptr->x.units; break;
case CDI_KEY_YLONGNAME: keyptr = (void*)gridptr->y.longname; break;
case CDI_KEY_YUNITS: keyptr = (void*)gridptr->y.units; break;
case CDI_KEY_XDIMNAME: keyptr = (void*)gridptr->x.dimname; break;
case CDI_KEY_YDIMNAME: keyptr = (void*)gridptr->y.dimname; break;
}
return keyptr;
......@@ -1017,8 +1014,10 @@ void gridDefProj(int gridID, int projID)
if ( gridptr->type == GRID_CURVILINEAR )
{
grid_t *projptr = grid_to_pointer(projID);
if (find_key(&projptr->x.keys, CDI_KEY_NAME)) cdiDefKeyString(projID, CDI_XAXIS, CDI_KEY_NAME, gridptr->x.dimname);
if (find_key(&projptr->y.keys, CDI_KEY_NAME)) cdiDefKeyString(projID, CDI_YAXIS, CDI_KEY_NAME, gridptr->y.dimname);
const char *xdimname = cdiInqVarKeyStringPtr(&gridptr->x.keys, CDI_KEY_DIMNAME);
const char *ydimname = cdiInqVarKeyStringPtr(&gridptr->y.keys, CDI_KEY_DIMNAME);
if (xdimname && find_key(&projptr->x.keys, CDI_KEY_NAME)) cdiDefKeyString(projID, CDI_XAXIS, CDI_KEY_NAME, xdimname);
if (ydimname && find_key(&projptr->y.keys, CDI_KEY_NAME)) cdiDefKeyString(projID, CDI_YAXIS, CDI_KEY_NAME, ydimname);
}
}
......@@ -3468,7 +3467,8 @@ void gridPrintKernel(int gridID, int opt, FILE *fp)
int length = CDI_MAX_NAME;
cdiInqKeyString(gridID, CDI_XAXIS, CDI_KEY_NAME, attstr, &length);
if ( attstr[0] ) fprintf(fp, "xname = %s\n", attstr);
attstr2[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_XDIMNAME, CDI_MAX_NAME, attstr2);
length = CDI_MAX_NAME;
cdiInqKeyString(gridID, CDI_XAXIS, CDI_KEY_DIMNAME, attstr2, &length);
if ( attstr2[0] && strcmp(attstr, attstr2) ) fprintf(fp, "xdimname = %s\n", attstr2);
attstr[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_XLONGNAME, CDI_MAX_NAME, attstr);
if ( attstr[0] ) fprintf(fp, "xlongname = %s\n", attstr);
......@@ -3481,7 +3481,8 @@ void gridPrintKernel(int gridID, int opt, FILE *fp)
int length = CDI_MAX_NAME;
cdiInqKeyString(gridID, CDI_YAXIS, CDI_KEY_NAME, attstr, &length);
if ( attstr[0] ) fprintf(fp, "yname = %s\n", attstr);
attstr2[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_YDIMNAME, CDI_MAX_NAME, attstr2);
length = CDI_MAX_NAME;
cdiInqKeyString(gridID, CDI_YAXIS, CDI_KEY_DIMNAME, attstr2, &length);
if ( attstr2[0] && strcmp(attstr, attstr2) ) fprintf(fp, "ydimname = %s\n", attstr2);
attstr[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_YLONGNAME, CDI_MAX_NAME, attstr);
if ( attstr[0] ) fprintf(fp, "ylongname = %s\n", attstr);
......@@ -4348,8 +4349,7 @@ static int gridGetComponentFlags(const grid_t * gridP)
return flags;
}
#define GRID_STR_SERIALIZE(gridP) { gridP->x.dimname, gridP->y.dimname, \
gridP->x.longname, gridP->y.longname, \
#define GRID_STR_SERIALIZE(gridP) { gridP->x.longname, gridP->y.longname, \
gridP->x.units, gridP->y.units }
static int
......
......@@ -64,7 +64,6 @@ struct gridVirtTable
struct gridaxis_t {
char longname[CDI_MAX_NAME];
char units[CDI_MAX_NAME];
char dimname[CDI_MAX_NAME];
const char *stdname;
size_t size; // number of values
short flag; // 0: undefined 1:vals 2:first+inc
......
......@@ -25,6 +25,8 @@ module mo_cdi
integer(c_int), public, parameter :: CDI_MAX_NAME = 256
integer(c_int), public, parameter :: CDI_UNDEFID = -1
integer(c_int), public, parameter :: CDI_GLOBAL = -1
integer(c_int), public, parameter :: CDI_XAXIS = 1
integer(c_int), public, parameter :: CDI_YAXIS = 2
integer(c_int), public, parameter :: CDI_BIGENDIAN = 0
integer(c_int), public, parameter :: CDI_LITTLEENDIAN = 1
integer(c_int), public, parameter :: CDI_PDPENDIAN = 2
......@@ -478,6 +480,7 @@ module mo_cdi
integer(c_int), public, parameter :: CDI_KEY_SECTION2PADDING = 820
integer(c_int), public, parameter :: CDI_KEY_UVRELATIVETOGRID = 821
integer(c_int), public, parameter :: CDI_KEY_CONSTITUENTTYPE = 822
integer(c_int), public, parameter :: CDI_KEY_TYPEOFTIMEINCREMENT = 823
public :: cdiDefKeyInt
public :: cdiInqKeyInt
public :: cdiDefKeyBytes
......@@ -486,17 +489,14 @@ module mo_cdi
public :: cdiInqKeyString
public :: cdiInqKeyLen
public :: cdiCopyKeys
integer(c_int), public, parameter :: CDI_KEY_XNAME = 901
integer(c_int), public, parameter :: CDI_KEY_XDIMNAME = 902
integer(c_int), public, parameter :: CDI_KEY_XLONGNAME = 903
integer(c_int), public, parameter :: CDI_KEY_XUNITS = 904
integer(c_int), public, parameter :: CDI_KEY_YNAME = 911
integer(c_int), public, parameter :: CDI_KEY_YDIMNAME = 912
integer(c_int), public, parameter :: CDI_KEY_YLONGNAME = 913
integer(c_int), public, parameter :: CDI_KEY_YUNITS = 914
integer(c_int), public, parameter :: CDI_KEY_VDIMNAME = 920
integer(c_int), public, parameter :: CDI_KEY_GRIDMAP_VARNAME = 921
integer(c_int), public, parameter :: CDI_KEY_GRIDMAP_NAME = 922
integer(c_int), public, parameter :: CDI_KEY_GRIDMAP_VARTYPE = 921
integer(c_int), public, parameter :: CDI_KEY_GRIDMAP_VARNAME = 922
integer(c_int), public, parameter :: CDI_KEY_GRIDMAP_NAME = 923
integer(c_int), public, parameter :: CDI_KEY_NAME = 941
integer(c_int), public, parameter :: CDI_KEY_DIMNAME = 942
integer(c_int), public, parameter :: CDI_KEY_LONGNAME = 943
......
......@@ -2796,8 +2796,8 @@ int cdf_define_all_grids(ncgrid_t *ncgrid, int vlistID, ncdim_t *ncdims, int nva
if ( xdimid == CDI_UNDEFID && ydimid == CDI_UNDEFID && grid->size == 1 )
gridDefHasDims(gridID, FALSE);
if ( xdimid != CDI_UNDEFID ) cdiGridDefKeyStr(gridID, CDI_KEY_XDIMNAME, (int)(strlen(ncdims[xdimid].name)+1), ncdims[xdimid].name);
if ( ydimid != CDI_UNDEFID ) cdiGridDefKeyStr(gridID, CDI_KEY_YDIMNAME, (int)(strlen(ncdims[ydimid].name)+1), ncdims[ydimid].name);
if ( xdimid != CDI_UNDEFID ) cdiDefKeyString(gridID, CDI_XAXIS, CDI_KEY_DIMNAME, ncdims[xdimid].name);
if ( ydimid != CDI_UNDEFID ) cdiDefKeyString(gridID, CDI_YAXIS, CDI_KEY_DIMNAME, ncdims[ydimid].name);
if ( vdimid != CDI_UNDEFID ) cdiDefKeyString(gridID, CDI_GLOBAL, CDI_KEY_VDIMNAME, ncdims[vdimid].name);
if ( CDI_Debug ) Message("gridID %d %d %s", gridID, ncvarid, ncvar->name);
......
......@@ -224,7 +224,7 @@ void cdfDefFC(stream_t *streamptr, int gridID, int gridindex)
static const struct cdfDefGridAxisInqs {
size_t (*axisSize)(int gridID);
int (*axisDimname)(int cdiID, int key, int size, char *mesg);
int (*axisDimname)(int cdiID, int varID, int key, char *string, int *length);
int (*axisName)(int cdiID, int varID, int key, char *string, int *length);
int (*axisLongname)(int cdiID, int key, int size, char *mesg);
int (*axisUnits)(int cdiID, int key, int size, char *mesg);
......@@ -234,7 +234,7 @@ static const struct cdfDefGridAxisInqs {
const double *(*axisBoundsPtr)(int gridID);
} gridInqsX = {
.axisSize = gridInqXsize,
.axisDimname = cdiGridInqKeyStr,
.axisDimname = cdiInqKeyString,
.axisName = cdiInqKeyString,
.axisLongname = cdiGridInqKeyStr,
.axisUnits = cdiGridInqKeyStr,
......@@ -244,7 +244,7 @@ static const struct cdfDefGridAxisInqs {
.axisBoundsPtr = gridInqXboundsPtr,
}, gridInqsY = {
.axisSize = gridInqYsize,
.axisDimname = cdiGridInqKeyStr,
.axisDimname = cdiInqKeyString,
.axisName = cdiInqKeyString,
.axisLongname = cdiGridInqKeyStr,
.axisUnits = cdiGridInqKeyStr,
......@@ -434,7 +434,7 @@ int checkZaxisName(char *axisname, int fileID, int vlistID, int zaxisID, int nza
static void
cdfDefAxisCommon(stream_t *streamptr, int gridID, int gridindex, int ndims, bool addVarToGrid,
const struct cdfDefGridAxisInqs *gridAxisInq, int dimKey, char axisLetter,
const struct cdfDefGridAxisInqs *gridAxisInq, int axisKey, char axisLetter,
void (*finishCyclicBounds)(double *pbounds, size_t dimlen, const double *pvals))
{
int dimID = CDI_UNDEFID;
......@@ -446,7 +446,8 @@ cdfDefAxisCommon(stream_t *streamptr, int gridID, int gridindex, int ndims, bool
const double *pvals = gridAxisInq->axisValsPtr(gridID);
char dimname[CDI_MAX_NAME+3]; dimname[0] = 0;
if ( ndims && pvals == NULL ) cdiGridInqKeyStr(gridID, dimKey, CDI_MAX_NAME, dimname);
int length = sizeof(dimname);
if ( ndims && pvals == NULL ) cdiInqKeyString(gridID, axisKey, CDI_KEY_DIMNAME, dimname, &length);
for ( int index = 0; index < gridindex; ++index )
{
......@@ -460,7 +461,8 @@ cdfDefAxisCommon(stream_t *streamptr, int gridID, int gridindex, int ndims, bool
{
const size_t dimlen0 = gridAxisInq->axisSize(gridID0);
char dimname0[CDI_MAX_NAME]; dimname0[0] = 0;
if ( dimname[0] ) cdiGridInqKeyStr(gridID0, dimKey, CDI_MAX_NAME, dimname0);
length = sizeof(dimname0);
if ( dimname[0] ) cdiInqKeyString(gridID0, axisKey, CDI_KEY_DIMNAME, dimname0, &length);
const bool lname = dimname0[0] ? strcmp(dimname, dimname0) == 0 : true;
if ( dimlen == dimlen0 && lname )
{
......@@ -468,7 +470,7 @@ cdfDefAxisCommon(stream_t *streamptr, int gridID, int gridindex, int ndims, bool
if ( IS_EQUAL(inqVal(gridID0, 0), inqVal(gridID, 0)) &&
IS_EQUAL(inqVal(gridID0, dimlen-1), inqVal(gridID, dimlen-1)) )
{
dimID = ncgrid[index].ncIDs[dimKey == CDI_KEY_XDIMNAME ? CDF_DIMID_X : CDF_DIMID_Y];
dimID = ncgrid[index].ncIDs[axisLetter == 'X' ? CDF_DIMID_X : CDF_DIMID_Y];
break;
}
}
......@@ -479,9 +481,8 @@ cdfDefAxisCommon(stream_t *streamptr, int gridID, int gridindex, int ndims, bool
{
int ncvarid = CDI_UNDEFID, ncbvarid = CDI_UNDEFID;
char axisname[CDI_MAX_NAME];
const int axistype = (axisLetter == 'X') ? CDI_XAXIS : CDI_YAXIS;
int length = CDI_MAX_NAME;
gridAxisInq->axisName(gridID, axistype, CDI_KEY_NAME, axisname, &length);
gridAxisInq->axisName(gridID, axisKey, CDI_KEY_NAME, axisname, &length);
if ( axisname[0] == 0 ) Error("axis name undefined!");
checkGridName(axisname, fileID);
......@@ -552,11 +553,11 @@ cdfDefAxisCommon(stream_t *streamptr, int gridID, int gridindex, int ndims, bool
if ( gen_bounds ) Free(pbounds);
if (ndims == 0 || addVarToGrid)
ncgrid[gridindex].ncIDs[dimKey == CDI_KEY_XDIMNAME ? CDF_VARID_X : CDF_VARID_Y] = ncvarid;
ncgrid[gridindex].ncIDs[axisLetter == 'X' ? CDF_VARID_X : CDF_VARID_Y] = ncvarid;
}
ncgrid[gridindex].gridID = gridID;
ncgrid[gridindex].ncIDs[dimKey == CDI_KEY_XDIMNAME ? CDF_DIMID_X : CDF_DIMID_Y] = dimID;
ncgrid[gridindex].ncIDs[axisLetter == 'X' ? CDF_DIMID_X : CDF_DIMID_Y] = dimID;
}
static
......@@ -576,13 +577,13 @@ void finishCyclicYBounds(double *pbounds, size_t dimlen, const double *pvals)
static
void cdfDefXaxis(stream_t *streamptr, int gridID, int gridindex, int ndims, bool addVarToGrid)
{
cdfDefAxisCommon(streamptr, gridID, gridindex, ndims, addVarToGrid, &gridInqsX, CDI_KEY_XDIMNAME, 'X', finishCyclicXBounds);
cdfDefAxisCommon(streamptr, gridID, gridindex, ndims, addVarToGrid, &gridInqsX, CDI_XAXIS, 'X', finishCyclicXBounds);
}
static
void cdfDefYaxis(stream_t *streamptr, int gridID, int gridindex, int ndims, bool addVarToGrid)
{
cdfDefAxisCommon(streamptr, gridID, gridindex, ndims, addVarToGrid, &gridInqsY, CDI_KEY_YDIMNAME, 'Y', finishCyclicYBounds);
cdfDefAxisCommon(streamptr, gridID, gridindex, ndims, addVarToGrid, &gridInqsY, CDI_YAXIS, 'Y', finishCyclicYBounds);
}
static
......@@ -652,8 +653,8 @@ cdfDefIrregularGridCommon(stream_t *streamptr, int gridID,
{
char xdimname[CDI_MAX_NAME+3];
xdimname[0] = 0;
cdiGridInqKeyStr(gridID, CDI_KEY_XDIMNAME, CDI_MAX_NAME, xdimname);
int length = sizeof(xdimname);
cdiInqKeyString(gridID, CDI_XAXIS, CDI_KEY_DIMNAME, xdimname, &length);
if ( xdimname[0] == 0 ) strcpy(xdimname, xdimname_default);
xdimID = checkDimName(fileID, xdimlen, xdimname);
if ( xdimID == CDI_UNDEFID ) cdf_def_dim(fileID, xdimname, xdimlen, &xdimID);
......@@ -662,8 +663,8 @@ cdfDefIrregularGridCommon(stream_t *streamptr, int gridID,
if ( ndims == 3 )
{
char ydimname[CDI_MAX_NAME+3];
ydimname[0] = 0;
cdiGridInqKeyStr(gridID, CDI_KEY_YDIMNAME, CDI_MAX_NAME, ydimname);
int length = sizeof(ydimname);
cdiInqKeyString(gridID, CDI_YAXIS, CDI_KEY_DIMNAME, ydimname, &length);
if ( ydimname[0] == 0 ) { ydimname[0] = 'y'; ydimname[1] = 0; }
ydimID = checkDimName(fileID, ydimlen, ydimname);
if ( ydimID == CDI_UNDEFID ) cdf_def_dim(fileID, ydimname, ydimlen, &ydimID);
......@@ -1683,11 +1684,8 @@ void cdfDefCharacter(stream_t *streamptr, int gridID, int gridindex, int xory, i
// Define Dims
char dimname[CDI_MAX_NAME+3];
dimname[0] = 0;
if ( xory == 0 )
cdiGridInqKeyStr(gridID, CDI_KEY_XDIMNAME, CDI_MAX_NAME, dimname);
else
cdiGridInqKeyStr(gridID, CDI_KEY_YDIMNAME, CDI_MAX_NAME, dimname);
int length = sizeof(dimname);
cdiInqKeyString(gridID, (xory == 0) ? CDI_XAXIS : CDI_YAXIS, CDI_KEY_DIMNAME, dimname, &length);
if ( dimname[0] == 0 ) { memcpy(dimname, "region", 7); dimname[6] = 0; }
dimID = checkDimName(fileID, dimlen, dimname);
if ( dimID == CDI_UNDEFID ) cdf_def_dim(fileID, dimname, dimlen, &dimID);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment