diff --git a/src/stream_cgribex.c b/src/stream_cgribex.c index 6dcb904a0b91d4e5f049ab35ccc299e6b089357d..cf0afd8732ba84ba964e77131d925d1313f31360 100644 --- a/src/stream_cgribex.c +++ b/src/stream_cgribex.c @@ -759,6 +759,21 @@ cgribexSkipRecords(const int fileID) } } +static CmpDateTime +cgribexDateTimeX(int *isec1, CmpDateTime *cmpDateTimeS) +{ + int vdate = 0, sdate = 0, vtime = 0, stime = 0; + gribDateTimeX(isec1, &vdate, &vtime, &sdate, &stime); + + cmpDateTimeS->date = sdate; + cmpDateTimeS->time = stime; + + CmpDateTime cmpDateTimeV; + cmpDateTimeV.date = vdate; + cmpDateTimeV.time = vtime; + return cmpDateTimeV; +} + int cgribexScanTimestep1(stream_t *streamptr) { @@ -826,27 +841,25 @@ cgribexScanTimestep1(stream_t *streamptr) cgribexGetLevel(isec1, &leveltype, &level1, &level2); - int vdate, sdate; - int vtime, stime; - gribDateTimeX(isec1, &vdate, &vtime, &sdate, &stime); - CmpDateTime datetime = { .date = vdate, .time = vtime }; + CmpDateTime cdtS; + const CmpDateTime cdtV = cgribexDateTimeX(isec1, &cdtS); if (nrecs == 0) { - datetime0 = datetime; + datetime0 = cdtV; fcast = cgribexTimeIsFC(isec1); taxis->unit = cgribexGetTimeUnit(isec1); taxis->rdatetime = cdiDateTime_set(gribRefDate(isec1), gribRefTime(isec1)); - taxis->sdate = sdate; - taxis->stime = stime; - taxis->vdatetime = cdiDateTime_set(vdate, vtime); + taxis->sdate = cdtS.date; + taxis->stime = cdtS.time; + taxis->vdatetime = cdiDateTime_set(cdtV.date, cdtV.time); } else { - if (sdate < taxis->sdate || (sdate == taxis->sdate && stime < taxis->stime)) + if (cdtS.date < taxis->sdate || (cdtS.date == taxis->sdate && cdtS.time < taxis->stime)) { - taxis->sdate = sdate; - taxis->stime = stime; + taxis->sdate = cdtS.date; + taxis->stime = cdtS.time; } compvar_t compVar = cgribexVarSet(param, level1, level2, leveltype, ISEC1_TimeRange); @@ -860,7 +873,7 @@ cgribexScanTimestep1(stream_t *streamptr) { if (recID < nrecs) break; if (warn_time) - if (datetime_differ(datetime, datetime0)) + if (datetime_differ(cdtV, datetime0)) { gribWarning("Inconsistent verification time!", nrecsScanned, tsID + 1, paramstr, level1, level2); warn_time = false; @@ -868,7 +881,7 @@ cgribexScanTimestep1(stream_t *streamptr) } else { - if (datetime_differ(datetime, datetime0)) break; + if (datetime_differ(cdtV, datetime0)) break; if (recID < nrecs) { @@ -894,7 +907,7 @@ cgribexScanTimestep1(stream_t *streamptr) nrecs++; if (CDI_Debug) - Message("Read record %2d (id=%s lev1=%d lev2=%d) %8d %6d", nrecsScanned, paramstr, level1, level2, vdate, vtime); + Message("Read record %2d (id=%s lev1=%d lev2=%d) %8d %6d", nrecsScanned, paramstr, level1, level2, cdtV.date, cdtV.time); cgribexAddRecord(streamptr, cgribexp, param, recsize, recpos, comptype, lmv, iret); } @@ -986,14 +999,12 @@ cgribexScanTimestep2(stream_t *streamptr) cgribexGetLevel(isec1, &leveltype, &level1, &level2); - int vdate, sdate; - int vtime, stime; - gribDateTimeX(isec1, &vdate, &vtime, &sdate, &stime); - CmpDateTime datetime = { .date = vdate, .time = vtime }; + CmpDateTime cdtS; + const CmpDateTime cdtV = cgribexDateTimeX(isec1, &cdtS); if (rindex == 0) { - datetime0 = datetime; + datetime0 = cdtV; const int taxisID = vlistInqTaxis(vlistID); if (taxisInqType(taxisID) == TAXIS_RELATIVE) { @@ -1005,16 +1016,16 @@ cgribexScanTimestep2(stream_t *streamptr) taxis->type = TAXIS_ABSOLUTE; } taxis->unit = cgribexGetTimeUnit(isec1); - taxis->vdatetime = cdiDateTime_set(vdate, vtime); - taxis->sdate = sdate; - taxis->stime = stime; + taxis->vdatetime = cdiDateTime_set(cdtV.date, cdtV.time); + taxis->sdate = cdtS.date; + taxis->stime = cdtS.time; } else { - if (sdate < taxis->sdate || (sdate == taxis->sdate && stime < taxis->stime)) + if (cdtS.date < taxis->sdate || (cdtS.date == taxis->sdate && cdtS.time < taxis->stime)) { - taxis->sdate = sdate; - taxis->stime = stime; + taxis->sdate = cdtS.date; + taxis->stime = cdtS.time; } } @@ -1057,7 +1068,7 @@ cgribexScanTimestep2(stream_t *streamptr) { if (records[recID].used) { - if (datetime_differ(datetime, datetime0)) break; + if (datetime_differ(cdtV, datetime0)) break; gribWarning("Parameter already exist, skipped!", nrecsScanned, tsID + 1, paramstr, level1, level2); continue; @@ -1070,7 +1081,7 @@ cgribexScanTimestep2(stream_t *streamptr) } if (CDI_Debug) - Message("Read record %2d (id=%s lev1=%d lev2=%d) %8d %6d", nrecsScanned, paramstr, level1, level2, vdate, vtime); + Message("Read record %2d (id=%s lev1=%d lev2=%d) %8d %6d", nrecsScanned, paramstr, level1, level2, cdtV.date, cdtV.time); if (cgribexVarCompare(compVar, streamptr->tsteps[tsID].records[recID], 0) != 0) { @@ -1182,16 +1193,14 @@ cgribexScanTimestep(stream_t *streamptr) cgribexGetLevel(isec1, &leveltype, &level1, &level2); - int vdate, sdate; - int vtime, stime; - gribDateTimeX(isec1, &vdate, &vtime, &sdate, &stime); - CmpDateTime datetime = { .date = vdate, .time = vtime }; + CmpDateTime cdtS; + const CmpDateTime cdtV = cgribexDateTimeX(isec1, &cdtS); if (rindex == nrecs) break; if (rindex == 0) { - datetime0 = datetime; + datetime0 = cdtV; const int vlistID = streamptr->vlistID; const int taxisID = vlistInqTaxis(vlistID); if (taxisInqType(taxisID) == TAXIS_RELATIVE) @@ -1204,16 +1213,16 @@ cgribexScanTimestep(stream_t *streamptr) taxis->type = TAXIS_ABSOLUTE; } taxis->unit = cgribexGetTimeUnit(isec1); - taxis->vdatetime = cdiDateTime_set(vdate, vtime); - taxis->sdate = sdate; - taxis->stime = stime; + taxis->vdatetime = cdiDateTime_set(cdtV.date, cdtV.time); + taxis->sdate = cdtS.date; + taxis->stime = cdtS.time; } else { - if (sdate < taxis->sdate || (sdate == taxis->sdate && stime < taxis->stime)) + if (cdtS.date < taxis->sdate || (cdtS.date == taxis->sdate && cdtS.time < taxis->stime)) { - taxis->sdate = sdate; - taxis->stime = stime; + taxis->sdate = cdtS.date; + taxis->stime = cdtS.time; } } @@ -1225,9 +1234,6 @@ cgribexScanTimestep(stream_t *streamptr) taxis->numavg = ISEC1_AvgNum; } - datetime.date = vdate; - datetime.time = vtime; - compvar_t compVar = cgribexVarSet(param, level1, level2, leveltype, ISEC1_TimeRange); for (vrecID = 0; vrecID < nrecs; vrecID++) @@ -1258,7 +1264,7 @@ cgribexScanTimestep(stream_t *streamptr) char paramstr_[32]; cdiParamToString(param, paramstr_, sizeof(paramstr_)); - if (datetime_differ(datetime, datetime0)) break; + if (datetime_differ(cdtV, datetime0)) break; if (CDI_Debug) gribWarning("Parameter already exist, skipped!", nrecsScanned, tsID + 1, paramstr_, level1, level2); @@ -1273,7 +1279,7 @@ cgribexScanTimestep(stream_t *streamptr) } if (CDI_Debug) - Message("Read record %2d (id=%s lev1=%d lev2=%d) %8d %6d", nrecsScanned, paramstr, level1, level2, vdate, vtime); + Message("Read record %2d (id=%s lev1=%d lev2=%d) %8d %6d", nrecsScanned, paramstr, level1, level2, cdtV.date, cdtV.time); if (cgribexVarCompare(compVar, records[recID], 0) != 0) {