diff --git a/examples/cdi_write_hybrid.c b/examples/cdi_write_hybrid.c index 4488f059543eab16d978acdd15d5bed5e3cc1dc8..0864c3b7877e5cafb136838d75b8c3bced446e69 100644 --- a/examples/cdi_write_hybrid.c +++ b/examples/cdi_write_hybrid.c @@ -12,7 +12,7 @@ main(void) { int gridID, zaxisID1, zaxisID2, zaxisID3, zaxisID4, taxisID; int vlistID, varID1, varID2, varID3, varID4, streamID; - size_t numMissVals = 0; + SizeType numMissVals = 0; double lons[nlon] = { 0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330 }; double lats[nlat] = { -75, -45, -15, 15, 45, 75 }; double levs[nhlev] = { 1, 2, 3, 4, 5, 6 }; @@ -95,11 +95,11 @@ main(void) // Init var1 and var2 for (size_t i = 0; i < nlon * nlat; ++i) var1[i] = 1.1; for (size_t k = 0; k < nflev; ++k) - for (size_t i = 0; i < nlon * nlat; ++i) var2[i + k * nlon * nlat] = 2.2 + k; + for (size_t i = 0; i < nlon * nlat; ++i) var2[i + k * nlon * nlat] = 2.2 + (double)k; for (size_t k = 0; k < nhlev; ++k) - for (size_t i = 0; i < nlon * nlat; ++i) var3[i + k * nlon * nlat] = -2.2 - k; + for (size_t i = 0; i < nlon * nlat; ++i) var3[i + k * nlon * nlat] = -2.2 - (double)k; for (size_t k = 0; k < nflev; ++k) - for (size_t i = 0; i < nlon * nlat; ++i) var4[i + k * nlon * nlat] = 100 + k; + for (size_t i = 0; i < nlon * nlat; ++i) var4[i + k * nlon * nlat] = 100.0 + (double)k; // Write var1 and var2 streamWriteVar(streamID, varID1, var1, numMissVals); diff --git a/src/async_worker.c b/src/async_worker.c index a258d967b223e5d6fbe009bebeffc1e65c8675a3..507a747b9aef12142c1751974c8db2c1d0c619eb 100644 --- a/src/async_worker.c +++ b/src/async_worker.c @@ -147,7 +147,7 @@ AsyncWorker_init(AsyncManager **jobManager, int threadCount) *jobManager = (AsyncManager *) malloc(sizeof(AsyncManager)); if (!*jobManager) return CDI_ESYSTEM; (*jobManager)->workerCount = threadCount; - (*jobManager)->communicators = (AsyncJob *) malloc(threadCount * sizeof(AsyncJob)); + (*jobManager)->communicators = (AsyncJob *) malloc((size_t)threadCount * sizeof(AsyncJob)); if (!(*jobManager)->communicators) xabort("memory allocation failure"); for (int i = 0; i < threadCount; i++) startWorker(&((*jobManager)->communicators[i])); diff --git a/src/cdf_lazy_grid.c b/src/cdf_lazy_grid.c index 625972b971b49c72af166d47a0f7e2c68e7a1ea6..6be31c436d747cf52d8b76c0afeceb79dbe83319 100644 --- a/src/cdf_lazy_grid.c +++ b/src/cdf_lazy_grid.c @@ -194,7 +194,7 @@ cdfLazyGridInqXVal(grid_t *grid, SizeType index) { struct cdfLazyGrid *lazyGrid = (struct cdfLazyGrid *) grid; lock_lazy_load(lazyGrid); - const double rv = cdfLazyGridInqXYVal(grid, index, &lazyGrid->xValsGet, grid->x.vals, grid->vtable->inqXValsPtr); + const double rv = cdfLazyGridInqXYVal(grid, (size_t)index, &lazyGrid->xValsGet, grid->x.vals, grid->vtable->inqXValsPtr); unlock_lazy_load(lazyGrid); return rv; } @@ -204,7 +204,7 @@ cdfLazyGridInqYVal(grid_t *grid, SizeType index) { struct cdfLazyGrid *lazyGrid = (struct cdfLazyGrid *) grid; lock_lazy_load(lazyGrid); - const double rv = cdfLazyGridInqXYVal(grid, index, &lazyGrid->yValsGet, grid->y.vals, grid->vtable->inqYValsPtr); + const double rv = cdfLazyGridInqXYVal(grid, (size_t)index, &lazyGrid->yValsGet, grid->y.vals, grid->vtable->inqYValsPtr); unlock_lazy_load(lazyGrid); return rv; } diff --git a/src/cdf_read.c b/src/cdf_read.c index bb58c078a7e2e12174e263893c7aa50b32915172..cfeb0d463b6188cebaab1e8ceb9e981069222ff9 100644 --- a/src/cdf_read.c +++ b/src/cdf_read.c @@ -73,8 +73,8 @@ cdfGetSlapDescription(stream_t *streamptr, int varID, size_t (*start)[MAX_DIMENS while (0) if (timetype != TIME_CONSTANT) addDimension(ncStepIndex, 1); if (zid != CDI_UNDEFID) addDimension(0, (size_t) zaxisInqSize(zaxisID)); - if (yid != CDI_UNDEFID) addDimension(0, gridInqYsize(gridID)); - if (xid != CDI_UNDEFID) addDimension(0, gridInqXsize(gridID)); + if (yid != CDI_UNDEFID) addDimension(0, (size_t) gridInqYsize(gridID)); + if (xid != CDI_UNDEFID) addDimension(0, (size_t) gridInqXsize(gridID)); #undef addDimension assert(ndims <= (int) (sizeof(*start) / sizeof(**start))); @@ -305,8 +305,8 @@ min_size(size_t a, size_t b) static void transpose2dArrayDP(int gridId, double *data) { - size_t inWidth = gridInqYsize(gridId); - size_t inHeight = gridInqXsize(gridId); + size_t inWidth = (size_t)gridInqYsize(gridId); + size_t inHeight = (size_t)gridInqXsize(gridId); size_t cacheBlockSize = 256; // Purely an optimization parameter. Current value of 32 means we are handling 8kB blocks, // which should be a decent compromise on many architectures. @@ -339,8 +339,8 @@ transpose2dArrayDP(int gridId, double *data) static void transpose2dArraySP(size_t gridId, float *data) { - size_t inWidth = gridInqYsize(gridId); - size_t inHeight = gridInqXsize(gridId); + size_t inWidth = (size_t)gridInqYsize(gridId); + size_t inHeight = (size_t)gridInqXsize(gridId); size_t cacheBlockSize = 256; // Purely an optimization parameter. Current value of 32 means we are handling 8kB blocks, // which should be a decent compromise on many architectures. @@ -503,7 +503,7 @@ cdfGetSliceSlapDescription(stream_t *streamptr, int tsID, int varID, int levelID case 2: case 4: if (readPart && curDimId == dimIds[0]) - addDimension(ncGrid->start, ncGrid->count); + addDimension((size_t)ncGrid->start, (size_t)ncGrid->count); else addDimension(0, stream_inq_dimlen(streamptr, curDimId)); break; @@ -537,7 +537,7 @@ getSizeVar3D(int vlistID, int varID) { int gridID = vlistInqVarGrid(vlistID, varID); int zaxisID = vlistInqVarZaxis(vlistID, varID); - return gridInqSize(gridID) * (size_t) zaxisInqSize(zaxisID); + return (size_t)gridInqSize(gridID) * (size_t) zaxisInqSize(zaxisID); } static void @@ -720,7 +720,7 @@ cdf_read_var_slice_DP(stream_t *streamptr, int tsID, int varID, int levelID, dou int vlistID = streamptr->vlistID; int gridId = vlistInqVarGrid(vlistID, varID); - size_t length = gridInqSize(gridId); + size_t length = (size_t)gridInqSize(gridId); cdfReadDataFP64(streamptr, varID, length, start, count, data); if (swapxy) transpose2dArrayDP(gridId, data); @@ -745,7 +745,7 @@ cdf_read_var_slice_SP(stream_t *streamptr, int tsID, int varID, int levelID, flo int vlistID = streamptr->vlistID; int gridId = vlistInqVarGrid(vlistID, varID); - size_t length = gridInqSize(gridId); + size_t length = (size_t)gridInqSize(gridId); cdfReadDataFP32(streamptr, varID, length, start, count, data); if (swapxy) transpose2dArraySP(gridId, data); @@ -979,7 +979,7 @@ cdfReadVarSliceDPPart(stream_t *streamptr, int varID, int levelID, int varType, for (int i = 0; i < MAX_DIMENSIONS; ++i) if (count[i] == (size_t)gridsize) position = i; - start[position] = start[position] + startpoint; + start[position] += (size_t)startpoint; count[position] = length; cdfReadDataFP64(streamptr, varID, length, start, count, data); @@ -1010,7 +1010,7 @@ cdfReadVarSliceSPPart(stream_t *streamptr, int varID, int levelID, int varType, for (int i = 0; i < MAX_DIMENSIONS; ++i) if (count[i] == (size_t)gridsize) position = i; - start[position] = start[position] + startpoint; + start[position] += (size_t)startpoint; count[position] = length; cdfReadDataFP32(streamptr, varID, length, start, count, data); @@ -1080,7 +1080,7 @@ cdfReadVarDPPart(stream_t *streamptr, int varID, int varType, int startpoint, si cdfGetSlapDescription(streamptr, varID, &start, &count); int ltime = (TIME_CONSTANT != vlistInqVarTimetype(vlistID, varID)); - start[1 + ltime] = start[1 + ltime] + startpoint; + start[1 + ltime] += (size_t)startpoint; count[1 + ltime] = length; cdf_get_vara_double(streamptr->fileID, ncvarid, start, count, data); @@ -1101,7 +1101,7 @@ cdfReadVarSPPart(stream_t *streamptr, int varID, int varType, int startpoint, si cdfGetSlapDescription(streamptr, varID, &start, &count); int ltime = (TIME_CONSTANT != vlistInqVarTimetype(vlistID, varID)); - start[1 + ltime] = start[1 + ltime] + startpoint; + start[1 + ltime] = (size_t)startpoint; count[1 + ltime] = length; cdf_get_vara_float(streamptr->fileID, ncvarid, start, count, data); @@ -1157,7 +1157,8 @@ streamReadVarSlicePart(int streamID, int varID, int levelID, int varType, int st SizeType *numMissVals, int memtype) { size_t numMiss = 0; - if (cdiStreamReadVarSlicePart(streamID, varID, levelID, varType, start, size, memtype, data, &numMiss)) + if (cdiStreamReadVarSlicePart(streamID, varID, levelID, varType, + start, (size_t)size, memtype, data, &numMiss)) { Error("Unexpected error returned from cdiStreamReadVarSlicePart()!"); } @@ -1168,7 +1169,7 @@ void streamReadVarPart(int streamID, int varID, int varType, int start, SizeType size, void *data, SizeType *numMissVals, int memtype) { size_t numMiss = 0; - cdiStreamReadVarPart(streamID, varID, varType, start, size, memtype, data, &numMiss); + cdiStreamReadVarPart(streamID, varID, varType, start, (size_t)size, memtype, data, &numMiss); *numMissVals = (SizeType) numMiss; } diff --git a/src/cdf_write.c b/src/cdf_write.c index 1c3a3bef184fbb3c7a99de1d1d73abe2759283ab..e0f884bd952da5c270a6bf0b7d591a8c298cc22a 100644 --- a/src/cdf_write.c +++ b/src/cdf_write.c @@ -1008,7 +1008,9 @@ cdfDefVar(stream_t *streamptr, int varID) char axis[5]; int dims[4]; size_t chunks[4]; - int ndims = cdfDefineDimsAndChunks(streamptr, varID, xid, yid, zid, gridsize, dimorder, dims, useChunks, chunks, axis, &iax); + int ndims = cdfDefineDimsAndChunks(streamptr, varID, xid, yid, zid, + (size_t)gridsize, dimorder, dims, + useChunks, chunks, axis, &iax); char name[CDI_MAX_NAME]; int length = CDI_MAX_NAME; @@ -1096,7 +1098,8 @@ cdfDefVar(stream_t *streamptr, int varID) bool zaxisIsScalar = (zid == CDI_UNDEFID) ? (zaxisInqScalar(zaxisID) > 0) : false; int nczvarID = (zaxisIsScalar || zaxistype == ZAXIS_CHAR) ? streamptr->nczvarID[zaxisindex] : CDI_UNDEFID; - cdfDefineCoordinates(streamptr, ncvarID, nczvarID, gridtype, gridID, gridindex, xid, yid, gridsize, axis, iax); + cdfDefineCoordinates(streamptr, ncvarID, nczvarID, gridtype, gridID, + gridindex, xid, yid, (size_t)gridsize, axis, iax); cdfDefVarPacking(streamptr, ncvarID, xtype, vlistID, varID); @@ -1503,7 +1506,7 @@ cdf_write_var(stream_t *streamptr, int varID, int memtype, const void *data, siz if (numMissVals > 0) cdfDefVarMissval(streamptr, varID, dtype, 1); - size_t nvals = gridInqSize(gridID) * (size_t) (zaxisInqSize(zaxisID)); + size_t nvals = (size_t)gridInqSize(gridID) * (size_t) (zaxisInqSize(zaxisID)); bool swapxy = false; cdf_write_var_data(fileID, vlistID, varID, ncvarID, dtype, nvals, xsize, ysize, swapxy, start, count, memtype, data, numMissVals); @@ -1600,7 +1603,7 @@ cdf_write_var_chunk(stream_t *streamptr, int varID, int memtype, const int rect[ if (numMissVals > 0) cdfDefVarMissval(streamptr, varID, dtype, 1); - size_t nvals = gridInqSize(gridID) * (size_t) (zaxisInqSize(zaxisID)); + size_t nvals = (size_t)gridInqSize(gridID) * (size_t)zaxisInqSize(zaxisID); bool swapxy = false; cdf_write_var_data(fileID, vlistID, varID, ncvarID, dtype, nvals, xsize, ysize, swapxy, start, count, memtype, data, numMissVals); @@ -1687,7 +1690,7 @@ cdf_write_var_slice(stream_t *streamptr, int varID, int levelID, int memtype, co if (numMissVals > 0) cdfDefVarMissval(streamptr, varID, dtype, 1); - size_t nvals = gridInqSize(gridID); + size_t nvals = (size_t)gridInqSize(gridID); cdf_write_var_data(fileID, vlistID, varID, ncvarID, dtype, nvals, xsize, ysize, swapxy, start, count, memtype, data, numMissVals); } diff --git a/src/cdi_int.h b/src/cdi_int.h index 00c9bb1ff0f687796a75f46efb0dc6e7fa8a4b65..ecd2be64572cc784beecd44e4cb3ef66c0776c8b 100644 --- a/src/cdi_int.h +++ b/src/cdi_int.h @@ -534,8 +534,8 @@ extern "C" { void cdiDefTableID(int tableID); -void gridGenXvals(int xsize, double xfirst, double xlast, double xinc, double *xvals); -void gridGenYvals(int gridtype, int ysize, double yfirst, double ylast, double yinc, double *yvals); +void gridGenXvals(size_t xsize, double xfirst, double xlast, double xinc, double *xvals); +void gridGenYvals(int gridtype, size_t ysize, double yfirst, double ylast, double yinc, double *yvals); static inline void cdi_check_gridsize_int_limit(const char *format, SizeType gridsize) diff --git a/src/grb_read.c b/src/grb_read.c index 70b793409d8743d3404e1ceb356c17fcadf5cf7e..40e5b7aa7f16d28c5e3644add5760f43e72e4928 100644 --- a/src/grb_read.c +++ b/src/grb_read.c @@ -134,7 +134,7 @@ grb_read_raw_data(stream_t *streamptr, int tsID, int recID, int memType, void *g size_t recsize = streamptr->tsteps[tsID].records[recID].size; int gridID = vlistInqVarGrid(vlistID, varID); - size_t gridsize = gridInqSize(gridID); + size_t gridsize = (size_t)gridInqSize(gridID); if (CDI_Debug) Message("gridID = %d gridsize = %zu", gridID, gridsize); void *cgribexp = (gribbuffer && streamptr->record->objectp) ? streamptr->record->objectp : NULL; @@ -163,7 +163,7 @@ grb_read_raw_data(stream_t *streamptr, int tsID, int recID, int memType, void *g if (fileRead(fileID, gribbuffer, recsize) != recsize) Error("Failed to read GRIB record!"); if (resetFilePos) fileSetPos(fileID, currentfilepos, SEEK_SET); - if (!resetFilePos) streamptr->numvals += gridsize; + if (!resetFilePos) streamptr->numvals += (SizeType)gridsize; } return (JobArgs){ @@ -335,7 +335,7 @@ grb_read_var(stream_t *streamptr, int varID, int memType, void *data, size_t *nu int fileID = streamptr->fileID; int gridID = vlistInqVarGrid(vlistID, varID); - size_t gridsize = gridInqSize(gridID); + size_t gridsize = (size_t)gridInqSize(gridID); off_t currentfilepos = fileGetPos(fileID); @@ -348,7 +348,7 @@ grb_read_var(stream_t *streamptr, int varID, int memType, void *data, size_t *nu for (int levelID = 0; levelID < nlevs; levelID++) { int recID = streamptr->vars[varID].recordTable[isub].recordID[levelID]; - size_t offset = levelID * gridsize; + size_t offset = (size_t)levelID * gridsize; void *datap = (memType == MEMTYPE_FLOAT) ? (void *) ((float *) data + offset) : (void *) ((double *) data + offset); *numMissVals += grb_read_and_decode_record(streamptr, recID, memType, datap, false); diff --git a/src/grb_write.c b/src/grb_write.c index e7cee6d2a0d33f599f557e43f5e60c75442beccb..4f47ac9ccf579dcdc5aed14a7d35423c79f4f9ca 100644 --- a/src/grb_write.c +++ b/src/grb_write.c @@ -462,14 +462,14 @@ grb_write_var(stream_t *streamptr, int varID, int memtype, const void *data, siz { int vlistID = streamptr->vlistID, gridID = vlistInqVarGrid(vlistID, varID), zaxisID = vlistInqVarZaxis(vlistID, varID), nlevs = zaxisInqSize(zaxisID); - size_t gridsize = gridInqSize(gridID); + size_t gridsize = (size_t)gridInqSize(gridID); double missval = vlistInqVarMissval(vlistID, varID); size_t chunkLen = gridsize; if (memtype == MEMTYPE_FLOAT) for (int levelID = 0; levelID < nlevs; levelID++) { - const float *restrict fdata = ((const float *) data) + levelID * gridsize; + const float *restrict fdata = ((const float *) data) + (size_t)levelID * gridsize; size_t numMissVals_slice = 0; if (numMissVals) @@ -480,7 +480,7 @@ grb_write_var(stream_t *streamptr, int varID, int memtype, const void *data, siz else for (int levelID = 0; levelID < nlevs; levelID++) { - const double *restrict ddata = ((const double *) data) + levelID * gridsize; + const double *restrict ddata = ((const double *) data) + (size_t)levelID * gridsize; size_t numMissVals_slice = 0; if (numMissVals) diff --git a/src/gribapi_utilities.c b/src/gribapi_utilities.c index 03734fb55d2f8508da73403b82639360ec181b96..01d00704f0ae941c6c1dd59bfa697ebd2440c323 100644 --- a/src/gribapi_utilities.c +++ b/src/gribapi_utilities.c @@ -727,7 +727,7 @@ gribapiGetGridRegular(grib_handle *gh, grid_t *grid, int editionNumber, int grid // correct xinc if necessary if (IS_EQUAL(grid->x.first, 0) && grid->x.last > 354 && grid->x.last < 360) { - double xinc = 360. / grid->x.size; + double xinc = 360. / (double)grid->x.size; if (fabs(grid->x.inc - xinc) > 0.0) { grid->x.inc = xinc; diff --git a/src/grid.c b/src/grid.c index 1a9f03eec6cfb5ce6351e0cc6315f0e98aed2a40..ccddea16e8d30a6b44ea38aba2f95e8a535b40be 100644 --- a/src/grid.c +++ b/src/grid.c @@ -337,36 +337,36 @@ cdiGridTypeInit(grid_t *gridptr, int gridtype, size_t size) // used also in CDO void -gridGenXvals(int xsize, double xfirst, double xlast, double xinc, double *restrict xvals) +gridGenXvals(size_t xsize, double xfirst, double xlast, double xinc, double *restrict xvals) { if (fabs(xinc) <= 0 && xsize > 1) { if (xfirst >= xlast) { while (xfirst >= xlast) xlast += 360; - xinc = (xlast - xfirst) / (xsize); + xinc = (xlast - xfirst) / (double)xsize; } else { - xinc = (xlast - xfirst) / (xsize - 1); + xinc = (xlast - xfirst) / (double)(xsize - 1); } } - for (int i = 0; i < xsize; ++i) xvals[i] = xfirst + i * xinc; + for (size_t i = 0; i < xsize; ++i) xvals[i] = xfirst + (double)i * xinc; } static void -calc_gaussgrid(double *restrict yvals, int ysize, double yfirst, double ylast) +calc_gaussgrid(double *restrict yvals, size_t ysize, double yfirst, double ylast) { - double *restrict yw = (double *) malloc((size_t) ysize * sizeof(double)); - gaussianLatitudes((size_t) ysize, yvals, yw); + double *restrict yw = malloc(ysize * sizeof(double)); + gaussianLatitudes(ysize, yvals, yw); free(yw); - for (int i = 0; i < ysize; i++) yvals[i] = asin(yvals[i]) / M_PI * 180.0; + for (size_t i = 0; i < ysize; i++) yvals[i] = asin(yvals[i]) / M_PI * 180.0; if (yfirst < ylast && yfirst > -90.0 && ylast < 90.0) { - int yhsize = ysize / 2; - for (int i = 0; i < yhsize; i++) + size_t yhsize = ysize / 2; + for (size_t i = 0; i < yhsize; i++) { const double ytmp = yvals[i]; yvals[i] = yvals[ysize - i - 1]; @@ -376,7 +376,7 @@ calc_gaussgrid(double *restrict yvals, int ysize, double yfirst, double ylast) } static void -gridGenYvalsGaussian(int ysize, double yfirst, double ylast, double *restrict yvals) +gridGenYvalsGaussian(size_t ysize, double yfirst, double ylast, double *restrict yvals) { const double deleps = 0.002; @@ -386,22 +386,26 @@ gridGenYvalsGaussian(int ysize, double yfirst, double ylast, double *restrict yv if (fabs(yvals[0] - yfirst) > deleps || fabs(yvals[ysize - 1] - ylast) > deleps) { bool lfound = false; - int ny = (int) (180. / (fabs(ylast - yfirst) / (ysize - 1)) + 0.5); + long ny = (long) (180. / (fabs(ylast - yfirst) / (double)(ysize - 1)) + 0.5); ny -= ny % 2; - if (ny > ysize && ny < 4096) + if (ny > 0 && (size_t)ny > ysize && ny < 4096) { double *ytmp = (double *) Malloc((size_t) ny * sizeof(double)); - calc_gaussgrid(ytmp, ny, yfirst, ylast); + calc_gaussgrid(ytmp, (size_t)ny, yfirst, ylast); - int i; - for (i = 0; i < (ny - ysize); i++) - if (fabs(ytmp[i] - yfirst) < deleps) break; - int nstart = i; + size_t nstart = (size_t)ny-ysize; + for (size_t i = 0; i < ((size_t)ny - ysize); i++) + if (fabs(ytmp[i] - yfirst) < deleps) + { + nstart = i; + break; + } - lfound = (nstart + ysize - 1) < ny && fabs(ytmp[nstart + ysize - 1] - ylast) < deleps; + lfound = (nstart + ysize - 1) < (size_t)ny && fabs(ytmp[nstart + ysize - 1] - ylast) < deleps; if (lfound) { - for (i = 0; i < ysize; i++) yvals[i] = ytmp[i + nstart]; + for (size_t i = 0; i < ysize; i++) + yvals[i] = ytmp[i + nstart]; } if (ytmp) Free(ytmp); @@ -410,7 +414,7 @@ gridGenYvalsGaussian(int ysize, double yfirst, double ylast, double *restrict yv if (!lfound) { Warning("Cannot calculate gaussian latitudes for lat1 = %g latn = %g!", yfirst, ylast); - for (int i = 0; i < ysize; i++) yvals[i] = 0; + for (size_t i = 0; i < ysize; i++) yvals[i] = 0; yvals[0] = yfirst; yvals[ysize - 1] = ylast; } @@ -418,26 +422,26 @@ gridGenYvalsGaussian(int ysize, double yfirst, double ylast, double *restrict yv } static void -gridGenYvalsRegular(int ysize, double yfirst, double ylast, double yinc, double *restrict yvals) +gridGenYvalsRegular(size_t ysize, double yfirst, double ylast, double yinc, double *restrict yvals) { if (fabs(yinc) <= 0 && ysize > 1) { if (IS_EQUAL(yfirst, ylast) && IS_NOT_EQUAL(yfirst, 0)) ylast *= -1; if (yfirst > ylast) - yinc = (yfirst - ylast) / (ysize - 1); + yinc = (yfirst - ylast) / (double)(ysize - 1); else if (yfirst < ylast) - yinc = (ylast - yfirst) / (ysize - 1); + yinc = (ylast - yfirst) / (double)(ysize - 1); else { if (ysize % 2 != 0) { - yinc = 180.0 / (ysize - 1); + yinc = 180.0 / (double)(ysize - 1); yfirst = -90; } else { - yinc = 180.0 / ysize; + yinc = 180.0 / (double)ysize; yfirst = -90 + yinc / 2; } } @@ -445,12 +449,12 @@ gridGenYvalsRegular(int ysize, double yfirst, double ylast, double yinc, double if (yfirst > ylast && yinc > 0) yinc = -yinc; - for (int i = 0; i < ysize; i++) yvals[i] = yfirst + i * yinc; + for (size_t i = 0; i < ysize; i++) yvals[i] = yfirst + (double)i * yinc; } // used also in CDO void -gridGenYvals(int gridtype, int ysize, double yfirst, double ylast, double yinc, double *restrict yvals) +gridGenYvals(int gridtype, size_t ysize, double yfirst, double ylast, double yinc, double *restrict yvals) { if (gridtype == GRID_GAUSSIAN || gridtype == GRID_GAUSSIAN_REDUCED) { @@ -518,7 +522,8 @@ gridDefYvals(gridID, lats); int gridCreate(int gridtype, SizeType size) { - if (CDI_Debug) Message("gridtype=%s size=%zu", gridNamePtr(gridtype), size); + if (CDI_Debug) + Message("gridtype=%s size=%zu", gridNamePtr(gridtype), (size_t)size); xassert(size); gridInit(); @@ -996,7 +1001,7 @@ gridInqSize(int gridID) } static int -nsp2trunc(int nsp) +nsp2trunc(size_t nsp) { /* nsp = (trunc+1)*(trunc+1) */ /* => trunc^2 + 3*trunc - (x-2) = 0 */ @@ -1004,7 +1009,7 @@ nsp2trunc(int nsp) /* with: y^2 + p*y + q = 0 */ /* y = -p/2 +- sqrt((p/2)^2 - q) */ /* p = 3 and q = - (x-2) */ - int trunc = (int) (sqrt(nsp * 4 + 1.) - 3) / 2; + int trunc = (int)(sqrt((double)nsp * 4 + 1.) - 3) / 2; return trunc; } @@ -1278,7 +1283,7 @@ gridInqReducedPoints(int gridID, int *reducedPoints) memcpy(reducedPoints, gridptr->reducedPoints, (size_t) gridptr->reducedPointsSize * sizeof(int)); } -static size_t +static SizeType gridInqMaskSerialGeneric(grid_t *gridptr, mask_t **internalMask, int *restrict mask) { size_t size = gridptr->size; @@ -1294,13 +1299,13 @@ gridInqMaskSerialGeneric(grid_t *gridptr, mask_t **internalMask, int *restrict m else size = 0; - return size; + return (SizeType)size; } static SizeType gridInqMaskSerial(grid_t *gridptr, int *mask) { - return (SizeType) gridInqMaskSerialGeneric(gridptr, &gridptr->mask, mask); + return gridInqMaskSerialGeneric(gridptr, &gridptr->mask, mask); } int @@ -1346,7 +1351,7 @@ gridDefMask(int gridID, const int *mask) static int gridInqMaskGMESerial(grid_t *gridptr, int *mask_gme) { - return gridInqMaskSerialGeneric(gridptr, &gridptr->mask_gme, mask_gme); + return (int)gridInqMaskSerialGeneric(gridptr, &gridptr->mask_gme, mask_gme); } int @@ -1758,7 +1763,7 @@ grid_calc_increment(size_t size, const double *vals) { if (size > 1) { - double inc = (vals[size - 1] - vals[0]) / (size - 1); + double inc = (vals[size - 1] - vals[0]) / (double)(size - 1); const double abs_inc = fabs(inc); for (size_t i = 1; i < size; ++i) if (fabs(fabs(vals[i - 1] - vals[i]) - abs_inc) > 0.01 * abs_inc) @@ -1778,7 +1783,7 @@ grid_calc_increment_in_meter(SizeType size, const double *vals) { if (size > 1) { - const double inc = (vals[size - 1] - vals[0]) / (size - 1); + const double inc = (vals[size - 1] - vals[0]) / (double)(size - 1); return round(fabs(inc)); } @@ -2056,7 +2061,7 @@ grid_check_cyclic(grid_t *gridptr) if (IS_NOT_EQUAL(xval1, xvaln)) { double xinc = xval2 - xval1; - if (IS_EQUAL(xinc, 0)) xinc = (xvaln - xval1) / (xsize - 1); + if (IS_EQUAL(xinc, 0)) xinc = (xvaln - xval1) / (double)(xsize - 1); const double x0 = xvaln + xinc - 360; @@ -2192,11 +2197,12 @@ compareXYvals2(grid_t *gridRef, grid_t *gridTest) if (!differ && gridTest->x.vals) differ = fabs(inqXValTest(gridTest, 0) - inqXValRef(gridRef, 0)) > 1.e-9 - || fabs(inqXValTest(gridTest, gridsize - 1) - inqXValRef(gridRef, gridsize - 1)) > 1.e-9; + || fabs(inqXValTest(gridTest, (SizeType)(gridsize - 1)) + - inqXValRef(gridRef, (SizeType)(gridsize - 1))) > 1.e-9; if (!differ && gridTest->y.vals) differ = fabs(inqYValTest(gridTest, 0) - inqYValRef(gridRef, 0)) > 1.e-9 - || fabs(inqYValTest(gridTest, gridsize - 1) - inqYValRef(gridRef, gridsize - 1)) > 1.e-9; + || fabs(inqYValTest(gridTest, (SizeType)gridsize - 1) - inqYValRef(gridRef, (SizeType)gridsize - 1)) > 1.e-9; return differ; } @@ -2546,7 +2552,7 @@ gridCompareP(void *gridptr1, void *gridptr2) if (g1_xbounds) { xassert(g1->nvertex); - size_t size = g1->nvertex * (isIrregular ? g1->size : g1->x.size); + size_t size = (size_t)g1->nvertex * (isIrregular ? g1->size : g1->x.size); xassert(size); for (size_t i = 0; i < size; i++) @@ -2560,7 +2566,7 @@ gridCompareP(void *gridptr1, void *gridptr2) if (g1_ybounds) { xassert(g1->nvertex); - size_t size = g1->nvertex * (isIrregular ? g1->size : g1->y.size); + size_t size = (size_t)g1->nvertex * (isIrregular ? g1->size : g1->y.size); xassert(size); for (size_t i = 0; i < size; i++) @@ -2631,8 +2637,8 @@ grid_complete(grid_t *grid) case GRID_PROJECTION: case GRID_CHARXY: { - if (grid->x.size > 0) gridDefXsize(gridID, grid->x.size); - if (grid->y.size > 0) gridDefYsize(gridID, grid->y.size); + if (grid->x.size > 0) gridDefXsize(gridID, (SizeType)grid->x.size); + if (grid->y.size > 0) gridDefYsize(gridID, (SizeType)grid->y.size); if (gridtype == GRID_GAUSSIAN) gridDefNP(gridID, grid->np); @@ -2641,7 +2647,7 @@ grid_complete(grid_t *grid) if (grid->x.flag == 2) { assert(gridtype != GRID_UNSTRUCTURED && gridtype != GRID_CURVILINEAR); - double *xvals = (double *) Malloc(grid->x.size * sizeof(double)); + double *xvals = Malloc(grid->x.size * sizeof(double)); gridGenXvals(grid->x.size, grid->x.first, grid->x.last, grid->x.inc, xvals); grid->x.vals = xvals; // gridDefXinc(gridID, grid->x.inc); @@ -2794,7 +2800,8 @@ gridGenerate(const grid_t *grid) cdiCopyVarKey(&grid->keys, CDI_KEY_SCANNINGMODE, &gridptr->keys); if (gridtype == GRID_PROJECTION) gridptr->name = strdup(grid->name); - if (gridtype == GRID_GAUSSIAN_REDUCED) gridDefReducedPoints(gridID, grid->y.size, grid->reducedPoints); + if (gridtype == GRID_GAUSSIAN_REDUCED) + gridDefReducedPoints(gridID, (int)grid->y.size, grid->reducedPoints); gridptr->trunc = grid->trunc; gridptr->lcomplex = grid->lcomplex; gridptr->gme.nd = grid->gme.nd; @@ -2812,7 +2819,8 @@ gridGenerate(const grid_t *grid) static void grid_copy_base_array_fields(grid_t *gridptrOrig, grid_t *gridptrDup) { - size_t reducedPointsSize = (SizeType) gridptrOrig->reducedPointsSize; + size_t reducedPointsSize = gridptrOrig->reducedPointsSize > 0 ? + (size_t)gridptrOrig->reducedPointsSize : (size_t)0; size_t gridsize = gridptrOrig->size; int gridtype = gridptrOrig->type; bool isIrregular = grid_is_irregular(gridtype); @@ -2838,14 +2846,16 @@ grid_copy_base_array_fields(grid_t *gridptrOrig, grid_t *gridptrDup) if (gridptrOrig->x.bounds != NULL) { - size_t size = (isIrregular ? gridsize : gridptrOrig->x.size) * gridptrOrig->nvertex; + size_t size = (isIrregular ? gridsize : gridptrOrig->x.size) + * (size_t)gridptrOrig->nvertex; gridptrDup->x.bounds = (double *) Malloc(size * sizeof(double)); memcpy(gridptrDup->x.bounds, gridptrOrig->x.bounds, size * sizeof(double)); } if (gridptrOrig->y.bounds != NULL) { - size_t size = (isIrregular ? gridsize : gridptrOrig->y.size) * gridptrOrig->nvertex; + size_t size = (isIrregular ? gridsize : gridptrOrig->y.size) + * (size_t)gridptrOrig->nvertex; gridptrDup->y.bounds = (double *) Malloc(size * sizeof(double)); memcpy(gridptrDup->y.bounds, gridptrOrig->y.bounds, size * sizeof(double)); } @@ -2911,7 +2921,7 @@ gridCompress(int gridID) { if (gridptr->mask_gme != NULL) { - size_t gridsize = gridInqSize(gridID); + size_t gridsize = (size_t)gridInqSize(gridID); size_t nv = (size_t) gridptr->nvertex; double *restrict area = (double *) gridptr->vtable->inqAreaPtr(gridptr), *restrict xvals = (double *) gridptr->vtable->inqXValsPtr(gridptr), @@ -2943,9 +2953,9 @@ gridCompress(int gridID) /* fprintf(stderr, "grid compress %d %d %d\n", i, j, gridsize); */ gridsize = nselect; - gridptr->size = (int) gridsize; - gridptr->x.size = (int) gridsize; - gridptr->y.size = (int) gridsize; + gridptr->size = gridsize; + gridptr->x.size = gridsize; + gridptr->y.size = gridsize; double **resizeP[] = { &gridptr->x.vals, &gridptr->y.vals, &gridptr->area, &gridptr->x.bounds, &gridptr->y.bounds }; size_t newSize[] = { gridsize, gridsize, gridsize, nv * gridsize, nv * gridsize }; @@ -3186,7 +3196,8 @@ gridInqXboundsPart(int gridID, int start, SizeType size, double *xbounds) { grid_t *gridptr = grid_to_pointer(gridID); const double *gridptr_xbounds = gridptr->vtable->inqXBoundsPtr(gridptr); - if (gridptr_xbounds && size && xbounds) memcpy(xbounds, gridptr_xbounds + start, size * sizeof(double)); + if (gridptr_xbounds && size && xbounds) + memcpy(xbounds, gridptr_xbounds + start, (size_t)size * sizeof(double)); return size; } @@ -3196,7 +3207,8 @@ gridInqYboundsPart(int gridID, int start, SizeType size, double *ybounds) { grid_t *gridptr = grid_to_pointer(gridID); const double *gridptr_ybounds = gridptr->vtable->inqYBoundsPtr(gridptr); - if (gridptr_ybounds && size && ybounds) memcpy(ybounds, gridptr_ybounds + start, size * sizeof(double)); + if (gridptr_ybounds && size && ybounds) + memcpy(ybounds, gridptr_ybounds + start, (size_t)size * sizeof(double)); return size; } @@ -3376,13 +3388,13 @@ gridPrintKernel(int gridID, int opt, FILE *fp) { char attstr[CDI_MAX_NAME]; char attstr2[CDI_MAX_NAME]; - size_t nxvals = gridInqXvals(gridID, NULL); - size_t nyvals = gridInqYvals(gridID, NULL); + size_t nxvals = (size_t)gridInqXvals(gridID, NULL); + size_t nyvals = (size_t)gridInqYvals(gridID, NULL); int type = gridInqType(gridID); - size_t gridsize = gridInqSize(gridID); - size_t xsize = gridInqXsize(gridID); - size_t ysize = gridInqYsize(gridID); + size_t gridsize = (size_t)gridInqSize(gridID); + size_t xsize = (size_t)gridInqXsize(gridID); + size_t ysize = (size_t)gridInqYsize(gridID); int nvertex = gridInqNvertex(gridID); int datatype; cdiInqKeyInt(gridID, CDI_GLOBAL, CDI_KEY_DATATYPE, &datatype); @@ -4546,7 +4558,8 @@ gridUnpackArrays(grid_t *gridP, int memberMask, char *unpackBuffer, int unpackBu if (memberMask & gridHasReducedPointsFlag) { xassert(gridP->reducedPointsSize); - gridP->reducedPoints = (int *) Malloc((size_t) gridP->reducedPointsSize * sizeof(int)); + gridP->reducedPoints + = Malloc((size_t) gridP->reducedPointsSize * sizeof(int)); serializeUnpack(unpackBuffer, unpackBufferSize, unpackBufferPos, gridP->reducedPoints, gridP->reducedPointsSize, CDI_DATATYPE_INT, context); serializeUnpack(unpackBuffer, unpackBufferSize, unpackBufferPos, &d, 1, CDI_DATATYPE_UINT32, context); diff --git a/src/pio_dist_grid.c b/src/pio_dist_grid.c index 6a5fc4c9fb7d4158a0223bcaefa95c765b7d2de1..d9bbe82414d3f2ff41d4c3fc06a39a8ab0b9c2be 100644 --- a/src/pio_dist_grid.c +++ b/src/pio_dist_grid.c @@ -133,8 +133,11 @@ struct cdiPioDistGridExtraData #endif #ifdef HAVE_PPM_DIST_ARRAY_H -static void cdiPioDistGridInit(grid_t *gridptr, int gridtype, int size, int xsize, int ysize, int nvertex, - const int (*xy_decomposition)[2], Xt_idxlist partDesc2D, Xt_idxlist partDescX, Xt_idxlist partDescY); +static void +cdiPioDistGridInit(grid_t *gridptr, int gridtype, + size_t size, size_t xsize, size_t ysize, int nvertex, + const int (*xy_decomposition)[2], Xt_idxlist partDesc2D, + Xt_idxlist partDescX, Xt_idxlist partDescY); #endif cdiResH @@ -150,7 +153,8 @@ cdiPioDistGridCreate(int gridtype, int size, int xsize, int ysize, int nvertex, } gridDefNvertex(gridID, nvertex); grid_t *gridptr = grid_to_pointer(gridID); - cdiPioDistGridInit(gridptr, gridtype, size, xsize, ysize, nvertex, xy_decomposition, partDesc2D, partDescX, partDescY); + cdiPioDistGridInit(gridptr, gridtype, (size_t)size, (size_t)xsize, (size_t)ysize, + nvertex, xy_decomposition, partDesc2D, partDescX, partDescY); return gridID; #else (void) gridtype; @@ -421,11 +425,14 @@ static bool cdiPioDistGridInitOnceState = false; #endif static void -cdiPioDistGridInit(grid_t *gridptr, int gridtype, int size, int xsize, int ysize, int nvertex, const int (*xy_decomposition)[2], +cdiPioDistGridInit(grid_t *gridptr, int gridtype, + size_t size, size_t xsize, size_t ysize, int nvertex, + const int (*xy_decomposition)[2], Xt_idxlist partDesc2D, Xt_idxlist partDescX, Xt_idxlist partDescY) { CDI_PIO_DIST_GRID_INIT_ONCE(); - struct cdiPioDistGridExtraData *extraData = (struct cdiPioDistGridExtraData *) (gridptr->extraData = Malloc(sizeof(*extraData))); + struct cdiPioDistGridExtraData *extraData + = gridptr->extraData = Malloc(sizeof(*extraData)); extraData->rmaEnabled = false; struct PPM_global_array_desc *sub_arrays = extraData->sub_arrays; sub_arrays[cdiPioGDsaXVals].element_dt = MPI_DOUBLE; @@ -447,15 +454,16 @@ cdiPioDistGridInit(grid_t *gridptr, int gridtype, int size, int xsize, int ysize { sub_arrays[saIdx].a_rank = 2; sub_arrays[saIdx].rect[0].first = 0; - sub_arrays[saIdx].rect[0].size = ysize; + sub_arrays[saIdx].rect[0].size = (int32_t)ysize; sub_arrays[saIdx].rect[1].first = 0; - sub_arrays[saIdx].rect[1].size = xsize; + sub_arrays[saIdx].rect[1].size = (int32_t)xsize; extraData->defRedists[saIdx] = NULL; } irregular = true; break; case GRID_UNSTRUCTURED: - for (size_t saIdx = 0; saIdx < cdiPioGDsaNum; ++saIdx) sub_arrays[saIdx].rect[0].size = size; + for (size_t saIdx = 0; saIdx < cdiPioGDsaNum; ++saIdx) + sub_arrays[saIdx].rect[0].size = (int32_t)size; irregular = true; /*-fallthrough*/ case GRID_GENERIC: @@ -476,13 +484,13 @@ cdiPioDistGridInit(grid_t *gridptr, int gridtype, int size, int xsize, int ysize } if (irregular) break; /* FIXME: make the following three 2D */ - sub_arrays[cdiPioGDsaArea].rect[0].size = size; - sub_arrays[cdiPioGDsaMask].rect[0].size = size; - sub_arrays[cdiPioGDsaMaskGME].rect[0].size = size; - sub_arrays[cdiPioGDsaXVals].rect[0].size = xsize; - sub_arrays[cdiPioGDsaYVals].rect[0].size = ysize; - sub_arrays[cdiPioGDsaXBounds].rect[0].size = xsize; - sub_arrays[cdiPioGDsaYBounds].rect[0].size = ysize; + sub_arrays[cdiPioGDsaArea].rect[0].size = (int32_t)size; + sub_arrays[cdiPioGDsaMask].rect[0].size = (int32_t)size; + sub_arrays[cdiPioGDsaMaskGME].rect[0].size = (int32_t)size; + sub_arrays[cdiPioGDsaXVals].rect[0].size = (int32_t)xsize; + sub_arrays[cdiPioGDsaYVals].rect[0].size = (int32_t)ysize; + sub_arrays[cdiPioGDsaXBounds].rect[0].size = (int32_t)xsize; + sub_arrays[cdiPioGDsaYBounds].rect[0].size = (int32_t)ysize; break; case GRID_GAUSSIAN_REDUCED: default: Error("Unexpected or unsupported grid type %d", gridtype); @@ -1079,23 +1087,26 @@ cdiPioDistGridDefYVals(grid_t *gridptr, const double *yvals) } static double -cdiPioDistGridInqXorYVal(grid_t *gridptr, enum cdiPioGDsa saIdx, const double *vals, int index) +cdiPioDistGridInqXorYVal(grid_t *gridptr, enum cdiPioGDsa saIdx, + const double *vals, SizeType index) { double val = 0; if (vals) { - struct cdiPioDistGridExtraData *extraData = (struct cdiPioDistGridExtraData *) gridptr->extraData; + struct cdiPioDistGridExtraData *extraData + = (struct cdiPioDistGridExtraData *) gridptr->extraData; if (index == 0) { struct axisReduction *aReduce = extraData->aReduce + saIdx; return aReduce->first; } - else if (index == gridptr->size - 1) + else if ((size_t)index == gridptr->size - 1) { struct axisReduction *aReduce = extraData->aReduce + saIdx; return aReduce->last; } - const struct PPM_global_array_desc *sub_array_desc = extraData->sub_arrays + saIdx; + const struct PPM_global_array_desc *sub_array_desc + = extraData->sub_arrays + saIdx; int32_t coord[cdiPioGDsaMaxRank]; if (sub_array_desc->a_rank == 1) coord[0] = index; @@ -1480,9 +1491,12 @@ cdiPioDistGridUnpackArrays(grid_t *gridptr, int memberMask, char *unpackBuffer, } else if (type == GRID_CURVILINEAR) { - Xt_int global_size[cdiPioGDsaMaxRank] = { gridptr->y.size, gridptr->x.size }, local_start[cdiPioGDsaMaxRank]; + Xt_int global_size[cdiPioGDsaMaxRank] + = { (Xt_int)gridptr->y.size, (Xt_int)gridptr->x.size }, + local_start[cdiPioGDsaMaxRank]; int local_size[cdiPioGDsaMaxRank]; - Xt_idxlist *partDescClient2D = (Xt_idxlist *) (Malloc((size_t) numClientsInGroup * sizeof(*partDescClient2D))); + Xt_idxlist *partDescClient2D + = Malloc((size_t) numClientsInGroup * sizeof(*partDescClient2D)); for (size_t rankOfs = 0; rankOfs < (size_t) numClientsInGroup; ++rankOfs) { for (size_t dim = 0; dim < cdiPioGDsaMaxRank; ++dim) @@ -1499,7 +1513,9 @@ cdiPioDistGridUnpackArrays(grid_t *gridptr, int memberMask, char *unpackBuffer, } else { - Xt_int global_size[cdiPioGDsaMaxRank] = { gridptr->y.size, gridptr->x.size }, local_start[cdiPioGDsaMaxRank]; + Xt_int global_size[cdiPioGDsaMaxRank] + = { (Xt_int)gridptr->y.size, (Xt_int)gridptr->x.size }, + local_start[cdiPioGDsaMaxRank]; int local_size[cdiPioGDsaMaxRank]; /* describe 2D decomposition via section for later collection * construction */ @@ -1593,19 +1609,24 @@ static bool cdiPioDistGridCompareXYvals(grid_t *gridRef, grid_t *gridTest) { bool differ = false; - int xsizeTest = gridTest->x.size, ysizeTest = gridTest->y.size; - if (gridRef->vtable == &cdiPioDistGridVtable && gridTest->vtable == &cdiPioDistGridVtable) + size_t xsizeTest = gridTest->x.size, ysizeTest = gridTest->y.size; + if (gridRef->vtable == &cdiPioDistGridVtable + && gridTest->vtable == &cdiPioDistGridVtable) { - if (!differ && xsizeTest > 0 && xsizeTest == gridRef->vtable->inqXVals(gridRef, NULL)) + if (!differ && xsizeTest > 0 + && xsizeTest == (size_t)gridRef->vtable->inqXVals(gridRef, NULL)) { - const double *restrict xvalsRef = gridRef->x.vals, *restrict xvalsTest = gridTest->x.vals; - differ = compareGridVals((size_t) xsizeTest, xvalsRef, xvalsTest); + const double *restrict xvalsRef = gridRef->x.vals, + *restrict xvalsTest = gridTest->x.vals; + differ = compareGridVals(xsizeTest, xvalsRef, xvalsTest); } - if (!differ && ysizeTest > 0 && ysizeTest == gridRef->vtable->inqYVals(gridRef, NULL)) + if (!differ && ysizeTest > 0 + && ysizeTest == (size_t)gridRef->vtable->inqYVals(gridRef, NULL)) { - const double *restrict yvalsRef = gridRef->y.vals, *restrict yvalsTest = gridTest->y.vals; - differ = compareGridVals((size_t) ysizeTest, yvalsRef, yvalsTest); + const double *restrict yvalsRef = gridRef->y.vals, + *restrict yvalsTest = gridTest->y.vals; + differ = compareGridVals(ysizeTest, yvalsRef, yvalsTest); } int differReduce = differ; xmpi(MPI_Allreduce(MPI_IN_PLACE, &differReduce, 1, MPI_INT, MPI_LOR, commInqCommCalc())); @@ -1613,7 +1634,8 @@ cdiPioDistGridCompareXYvals(grid_t *gridRef, grid_t *gridTest) } else { - if (xsizeTest != gridRef->vtable->inqXVals(gridRef, NULL) || ysizeTest != gridRef->vtable->inqYVals(gridRef, NULL)) + if (xsizeTest != (size_t)gridRef->vtable->inqXVals(gridRef, NULL) + || ysizeTest != (size_t)gridRef->vtable->inqYVals(gridRef, NULL)) { differ = true; } @@ -1622,14 +1644,14 @@ cdiPioDistGridCompareXYvals(grid_t *gridRef, grid_t *gridTest) /* warn about grid compare of distributed vs. undistributed grid */ Warning("efficiency: comparing data of distributed " "vs. non-distributed grid!"); - double *valsRefCopy = Malloc((size_t) MAX(xsizeTest, ysizeTest) * sizeof(double)); + double *valsRefCopy = Malloc(MAX(xsizeTest, ysizeTest) * sizeof(double)); /* fetch X data */ gridRef->vtable->inqXVals(gridRef, valsRefCopy); - differ = compareGridVals((size_t) xsizeTest, valsRefCopy, gridTest->vtable->inqXValsPtr(gridTest)); + differ = compareGridVals(xsizeTest, valsRefCopy, gridTest->vtable->inqXValsPtr(gridTest)); if (!differ) { gridRef->vtable->inqYVals(gridRef, valsRefCopy); - differ = compareGridVals((size_t) ysizeTest, valsRefCopy, gridTest->vtable->inqYValsPtr(gridTest)); + differ = compareGridVals(ysizeTest, valsRefCopy, gridTest->vtable->inqYValsPtr(gridTest)); } /* todo: handle this collectively, i.e. only compare * indices from chunk and allreduce result */ diff --git a/src/stream_cdf_i.c b/src/stream_cdf_i.c index ea30c581f7a5b32f3b8f7c39990f783a110ab365..2efcb9449cf97800b3d3a4dd2646bb681c0ae611 100644 --- a/src/stream_cdf_i.c +++ b/src/stream_cdf_i.c @@ -2517,8 +2517,8 @@ cdf_read_coordinates(stream_t *streamptr, struct cdfLazyGrid *lazyGrid, ncvar_t } else if (gridPart && gridPart->readPart) { - start[0] = gridPart->start; - count[0] = gridPart->count; + start[0] = (size_t)gridPart->start; + count[0] = (size_t)gridPart->count; readPart = true; } } @@ -2626,7 +2626,7 @@ cdf_read_coordinates(stream_t *streamptr, struct cdfLazyGrid *lazyGrid, ncvar_t if (readPart) { start[1] = 0; - count[1] = grid->nvertex; + count[1] = (size_t)grid->nvertex; } cdf_load_bounds(size * (size_t) grid->nvertex, &ncvars[xvarid], &grid->x.bounds, &lazyGrid->xBoundsGet, readPart, start, count); @@ -2674,7 +2674,7 @@ cdf_read_coordinates(stream_t *streamptr, struct cdfLazyGrid *lazyGrid, ncvar_t if (readPart) { start[1] = 0; - count[1] = grid->nvertex; + count[1] = (size_t)grid->nvertex; } cdf_load_bounds(size * (size_t) grid->nvertex, &ncvars[yvarid], &grid->y.bounds, &lazyGrid->yBoundsGet, readPart, start, count); @@ -2708,7 +2708,8 @@ cdf_read_coordinates(stream_t *streamptr, struct cdfLazyGrid *lazyGrid, ncvar_t int dimid = ncvars[ncvar->rpvarid].dimids[0]; size_t len = ncdims[dimid].len; grid->y.size = len; - grid->reducedPointsSize = len; + assert(len <= INT_MAX); + grid->reducedPointsSize = (int)len; grid->reducedPoints = (int *) Malloc(len * sizeof(int)); cdf_get_var_int(ncvar->ncid, ncvar->rpvarid, grid->reducedPoints); grid->np = ncvar->numLPE; @@ -3049,8 +3050,8 @@ cdf_define_all_grids(stream_t *streamptr, ncgrid_t *ncgrid, int vlistID, ncdim_t if (numCellidx == 2) cdiQueryCellidx(query, count); xsize = count; ysize = count; - gridPart.start = start - 1; - gridPart.count = count; + gridPart.start = (long)start - 1; + gridPart.count = (long)count; gridPart.readPart = true; } } diff --git a/src/stream_cdf_o.c b/src/stream_cdf_o.c index 5b23b356ea5533481f35f92ab547795a50234732..a174955db39c017168c19acc92846af6907822fa 100644 --- a/src/stream_cdf_o.c +++ b/src/stream_cdf_o.c @@ -26,7 +26,7 @@ cdfCopyRecord(stream_t *streamptr2, stream_t *streamptr1) int recID = streamptr1->tsteps[tsID].recIDs[vrecID]; int ivarID = streamptr1->tsteps[tsID].records[recID].varID; int gridID = vlistInqVarGrid(vlistID1, ivarID); - size_t datasize = gridInqSize(gridID); + size_t datasize = (size_t)gridInqSize(gridID); int datatype = vlistInqVarDatatype(vlistID1, ivarID); int memtype = (datatype != CDI_DATATYPE_FLT32) ? MEMTYPE_DOUBLE : MEMTYPE_FLOAT; @@ -649,7 +649,7 @@ cdfDefAxisCommon(stream_t *streamptr, int gridID, int gridIndex, int ndims, bool bool genBounds = false, hasBounds = gridInqPropPresence(gridID, gridAxisInq->bndsQueryKey); bool grid_is_cyclic = (gridIsCircular(gridID) > 0); double *restrict pbounds; - size_t nvertex = gridInqNvertex(gridID); + size_t nvertex = (size_t)gridInqNvertex(gridID); if (CDI_CMOR_Mode && grid_is_cyclic && !hasBounds) { const double *pvals = gridAxisInq->axisValsPtr(gridID); @@ -1458,7 +1458,7 @@ cdf_def_zaxis_hybrid_cf(stream_t *streamptr, int type, int *ncvaridp, int zaxisI int ncbvarid = CDI_UNDEFID; int nvdimID = CDI_UNDEFID; - double *buffer = (double *) malloc(2 * dimlen * sizeof(double)); + double *buffer = Malloc(2 * dimlen * sizeof(double)); double *lbounds = buffer; double *ubounds = buffer + dimlen; double *restrict levels; @@ -1468,7 +1468,7 @@ cdf_def_zaxis_hybrid_cf(stream_t *streamptr, int type, int *ncvaridp, int zaxisI levels = (double *) zaxisInqLevelsPtr(zaxisID); else { - levels = (double *) Malloc(sizeof(*levels) * dimlen); + levels = Malloc(sizeof(*levels) * dimlen); for (size_t i = 0; i < dimlen; ++i) levels[i] = (double) (i + 1); } @@ -1535,7 +1535,7 @@ cdf_def_zaxis_hybrid_cf(stream_t *streamptr, int type, int *ncvaridp, int zaxisI if (ncbvarid != CDI_UNDEFID) { - double *restrict zbounds = (double *) Malloc(2 * dimlen * sizeof(*zbounds)); + double *restrict zbounds = Malloc(2 * dimlen * sizeof(*zbounds)); for (size_t i = 0; i < dimlen; ++i) { zbounds[2 * i] = lbounds[i]; diff --git a/src/stream_cgribex.c b/src/stream_cgribex.c index b937d27152c47bd6bf765db5fde6ac450a8d047e..83255d43f9764b0e8c563d765919e8e4363f7825 100644 --- a/src/stream_cgribex.c +++ b/src/stream_cgribex.c @@ -291,12 +291,12 @@ cgribexGetGridRegular(int *isec2, int *isec4, grid_t *grid, int gridtype, bool c } // recompute xinc if necessary - if (recompinc) grid->x.inc = (ISEC2_LastLon - ISEC2_FirstLon) * 0.001 / (grid->x.size - 1); + if (recompinc) grid->x.inc = (ISEC2_LastLon - ISEC2_FirstLon) * 0.001 / ((double)grid->x.size - 1); // correct xinc if necessary if (ISEC2_FirstLon == 0 && ISEC2_LastLon > 354000 && ISEC2_LastLon < 360000) { - double xinc = 360. / grid->x.size; + double xinc = 360. / (double)grid->x.size; if (fabs(grid->x.inc - xinc) > 0.0) { grid->x.inc = xinc; @@ -324,7 +324,7 @@ cgribexGetGridRegular(int *isec2, int *isec4, grid_t *grid, int gridtype, bool c } // recompute yinc if necessary - if (recompinc) grid->y.inc = (ISEC2_LastLat - ISEC2_FirstLat) * 0.001 / (grid->y.size - 1); + if (recompinc) grid->y.inc = (ISEC2_LastLat - ISEC2_FirstLat) * 0.001 / ((double)grid->y.size - 1); } grid->y.first = ISEC2_FirstLat * 0.001; grid->y.last = ISEC2_LastLat * 0.001; @@ -373,7 +373,7 @@ cgribexGetGridReduced(int *isec2, int *isec4, grid_t *grid) if (ijDirectionIncrementGiven && ISEC2_LatIncr > 0) grid->y.inc = ISEC2_LatIncr * 0.001; else - grid->y.inc = (ISEC2_LastLat - ISEC2_FirstLat) * 0.001 / (grid->y.size - 1); + grid->y.inc = (ISEC2_LastLat - ISEC2_FirstLat) * 0.001 / ((double)grid->y.size - 1); } grid->y.first = ISEC2_FirstLat * 0.001; grid->y.last = ISEC2_LastLat * 0.001; diff --git a/src/stream_ext.c b/src/stream_ext.c index 7fbcd25ce7dffffb863bfb7db957695939c5a90c..794acf0c2d3824969f466ef7999899443aa826b3 100644 --- a/src/stream_ext.c +++ b/src/stream_ext.c @@ -97,14 +97,14 @@ ext_read_recordSP(stream_t *streamptr, float *data, size_t *numMissVals) extInqDataFP32(extp, data); double missval = vlistInqVarMissval(vlistID, varID); - size_t size = gridInqSize(vlistInqVarGrid(vlistID, varID)); + size_t size = (size_t)gridInqSize(vlistInqVarGrid(vlistID, varID)); if (vlistInqVarNumber(vlistID, varID) == CDI_REAL) - *numMissVals = get_num_missvalsSP(size, data, missval); + *numMissVals = get_num_missvalsSP(size, data, (float)missval); else - *numMissVals = get_cplx_num_missvalsSP(size, data, missval); + *numMissVals = get_cplx_num_missvalsSP(size, data, (float)missval); - streamptr->numvals += size; + streamptr->numvals += (SizeType)size; } static void @@ -129,14 +129,14 @@ ext_read_recordDP(stream_t *streamptr, double *data, size_t *numMissVals) extInqDataFP64(extp, data); double missval = vlistInqVarMissval(vlistID, varID); - size_t size = gridInqSize(vlistInqVarGrid(vlistID, varID)); + size_t size = (size_t)gridInqSize(vlistInqVarGrid(vlistID, varID)); if (vlistInqVarNumber(vlistID, varID) == CDI_REAL) *numMissVals = get_num_missvalsDP(size, data, missval); else *numMissVals = get_cplx_num_missvalsDP(size, data, missval); - streamptr->numvals += size; + streamptr->numvals += (SizeType)size; } void @@ -299,7 +299,7 @@ extScanTimestep1(stream_t *streamptr) if (CDI_Debug) Message("%4d%8d%4d%8d%8d%6d", nrecs, (int) recpos, rcode, rlevel, vdate, vtime); - extAddRecord(streamptr, param, rlevel, rxysize, recsize, recpos, extp->prec, extp->number); + extAddRecord(streamptr, param, rlevel, (size_t)rxysize, recsize, recpos, extp->prec, extp->number); } tstepScanLoopFinished: @@ -560,7 +560,7 @@ extReadVarSliceDP(stream_t *streamptr, int varID, int levID, double *data, size_ int fileID = streamptr->fileID; double missval = vlistInqVarMissval(vlistID, varID); - size_t gridsize = gridInqSize(vlistInqVarGrid(vlistID, varID)); + size_t gridsize = (size_t)gridInqSize(vlistInqVarGrid(vlistID, varID)); int tsid = streamptr->curTsID; off_t currentfilepos = fileGetPos(fileID); @@ -587,7 +587,7 @@ extReadVarDP(stream_t *streamptr, int varID, double *data, size_t *numMissVals) if (CDI_Debug) Message("streamID = %d varID = %d", streamptr->self, varID); int vlistID = streamptr->vlistID; - size_t gridsize = gridInqSize(vlistInqVarGrid(vlistID, varID)); + size_t gridsize = (size_t)gridInqSize(vlistInqVarGrid(vlistID, varID)); size_t nlevs = (size_t) streamptr->vars[varID].recordTable[0].nlevs; for (size_t levID = 0; levID < nlevs; levID++) @@ -629,7 +629,7 @@ extWriteVarDP(stream_t *streamptr, int varID, const double *data) if (CDI_Debug) Message("streamID = %d varID = %d", streamptr->self, varID); int vlistID = streamptr->vlistID; - size_t gridsize = gridInqSize(vlistInqVarGrid(vlistID, varID)); + size_t gridsize = (size_t)gridInqSize(vlistInqVarGrid(vlistID, varID)); size_t nlevs = (size_t) zaxisInqSize(vlistInqVarZaxis(vlistID, varID)); for (size_t levID = 0; levID < nlevs; levID++) extWriteVarSliceDP(streamptr, varID, (int) levID, &data[levID * gridsize]); diff --git a/src/stream_ieg.c b/src/stream_ieg.c index 306b88cde5a6fb959aebf2dc671e8033e413f40c..72451628b21c9b12c3014bb335f4e1d0fb172dd4 100644 --- a/src/stream_ieg.c +++ b/src/stream_ieg.c @@ -55,11 +55,11 @@ ieg_read_recordSP(stream_t *streamptr, float *data, size_t *numMissVals) iegInqDataFP32(iegp, data); double missval = vlistInqVarMissval(vlistID, varID); - size_t size = gridInqSize(vlistInqVarGrid(vlistID, varID)); + size_t size = (size_t)gridInqSize(vlistInqVarGrid(vlistID, varID)); *numMissVals = get_num_missvalsSP(size, data, missval); - streamptr->numvals += size; + streamptr->numvals += (SizeType)size; } static void @@ -82,11 +82,11 @@ ieg_read_recordDP(stream_t *streamptr, double *data, size_t *numMissVals) iegInqDataFP64(iegp, data); double missval = vlistInqVarMissval(vlistID, varID); - size_t size = gridInqSize(vlistInqVarGrid(vlistID, varID)); + size_t size = (size_t)gridInqSize(vlistInqVarGrid(vlistID, varID)); *numMissVals = get_num_missvalsDP(size, data, missval); - streamptr->numvals += size; + streamptr->numvals += (SizeType)size; } void @@ -483,7 +483,7 @@ ieg_write_recordSP(stream_t *streamptr, const float *data) iegrec_t *iegp = (iegrec_t *) record->objectp; int fileID = streamptr->fileID; - size_t gridsize = gridInqSize(record->gridID); + size_t gridsize = (size_t)gridInqSize(record->gridID); iegp->refval = calc_refvalSP(gridsize, data); @@ -498,7 +498,7 @@ ieg_write_recordDP(stream_t *streamptr, const double *data) iegrec_t *iegp = (iegrec_t *) record->objectp; int fileID = streamptr->fileID; - size_t gridsize = gridInqSize(record->gridID); + size_t gridsize = (size_t)gridInqSize(record->gridID); iegp->refval = calc_refvalDP(gridsize, data); @@ -570,12 +570,12 @@ iegAddRecord(stream_t *streamptr, int param, int *pdb, int *gdb, double *vct, si if (IEG_G_ResFlag(gdb) && IEG_G_LonIncr(gdb) > 0) grid->x.inc = IEG_G_LonIncr(gdb) * resfac; else - grid->x.inc = (IEG_G_LastLon(gdb) - IEG_G_FirstLon(gdb)) * resfac / (xsize - 1); + grid->x.inc = (IEG_G_LastLon(gdb) - IEG_G_FirstLon(gdb)) * resfac / ((double)xsize - 1); // correct xinc if necessary if (IEG_G_FirstLon(gdb) == 0 && IEG_G_LastLon(gdb) > 354000) { - double xinc = 360. / xsize; + double xinc = 360. / (double)xsize; // FIXME: why not use grid->x.inc != xinc as condition? if (fabs(grid->x.inc - xinc) > 0.0) { @@ -596,7 +596,7 @@ iegAddRecord(stream_t *streamptr, int param, int *pdb, int *gdb, double *vct, si if (IEG_G_ResFlag(gdb) && IEG_G_LatIncr(gdb) > 0) grid->y.inc = IEG_G_LatIncr(gdb) * resfac; else - grid->y.inc = (IEG_G_LastLat(gdb) - IEG_G_FirstLat(gdb)) * resfac / (ysize - 1); + grid->y.inc = (IEG_G_LastLat(gdb) - IEG_G_FirstLat(gdb)) * resfac / (double)(ysize - 1); } grid->y.first = IEG_G_FirstLat(gdb) * resfac; grid->y.last = IEG_G_LastLat(gdb) * resfac; @@ -1016,7 +1016,7 @@ iegReadVarSliceDP(stream_t *streamptr, int varID, int levID, double *data, size_ int fileID = streamptr->fileID; double missval = vlistInqVarMissval(vlistID, varID); - size_t gridsize = gridInqSize(vlistInqVarGrid(vlistID, varID)); + size_t gridsize = (size_t)gridInqSize(vlistInqVarGrid(vlistID, varID)); int tsid = streamptr->curTsID; off_t currentfilepos = fileGetPos(fileID); @@ -1038,7 +1038,7 @@ iegReadVarDP(stream_t *streamptr, int varID, double *data, size_t *numMissVals) if (CDI_Debug) Message("streamID = %d varID = %d", streamptr->self, varID); int vlistID = streamptr->vlistID; - size_t gridsize = gridInqSize(vlistInqVarGrid(vlistID, varID)); + size_t gridsize = (size_t)gridInqSize(vlistInqVarGrid(vlistID, varID)); size_t nlevs = (size_t) streamptr->vars[varID].recordTable[0].nlevs; for (size_t levID = 0; levID < nlevs; levID++) @@ -1073,7 +1073,7 @@ iegWriteVarSliceDP(stream_t *streamptr, int varID, int levID, const double *data iegp->dprec = iegDefDatatype(vlistInqVarDatatype(vlistID, varID)); - size_t gridsize = gridInqSize(gridID); + size_t gridsize = (size_t)gridInqSize(gridID); iegp->refval = calc_refvalDP(gridsize, data); iegDefDataFP64(iegp, data); @@ -1086,7 +1086,7 @@ iegWriteVarDP(stream_t *streamptr, int varID, const double *data) if (CDI_Debug) Message("streamID = %d varID = %d", streamptr->self, varID); int vlistID = streamptr->vlistID; - size_t gridsize = gridInqSize(vlistInqVarGrid(vlistID, varID)); + size_t gridsize = (size_t)gridInqSize(vlistInqVarGrid(vlistID, varID)); size_t nlevels = (size_t) zaxisInqSize(vlistInqVarZaxis(vlistID, varID)); for (size_t levID = 0; levID < nlevels; levID++) iegWriteVarSliceDP(streamptr, varID, (int) levID, &data[levID * gridsize]); diff --git a/src/stream_read.c b/src/stream_read.c index fedafb2ac7b488453fbfbf9319a5069acb4b346c..a7c5066559d802fa2201ed9bda7aa5c98cccbfef 100644 --- a/src/stream_read.c +++ b/src/stream_read.c @@ -104,7 +104,7 @@ streamReadVarF(int streamID, int varID, float *data, SizeType *numMissVals) { // In case the file format does not support single precision reading, // we fall back to double precision reading, converting the data on the fly. - size_t elementCount = gridInqSize(vlistInqVarGrid(streamInqVlist(streamID), varID)); + size_t elementCount = (size_t)gridInqSize(vlistInqVarGrid(streamInqVlist(streamID), varID)); elementCount *= (size_t) zaxisInqSize(vlistInqVarZaxis(streamInqVlist(streamID), varID)); double *conversionBuffer = (double *) Malloc(elementCount * sizeof(*conversionBuffer)); streamReadVar(streamID, varID, conversionBuffer, numMissVals); @@ -181,7 +181,7 @@ streamReadVarSlice(int streamID, int varID, int levelID, double *data, SizeType if (cdiStreamReadVarSlice(streamID, varID, levelID, MEMTYPE_DOUBLE, data, &numMiss)) { Warning("Unexpected error returned from cdiStreamReadVarSlice()!"); - size_t elementCount = gridInqSize(vlistInqVarGrid(streamInqVlist(streamID), varID)); + size_t elementCount = (size_t)gridInqSize(vlistInqVarGrid(streamInqVlist(streamID), varID)); memset(data, 0, elementCount * sizeof(*data)); } *numMissVals = (SizeType) numMiss; @@ -213,7 +213,7 @@ streamReadVarSliceF(int streamID, int varID, int levelID, float *data, SizeType { // In case the file format does not support single precision reading, // we fall back to double precision reading, converting the data on the fly. - size_t elementCount = gridInqSize(vlistInqVarGrid(streamInqVlist(streamID), varID)); + size_t elementCount = (size_t)gridInqSize(vlistInqVarGrid(streamInqVlist(streamID), varID)); double *conversionBuffer = (double *) Malloc(elementCount * sizeof(*conversionBuffer)); streamReadVarSlice(streamID, varID, levelID, conversionBuffer, numMissVals); for (size_t i = elementCount; i--;) data[i] = (float) conversionBuffer[i]; diff --git a/src/stream_srv.c b/src/stream_srv.c index 5e7363c14bca627cc0e69abb81c1aaaaeae43935..b07185b75e01f309483a5bca84b680627ccbbb0c 100644 --- a/src/stream_srv.c +++ b/src/stream_srv.c @@ -308,7 +308,7 @@ srvScanTimestep1(stream_t *streamptr) if (CDI_Debug) Message("%4d%8d%4d%8d%8d%6d", nrecs, (int) recpos, rcode, rlevel, vdate, vtime); - srv_add_record(streamptr, param, rlevel, rxsize, rysize, recsize, recpos, prec); + srv_add_record(streamptr, param, rlevel, (size_t)rxsize, (size_t)rysize, recsize, recpos, prec); } tstepScanLoopFinished: @@ -595,7 +595,7 @@ srvReadVarDP(stream_t *streamptr, int varID, double *data, size_t *numMissVals) if (CDI_Debug) Message("streamID = %d varID = %d", streamptr->self, varID); int vlistID = streamptr->vlistID; - size_t gridsize = gridInqSize(vlistInqVarGrid(vlistID, varID)); + size_t gridsize = (size_t)gridInqSize(vlistInqVarGrid(vlistID, varID)); size_t nlevs = (size_t) streamptr->vars[varID].recordTable[0].nlevs; for (size_t levID = 0; levID < nlevs; levID++) diff --git a/src/stream_write.c b/src/stream_write.c index a2b34e90fe6f8cd9693ab3a2d49e84a00295ce49..23f622d41a7ba6f3ea4729d01e8c02c449f86e8c 100644 --- a/src/stream_write.c +++ b/src/stream_write.c @@ -37,7 +37,7 @@ cdiStreamWriteVar_(int streamID, int varID, int memtype, const void *data, SizeT switch (cdiBaseFiletype(filetype)) { #ifdef HAVE_LIBGRIB - case CDI_FILETYPE_GRIB: grb_write_var(streamptr, varID, memtype, data, numMissVals); break; + case CDI_FILETYPE_GRIB: grb_write_var(streamptr, varID, memtype, data, (size_t)numMissVals); break; #endif #ifdef HAVE_LIBSERVICE case CDI_FILETYPE_SRV: srvWriteVarDP(streamptr, varID, (double *) data); break; @@ -49,7 +49,7 @@ cdiStreamWriteVar_(int streamID, int varID, int memtype, const void *data, SizeT case CDI_FILETYPE_IEG: iegWriteVarDP(streamptr, varID, (double *) data); break; #endif #ifdef HAVE_LIBNETCDF - case CDI_FILETYPE_NETCDF: cdf_write_var(streamptr, varID, memtype, data, numMissVals); break; + case CDI_FILETYPE_NETCDF: cdf_write_var(streamptr, varID, memtype, data, (size_t)numMissVals); break; #endif default: Error("%s support not compiled in!", strfiletype(filetype)); } @@ -111,9 +111,9 @@ streamWriteVarF(int streamID, int varID, const float *data, SizeType numMissVals const int vlistID = streamInqVlist(streamID); SizeType elementCount = gridInqSize(vlistInqVarGrid(vlistID, varID)); elementCount *= (SizeType) zaxisInqSize(vlistInqVarZaxis(vlistID, varID)); - double *conversionBuffer = (double *) Malloc(elementCount * sizeof(*conversionBuffer)); - for (SizeType i = elementCount; i--;) conversionBuffer[i] = (double) data[i]; - myCdiStreamWriteVar_(streamID, varID, MEMTYPE_DOUBLE, (const void *) conversionBuffer, numMissVals); + double *conversionBuffer = Malloc((size_t)elementCount * sizeof(*conversionBuffer)); + for (SizeType i = elementCount; i--;) conversionBuffer[i] = data[i]; + myCdiStreamWriteVar_(streamID, varID, MEMTYPE_DOUBLE, (const void *) conversionBuffer, numMissVals); Free(conversionBuffer); } } @@ -142,7 +142,7 @@ cdiStreamWriteVarSlice(int streamID, int varID, int levelID, int memtype, const switch (cdiBaseFiletype(filetype)) { #ifdef HAVE_LIBGRIB - case CDI_FILETYPE_GRIB: grb_write_var_slice(streamptr, varID, levelID, memtype, data, numMissVals); break; + case CDI_FILETYPE_GRIB: grb_write_var_slice(streamptr, varID, levelID, memtype, data, (size_t)numMissVals); break; #endif #ifdef HAVE_LIBSERVICE case CDI_FILETYPE_SRV: srvWriteVarSliceDP(streamptr, varID, levelID, (double *) data); break; @@ -154,7 +154,7 @@ cdiStreamWriteVarSlice(int streamID, int varID, int levelID, int memtype, const case CDI_FILETYPE_IEG: iegWriteVarSliceDP(streamptr, varID, levelID, (double *) data); break; #endif #ifdef HAVE_LIBNETCDF - case CDI_FILETYPE_NETCDF: cdf_write_var_slice(streamptr, varID, levelID, memtype, data, numMissVals); break; + case CDI_FILETYPE_NETCDF: cdf_write_var_slice(streamptr, varID, levelID, memtype, data, (size_t)numMissVals); break; #endif default: Error("%s support not compiled in!", strfiletype(filetype)); } @@ -210,7 +210,7 @@ streamWriteVarSliceF(int streamID, int varID, int levelID, const float *data, Si // In case the file format does not support single precision writing, // we fall back to double precision writing, converting the data on the fly. const SizeType elementCount = gridInqSize(vlistInqVarGrid(streamInqVlist(streamID), varID)); - double *conversionBuffer = (double *) Malloc(elementCount * sizeof(*conversionBuffer)); + double *conversionBuffer = Malloc((size_t)elementCount * sizeof(*conversionBuffer)); for (SizeType i = elementCount; i--;) conversionBuffer[i] = (double) data[i]; streamWriteVarSlice(streamID, varID, levelID, conversionBuffer, numMissVals); Free(conversionBuffer); @@ -268,7 +268,7 @@ cdiStreamWriteVarChunk_(int streamID, int varID, int memtype, const int rect[][2 break; #endif #ifdef HAVE_LIBNETCDF - case CDI_FILETYPE_NETCDF: cdf_write_var_chunk(streamptr, varID, memtype, rect, data, numMissVals); break; + case CDI_FILETYPE_NETCDF: cdf_write_var_chunk(streamptr, varID, memtype, rect, data, (size_t)numMissVals); break; #endif default: Error("%s support not compiled in!", strfiletype(filetype)); break; } @@ -286,7 +286,7 @@ stream_write_record(int streamID, int memtype, const void *data, SizeType numMis switch (cdiBaseFiletype(streamptr->filetype)) { #ifdef HAVE_LIBGRIB - case CDI_FILETYPE_GRIB: grb_write_record(streamptr, memtype, data, numMissVals); break; + case CDI_FILETYPE_GRIB: grb_write_record(streamptr, memtype, data, (size_t)numMissVals); break; #endif #ifdef HAVE_LIBSERVICE case CDI_FILETYPE_SRV: srv_write_record(streamptr, memtype, data); break; @@ -298,7 +298,7 @@ stream_write_record(int streamID, int memtype, const void *data, SizeType numMis case CDI_FILETYPE_IEG: ieg_write_record(streamptr, memtype, data); break; #endif #ifdef HAVE_LIBNETCDF - case CDI_FILETYPE_NETCDF: cdf_write_record(streamptr, memtype, data, numMissVals); break; + case CDI_FILETYPE_NETCDF: cdf_write_record(streamptr, memtype, data, (size_t)numMissVals); break; #endif default: Error("%s support not compiled in!", strfiletype(streamptr->filetype)); } diff --git a/src/vlist.c b/src/vlist.c index b0820c01141c7c23ef72aad23b838906a4a0d2b2..5e3a1315afd388c035308576c3679710c1d31a8a 100644 --- a/src/vlist.c +++ b/src/vlist.c @@ -1140,7 +1140,8 @@ vlistPrintKernel(vlist_t *vlistptr, FILE *fp) fp); for (int varID = 0; varID < nvars; varID++) fprintf(fp, "%3d %8zu\n", varID, - (size_t) zaxisInqSize(vlistptr->vars[varID].zaxisID) * gridInqSize(vlistptr->vars[varID].gridID)); + (size_t)zaxisInqSize(vlistptr->vars[varID].zaxisID) + * (size_t)gridInqSize(vlistptr->vars[varID].gridID)); } } diff --git a/tests/test_cdf_read.c b/tests/test_cdf_read.c index 35390ec56ee674e181929c3e0435e77d418cb25a..790f3162d3200b0e021d00ddf3a81fbe241829c4 100644 --- a/tests/test_cdf_read.c +++ b/tests/test_cdf_read.c @@ -51,7 +51,7 @@ main(int argc, const char **argv) buf = temp; } streamReadVar(streamID, (int) varID, buf, &nmiss); - allNmissSum += nmiss; + allNmissSum += (size_t)nmiss; } } if (countMissingValues) printf("missing values count = %zu\n", allNmissSum);