Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • b383306/libcdi
  • mpim-sw/libcdi
  • m214007/libcdi
3 results
Show changes
Commits on Source (5)
......@@ -2,6 +2,10 @@
* Version 2.5.1 released
2025-02-06 Uwe Schulzweida
* Added obsolete functions vlistNgrids() and vlistNzaxis() for ParaView vtkCDIReader
2025-02-01 Uwe Schulzweida
* Added support for READ_CELL_CENTER=false
......
......@@ -21,6 +21,9 @@ AM_INIT_AUTOMAKE([1.16.1 foreign])
AM_MAINTAINER_MODE([enable])
AM_EXTRA_RECURSIVE_TARGETS([examples])
AC_MSG_NOTICE([setting up libtool])
LT_INIT
dnl Tests for the C compiler:
dnl Make sure conftest.dSYM is removed when configured on MacOS with
dnl CFLAGS='-g':
......
......@@ -837,7 +837,6 @@ SizeType gridInqYCvals(int gridID, char *ycvals[]);
#define CDI_KEY_UNITS 945 // Units of the variable
#define CDI_KEY_DATATYPE 946 // Data type
#define CDI_KEY_REFERENCEURI 947 // Reference URI to grid file
#define CDI_KEY_CHUNKS 948 // Chunks
// Integer keys
#define CDI_KEY_NUMBEROFGRIDUSED 961 // GRIB2 numberOfGridUsed
......@@ -1316,6 +1315,10 @@ int vlistInqVarTypeOfGeneratingProcess(int vlistID, int varID);
void vlistDefVarTypeOfGeneratingProcess(int vlistID, int varID, int typeOfGeneratingProcess);
void vlistDefVarProductDefinitionTemplate(int vlistID, int varID, int productDefinitionTemplate);
// Compatibility functions for ParaView vtkCDIReader (obsolete functions)
int vlistNgrids(int vlistID); // calls vlistNumGrids()
int vlistNzaxis(int vlistID); // calls vlistNumZaxis()
#ifdef __cplusplus
}
#endif
......
......@@ -49,6 +49,7 @@ int CDI_Shuffle = 0;
int CDI_Test = 0;
size_t CDI_Netcdf_Hdr_Pad = 0UL;
bool CDI_CopyChunkSpec = false;
bool CDI_RemoveChunkSpec = false;
bool CDI_Chunk_Cache_Info = false;
long CDI_Chunk_Cache = -1L;
size_t CDI_Chunk_Cache_Max = 0UL;
......@@ -376,6 +377,9 @@ cdiInitialize(void)
value = cdi_getenv_int("CDI_COPY_CHUNKSPEC");
if (value >= 0) CDI_CopyChunkSpec = (value > 0);
value = cdi_getenv_int("CDI_REMOVE_CHUNKSPEC");
if (value >= 0) CDI_RemoveChunkSpec = (value > 0);
value = cdi_getenv_int("CDI_CHUNK_CACHE_INFO");
if (value > 0) CDI_Chunk_Cache_Info = true;
......@@ -529,6 +533,8 @@ cdiDefGlobal(const char *string, int value)
else if (str_is_equal(string, "REDUCE_DIM")) CDI_Reduce_Dim = value;
else if (str_is_equal(string, "NETCDF_HDR_PAD")) CDI_Netcdf_Hdr_Pad = (size_t) value;
else if (str_is_equal(string, "NETCDF_LAZY_GRID_LOAD")) CDI_Netcdf_Lazy_Grid_Load = (bool) value;
else if (str_is_equal(string, "COPY_CHUNKSPEC")) CDI_CopyChunkSpec = (bool) value;
else if (str_is_equal(string, "REMOVE_CHUNKSPEC")) CDI_RemoveChunkSpec = (bool) value;
else Warning("Unsupported global key: %s", string);
// clang-format on
}
......
......@@ -280,8 +280,8 @@ typedef struct
int ncDimIdVec[MAX_DIMS_PS];
size_t ncDimLenVec[MAX_DIMS_PS];
int ncNumDims;
size_t chunkSizeTdim;
size_t chunkSizeZdim;
size_t chunkSizeDimT;
size_t chunkSizeDimZ;
VCT vct;
} CdfInfo;
#endif
......@@ -424,6 +424,7 @@ extern int CDI_Reduce_Dim;
extern int CDI_Shuffle;
extern size_t CDI_Netcdf_Hdr_Pad;
extern bool CDI_CopyChunkSpec;
extern bool CDI_RemoveChunkSpec;
extern bool CDI_Chunk_Cache_Info;
extern long CDI_Chunk_Cache;
extern size_t CDI_Chunk_Cache_Max;
......
......@@ -1367,8 +1367,8 @@ static int detectComment(char **line_, ssize_t *lineLen, size_t *lineBufSize,
cline += strspn(cline, " \t*");
char *eol = strchr(cline, '\n');
if (!eol) eol = comment + commentLen;
size_t lineLen = (size_t)(eol - cline);
fprintf(fpinc, "! %.*s\n", (int)lineLen, cline);
size_t lineLen2 = (size_t)(eol - cline);
fprintf(fpinc, "! %.*s\n", (int)lineLen2, cline);
cline = (eol != comment + commentLen) ? eol + 1: NULL;
} while (cline);
fputs("!\n", fpinc);
......
......@@ -252,9 +252,9 @@ streamDefNumWorker(int streamID, int numWorker)
if (streamptr->maxGlobalRecs == 1) numWorker = 0;
if (numWorker > streamptr->maxGlobalRecs) numWorker = (int) streamptr->maxGlobalRecs;
CdfInfo *cdfInfo = &(streamptr->cdfInfo);
if (cdfInfo->chunkSizeTdim > 1 && numWorker > streamptr->nvars) numWorker = streamptr->nvars;
if (cdfInfo->chunkSizeZdim > 1) numWorker = 0;
if (CDI_Test) Message("chunkSizeTdim=%d chunkSizeZdim=%d", cdfInfo->chunkSizeTdim, cdfInfo->chunkSizeZdim);
if (cdfInfo->chunkSizeDimT > 1 && numWorker > streamptr->nvars) numWorker = streamptr->nvars;
if (cdfInfo->chunkSizeDimZ > 1) numWorker = 0;
if (CDI_Test) Message("chunkSizeTdim=%d chunkSizeZdim=%d", cdfInfo->chunkSizeDimT, cdfInfo->chunkSizeDimZ);
}
#endif
else
......@@ -1096,8 +1096,8 @@ streamDefaultValue(stream_t *streamptr)
for (int i = 0; i < MAX_DIMS_PS; i++) cdfInfo->ncDimIdVec[i] = CDI_UNDEFID;
for (int i = 0; i < MAX_DIMS_PS; i++) cdfInfo->ncDimLenVec[i] = 0;
cdfInfo->chunkSizeTdim = 0;
cdfInfo->chunkSizeZdim = 0;
cdfInfo->chunkSizeDimT = 0;
cdfInfo->chunkSizeDimZ = 0;
cdfInfo->vct.ilev = 0;
cdfInfo->vct.mlev = 0;
......
......@@ -140,7 +140,6 @@ typedef struct
char longname[CDI_MAX_NAME];
char stdname[CDI_MAX_NAME];
char units[CDI_MAX_NAME];
char extra[CDI_MAX_NAME];
char filterSpec[CDI_MAX_NAME];
} ncvar_t;
......@@ -678,7 +677,6 @@ init_ncvars(int nvars, ncvar_t *ncvars, int ncid)
memset(ncvar->longname, 0, CDI_MAX_NAME);
memset(ncvar->stdname, 0, CDI_MAX_NAME);
memset(ncvar->units, 0, CDI_MAX_NAME);
memset(ncvar->extra, 0, CDI_MAX_NAME);
memset(ncvar->filterSpec, 0, CDI_MAX_NAME);
}
}
......@@ -1059,21 +1057,6 @@ cdf_get_cell_varid(char *attstring, int ncid)
return nc_cell_id;
}
static void
set_extra_attr(char *buf, int nvdims, const size_t *chunks)
{
size_t pos = strlen(buf);
static const char prefix[] = "chunks=";
memcpy(buf + pos, prefix, sizeof(prefix));
pos += sizeof(prefix) - 1;
for (int i = nvdims - 1; i >= 0; --i)
{
pos += (size_t) (snprintf(buf + pos, CDI_MAX_NAME - pos, "%zu%s", chunks[i], i > 0 ? "x" : ""));
}
buf[pos] = ' ';
buf[pos + 1] = 0;
}
static bool
is_valid_coordinate(ncvar_t *ncvar)
{
......@@ -1186,8 +1169,6 @@ set_vars_chunks(int ncid, int ncvarid, int nvdims, ncvar_t *ncvar)
for (int i = 0; i < nvdims; ++i) fprintf(stderr, "%zu ", chunks[i]);
fprintf(stderr, "\n");
}
set_extra_attr(ncvar->extra, nvdims, chunks);
}
}
......@@ -1649,6 +1630,10 @@ cdf_set_chunk_info(stream_t *streamptr, int nvars, ncvar_t *ncvars)
CdfInfo *cdfInfo = &(streamptr->cdfInfo);
for (int ncvarid = 0; ncvarid < nvars; ncvarid++)
{
int chunkSizeDimT = 0;
int chunkSizeDimZ = 0;
int chunkSizeDimY = 0;
int chunkSizeDimX = 0;
ncvar_t *ncvar = &ncvars[ncvarid];
int varID = ncvar->cdiVarID;
if (ncvar->varStatus == DataVar && ncvar->isChunked && varID != CDI_UNDEFID)
......@@ -1660,19 +1645,23 @@ cdf_set_chunk_info(stream_t *streamptr, int nvars, ncvar_t *ncvars)
{
int dimType = ncvar->dimtypes[i];
// clang-format off
if (dimType == T_AXIS && chunkSize > cdfInfo->chunkSizeTdim) cdfInfo->chunkSizeTdim = chunkSize;
else if (dimType == Z_AXIS && chunkSize > cdfInfo->chunkSizeZdim) cdfInfo->chunkSizeZdim = chunkSize;
if (CDI_CopyChunkSpec)
{
if (dimType == T_AXIS) cdiDefKeyInt(vlistID, varID, CDI_KEY_CHUNKSIZE_DIMT, chunkSize);
else if (dimType == Z_AXIS) cdiDefKeyInt(vlistID, varID, CDI_KEY_CHUNKSIZE_DIMZ, chunkSize);
else if (dimType == Y_AXIS) cdiDefKeyInt(vlistID, varID, CDI_KEY_CHUNKSIZE_DIMY, chunkSize);
else if (dimType == X_AXIS) cdiDefKeyInt(vlistID, varID, CDI_KEY_CHUNKSIZE_DIMX, chunkSize);
}
// clang-format on
if (dimType == T_AXIS && chunkSize > cdfInfo->chunkSizeDimT) cdfInfo->chunkSizeDimT = chunkSize;
else if (dimType == Z_AXIS && chunkSize > cdfInfo->chunkSizeDimZ) cdfInfo->chunkSizeDimZ = chunkSize;
if (dimType == T_AXIS) chunkSizeDimT = chunkSize;
else if (dimType == Z_AXIS) chunkSizeDimZ = chunkSize;
else if (dimType == Y_AXIS) chunkSizeDimY = chunkSize;
else if (dimType == X_AXIS) chunkSizeDimX = chunkSize;
// clang-format onw
}
}
if ((CDI_CopyChunkSpec || chunkSizeDimT == 0) && CDI_RemoveChunkSpec == false)
{
if (chunkSizeDimT > 0) cdiDefKeyInt(vlistID, varID, CDI_KEY_CHUNKSIZE_DIMT, chunkSizeDimT);
if (chunkSizeDimZ > 0) cdiDefKeyInt(vlistID, varID, CDI_KEY_CHUNKSIZE_DIMZ, chunkSizeDimZ);
if (chunkSizeDimY > 0) cdiDefKeyInt(vlistID, varID, CDI_KEY_CHUNKSIZE_DIMY, chunkSizeDimY);
if (chunkSizeDimX > 0) cdiDefKeyInt(vlistID, varID, CDI_KEY_CHUNKSIZE_DIMX, chunkSizeDimX);
}
}
}
}
......@@ -3716,8 +3705,6 @@ cdf_define_all_vars(stream_t *streamptr, int vlistID, int instID, int modelID, i
if (ncvar->numberOfForecastsInEnsemble != -1)
cdiDefKeyInt(vlistID, varID, CDI_KEY_TYPEOFENSEMBLEFORECAST, ncvar->typeOfEnsembleForecast);
}
if (ncvar->extra[0] != 0) cdiDefKeyString(vlistID, varID, CDI_KEY_CHUNKS, ncvar->extra);
}
for (int varID = 0; varID < nvars; varID++)
......
......@@ -1013,10 +1013,15 @@ int
vlistNumGrids(int vlistID)
{
vlist_t *vlistptr = vlist_to_pointer(vlistID);
return vlistptr->ngrids;
}
int
vlistNgrids(int vlistID)
{
return vlistNumGrids(vlistID);
}
/*
@Function vlistNumZaxis
@Title Number of zaxis in a variable list
......@@ -1037,15 +1042,19 @@ int
vlistNumZaxis(int vlistID)
{
vlist_t *vlistptr = vlist_to_pointer(vlistID);
return vlistptr->nzaxis;
}
int
vlistNzaxis(int vlistID)
{
return vlistNumZaxis(vlistID);
}
int
vlistNsubtypes(int vlistID)
{
vlist_t *vlistptr = vlist_to_pointer(vlistID);
return vlistptr->nsubtypes;
}
......@@ -1066,7 +1075,6 @@ int
vlistNtsteps(int vlistID)
{
vlist_t *vlistptr = vlist_to_pointer(vlistID);
return (int) vlistptr->ntsteps;
}
......