diff --git a/ChangeLog b/ChangeLog index 743ea9e533a2e6b7c57bbc8df4bef21506c7997b..62c8ef7606d6d72561ca2c2b0fd2a288191b357e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,6 @@ -2022-08-11 Uwe Schulzweida +2022-08-12 Uwe Schulzweida - * added vlistDefVarChunkSize() and vlistInqVarChunkSize() + * added CDI_KEY_CHUNKTYPE and CDI_KEY_CHUNKSIZE 2022-08-11 Uwe Schulzweida diff --git a/src/cdf_write.c b/src/cdf_write.c index 73fb5c045329437559cc2a3d2330baa216516c0c..195b498f19042d2898f0de25fad0900109098124 100644 --- a/src/cdf_write.c +++ b/src/cdf_write.c @@ -669,8 +669,10 @@ cdfDefineDimsAndChunks(const stream_t *streamptr, int varID, int xid, int yid, i const size_t chunkSizeMax = 65536; const size_t chunkSizeLim = 16777216; - int chunkSize = vlistInqVarChunkSize(vlistID, varID); - int chunkType = vlistInqVarChunkType(vlistID, varID); + int chunkSize = 0; + int chunkType = CDI_CHUNK_AUTO; + cdiInqKeyInt(vlistID, varID, CDI_KEY_CHUNKTYPE, &chunkType); + cdiInqKeyInt(vlistID, varID, CDI_KEY_CHUNKSIZE, &chunkSize); if (chunkSize > 0 && yid == CDI_UNDEFID) chunkType = CDI_CHUNK_AUTO; if (chunkType == CDI_CHUNK_GRID && gridsize > chunkSizeLim) diff --git a/src/cdi.h b/src/cdi.h index fa63524bab81101391d12015c93f80c3980b94f1..01089bd40fa4c725dd900ef8b23ed1f60b32a63b 100644 --- a/src/cdi.h +++ b/src/cdi.h @@ -158,7 +158,7 @@ extern "C" { #define CDI_DATATYPE_LONG 256 #define CDI_DATATYPE_UINT 257 -// Chunks +// Chunk types #define CDI_CHUNK_AUTO 1 // use default chunk size #define CDI_CHUNK_GRID 2 @@ -623,12 +623,6 @@ void vlistDefVarDatatype(int vlistID, int varID, int datatype); // vlistInqVarDatatype: Get the data type of a Variable int vlistInqVarDatatype(int vlistID, int varID); -void vlistDefVarChunkType(int vlistID, int varID, int chunkType); -int vlistInqVarChunkType(int vlistID, int varID); - -void vlistDefVarChunkSize(int vlistID, int varID, int chunkSize); -int vlistInqVarChunkSize(int vlistID, int varID); - void vlistDefVarXYZ(int vlistID, int varID, int xyz); int vlistInqVarXYZ(int vlistID, int varID); @@ -834,13 +828,15 @@ SizeType gridInqYCvals(int gridID, char *ycvals[]); #define CDI_KEY_STDNAME 944 // CF Standard name of the variable #define CDI_KEY_UNITS 945 // Units of the variable #define CDI_KEY_DATATYPE 946 // Data type -#define CDI_KEY_REFERENCEURI 965 // Reference URI to grid file +#define CDI_KEY_REFERENCEURI 947 // Reference URI to grid file // Integer keys -#define CDI_KEY_NUMBEROFGRIDUSED 963 // GRIB2 numberOfGridUsed -#define CDI_KEY_NUMBEROFGRIDINREFERENCE 964 // GRIB2 numberOfGridInReference -#define CDI_KEY_NUMBEROFVGRIDUSED 961 // GRIB2 numberOfVGridUsed -#define CDI_KEY_NLEV 962 // GRIB2 nlev +#define CDI_KEY_NUMBEROFGRIDUSED 961 // GRIB2 numberOfGridUsed +#define CDI_KEY_NUMBEROFGRIDINREFERENCE 962 // GRIB2 numberOfGridInReference +#define CDI_KEY_NUMBEROFVGRIDUSED 963 // GRIB2 numberOfVGridUsed +#define CDI_KEY_NLEV 964 // GRIB2 nlev +#define CDI_KEY_CHUNKTYPE 965 // ChunkType: CDI_CHUNK_AUTO/CDI_CHUNK_GRID/CDI_CHUNK_LINES +#define CDI_KEY_CHUNKSIZE 966 // ChunkSize // Floating point keys #define CDI_KEY_MISSVAL 701 // Missing value diff --git a/src/cdi.inc b/src/cdi.inc index bb34ac652eb70e4d38005b22ec9e535549ab8283..646cb1bc4343ce2f82b848cc7302d8d1c99e607a 100644 --- a/src/cdi.inc +++ b/src/cdi.inc @@ -248,7 +248,7 @@ INTEGER CDI_DATATYPE_UINT PARAMETER (CDI_DATATYPE_UINT = 257) ! -! Chunks +! Chunk types ! INTEGER CDI_CHUNK_AUTO PARAMETER (CDI_CHUNK_AUTO = 1) @@ -1130,17 +1130,6 @@ ! INTEGER varID) EXTERNAL vlistInqVarDatatype -! vlistDefVarChunkType -! (INTEGER vlistID, -! INTEGER varID, -! INTEGER chunktype) - EXTERNAL vlistDefVarChunkType - - INTEGER vlistInqVarChunkType -! (INTEGER vlistID, -! INTEGER varID) - EXTERNAL vlistInqVarChunkType - ! vlistDefVarXYZ ! (INTEGER vlistID, ! INTEGER varID, @@ -1640,18 +1629,22 @@ INTEGER CDI_KEY_DATATYPE PARAMETER (CDI_KEY_DATATYPE = 946) INTEGER CDI_KEY_REFERENCEURI - PARAMETER (CDI_KEY_REFERENCEURI = 965) + PARAMETER (CDI_KEY_REFERENCEURI = 947) ! ! Integer keys ! INTEGER CDI_KEY_NUMBEROFGRIDUSED - PARAMETER (CDI_KEY_NUMBEROFGRIDUSED = 963) + PARAMETER (CDI_KEY_NUMBEROFGRIDUSED = 961) INTEGER CDI_KEY_NUMBEROFGRIDINREFERENCE - PARAMETER (CDI_KEY_NUMBEROFGRIDINREFERENCE = 964) + PARAMETER (CDI_KEY_NUMBEROFGRIDINREFERENCE = 962) INTEGER CDI_KEY_NUMBEROFVGRIDUSED - PARAMETER (CDI_KEY_NUMBEROFVGRIDUSED = 961) + PARAMETER (CDI_KEY_NUMBEROFVGRIDUSED = 963) INTEGER CDI_KEY_NLEV - PARAMETER (CDI_KEY_NLEV = 962) + PARAMETER (CDI_KEY_NLEV = 964) + INTEGER CDI_KEY_CHUNKTYPE + PARAMETER (CDI_KEY_CHUNKTYPE = 965) + INTEGER CDI_KEY_CHUNKSIZE + PARAMETER (CDI_KEY_CHUNKSIZE = 966) ! ! Floating point keys ! diff --git a/src/cdiFortran.c b/src/cdiFortran.c index 72a44053261e57fb965d76335a07a4090e42d69c..0fef6d6777d51e9f71f771cc996e97224d36d7a1 100644 --- a/src/cdiFortran.c +++ b/src/cdiFortran.c @@ -69,7 +69,7 @@ int SizeType_c2f(SizeType value_SizeType) /* internal data types */ -/* Chunks */ +/* Chunk types */ /* GRID types */ @@ -373,8 +373,6 @@ FCALLSCSUB3 (vlistDefVarCode, VLISTDEFVARCODE, vlistdefvarcode, INT, INT, INT) FCALLSCFUN2 (INT, vlistInqVarCode, VLISTINQVARCODE, vlistinqvarcode, INT, INT) FCALLSCSUB3 (vlistDefVarDatatype, VLISTDEFVARDATATYPE, vlistdefvardatatype, INT, INT, INT) FCALLSCFUN2 (INT, vlistInqVarDatatype, VLISTINQVARDATATYPE, vlistinqvardatatype, INT, INT) -FCALLSCSUB3 (vlistDefVarChunkType, VLISTDEFVARCHUNKTYPE, vlistdefvarchunktype, INT, INT, INT) -FCALLSCFUN2 (INT, vlistInqVarChunkType, VLISTINQVARCHUNKTYPE, vlistinqvarchunktype, INT, INT) FCALLSCSUB3 (vlistDefVarXYZ, VLISTDEFVARXYZ, vlistdefvarxyz, INT, INT, INT) FCALLSCFUN2 (INT, vlistInqVarXYZ, VLISTINQVARXYZ, vlistinqvarxyz, INT, INT) FCALLSCSUB3 (vlistDefVarNSB, VLISTDEFVARNSB, vlistdefvarnsb, INT, INT, INT) diff --git a/src/cdi_int.c b/src/cdi_int.c index c0f30a0bf57c395718e1484e6379350da3c72875..c1d5dd42739b92805d3d4c18ff097841e9d163d0 100644 --- a/src/cdi_int.c +++ b/src/cdi_int.c @@ -23,7 +23,6 @@ int CDI_Default_ModelID = CDI_UNDEFID; int CDI_Default_TableID = CDI_UNDEFID; // int cdiNcMissingValue = CDI_UNDEFID; int CDI_Netcdf_Chunksizehint = CDI_UNDEFID; -int CDI_ChunkType = CDI_CHUNK_GRID; int CDI_Split_Ltype105 = CDI_UNDEFID; bool CDI_Ignore_Att_Coordinates = false; @@ -296,27 +295,6 @@ cdiDefTableID(int tableID) CDI_Default_InstID = modelInqInstitut(modelID); } -static void -cdiSetChunk(const char *chunkAlgo) -{ - int algo = -1; - - if (strIsEqual("auto", chunkAlgo)) - algo = CDI_CHUNK_AUTO; - else if (strIsEqual("grid", chunkAlgo)) - algo = CDI_CHUNK_GRID; - else if (strIsEqual("lines", chunkAlgo)) - algo = CDI_CHUNK_LINES; - else - Warning("Invalid environment variable CDI_CHUNK_ALGO: %s", chunkAlgo); - - if (algo != -1) - { - CDI_ChunkType = algo; - if (CDI_Debug) Message("set ChunkAlgo to %s", chunkAlgo); - } -} - void cdiSetEccodesGrib1(bool value) { @@ -400,9 +378,6 @@ cdiInitialize(void) envstr = getenv("NC_CHUNKSIZEHINT"); if (envstr) CDI_Netcdf_Chunksizehint = atoi(envstr); - envstr = getenv("CDI_CHUNK_ALGO"); - if (envstr) cdiSetChunk(envstr); - envstr = getenv("SPLIT_LTYPE_105"); if (envstr) CDI_Split_Ltype105 = atoi(envstr); diff --git a/src/stream_cdf_i.c b/src/stream_cdf_i.c index 52888dbe2b91fa0abf35653bc4cd00e56ac832c0..fb076ffc9853b14e630b571aea5385befcb32701 100644 --- a/src/stream_cdf_i.c +++ b/src/stream_cdf_i.c @@ -3421,7 +3421,7 @@ cdf_define_all_vars(stream_t *streamptr, int vlistID, int instID, int modelID, i #ifdef HAVE_NETCDF4 if (ncvar->ldeflate) vlistDefVarCompType(vlistID, varID, CDI_COMPRESS_ZIP); if (ncvar->lszip) vlistDefVarCompType(vlistID, varID, CDI_COMPRESS_SZIP); - if (ncvar->chunked && ncvar->chunkType != CDI_UNDEFID) vlistDefVarChunkType(vlistID, varID, ncvar->chunkType); + if (ncvar->chunked && ncvar->chunkType != CDI_UNDEFID) cdiDefKeyInt(vlistID, varID, CDI_KEY_CHUNKTYPE, ncvar->chunkType); #endif streamptr->vars[varID1].defmiss = false; diff --git a/src/vlist.h b/src/vlist.h index bfcf814027038d17eaa6968298d3f30d7b7bc96d..109fa1e0e07297d2652ebb62bcc167edffce7f27 100644 --- a/src/vlist.h +++ b/src/vlist.h @@ -58,8 +58,6 @@ typedef struct int modelID; int tableID; int timave; - int chunkType; - int chunkSize; int nsb; // Number of significant bits int xyz; bool missvalused; // true if missval is defined diff --git a/src/vlist_var.c b/src/vlist_var.c index 1092061cd40c98b7e4c2a53b0a035bbbdd57987d..a1797d735342ef7189f8b1f2ea1e02f8561cf743 100644 --- a/src/vlist_var.c +++ b/src/vlist_var.c @@ -21,8 +21,6 @@ vlistvarInitEntry(int vlistID, int varID) vlistptr->vars[varID].datatype = CDI_UNDEFID; vlistptr->vars[varID].timetype = CDI_UNDEFID; vlistptr->vars[varID].tsteptype = TSTEP_INSTANT; - vlistptr->vars[varID].chunkType = CDI_ChunkType; - vlistptr->vars[varID].chunkSize = CDI_UNDEFID; vlistptr->vars[varID].nsb = 0; vlistptr->vars[varID].xyz = 321; vlistptr->vars[varID].gridID = CDI_UNDEFID; @@ -1434,50 +1432,6 @@ vlistInqVarCompLevel(int vlistID, int varID) return vlistptr->vars[varID].complevel; } -void -vlistDefVarChunkType(int vlistID, int varID, int chunkType) -{ - vlistCheckVarID(__func__, vlistID, varID); - - vlist_t *vlistptr = vlist_to_pointer(vlistID); - if (vlistptr->vars[varID].chunkType != chunkType) - { - vlistptr->vars[varID].chunkType = chunkType; - reshSetStatus(vlistID, &vlistOps, RESH_DESYNC_IN_USE); - } -} - -int -vlistInqVarChunkType(int vlistID, int varID) -{ - vlistCheckVarID(__func__, vlistID, varID); - - vlist_t *vlistptr = vlist_to_pointer(vlistID); - return vlistptr->vars[varID].chunkType; -} - -void -vlistDefVarChunkSize(int vlistID, int varID, int chunkSize) -{ - vlistCheckVarID(__func__, vlistID, varID); - - vlist_t *vlistptr = vlist_to_pointer(vlistID); - if (vlistptr->vars[varID].chunkSize != chunkSize) - { - vlistptr->vars[varID].chunkSize = chunkSize; - reshSetStatus(vlistID, &vlistOps, RESH_DESYNC_IN_USE); - } -} - -int -vlistInqVarChunkSize(int vlistID, int varID) -{ - vlistCheckVarID(__func__, vlistID, varID); - - vlist_t *vlistptr = vlist_to_pointer(vlistID); - return vlistptr->vars[varID].chunkSize; -} - void vlistDefVarNSB(int vlistID, int varID, int nsb) { @@ -1606,7 +1560,7 @@ vlistVarCompare(vlist_t *a, int varIDA, vlist_t *b, int varIDB) #define FCMPSTR(fs) ((pva->fs) != (pvb->fs) && strcmp((pva->fs), (pvb->fs))) #define FCMP2(f) (namespaceResHDecode(pva->f).idx != namespaceResHDecode(pvb->f).idx) int diff = FCMP(fvarID) | FCMP(mvarID) | FCMP(flag) | FCMP(param) | FCMP(datatype) | FCMP(timetype) | FCMP(tsteptype) - | FCMP(chunkType) | FCMP(chunkSize) | FCMP(xyz) | FCMP2(gridID) | FCMP2(zaxisID) | FCMP2(instID) | FCMP2(modelID) | FCMP2(tableID) + | FCMP(xyz) | FCMP2(gridID) | FCMP2(zaxisID) | FCMP2(instID) | FCMP2(modelID) | FCMP2(tableID) | FCMP(missvalused) | FCMPFLT(missval) | FCMPFLT(addoffset) | FCMPFLT(scalefactor) | FCMPSTR(extra) | FCMP(comptype) | FCMP(complevel) | FCMP(lvalidrange) | FCMPFLT(validrange[0]) | FCMPFLT(validrange[1]); #undef FCMP