mirror of https://github.com/ecmwf/eccodes.git
Merge branch 'develop' into feature/mtg2
This commit is contained in:
commit
76e8e1e82b
|
@ -129,6 +129,7 @@
|
||||||
013234|snowDepthWaterEquivalentSdGrib|double|SNOW DEPTH (WATER EQUIVALENT SD GRIB)|m|4|0|14|NA|0|0
|
013234|snowDepthWaterEquivalentSdGrib|double|SNOW DEPTH (WATER EQUIVALENT SD GRIB)|m|4|0|14|NA|0|0
|
||||||
013240|airDensity|double|AIR DENSITY|kg m-3|3|0|10|NA|0|0
|
013240|airDensity|double|AIR DENSITY|kg m-3|3|0|10|NA|0|0
|
||||||
013241|cape|double|CONVECTIVE AVAILABLE POTENTIAL ENERGY|J/kg|1|0|17|NA|0|0
|
013241|cape|double|CONVECTIVE AVAILABLE POTENTIAL ENERGY|J/kg|1|0|17|NA|0|0
|
||||||
|
013242|mucape|long|MOST UNSTABLE CAPE|J/kg|0|0|14|NA|0|0
|
||||||
014200|surfaceSolarRadiationDownwardsSsrdGrib|long|SURFACE SOLAR RADIATION DOWNWARDS (SSRD GRIB)|W m-2 s|-2|0|24|NA|0|0
|
014200|surfaceSolarRadiationDownwardsSsrdGrib|long|SURFACE SOLAR RADIATION DOWNWARDS (SSRD GRIB)|W m-2 s|-2|0|24|NA|0|0
|
||||||
015202|integratedElectronDensity|double|INTEGRATED ELECTRON DENSITY|m-2|3|13000|12|NA|0|0
|
015202|integratedElectronDensity|double|INTEGRATED ELECTRON DENSITY|m-2|3|13000|12|NA|0|0
|
||||||
015231|atmosphericPathDelayInSatelliteSignal|double|ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL|m|4|0|15|NA|0|0
|
015231|atmosphericPathDelayInSatelliteSignal|double|ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL|m|4|0|15|NA|0|0
|
||||||
|
|
|
@ -110,6 +110,7 @@
|
||||||
013231|largeScalePrecipitation|double|LARGE SCALE PRECIPITATION|kg m-2|1|-1|14|NA|0|0
|
013231|largeScalePrecipitation|double|LARGE SCALE PRECIPITATION|kg m-2|1|-1|14|NA|0|0
|
||||||
013240|airDensity|double|AIR DENSITY|kg m-3|3|0|10|NA|0|0
|
013240|airDensity|double|AIR DENSITY|kg m-3|3|0|10|NA|0|0
|
||||||
013241|cape|double|CONVECTIVE AVAILABLE POTENTIAL ENERGY|J/kg|1|0|17|NA|0|0
|
013241|cape|double|CONVECTIVE AVAILABLE POTENTIAL ENERGY|J/kg|1|0|17|NA|0|0
|
||||||
|
013242|mucape|long|MOST UNSTABLE CAPE|J/kg|0|0|14|NA|0|0
|
||||||
015008|significandOfVolumetricMixingRatio|long|(VAL) SCALED VOLUMETRIC MIXING RATIO|Numeric|0|0|24|NA|0|0
|
015008|significandOfVolumetricMixingRatio|long|(VAL) SCALED VOLUMETRIC MIXING RATIO|Numeric|0|0|24|NA|0|0
|
||||||
015021|integratedMassDensity|long|(VAL) SCALED INTEGRATED MASS DENSITY|kg m-2|0|0|24|NA|0|0
|
015021|integratedMassDensity|long|(VAL) SCALED INTEGRATED MASS DENSITY|kg m-2|0|0|24|NA|0|0
|
||||||
015042|reflectance|long|(VAL) REFLECTANCE|Numeric|6|0|20|NA|0|0
|
015042|reflectance|long|(VAL) REFLECTANCE|Numeric|6|0|20|NA|0|0
|
||||||
|
|
|
@ -123,6 +123,7 @@
|
||||||
013234|snowDepthWaterEquivalentSdGrib|double|SNOW DEPTH (WATER EQUIVALENT SD GRIB)|m|4|0|14|NA|0|0
|
013234|snowDepthWaterEquivalentSdGrib|double|SNOW DEPTH (WATER EQUIVALENT SD GRIB)|m|4|0|14|NA|0|0
|
||||||
013240|airDensity|double|AIR DENSITY|kg m-3|3|0|10|NA|0|0
|
013240|airDensity|double|AIR DENSITY|kg m-3|3|0|10|NA|0|0
|
||||||
013241|cape|double|CONVECTIVE AVAILABLE POTENTIAL ENERGY|J/kg|1|0|17|NA|0|0
|
013241|cape|double|CONVECTIVE AVAILABLE POTENTIAL ENERGY|J/kg|1|0|17|NA|0|0
|
||||||
|
013242|mucape|long|MOST UNSTABLE CAPE|J/kg|0|0|14|NA|0|0
|
||||||
014200|surfaceSolarRadiationDownwardsSsrdGrib|long|SURFACE SOLAR RADIATION DOWNWARDS (SSRD GRIB)|W m-2 s|-2|0|24|NA|0|0
|
014200|surfaceSolarRadiationDownwardsSsrdGrib|long|SURFACE SOLAR RADIATION DOWNWARDS (SSRD GRIB)|W m-2 s|-2|0|24|NA|0|0
|
||||||
015202|integratedElectronDensity|double|INTEGRATED ELECTRON DENSITY|m-2|3|13000|12|NA|0|0
|
015202|integratedElectronDensity|double|INTEGRATED ELECTRON DENSITY|m-2|3|13000|12|NA|0|0
|
||||||
015231|atmosphericPathDelayInSatelliteSignal|double|ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL|m|4|0|15|NA|0|0
|
015231|atmosphericPathDelayInSatelliteSignal|double|ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL|m|4|0|15|NA|0|0
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
codetable[1] marsClass "mars/class.table" = "od" : dump, string_type, lowercase;
|
codetable[1] marsClass "mars/class.table" = "od" : dump, string_type, lowercase;
|
||||||
codetable[1] marsType "mars/type.table" = "an" : dump, string_type, lowercase;
|
codetable[1] marsType "mars/type.table" = "an" : dump, string_type, lowercase;
|
||||||
codetable[2] marsStream "mars/stream.table" = "oper" : dump, string_type, lowercase ;
|
codetable[2] marsStream "mars/stream.table" = "oper" : dump, string_type, lowercase;
|
||||||
ksec1expver[4] experimentVersionNumber = "0001" : dump;
|
ksec1expver[4] experimentVersionNumber = "0001" : dump;
|
||||||
|
|
||||||
#alias typeOfProcessedData=marsType;
|
#alias typeOfProcessedData=marsType;
|
||||||
alias ls.dataType = marsType;
|
alias ls.dataType = marsType;
|
||||||
|
|
||||||
alias mars.class = marsClass;
|
alias mars.class = marsClass;
|
||||||
alias mars.type = marsType;
|
alias mars.type = marsType;
|
||||||
alias mars.stream = marsStream;
|
alias mars.stream = marsStream;
|
||||||
|
|
|
@ -98,4 +98,4 @@
|
||||||
'road' = {typeOfFirstFixedSurface=187; typeOfSecondFixedSurface=255;}
|
'road' = {typeOfFirstFixedSurface=187; typeOfSecondFixedSurface=255;}
|
||||||
'roadLayer' = {typeOfFirstFixedSurface=187; typeOfSecondFixedSurface=187;}
|
'roadLayer' = {typeOfFirstFixedSurface=187; typeOfSecondFixedSurface=187;}
|
||||||
'urbanCanyon' = {typeOfFirstFixedSurface=187; typeOfSecondFixedSurface=185;}
|
'urbanCanyon' = {typeOfFirstFixedSurface=187; typeOfSecondFixedSurface=185;}
|
||||||
'unknown' = {dummy=0;}
|
'unknown' = {dummyc=1;}
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
# aliasing MARS date and Time to the date and time defined in local section,
|
||||||
|
# corresponding to the end of the Ocean NRT data assimilation
|
||||||
|
alias mars.date = dateOfAnalysis;
|
||||||
|
alias mars.time = timeOfAnalysis;
|
||||||
|
|
||||||
|
# aliasing the new offset date and time to the date and time
|
||||||
|
# coming fron the section 1, i.e. reference date and time
|
||||||
|
alias mars.offsetdate = dataDate;
|
||||||
|
alias mars.offsettime = dataTime;
|
||||||
|
|
||||||
|
unalias mars.step;
|
||||||
|
alias mars.step = stepRange;
|
||||||
|
if (defined(perturbationNumber)) {
|
||||||
|
alias mars.number = perturbationNumber;
|
||||||
|
}
|
|
@ -1,5 +1,3 @@
|
||||||
if (class is "ai")
|
if (class is "ai") {
|
||||||
{
|
|
||||||
alias mars.step = stepRange;
|
alias mars.step = stepRange;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,19 @@
|
||||||
if ((stream is "eehs" or stream is "efhs" or stream is "wees" or stream is "wehs") and (type is "cd")){
|
if ((stream is "eehs" or stream is "efhs" or stream is "wees" or stream is "wehs") and (type is "cd")) {
|
||||||
if (edition == 1){
|
if (edition == 1) {
|
||||||
# defined in local section 19
|
# defined in local section 19
|
||||||
alias mars.quantile = quantile;
|
alias mars.quantile = quantile;
|
||||||
} else {
|
} else {
|
||||||
meta marsQuantile sprintf("%d:%d",quantileValue,totalNumberOfQuantiles);
|
meta marsQuantile sprintf("%d:%d",quantileValue,totalNumberOfQuantiles);
|
||||||
alias mars.quantile = marsQuantile;
|
alias mars.quantile = marsQuantile;
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
if (edition == 1){
|
else
|
||||||
meta marsQuantile sprintf("%d:%d",perturbationNumber,numberOfForecastsInEnsemble);
|
{
|
||||||
alias mars.quantile = marsQuantile;
|
if (edition == 1) {
|
||||||
} else {
|
meta marsQuantile sprintf("%d:%d",perturbationNumber,numberOfForecastsInEnsemble);
|
||||||
meta marsQuantile sprintf("%d:%d",quantileValue,totalNumberOfQuantiles);
|
alias mars.quantile = marsQuantile;
|
||||||
alias mars.quantile = marsQuantile;
|
} else {
|
||||||
}
|
meta marsQuantile sprintf("%d:%d",quantileValue,totalNumberOfQuantiles);
|
||||||
|
alias mars.quantile = marsQuantile;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,9 +98,7 @@ int grib_accessor_ascii_t::pack_double(const double* v, size_t* len)
|
||||||
|
|
||||||
int grib_accessor_ascii_t::unpack_long(long* v, size_t* len)
|
int grib_accessor_ascii_t::unpack_long(long* v, size_t* len)
|
||||||
{
|
{
|
||||||
char val[1024] = {
|
char val[1024] = {0,};
|
||||||
0,
|
|
||||||
};
|
|
||||||
size_t l = sizeof(val);
|
size_t l = sizeof(val);
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
char* last = NULL;
|
char* last = NULL;
|
||||||
|
|
|
@ -175,9 +175,7 @@ int grib_accessor_bufr_data_element_t::unpack_string(char* val, size_t* len)
|
||||||
grib_context* c = context_;
|
grib_context* c = context_;
|
||||||
|
|
||||||
if (type_ != BUFR_DESCRIPTOR_TYPE_STRING) {
|
if (type_ != BUFR_DESCRIPTOR_TYPE_STRING) {
|
||||||
char sval[32] = {
|
char sval[32] = {0,};
|
||||||
0,
|
|
||||||
};
|
|
||||||
err = unpack_double(&dval, &dlen);
|
err = unpack_double(&dval, &dlen);
|
||||||
if (err) return err;
|
if (err) return err;
|
||||||
snprintf(sval, sizeof(sval), "%g", dval);
|
snprintf(sval, sizeof(sval), "%g", dval);
|
||||||
|
@ -539,9 +537,7 @@ int grib_accessor_bufr_data_element_t::is_missing()
|
||||||
grib_context_free(c, values);
|
grib_context_free(c, values);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
char value[MAX_STRING_SIZE] = {
|
char value[MAX_STRING_SIZE] = {0,}; /* See ECC-710 */
|
||||||
0,
|
|
||||||
}; /* See ECC-710 */
|
|
||||||
size = MAX_STRING_SIZE;
|
size = MAX_STRING_SIZE;
|
||||||
err = unpack_string(value, &size);
|
err = unpack_string(value, &size);
|
||||||
if (err) return 0; /* TODO: no way of propagating the error up */
|
if (err) return 0; /* TODO: no way of propagating the error up */
|
||||||
|
|
|
@ -85,9 +85,7 @@ static int build_long_array(grib_context* c, grib_handle* h, int compressed,
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* uncompressed */
|
/* uncompressed */
|
||||||
char keystr[32] = {
|
char keystr[32] = {0,};
|
||||||
0,
|
|
||||||
};
|
|
||||||
size_t values_len = 0;
|
size_t values_len = 0;
|
||||||
for (i = 0; i < numberOfSubsets; ++i) {
|
for (i = 0; i < numberOfSubsets; ++i) {
|
||||||
long lVal = 0;
|
long lVal = 0;
|
||||||
|
@ -108,21 +106,15 @@ static int build_long_array(grib_context* c, grib_handle* h, int compressed,
|
||||||
|
|
||||||
int grib_accessor_bufr_extract_datetime_subsets_t::select_datetime()
|
int grib_accessor_bufr_extract_datetime_subsets_t::select_datetime()
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
long compressed = 0;
|
long compressed = 0;
|
||||||
grib_handle* h = grib_handle_of_accessor(this);
|
grib_handle* h = grib_handle_of_accessor(this);
|
||||||
grib_context* c = h->context;
|
grib_context* c = h->context;
|
||||||
size_t n;
|
|
||||||
double julianStart = 0, julianEnd = 0, julianDT = 0;
|
double julianStart = 0, julianEnd = 0, julianDT = 0;
|
||||||
char start_str[80] = {
|
char start_str[80] = {0,},
|
||||||
0,
|
end_str[80] = {0,},
|
||||||
},
|
datetime_str[80] = {0,};
|
||||||
end_str[80] = {
|
|
||||||
0,
|
|
||||||
},
|
|
||||||
datetime_str[80] = {
|
|
||||||
0,
|
|
||||||
};
|
|
||||||
long yearRank, monthRank, dayRank, hourRank, minuteRank, secondRank;
|
long yearRank, monthRank, dayRank, hourRank, minuteRank, secondRank;
|
||||||
long yearStart, monthStart, dayStart, hourStart, minuteStart, secondStart;
|
long yearStart, monthStart, dayStart, hourStart, minuteStart, secondStart;
|
||||||
long yearEnd, monthEnd, dayEnd, hourEnd, minuteEnd, secondEnd;
|
long yearEnd, monthEnd, dayEnd, hourEnd, minuteEnd, secondEnd;
|
||||||
|
@ -196,7 +188,7 @@ int grib_accessor_bufr_extract_datetime_subsets_t::select_datetime()
|
||||||
if (ret) return ret;
|
if (ret) return ret;
|
||||||
|
|
||||||
/* SECOND: Double array */
|
/* SECOND: Double array */
|
||||||
n = numberOfSubsets;
|
size_t n = numberOfSubsets;
|
||||||
second = (double*)grib_context_malloc_clear(c, sizeof(double) * numberOfSubsets);
|
second = (double*)grib_context_malloc_clear(c, sizeof(double) * numberOfSubsets);
|
||||||
if (compressed) {
|
if (compressed) {
|
||||||
ret = grib_get_double_array(h, secondstr, second, &n);
|
ret = grib_get_double_array(h, secondstr, second, &n);
|
||||||
|
|
|
@ -23,9 +23,7 @@ void grib_accessor_cf_var_name_t::init(const long l, grib_arguments* arg)
|
||||||
int grib_accessor_cf_var_name_t::unpack_string(char* val, size_t* len)
|
int grib_accessor_cf_var_name_t::unpack_string(char* val, size_t* len)
|
||||||
{
|
{
|
||||||
grib_handle* h = grib_handle_of_accessor(this);
|
grib_handle* h = grib_handle_of_accessor(this);
|
||||||
char defaultKey[256] = {
|
char defaultKey[256] = {0,};
|
||||||
0,
|
|
||||||
};
|
|
||||||
size_t size = sizeof(defaultKey) / sizeof(*defaultKey);
|
size_t size = sizeof(defaultKey) / sizeof(*defaultKey);
|
||||||
char* pDefaultKey = defaultKey;
|
char* pDefaultKey = defaultKey;
|
||||||
|
|
||||||
|
|
|
@ -33,9 +33,7 @@ void grib_accessor_g1end_of_interval_monthly_t::init(const long l, grib_argument
|
||||||
int grib_accessor_g1end_of_interval_monthly_t::unpack_double(double* val, size_t* len)
|
int grib_accessor_g1end_of_interval_monthly_t::unpack_double(double* val, size_t* len)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
char verifyingMonth[7] = {
|
char verifyingMonth[7] = {0,};
|
||||||
0,
|
|
||||||
};
|
|
||||||
size_t slen = 7;
|
size_t slen = 7;
|
||||||
long year = 0, month = 0, date = 0;
|
long year = 0, month = 0, date = 0;
|
||||||
const long mdays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
|
const long mdays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (C) Copyright 2005- ECMWF.
|
* (C) Copyright 2005- ECMWF.
|
||||||
*
|
*
|
||||||
|
@ -46,9 +45,7 @@ int grib_accessor_g2_aerosol_t::pack_long(const long* val, size_t* len)
|
||||||
// long type=-1;
|
// long type=-1;
|
||||||
// long stream=-1;
|
// long stream=-1;
|
||||||
long eps = -1;
|
long eps = -1;
|
||||||
char stepType[15] = {
|
char stepType[15] = {0,};
|
||||||
0,
|
|
||||||
};
|
|
||||||
size_t slen = 15;
|
size_t slen = 15;
|
||||||
// int aerosol = *val;
|
// int aerosol = *val;
|
||||||
int isInstant = 0;
|
int isInstant = 0;
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (C) Copyright 2005- ECMWF.
|
* (C) Copyright 2005- ECMWF.
|
||||||
*
|
*
|
||||||
|
@ -54,9 +53,7 @@ int grib_accessor_g2_chemical_t::pack_long(const long* val, size_t* len)
|
||||||
// long type=-1;
|
// long type=-1;
|
||||||
// long stream=-1;
|
// long stream=-1;
|
||||||
long eps = -1;
|
long eps = -1;
|
||||||
char stepType[15] = {
|
char stepType[15] = {0,};
|
||||||
0,
|
|
||||||
};
|
|
||||||
size_t slen = 15;
|
size_t slen = 15;
|
||||||
// int chemical = *val;
|
// int chemical = *val;
|
||||||
int isInstant = 0;
|
int isInstant = 0;
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (C) Copyright 2005- ECMWF.
|
* (C) Copyright 2005- ECMWF.
|
||||||
*
|
*
|
||||||
|
@ -54,9 +53,7 @@ int grib_accessor_g2_eps_t::pack_long(const long* val, size_t* len)
|
||||||
long stream = -1;
|
long stream = -1;
|
||||||
long chemical = -1;
|
long chemical = -1;
|
||||||
long aerosol = -1;
|
long aerosol = -1;
|
||||||
char stepType[15] = {
|
char stepType[15] = {0,};
|
||||||
0,
|
|
||||||
};
|
|
||||||
size_t slen = 15;
|
size_t slen = 15;
|
||||||
int eps = *val;
|
int eps = *val;
|
||||||
int isInstant = 0;
|
int isInstant = 0;
|
||||||
|
|
|
@ -81,9 +81,7 @@ int grib_accessor_g2_mars_labeling_t::extra_set(long val)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
grib_handle* hand = grib_handle_of_accessor(this);
|
grib_handle* hand = grib_handle_of_accessor(this);
|
||||||
char stepType[30] = {
|
char stepType[30] = {0,};
|
||||||
0,
|
|
||||||
};
|
|
||||||
size_t stepTypelen = 30;
|
size_t stepTypelen = 30;
|
||||||
long derivedForecast = -1;
|
long derivedForecast = -1;
|
||||||
long productDefinitionTemplateNumberNew = -1;
|
long productDefinitionTemplateNumberNew = -1;
|
||||||
|
|
|
@ -48,9 +48,7 @@ int grib_accessor_local_definition_t::pack_long(const long* val, size_t* len)
|
||||||
long eps = -1;
|
long eps = -1;
|
||||||
long chemical = -1;
|
long chemical = -1;
|
||||||
long aerosol = -1;
|
long aerosol = -1;
|
||||||
char stepType[15] = {
|
char stepType[15] = {0,};
|
||||||
0,
|
|
||||||
};
|
|
||||||
size_t slen = 15;
|
size_t slen = 15;
|
||||||
int localDefinitionNumber = *val;
|
int localDefinitionNumber = *val;
|
||||||
int isInstant = 0;
|
int isInstant = 0;
|
||||||
|
|
|
@ -32,12 +32,8 @@ void grib_accessor_lookup_t::post_init()
|
||||||
|
|
||||||
void grib_accessor_lookup_t::dump(grib_dumper* dumper)
|
void grib_accessor_lookup_t::dump(grib_dumper* dumper)
|
||||||
{
|
{
|
||||||
unsigned char bytes[1024] = {
|
unsigned char bytes[1024] = {0,};
|
||||||
0,
|
char msg[1024] = {0,};
|
||||||
};
|
|
||||||
char msg[1024] = {
|
|
||||||
0,
|
|
||||||
};
|
|
||||||
char buf[2048];
|
char buf[2048];
|
||||||
unsigned long v = 0;
|
unsigned long v = 0;
|
||||||
|
|
||||||
|
@ -59,9 +55,7 @@ void grib_accessor_lookup_t::dump(grib_dumper* dumper)
|
||||||
|
|
||||||
int grib_accessor_lookup_t::unpack_string(char* v, size_t* len)
|
int grib_accessor_lookup_t::unpack_string(char* v, size_t* len)
|
||||||
{
|
{
|
||||||
unsigned char bytes[1024] = {
|
unsigned char bytes[1024] = {0,};
|
||||||
0,
|
|
||||||
};
|
|
||||||
|
|
||||||
size_t llen = llength_;
|
size_t llen = llength_;
|
||||||
unpack_bytes(bytes, &llen);
|
unpack_bytes(bytes, &llen);
|
||||||
|
|
|
@ -75,12 +75,21 @@ int grib_accessor_select_step_template_t::pack_long(const long* val, size_t* len
|
||||||
case 47: // ENS aerosol
|
case 47: // ENS aerosol
|
||||||
productDefinitionTemplateNumberNew = 45;
|
productDefinitionTemplateNumberNew = 45;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 67: // DET chemical distrib func
|
case 67: // DET chemical distrib func
|
||||||
productDefinitionTemplateNumberNew = 57;
|
productDefinitionTemplateNumberNew = 57;
|
||||||
break;
|
break;
|
||||||
case 68: // ENS chemical distrib func
|
case 68: // ENS chemical distrib func
|
||||||
productDefinitionTemplateNumberNew = 58;
|
productDefinitionTemplateNumberNew = 58;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 78: // DET chemical source/sink
|
||||||
|
productDefinitionTemplateNumberNew = 76;
|
||||||
|
break;
|
||||||
|
case 79: // ENS chemical source/sink
|
||||||
|
productDefinitionTemplateNumberNew = 77;
|
||||||
|
break;
|
||||||
|
|
||||||
case 72: // DET post-processing
|
case 72: // DET post-processing
|
||||||
productDefinitionTemplateNumberNew = 70;
|
productDefinitionTemplateNumberNew = 70;
|
||||||
break;
|
break;
|
||||||
|
@ -136,12 +145,21 @@ int grib_accessor_select_step_template_t::pack_long(const long* val, size_t* len
|
||||||
case 45: // ENS aerosol
|
case 45: // ENS aerosol
|
||||||
productDefinitionTemplateNumberNew = 85; // 47 is deprecated
|
productDefinitionTemplateNumberNew = 85; // 47 is deprecated
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 57: // DET chemical distrib func
|
case 57: // DET chemical distrib func
|
||||||
productDefinitionTemplateNumberNew = 67;
|
productDefinitionTemplateNumberNew = 67;
|
||||||
break;
|
break;
|
||||||
case 58: // ENS chemical distrib func
|
case 58: // ENS chemical distrib func
|
||||||
productDefinitionTemplateNumberNew = 68;
|
productDefinitionTemplateNumberNew = 68;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 76: // DET chemical source/sink
|
||||||
|
productDefinitionTemplateNumberNew = 78;
|
||||||
|
break;
|
||||||
|
case 77: // ENS chemical source/sink
|
||||||
|
productDefinitionTemplateNumberNew = 79;
|
||||||
|
break;
|
||||||
|
|
||||||
case 70: // DET post-processing
|
case 70: // DET post-processing
|
||||||
productDefinitionTemplateNumberNew = 72;
|
productDefinitionTemplateNumberNew = 72;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -733,7 +733,7 @@ int grib_get_long_array_internal(grib_handle* h, const char* name, long* val, si
|
||||||
int grib_get_long_array(const grib_handle* h, const char* name, long* val, size_t* length);
|
int grib_get_long_array(const grib_handle* h, const char* name, long* val, size_t* length);
|
||||||
int grib_set_values(grib_handle* h, grib_values* args, size_t count);
|
int grib_set_values(grib_handle* h, grib_values* args, size_t count);
|
||||||
int grib_get_nearest_smaller_value(grib_handle* h, const char* name, double val, double* nearest);
|
int grib_get_nearest_smaller_value(grib_handle* h, const char* name, double val, double* nearest);
|
||||||
void grib_print_values(const char* title, grib_values* values, FILE* out);
|
void grib_print_values(const char* title, const grib_values* values, FILE* out, int count);
|
||||||
int grib_values_check(grib_handle* h, grib_values* values, int count);
|
int grib_values_check(grib_handle* h, grib_values* values, int count);
|
||||||
int codes_copy_key(grib_handle* h1, grib_handle* h2, const char* key, int type);
|
int codes_copy_key(grib_handle* h1, grib_handle* h2, const char* key, int type);
|
||||||
int codes_compare_key(grib_handle* h1, grib_handle* h2, const char* key, int compare_flags);
|
int codes_compare_key(grib_handle* h1, grib_handle* h2, const char* key, int compare_flags);
|
||||||
|
|
|
@ -1801,7 +1801,7 @@ int grib_set_values(grib_handle* h, grib_values* args, size_t count)
|
||||||
|
|
||||||
if (h->context->debug) {
|
if (h->context->debug) {
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
grib_print_values("ECCODES DEBUG about to set key/value pair", &args[i], stderr);
|
grib_print_values("ECCODES DEBUG about to set key/value pair", &args[i], stderr, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1875,22 +1875,24 @@ int grib_get_nearest_smaller_value(grib_handle* h, const char* name,
|
||||||
return act->nearest_smaller_value(val, nearest);
|
return act->nearest_smaller_value(val, nearest);
|
||||||
}
|
}
|
||||||
|
|
||||||
void grib_print_values(const char* title, grib_values* values, FILE* out)
|
void grib_print_values(const char* title, const grib_values* values, FILE* out, int count)
|
||||||
{
|
{
|
||||||
if (values) {
|
Assert(values);
|
||||||
fprintf(out, "%s: %s=", title, values->name);
|
for (int i = 0; i < count; ++i) {
|
||||||
switch (values->type) {
|
const grib_values aVal = values[i];
|
||||||
|
fprintf(out, "%s: %s=", title, aVal.name);
|
||||||
|
switch (aVal.type) {
|
||||||
case GRIB_TYPE_LONG:
|
case GRIB_TYPE_LONG:
|
||||||
fprintf(out, "%ld", values->long_value);
|
fprintf(out, "%ld", aVal.long_value);
|
||||||
break;
|
break;
|
||||||
case GRIB_TYPE_DOUBLE:
|
case GRIB_TYPE_DOUBLE:
|
||||||
fprintf(out, "%g", values->double_value);
|
fprintf(out, "%g", aVal.double_value);
|
||||||
break;
|
break;
|
||||||
case GRIB_TYPE_STRING:
|
case GRIB_TYPE_STRING:
|
||||||
fprintf(out, "%s", values->string_value);
|
fprintf(out, "%s", aVal.string_value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fprintf(out, " (type=%s)\n", grib_get_type_name(values->type));
|
fprintf(out, " (type=%s)\n", grib_get_type_name(aVal.type));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -280,6 +280,7 @@ if( HAVE_BUILD_TOOLS )
|
||||||
grib_ecc-1792
|
grib_ecc-1792
|
||||||
grib_ecc-1806
|
grib_ecc-1806
|
||||||
grib_ecc-1907
|
grib_ecc-1907
|
||||||
|
grib_ecc-1941
|
||||||
grib_modelName
|
grib_modelName
|
||||||
grib_sub_hourly
|
grib_sub_hourly
|
||||||
grib_set_bytes
|
grib_set_bytes
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
|
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
|
||||||
#
|
#
|
||||||
. ./include.ctest.sh
|
. ./include.ctest.sh
|
||||||
set -u
|
|
||||||
|
|
||||||
label="grib2_templates_test"
|
label="grib2_templates_test"
|
||||||
|
|
||||||
|
@ -32,6 +31,25 @@ awk '$1 !~ /#/ && $1 < 65000 {print $1}' $latest_codetable_file | while read pdt
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
rm -f $tempText
|
||||||
|
pdtns=$( awk '!/^#/ && $1 < 65000 {print $1}' $latest_codetable_file )
|
||||||
|
for p in $pdtns; do
|
||||||
|
$tools_dir/grib_set -s tablesVersion=$latestOfficial,productDefinitionTemplateNumber=$p $sample2 $temp
|
||||||
|
$tools_dir/grib_dump -O -p section_4 $temp >> $tempText
|
||||||
|
# Expect the grep to fail and not find 'unknown' in the dump output
|
||||||
|
set +e
|
||||||
|
grep -q -i unknown $tempText
|
||||||
|
status=$?
|
||||||
|
set -e
|
||||||
|
if [ $status -ne 1 ]; then
|
||||||
|
echo "GRIB2 PDTN $p produced a dump with unknown!"
|
||||||
|
grep -i unknown $tempText
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
rm -f $tempText
|
||||||
|
|
||||||
|
|
||||||
# ECC-1746
|
# ECC-1746
|
||||||
# -------------
|
# -------------
|
||||||
$tools_dir/grib_set -s tablesVersion=31,productDefinitionTemplateNumber=34 $sample2 $temp
|
$tools_dir/grib_set -s tablesVersion=31,productDefinitionTemplateNumber=34 $sample2 $temp
|
||||||
|
|
|
@ -37,19 +37,21 @@ check_grib_defs()
|
||||||
# -----------------------------------
|
# -----------------------------------
|
||||||
echo "Check for duplicate encodings"
|
echo "Check for duplicate encodings"
|
||||||
# -----------------------------------
|
# -----------------------------------
|
||||||
paramIdFile=$ECCODES_DEFINITION_PATH/grib2/paramId.def
|
paramIdFiles="$ECCODES_DEFINITION_PATH/grib2/paramId.def $ECCODES_DEFINITION_PATH/grib2/localConcepts/ecmf/paramId.def"
|
||||||
|
|
||||||
# Flatten the file so we get just the encoding part.
|
# Flatten the file so we get just the encoding part.
|
||||||
# uniq -d outputs a single copy of each line that is repeated in the input
|
# uniq -d outputs a single copy of each line that is repeated in the input
|
||||||
cat $paramIdFile | tr '\n' ' ' | tr '\t' ' ' | tr '#' '\n' | sed "s/^.* '//" | sed "s/'//" | awk '{$1="";print}' | sort |uniq -d > $tempText
|
for paramIdFile in $paramIdFiles; do
|
||||||
if [ -s "$tempText" ]; then
|
cat $paramIdFile | tr '\n' ' ' | tr '\t' ' ' | tr '#' '\n' | sed "s/^.* '//" | sed "s/'//" | awk '{$1="";print}' | sort |uniq -d > $tempText
|
||||||
# File exists and has a size greater than zero
|
if [ -s "$tempText" ]; then
|
||||||
echo "ERROR: Duplicate parameter encoding(s) found in $paramIdFile" >&2
|
# File exists and has a size greater than zero
|
||||||
cat $tempText | sed -e 's/ ;/;/g'
|
echo "ERROR: Duplicate parameter encoding(s) found in $paramIdFile" >&2
|
||||||
exit 1
|
cat $tempText | sed -e 's/ ;/;/g'
|
||||||
else
|
exit 1
|
||||||
echo "No duplicates in $paramIdFile"
|
else
|
||||||
fi
|
echo "No duplicates in $paramIdFile"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
# First check the GRIB2 paramId.def and shortName.def
|
# First check the GRIB2 paramId.def and shortName.def
|
||||||
# ----------------------------------------------------
|
# ----------------------------------------------------
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# (C) Copyright 2005- ECMWF.
|
||||||
|
#
|
||||||
|
# This software is licensed under the terms of the Apache Licence Version 2.0
|
||||||
|
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
#
|
||||||
|
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
|
||||||
|
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
|
||||||
|
#
|
||||||
|
|
||||||
|
. ./include.ctest.sh
|
||||||
|
|
||||||
|
# ------------------------------------------------------------
|
||||||
|
# This is the test for the JIRA issue ECC-1941
|
||||||
|
# Setting paramId=131060 fails if typeOfFirstFixedSurface=255
|
||||||
|
# ------------------------------------------------------------
|
||||||
|
|
||||||
|
label="grib_ecc-1941_test"
|
||||||
|
tempGribA=temp.$label.A.grib
|
||||||
|
tempGribB=temp.$label.B.grib
|
||||||
|
|
||||||
|
sample_grib2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl
|
||||||
|
|
||||||
|
${tools_dir}/grib_set -s paramId=131060 $sample_grib2 $tempGribA
|
||||||
|
grib_check_key_equals $tempGribA paramId,shortName '131060 tpg1'
|
||||||
|
|
||||||
|
${tools_dir}/grib_set -s typeOfFirstFixedSurface=255 $sample_grib2 $tempGribA
|
||||||
|
grib_check_key_equals $tempGribA typeOfLevel unknown
|
||||||
|
|
||||||
|
${tools_dir}/grib_set -s paramId=131060 $tempGribA $tempGribB
|
||||||
|
grib_check_key_equals $tempGribB paramId,shortName '131060 tpg1'
|
||||||
|
|
||||||
|
# Clean up
|
||||||
|
rm -f $tempGribA $tempGribB
|
|
@ -486,7 +486,7 @@ static void test_parse_keyval_string()
|
||||||
values_required, GRIB_TYPE_UNDEFINED, values1, &count);
|
values_required, GRIB_TYPE_UNDEFINED, values1, &count);
|
||||||
Assert( !err );
|
Assert( !err );
|
||||||
Assert( count == 2 );
|
Assert( count == 2 );
|
||||||
grib_print_values("print values test: values1", values1, stdout);
|
grib_print_values("print values test: values1", values1, stdout, count);
|
||||||
|
|
||||||
Assert( strcmp(values1[0].name, "key1")==0 );
|
Assert( strcmp(values1[0].name, "key1")==0 );
|
||||||
Assert( strcmp(values1[0].string_value, "value1")==0 );
|
Assert( strcmp(values1[0].string_value, "value1")==0 );
|
||||||
|
@ -506,7 +506,7 @@ static void test_parse_keyval_string()
|
||||||
values_required, GRIB_TYPE_LONG, values2, &count);
|
values_required, GRIB_TYPE_LONG, values2, &count);
|
||||||
Assert( !err );
|
Assert( !err );
|
||||||
Assert( count == 1 );
|
Assert( count == 1 );
|
||||||
grib_print_values("print values test: values2", values2, stdout);
|
grib_print_values("print values test: values2", values2, stdout, count);
|
||||||
Assert( strcmp(values2[0].name, "x")==0 );
|
Assert( strcmp(values2[0].name, "x")==0 );
|
||||||
Assert( values2[0].long_value == 14 );
|
Assert( values2[0].long_value == 14 );
|
||||||
Assert( values2[0].equal == 1 );
|
Assert( values2[0].equal == 1 );
|
||||||
|
@ -517,7 +517,7 @@ static void test_parse_keyval_string()
|
||||||
values_required, GRIB_TYPE_DOUBLE, values3, &count);
|
values_required, GRIB_TYPE_DOUBLE, values3, &count);
|
||||||
Assert( !err );
|
Assert( !err );
|
||||||
Assert( count == 1 );
|
Assert( count == 1 );
|
||||||
grib_print_values("print values test: values3", values3, stdout);
|
grib_print_values("print values test: values3", values3, stdout, count);
|
||||||
Assert( strcmp(values3[0].name, "mars.level")==0 );
|
Assert( strcmp(values3[0].name, "mars.level")==0 );
|
||||||
free( (void*)values3[0].name );
|
free( (void*)values3[0].name );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue