mirror of https://github.com/ecmwf/eccodes.git
ECC-1330: BUFR: bufrTemplate='unknown' but should be 'aircraftReportWithSecondsAndPressure'
This commit is contained in:
parent
66a5a0a3a6
commit
9b2b7d69c7
|
@ -62,5 +62,3 @@
|
||||||
"Siral" = { unexpandedDescriptors = 312071 ; }
|
"Siral" = { unexpandedDescriptors = 312071 ; }
|
||||||
"IasiL1c" = { unexpandedDescriptors = 340007 ; }
|
"IasiL1c" = { unexpandedDescriptors = 340007 ; }
|
||||||
"SaralAltika" = { unexpandedDescriptors = 340011 ; }
|
"SaralAltika" = { unexpandedDescriptors = 340011 ; }
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -140,6 +140,9 @@ static void init_class(grib_accessor_class* c)
|
||||||
|
|
||||||
#define MAX_CONCEPT_STRING_LENGTH 255
|
#define MAX_CONCEPT_STRING_LENGTH 255
|
||||||
|
|
||||||
|
#define FALSE 0
|
||||||
|
#define TRUE 1
|
||||||
|
|
||||||
/* Note: A fast cut-down version of strcmp which does NOT return -1 */
|
/* Note: A fast cut-down version of strcmp which does NOT return -1 */
|
||||||
/* 0 means input strings are equal and 1 means not equal */
|
/* 0 means input strings are equal and 1 means not equal */
|
||||||
GRIB_INLINE static int grib_inline_strcmp(const char* a, const char* b)
|
GRIB_INLINE static int grib_inline_strcmp(const char* a, const char* b)
|
||||||
|
@ -163,11 +166,12 @@ static void dump(grib_accessor* a, grib_dumper* dumper)
|
||||||
grib_dump_string(dumper, a, NULL);
|
grib_dump_string(dumper, a, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return 1 (=True) or 0 (=False) */
|
||||||
static int concept_condition_expression_true(grib_handle* h, grib_concept_condition* c)
|
static int concept_condition_expression_true(grib_handle* h, grib_concept_condition* c)
|
||||||
{
|
{
|
||||||
long lval;
|
long lval;
|
||||||
long lres = 0;
|
long lres = 0;
|
||||||
int ok = 0;
|
int ok = FALSE; /* Boolean */
|
||||||
int err = 0;
|
int err = 0;
|
||||||
const int type = grib_expression_native_type(h, c->expression);
|
const int type = grib_expression_native_type(h, c->expression);
|
||||||
|
|
||||||
|
@ -207,27 +211,28 @@ static int concept_condition_expression_true(grib_handle* h, grib_concept_condit
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return 1 (=True) or 0 (=False) */
|
||||||
static int concept_condition_iarray_true(grib_handle* h, grib_concept_condition* c)
|
static int concept_condition_iarray_true(grib_handle* h, grib_concept_condition* c)
|
||||||
{
|
{
|
||||||
long* val;
|
long* val;
|
||||||
size_t size = 0, i;
|
size_t size = 0, i;
|
||||||
int ret;
|
int ret; /* Boolean */
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
err = grib_get_size(h, c->name, &size);
|
err = grib_get_size(h, c->name, &size);
|
||||||
if (err == 0 || size != grib_iarray_used_size(c->iarray))
|
if (err || size != grib_iarray_used_size(c->iarray))
|
||||||
return 0;
|
return FALSE;
|
||||||
|
|
||||||
val = (long*)grib_context_malloc_clear(h->context, sizeof(long) * size);
|
val = (long*)grib_context_malloc_clear(h->context, sizeof(long) * size);
|
||||||
|
|
||||||
err = grib_get_long_array(h, c->name, val, &size);
|
err = grib_get_long_array(h, c->name, val, &size);
|
||||||
if (err == 0)
|
if (err)
|
||||||
return 0;
|
return FALSE;
|
||||||
|
|
||||||
ret = 1;
|
ret = TRUE;
|
||||||
for (i = 0; i < size; i++) {
|
for (i = 0; i < size; i++) {
|
||||||
if (val[i] != c->iarray->v[i]) {
|
if (val[i] != c->iarray->v[i]) {
|
||||||
ret = 0;
|
ret = FALSE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -235,6 +240,7 @@ static int concept_condition_iarray_true(grib_handle* h, grib_concept_condition*
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return 1 (=True) or 0 (=False) */
|
||||||
static int concept_condition_true(grib_handle* h, grib_concept_condition* c)
|
static int concept_condition_true(grib_handle* h, grib_concept_condition* c)
|
||||||
{
|
{
|
||||||
if (c->expression == NULL)
|
if (c->expression == NULL)
|
||||||
|
|
|
@ -648,6 +648,8 @@ cat >$fRules <<EOF
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
${tools_dir}/codes_bufr_filter -o $fOut $fRules $f 2>> $fLog 1>> $fLog
|
${tools_dir}/codes_bufr_filter -o $fOut $fRules $f 2>> $fLog 1>> $fLog
|
||||||
|
res=`${tools_dir}/bufr_get -p bufrTemplate $fOut`
|
||||||
|
[ "$res" = "synopLand" ]
|
||||||
${tools_dir}/bufr_compare $fOut $fRef #2>> $fLog 1>> $fLog
|
${tools_dir}/bufr_compare $fOut $fRef #2>> $fLog 1>> $fLog
|
||||||
|
|
||||||
rm -f $fOut
|
rm -f $fOut
|
||||||
|
@ -661,6 +663,8 @@ cat >$fRules <<EOF
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
${tools_dir}/codes_bufr_filter -o $fOut $fRules $f 2>> $fLog 1>> $fLog
|
${tools_dir}/codes_bufr_filter -o $fOut $fRules $f 2>> $fLog 1>> $fLog
|
||||||
|
res=`${tools_dir}/bufr_get -p bufrTemplate $fOut`
|
||||||
|
[ "$res" = "aircraftReportWithSecondsAndPressure" ]
|
||||||
${tools_dir}/bufr_compare $fOut $fRef #2>> $fLog 1>> $fLog
|
${tools_dir}/bufr_compare $fOut $fRef #2>> $fLog 1>> $fLog
|
||||||
|
|
||||||
rm -f $fOut
|
rm -f $fOut
|
||||||
|
|
|
@ -20,7 +20,12 @@ templates_file="${ECCODES_DEFINITION_PATH}/bufr/templates/BufrTemplate.def"
|
||||||
templates=`cat $templates_file | awk -F= '{print $1}' | tr -d '"'`
|
templates=`cat $templates_file | awk -F= '{print $1}' | tr -d '"'`
|
||||||
for t in $templates; do
|
for t in $templates; do
|
||||||
${tools_dir}/bufr_set -s bufrTemplate=$t $sample $temp
|
${tools_dir}/bufr_set -s bufrTemplate=$t $sample $temp
|
||||||
${tools_dir}/bufr_dump -p $temp > /dev/null
|
# TODO: There is a matching issue with OmpsNadirProfile: mixed up with OmpsTotalColumn
|
||||||
|
if [ "$t" != "OmpsNadirProfile" ]; then
|
||||||
|
res=`${tools_dir}/bufr_get -p BufrTemplate $temp`
|
||||||
|
[ "$res" = "$t" ]
|
||||||
|
${tools_dir}/bufr_dump -p $temp > /dev/null
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
rm -f $temp
|
rm -f $temp
|
||||||
|
|
Loading…
Reference in New Issue