Commit 2cfa0540 authored by Uwe Schulzweida's avatar Uwe Schulzweida
Browse files

cfortran.h: define SXFortran.

parent cfeaddd1
2020-02-12 Uwe Schulzweida 2020-02-12 Uwe Schulzweida
* cfortran.h: define SXFortran [patch: Florian Prill]
* Preserve NetCDF attribute positive on data variables * Preserve NetCDF attribute positive on data variables
2020-01-10 Uwe Schulzweida 2020-01-10 Uwe Schulzweida
......
...@@ -236,6 +236,9 @@ only C calling FORTRAN subroutines will work using K&R style.*/ ...@@ -236,6 +236,9 @@ only C calling FORTRAN subroutines will work using K&R style.*/
#if defined(_SX) #if defined(_SX)
#define SXFortran #define SXFortran
#endif #endif
#if defined(__NEC__)
#define SXFortran
#endif
#if defined(mips) || defined(__mips) #if defined(mips) || defined(__mips)
#define mipsFortran #define mipsFortran
#endif #endif
......
...@@ -251,7 +251,7 @@ static int addToDate(struct tm* me, long long amount, long unit) ...@@ -251,7 +251,7 @@ static int addToDate(struct tm* me, long long amount, long unit)
} }
} }
static char* makeDateString(struct tm* me) static char *makeDateString(struct tm *me)
{ {
char *result= (char *) Malloc(4+1+ 2+1+ 2+1+ 2+1+ 2+1+ 2+ 4+ 1); char *result= (char *) Malloc(4+1+ 2+1+ 2+1+ 2+1+ 2+1+ 2+ 4+ 1);
sprintf(result, "%04d-%02d-%02dT%02d:%02d:%02d.000", me->tm_year + 1900, me->tm_mon + 1, me->tm_mday, me->tm_hour, me->tm_min, me->tm_sec); sprintf(result, "%04d-%02d-%02dT%02d:%02d:%02d.000", me->tm_year + 1900, me->tm_mon + 1, me->tm_mday, me->tm_hour, me->tm_min, me->tm_sec);
...@@ -290,40 +290,41 @@ static int getAvailabilityOfRelativeTimes(grib_handle* gh, bool* outHaveForecast ...@@ -290,40 +290,41 @@ static int getAvailabilityOfRelativeTimes(grib_handle* gh, bool* outHaveForecast
char* gribMakeTimeString(grib_handle* gh, CdiTimeType timeType) char* gribMakeTimeString(grib_handle* gh, CdiTimeType timeType)
{ {
//Get the parts of the reference date. // Get the parts of the reference date.
struct tm date; struct tm date;
date.tm_mon = (int)gribGetLong(gh, "month") - 1; //months are zero based in struct tm and one based in GRIB date.tm_mon = (int)gribGetLong(gh, "month") - 1; // months are zero based in struct tm and one based in GRIB
date.tm_mday = (int)gribGetLong(gh, "day"); date.tm_mday = (int)gribGetLong(gh, "day");
date.tm_hour = (int)gribGetLong(gh, "hour"); date.tm_hour = (int)gribGetLong(gh, "hour");
date.tm_min = (int)gribGetLong(gh, "minute"); date.tm_min = (int)gribGetLong(gh, "minute");
date.tm_isdst = 0;
if(gribEditionNumber(gh) == 1) if(gribEditionNumber(gh) == 1)
{ {
date.tm_year = (int)gribGetLong(gh, "yearOfCentury"); //years are -1900 based both in struct tm and GRIB1 date.tm_year = (int)gribGetLong(gh, "yearOfCentury"); // years are -1900 based both in struct tm and GRIB1
} }
else else
{ {
date.tm_year = (int)gribGetLong(gh, "year") - 1900; //years are -1900 based in struct tm and zero based in GRIB2 date.tm_year = (int)gribGetLong(gh, "year") - 1900; // years are -1900 based in struct tm and zero based in GRIB2
date.tm_sec = (int)gribGetLong(gh, "second"); date.tm_sec = (int)gribGetLong(gh, "second");
//If the start or end time are requested, we need to take the relative times into account. // If the start or end time are requested, we need to take the relative times into account.
if(timeType != kCdiTimeType_referenceTime) if(timeType != kCdiTimeType_referenceTime)
{ {
//Determine whether we have a forecast time and a time range. // Determine whether we have a forecast time and a time range.
bool haveForecastTime, haveTimeRange; bool haveForecastTime, haveTimeRange;
if(getAvailabilityOfRelativeTimes(gh, &haveForecastTime, &haveTimeRange)) return NULL; if(getAvailabilityOfRelativeTimes(gh, &haveForecastTime, &haveTimeRange)) return NULL;
if(timeType == kCdiTimeType_endTime && !haveTimeRange) return NULL; //tell the caller that the requested time does not exist if(timeType == kCdiTimeType_endTime && !haveTimeRange) return NULL; //tell the caller that the requested time does not exist
//If we have relative times, apply the relative times to the date // If we have relative times, apply the relative times to the date
if(haveForecastTime) if(haveForecastTime)
{ {
long offset = gribGetLongDefault(gh, "forecastTime", 0); //if(stepUnits == indicatorOfUnitOfTimeRange) assert(startStep == forecastTime) long offset = gribGetLongDefault(gh, "forecastTime", 0); // if(stepUnits == indicatorOfUnitOfTimeRange) assert(startStep == forecastTime)
long offsetUnit = gribGetLongDefault(gh, "indicatorOfUnitOfTimeRange", 255); long offsetUnit = gribGetLongDefault(gh, "indicatorOfUnitOfTimeRange", 255);
if(addToDate(&date, offset, offsetUnit)) return NULL; if(addToDate(&date, offset, offsetUnit)) return NULL;
if(timeType == kCdiTimeType_endTime) if(timeType == kCdiTimeType_endTime)
{ {
assert(haveTimeRange); assert(haveTimeRange);
long range = gribGetLongDefault(gh, "lengthOfTimeRange", 0); //if(stepUnits == indicatorOfUnitForTimeRange) assert(endStep == startStep + lengthOfTimeRange) long range = gribGetLongDefault(gh, "lengthOfTimeRange", 0); // if(stepUnits == indicatorOfUnitForTimeRange) assert(endStep == startStep + lengthOfTimeRange)
long rangeUnit = gribGetLongDefault(gh, "indicatorOfUnitForTimeRange", 255); long rangeUnit = gribGetLongDefault(gh, "indicatorOfUnitForTimeRange", 255);
if(addToDate(&date, range, rangeUnit)) return NULL; if(addToDate(&date, range, rangeUnit)) return NULL;
} }
......
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