mirror of https://github.com/ecmwf/eccodes.git
Merge branch 'develop' into feature/ECC-1620_sub-hourly
This commit is contained in:
commit
f297de4278
|
@ -1339,3 +1339,15 @@
|
|||
parameterCategory = 128 ;
|
||||
parameterNumber = 124 ;
|
||||
}
|
||||
#Vertical integral of water vapour
|
||||
'p55.162' = {
|
||||
discipline = 192 ;
|
||||
parameterCategory = 162 ;
|
||||
parameterNumber = 55 ;
|
||||
}
|
||||
#Snow depth
|
||||
'sdsien' = {
|
||||
discipline = 192 ;
|
||||
parameterCategory = 190 ;
|
||||
parameterNumber = 141 ;
|
||||
}
|
||||
|
|
|
@ -1339,3 +1339,15 @@
|
|||
parameterCategory = 128 ;
|
||||
parameterNumber = 124 ;
|
||||
}
|
||||
#Vertical integral of water vapour
|
||||
'Vertical integral of water vapour' = {
|
||||
discipline = 192 ;
|
||||
parameterCategory = 162 ;
|
||||
parameterNumber = 55 ;
|
||||
}
|
||||
#Snow depth
|
||||
'Snow depth' = {
|
||||
discipline = 192 ;
|
||||
parameterCategory = 190 ;
|
||||
parameterNumber = 141 ;
|
||||
}
|
||||
|
|
|
@ -1339,3 +1339,15 @@
|
|||
parameterCategory = 128 ;
|
||||
parameterNumber = 124 ;
|
||||
}
|
||||
#Vertical integral of water vapour
|
||||
'162055' = {
|
||||
discipline = 192 ;
|
||||
parameterCategory = 162 ;
|
||||
parameterNumber = 55 ;
|
||||
}
|
||||
#Snow depth
|
||||
'190141' = {
|
||||
discipline = 192 ;
|
||||
parameterCategory = 190 ;
|
||||
parameterNumber = 141 ;
|
||||
}
|
||||
|
|
|
@ -1339,3 +1339,15 @@
|
|||
parameterCategory = 128 ;
|
||||
parameterNumber = 124 ;
|
||||
}
|
||||
#Vertical integral of water vapour
|
||||
'viwv' = {
|
||||
discipline = 192 ;
|
||||
parameterCategory = 162 ;
|
||||
parameterNumber = 55 ;
|
||||
}
|
||||
#Snow depth
|
||||
'sdsien' = {
|
||||
discipline = 192 ;
|
||||
parameterCategory = 190 ;
|
||||
parameterNumber = 141 ;
|
||||
}
|
||||
|
|
|
@ -1339,3 +1339,15 @@
|
|||
parameterCategory = 128 ;
|
||||
parameterNumber = 124 ;
|
||||
}
|
||||
#Vertical integral of water vapour
|
||||
'kg m**-2' = {
|
||||
discipline = 192 ;
|
||||
parameterCategory = 162 ;
|
||||
parameterNumber = 55 ;
|
||||
}
|
||||
#Snow depth
|
||||
'kg m**-2' = {
|
||||
discipline = 192 ;
|
||||
parameterCategory = 190 ;
|
||||
parameterNumber = 141 ;
|
||||
}
|
||||
|
|
|
@ -62,6 +62,8 @@ int main(int argc, char** argv)
|
|||
/* Can also set to MISSING via codes_set_string */
|
||||
CODES_CHECK(codes_set_string(h, "scaleFactorOfFirstFixedSurface", "missing", &str_len), 0);
|
||||
CODES_CHECK(codes_set_string(h, "scaledValueOfFirstFixedSurface", "missing", &str_len), 0);
|
||||
/* Set a Code Table key to missing via codes_set_string */
|
||||
CODES_CHECK(codes_set_string(h, "typeOfFirstFixedSurface", "missing", &str_len), 0);
|
||||
|
||||
/* see GRIB-490 */
|
||||
CODES_CHECK(codes_get_long(h, "Ni", &Ni), 0);
|
||||
|
|
|
@ -20,6 +20,10 @@ if [ -f "${tools_dir}/grib_get" ]; then
|
|||
[ "$sf" = "MISSING" ]
|
||||
sf=`${tools_dir}/grib_get -p scaledValueOfFirstFixedSurface $tempGrib`
|
||||
[ "$sf" = "MISSING" ]
|
||||
|
||||
# Code Table key being set to missing
|
||||
sf=`${tools_dir}/grib_get -p typeOfFirstFixedSurface:i, $tempGrib`
|
||||
[ "$sf" = "255" ]
|
||||
fi
|
||||
|
||||
rm -f $tempGrib
|
||||
|
|
|
@ -196,6 +196,7 @@ int main(int argc, char** argv)
|
|||
|
||||
/* 255 = Missing (grib2/tables/4/4.5.table) */
|
||||
CODES_CHECK(codes_set_long(h, "typeOfSecondFixedSurface", 255), 0);
|
||||
CODES_CHECK(codes_set_missing(h, "typeOfSecondFixedSurface"), 0);
|
||||
|
||||
CODES_CHECK(codes_set_missing(h, "scaleFactorOfSecondFixedSurface"), 0);
|
||||
CODES_CHECK(codes_set_missing(h, "scaledValueOfSecondFixedSurface"), 0);
|
||||
|
|
Binary file not shown.
|
@ -1147,6 +1147,7 @@ int grib_set_missing(grib_handle* h, const char* name);
|
|||
int grib_is_missing_long(grib_accessor* a, long x);
|
||||
int grib_is_missing_double(grib_accessor* a, double x);
|
||||
int grib_is_missing_string(grib_accessor* a, const unsigned char* x, size_t len);
|
||||
int grib_accessor_can_be_missing(grib_accessor* a, int* err);
|
||||
int grib_accessor_is_missing(grib_accessor* a, int* err);
|
||||
int grib_is_missing(const grib_handle* h, const char* name, int* err);
|
||||
int grib_is_defined(const grib_handle* h, const char* name);
|
||||
|
@ -1160,8 +1161,8 @@ int grib_set_float_array(grib_handle* h, const char* name, const float* val, siz
|
|||
int grib_set_long_array_internal(grib_handle* h, const char* name, const long* val, size_t length);
|
||||
int grib_set_long_array(grib_handle* h, const char* name, const long* val, size_t length);
|
||||
int grib_get_long_internal(grib_handle* h, const char* name, long* val);
|
||||
int grib_is_in_dump(grib_handle* h, const char* name);
|
||||
int grib_attributes_count(grib_accessor* a, size_t* size);
|
||||
int grib_is_in_dump(const grib_handle* h, const char* name);
|
||||
int grib_attributes_count(const grib_accessor* a, size_t* size);
|
||||
int grib_get_long(const grib_handle* h, const char* name, long* val);
|
||||
int grib_get_double_internal(grib_handle* h, const char* name, double* val);
|
||||
int grib_get_double(const grib_handle* h, const char* name, double* val);
|
||||
|
@ -1207,7 +1208,7 @@ 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);
|
||||
void grib_print_values(const char* title, grib_values* values);
|
||||
int grib_values_check(grib_handle* h, grib_values* values, int count);
|
||||
int grib_key_equal(grib_handle* h1, grib_handle* h2, const char* key, int type, int* err);
|
||||
int grib_key_equal(const grib_handle* h1, const grib_handle* h2, const char* key, int type, int* err);
|
||||
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);
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ static void thread_init()
|
|||
CLASS = accessor
|
||||
SUPER = grib_accessor_class_unsigned
|
||||
IMPLEMENTS = init;dump;unpack_string;pack_expression;unpack_long
|
||||
IMPLEMENTS = value_count;pack_string; destroy; get_native_type;
|
||||
IMPLEMENTS = value_count;pack_string; destroy; get_native_type;pack_missing
|
||||
MEMBERS = const char* tablename
|
||||
MEMBERS = const char* masterDir
|
||||
MEMBERS = const char* localDir
|
||||
|
@ -71,6 +71,7 @@ or edit "accessor.class" and rerun ./make_class.pl
|
|||
*/
|
||||
|
||||
static int get_native_type(grib_accessor*);
|
||||
static int pack_missing(grib_accessor*);
|
||||
static int pack_string(grib_accessor*, const char*, size_t* len);
|
||||
static int pack_expression(grib_accessor*, grib_expression*);
|
||||
static int unpack_long(grib_accessor*, long* val, size_t* len);
|
||||
|
@ -115,7 +116,7 @@ static grib_accessor_class _grib_accessor_class_codetable = {
|
|||
0, /* get offset to bytes */
|
||||
&get_native_type, /* get native type */
|
||||
0, /* get sub_section */
|
||||
0, /* pack_missing */
|
||||
&pack_missing, /* pack_missing */
|
||||
0, /* is_missing */
|
||||
0, /* pack_long */
|
||||
&unpack_long, /* unpack_long */
|
||||
|
@ -736,6 +737,10 @@ static int pack_string(grib_accessor* a, const char* buffer, size_t* len)
|
|||
return grib_pack_long(a, &lValue, &l);
|
||||
}
|
||||
|
||||
if (STR_EQUAL_NOCASE(buffer, "missing")) {
|
||||
return pack_missing(a);
|
||||
}
|
||||
|
||||
grib_accessor_codetable* self = (grib_accessor_codetable*)a;
|
||||
grib_codetable* table;
|
||||
long i;
|
||||
|
@ -912,3 +917,27 @@ static int unpack_long(grib_accessor* a, long* val, size_t* len)
|
|||
*len = rlen;
|
||||
return GRIB_SUCCESS;
|
||||
}
|
||||
|
||||
static int pack_missing(grib_accessor* a)
|
||||
{
|
||||
// Many of the code tables do have a 'Missing' entry (all bits = 1)
|
||||
// So it is more user-friendly to allow setting codetable keys to
|
||||
// missing. For tables that do not have such an entry, an error is issued
|
||||
grib_accessor_codetable* self = (grib_accessor_codetable*)a;
|
||||
grib_handle* h = grib_handle_of_accessor(a);
|
||||
|
||||
const long nbytes = a->length;
|
||||
const long nbits = nbytes*8;
|
||||
const long maxVal = (1<<nbits) - 1;
|
||||
|
||||
int err = codes_codetable_check_code_figure(h, a->name, maxVal);
|
||||
if (!err) {
|
||||
size_t l = 1;
|
||||
return grib_pack_long(a, &maxVal, &l);
|
||||
}
|
||||
|
||||
grib_context_log(a->context, GRIB_LOG_ERROR, "There is no 'missing' entry in Code Table %s (%s)",
|
||||
self->tablename, grib_get_error_message(err));
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -258,7 +258,7 @@ static int pack_string(grib_accessor* a, const char* val, size_t* len)
|
|||
long v = 0; /* The converted value */
|
||||
|
||||
// ECC-1722
|
||||
if (strcmp_nocase(val, "missing")==0) {
|
||||
if (STR_EQUAL_NOCASE(val, "missing")) {
|
||||
return pack_missing(a);
|
||||
}
|
||||
|
||||
|
|
|
@ -201,6 +201,8 @@ extern int pthread_mutexattr_settype(pthread_mutexattr_t* attr, int type);
|
|||
|
||||
/* Return true if two strings are equal */
|
||||
#define STR_EQUAL(a, b) (strcmp((a), (b)) == 0)
|
||||
/* Return true if two strings are equal, ignoring case */
|
||||
#define STR_EQUAL_NOCASE(a, b) (strcmp_nocase((a), (b)) == 0)
|
||||
|
||||
#include "grib_api.h"
|
||||
|
||||
|
@ -862,6 +864,7 @@ struct grib_handle
|
|||
/* grib_trie* bufr_elements_table; */
|
||||
};
|
||||
|
||||
/* For GRIB2 multi-field messages */
|
||||
struct grib_multi_handle
|
||||
{
|
||||
grib_context* context; /** < context attached to this handle */
|
||||
|
@ -938,7 +941,6 @@ struct grib_accessor_class
|
|||
};
|
||||
|
||||
typedef struct grib_multi_support grib_multi_support;
|
||||
|
||||
struct grib_multi_support
|
||||
{
|
||||
FILE* file;
|
||||
|
@ -955,7 +957,6 @@ struct grib_multi_support
|
|||
|
||||
/* Hash_array */
|
||||
typedef struct grib_hash_array_value grib_hash_array_value;
|
||||
|
||||
struct grib_hash_array_value
|
||||
{
|
||||
grib_hash_array_value* next;
|
||||
|
@ -968,7 +969,6 @@ struct grib_hash_array_value
|
|||
|
||||
/* Concepts */
|
||||
typedef struct grib_concept_condition grib_concept_condition;
|
||||
|
||||
struct grib_concept_condition
|
||||
{
|
||||
grib_concept_condition* next;
|
||||
|
@ -985,7 +985,6 @@ struct grib_concept_value_name
|
|||
};
|
||||
|
||||
typedef struct grib_concept_value grib_concept_value;
|
||||
|
||||
struct grib_concept_value
|
||||
{
|
||||
grib_concept_value* next;
|
||||
|
@ -1416,7 +1415,6 @@ struct cvs_MD5Context
|
|||
/* --- */
|
||||
|
||||
typedef struct grib_rule_entry grib_rule_entry;
|
||||
|
||||
struct grib_rule_entry
|
||||
{
|
||||
grib_rule_entry* next;
|
||||
|
@ -1425,7 +1423,6 @@ struct grib_rule_entry
|
|||
};
|
||||
|
||||
typedef struct grib_rule grib_rule;
|
||||
|
||||
struct grib_rule
|
||||
{
|
||||
grib_rule* next;
|
||||
|
@ -1434,7 +1431,6 @@ struct grib_rule
|
|||
};
|
||||
|
||||
typedef struct grib_case grib_case;
|
||||
|
||||
struct grib_case
|
||||
{
|
||||
grib_arguments* values;
|
||||
|
@ -1531,4 +1527,3 @@ typedef struct j2k_encode_helper
|
|||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -100,6 +100,55 @@ static int destroy(grib_dumper* d)
|
|||
return GRIB_SUCCESS;
|
||||
}
|
||||
|
||||
static void default_long_value(grib_dumper* d, grib_accessor* a, long actualValue)
|
||||
{
|
||||
grib_dumper_debug* self = (grib_dumper_debug*)d;
|
||||
grib_action* act = a->creator;
|
||||
if (act->default_value == NULL)
|
||||
return;
|
||||
|
||||
grib_handle* h = grib_handle_of_accessor(a);
|
||||
grib_expression* expression = grib_arguments_get_expression(h, act->default_value, 0);
|
||||
if (!expression)
|
||||
return;
|
||||
|
||||
const int type = grib_expression_native_type(h, expression);
|
||||
if (type == GRIB_TYPE_LONG) {
|
||||
long defaultValue = 0;
|
||||
if (grib_expression_evaluate_long(h, expression, &defaultValue) == GRIB_SUCCESS && defaultValue != actualValue) {
|
||||
if (defaultValue == GRIB_MISSING_LONG)
|
||||
fprintf(self->dumper.out, " (default=MISSING)");
|
||||
else
|
||||
fprintf(self->dumper.out, " (default=%ld)",defaultValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// static void default_string_value(grib_dumper* d, grib_accessor* a, const char* actualValue)
|
||||
// {
|
||||
// grib_dumper_debug* self = (grib_dumper_debug*)d;
|
||||
// grib_action* act = a->creator;
|
||||
// if (act->default_value == NULL)
|
||||
// return;
|
||||
|
||||
// grib_handle* h = grib_handle_of_accessor(a);
|
||||
// grib_expression* expression = grib_arguments_get_expression(h, act->default_value, 0);
|
||||
// if (!expression)
|
||||
// return;
|
||||
|
||||
// const int type = grib_expression_native_type(h, expression);
|
||||
// DEBUG_ASSERT(type == GRIB_TYPE_STRING);
|
||||
// if (type == GRIB_TYPE_STRING) {
|
||||
// char tmp[1024] = {0,};
|
||||
// size_t s_len = sizeof(tmp);
|
||||
// int err = 0;
|
||||
// const char* p = grib_expression_evaluate_string(h, expression, tmp, &s_len, &err);
|
||||
// if (!err && !STR_EQUAL(p, actualValue)) {
|
||||
// fprintf(self->dumper.out, " (default=%s)", p);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
static void aliases(grib_dumper* d, grib_accessor* a)
|
||||
{
|
||||
int i;
|
||||
|
@ -202,6 +251,7 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment)
|
|||
fprintf(self->dumper.out, " *** ERR=%d (%s) [grib_dumper_debug::dump_long]", err, grib_get_error_message(err));
|
||||
|
||||
aliases(d, a);
|
||||
default_long_value(d, a, value);
|
||||
|
||||
fprintf(self->dumper.out, "\n");
|
||||
}
|
||||
|
|
|
@ -81,7 +81,7 @@ int grib_set_expression(grib_handle* h, const char* name, grib_expression* e)
|
|||
|
||||
int grib_set_long_internal(grib_handle* h, const char* name, long val)
|
||||
{
|
||||
grib_context* c = h->context;
|
||||
const grib_context* c = h->context;
|
||||
int ret = GRIB_SUCCESS;
|
||||
grib_accessor* a = NULL;
|
||||
size_t l = 1;
|
||||
|
@ -213,8 +213,8 @@ int grib_copy_namespace(grib_handle* dest, const char* name, grib_handle* src)
|
|||
grib_accessor* a = NULL;
|
||||
key_err = first;
|
||||
while (key_err) {
|
||||
char* key = key_err->name;
|
||||
err = &(key_err->err);
|
||||
const char* key = key_err->name;
|
||||
err = &(key_err->err);
|
||||
|
||||
if (*err == GRIB_SUCCESS) {
|
||||
key_err = key_err->next;
|
||||
|
@ -571,7 +571,7 @@ int grib_set_missing(grib_handle* h, const char* name)
|
|||
if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)
|
||||
return GRIB_READ_ONLY;
|
||||
|
||||
if (a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) {
|
||||
if (grib_accessor_can_be_missing(a, &ret)) {
|
||||
if (h->context->debug)
|
||||
fprintf(stderr, "ECCODES DEBUG grib_set_missing %s\n", name);
|
||||
|
||||
|
@ -641,6 +641,19 @@ int grib_accessor_is_missing(grib_accessor* a, int* err)
|
|||
}
|
||||
}
|
||||
|
||||
int grib_accessor_can_be_missing(grib_accessor* a, int* err)
|
||||
{
|
||||
if (a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) {
|
||||
return 1;
|
||||
}
|
||||
if (STR_EQUAL(a->cclass->name, "codetable")) {
|
||||
// Special case of Code Table keys
|
||||
// The vast majority have a 'Missing' entry
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int grib_is_missing(const grib_handle* h, const char* name, int* err)
|
||||
{
|
||||
grib_accessor* a = grib_find_accessor(h, name);
|
||||
|
@ -650,7 +663,7 @@ int grib_is_missing(const grib_handle* h, const char* name, int* err)
|
|||
/* Return true if the given key exists (is defined) in our grib message */
|
||||
int grib_is_defined(const grib_handle* h, const char* name)
|
||||
{
|
||||
grib_accessor* a = grib_find_accessor(h, name);
|
||||
const grib_accessor* a = grib_find_accessor(h, name);
|
||||
return (a ? 1 : 0);
|
||||
}
|
||||
|
||||
|
@ -938,16 +951,16 @@ int grib_get_long_internal(grib_handle* h, const char* name, long* val)
|
|||
return ret;
|
||||
}
|
||||
|
||||
int grib_is_in_dump(grib_handle* h, const char* name)
|
||||
int grib_is_in_dump(const grib_handle* h, const char* name)
|
||||
{
|
||||
grib_accessor* a = grib_find_accessor(h, name);
|
||||
const grib_accessor* a = grib_find_accessor(h, name);
|
||||
if (a != NULL && (a->flags & GRIB_ACCESSOR_FLAG_DUMP))
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
int grib_attributes_count(grib_accessor* a, size_t* size)
|
||||
int grib_attributes_count(const grib_accessor* a, size_t* size)
|
||||
{
|
||||
if (a) {
|
||||
*size = 0;
|
||||
|
@ -1452,7 +1465,7 @@ int grib_get_length(const grib_handle* h, const char* name, size_t* length)
|
|||
|
||||
int grib_get_offset(const grib_handle* ch, const char* key, size_t* val)
|
||||
{
|
||||
grib_handle* h = (grib_handle*)ch;
|
||||
const grib_handle* h = (grib_handle*)ch;
|
||||
grib_accessor* act = grib_find_accessor(h, key);
|
||||
if (act) {
|
||||
*val = (size_t)grib_byte_offset(act);
|
||||
|
@ -1815,9 +1828,9 @@ int grib_set_values(grib_handle* h, grib_values* args, size_t count)
|
|||
for (i = 0; i < count; i++) {
|
||||
if (args[i].error != GRIB_SUCCESS) {
|
||||
grib_context_log(h->context, GRIB_LOG_ERROR,
|
||||
"grib_set_values[%d] %s (type=%s) failed: %s",
|
||||
"grib_set_values[%d] %s (type=%s) failed: %s (message %d)",
|
||||
i, args[i].name, grib_get_type_name(args[i].type),
|
||||
grib_get_error_message(args[i].error));
|
||||
grib_get_error_message(args[i].error), h->context->handle_file_count);
|
||||
err = err == GRIB_SUCCESS ? args[i].error : err;
|
||||
}
|
||||
}
|
||||
|
@ -1918,7 +1931,7 @@ int grib_values_check(grib_handle* h, grib_values* values, int count)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int grib_key_equal(grib_handle* h1, grib_handle* h2, const char* key, int type, int* err)
|
||||
int grib_key_equal(const grib_handle* h1, const grib_handle* h2, const char* key, int type, int* err)
|
||||
{
|
||||
double d1 = 0, d2 = 0;
|
||||
long l1 = 0, l2 = 0;
|
||||
|
|
|
@ -36,7 +36,7 @@ EOF
|
|||
|
||||
# Command should fail but not crash
|
||||
set +e
|
||||
${tools_dir}/bufr_filter $tempFilt $sample_bufr4 > $tempOut
|
||||
${tools_dir}/bufr_filter $tempFilt $sample_bufr4 2> $tempOut
|
||||
stat=$?
|
||||
set -e
|
||||
echo stat=$stat
|
||||
|
|
|
@ -67,7 +67,7 @@ int main(int argc, char* argv[])
|
|||
}
|
||||
|
||||
while (codes_bufr_keys_iterator_next(kiter)) {
|
||||
char* kname = codes_bufr_keys_iterator_get_name(kiter);
|
||||
const char* kname = codes_bufr_keys_iterator_get_name(kiter);
|
||||
printf("%s\n", kname);
|
||||
}
|
||||
codes_bufr_keys_iterator_delete(kiter);
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -49,7 +49,7 @@ void* runner(void* ptr)
|
|||
pthread_exit(0);
|
||||
}
|
||||
|
||||
static int encode_file(char* input_file, char* output_file)
|
||||
static int encode_file(const char* input_file, const char* output_file)
|
||||
{
|
||||
grib_handle* source_handle = NULL;
|
||||
const void* buffer = NULL;
|
||||
|
|
|
@ -365,7 +365,7 @@ cat >$tempFilt <<EOF
|
|||
assert(edition == 0);
|
||||
EOF
|
||||
set +e
|
||||
${tools_dir}/grib_filter $tempFilt $ECCODES_SAMPLES_PATH/GRIB2.tmpl > $tempOut
|
||||
${tools_dir}/grib_filter $tempFilt $ECCODES_SAMPLES_PATH/GRIB2.tmpl 2> $tempOut
|
||||
status=$?
|
||||
set -e
|
||||
[ $status -ne 0 ]
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -12,8 +12,12 @@
|
|||
|
||||
REDIRECT=/dev/null
|
||||
|
||||
label="grib_missing_test"
|
||||
|
||||
infile="${data_dir}/missing.grib2"
|
||||
outfile="${data_dir}/temp.missing_new.grib2"
|
||||
outfile="${data_dir}/temp.$label.grib2"
|
||||
tempText=temp.$label.txt
|
||||
tempGrib=temp.$label.grib
|
||||
|
||||
scaleFactorOfSecondFixedSurface=`${tools_dir}/grib_get -w count=1 -p scaleFactorOfSecondFixedSurface $infile`
|
||||
[ "$scaleFactorOfSecondFixedSurface" = "0" ]
|
||||
|
@ -29,10 +33,33 @@ scaleFactorOfSecondFixedSurface=`${tools_dir}/grib_get -w count=1 -p scaleFactor
|
|||
scaledValueOfSecondFixedSurface=`${tools_dir}/grib_get -w count=1 -p scaledValueOfSecondFixedSurface $outfile`
|
||||
[ "$scaledValueOfSecondFixedSurface" = "MISSING" ]
|
||||
|
||||
# Codetable keys being set to 'missing'
|
||||
# -----------------------------------------
|
||||
sample1=$ECCODES_SAMPLES_PATH/GRIB1.tmpl
|
||||
sample2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl
|
||||
|
||||
# Make sure it works with the default sample
|
||||
${tools_dir}/grib_set -s typeOfFirstFixedSurface=missing $sample2 $outfile
|
||||
grib_check_key_equals $outfile 'typeOfFirstFixedSurface:i' '255'
|
||||
|
||||
# Make sure it works with the latest GRIB2 version code table 4.5
|
||||
latest=`${tools_dir}/grib_get -p tablesVersionLatest $sample2`
|
||||
${tools_dir}/grib_set -s tablesVersion=$latest $sample2 $tempGrib
|
||||
${tools_dir}/grib_set -s typeOfFirstFixedSurface=missing $tempGrib $outfile
|
||||
grib_check_key_equals $outfile 'typeOfFirstFixedSurface:i' '255'
|
||||
rm -f $tempGrib
|
||||
|
||||
${tools_dir}/grib_set -s centre=missing $sample1 $outfile
|
||||
grib_check_key_equals $outfile 'centre' 'consensus'
|
||||
|
||||
# Some code tables do not have a missing entry
|
||||
set +e
|
||||
${tools_dir}/grib_set -s timeRangeIndicator=missing $sample1 $outfile 2>$tempText
|
||||
status=$?
|
||||
set -e
|
||||
[ $status -ne 0 ]
|
||||
grep -q "There is no 'missing' entry in Code Table 5.table" $tempText
|
||||
|
||||
${tools_dir}/grib_set -s centre=missing $infile $outfile 2> $REDIRECT > $REDIRECT
|
||||
|
||||
[ $? -ne 0 ]
|
||||
|
||||
rm -f $outfile
|
||||
# Clean up
|
||||
rm -f $outfile $tempText $tempGrib
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -10,7 +10,7 @@
|
|||
|
||||
#include "grib_api.h"
|
||||
|
||||
static void usage(char* prog)
|
||||
static void usage(const char* prog)
|
||||
{
|
||||
printf("usage: %s infile\n", prog);
|
||||
exit(1);
|
||||
|
|
|
@ -34,6 +34,7 @@ cat > $tempRef <<EOF
|
|||
ECCODES ERROR : key 'a_deprecated_key' is unavailable in this version.
|
||||
ECCODES ERROR : Please use the following key(s):
|
||||
ECCODES ERROR : - typeOfOriginalFieldValues
|
||||
ERROR: Key/value not found (message 1)
|
||||
EOF
|
||||
|
||||
diff $tempRef $tempErr
|
||||
|
|
|
@ -88,11 +88,11 @@ int main(int argc, char** argv)
|
|||
parallel = 0;
|
||||
}
|
||||
if (parallel) {
|
||||
printf("Running parallel in %ld threads. %ld iterations (prod=%ld)\n", NUM_THREADS, FILES_PER_ITERATION, NUM_THREADS * FILES_PER_ITERATION);
|
||||
printf("Running parallel in %zu threads. %zu iterations (prod=%zu)\n", NUM_THREADS, FILES_PER_ITERATION, NUM_THREADS * FILES_PER_ITERATION);
|
||||
printf("Options: dump=%d, clone=%d, write=%d\n", opt_dump, opt_clone, opt_write);
|
||||
}
|
||||
else {
|
||||
printf("Running sequentially in %ld runs. %ld iterations\n", NUM_THREADS, FILES_PER_ITERATION);
|
||||
printf("Running sequentially in %zu runs. %zu iterations\n", NUM_THREADS, FILES_PER_ITERATION);
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -146,7 +146,7 @@ void do_encode(void* ptr)
|
|||
for (i = 0; i < FILES_PER_ITERATION; i++) {
|
||||
grib_handle* h = grib_handle_clone(hs);
|
||||
if (opt_write) {
|
||||
snprintf(output_file, 50, "output/output_file_%ld-%ld.grib", data->number, i);
|
||||
snprintf(output_file, 50, "output/output_file_%zu-%zu.grib", data->number, i);
|
||||
encode_values(h, output_file);
|
||||
}
|
||||
else {
|
||||
|
@ -160,6 +160,6 @@ void do_encode(void* ptr)
|
|||
strftime(stime, 32, "%H:%M:%S", &result); /* Try to get milliseconds here too*/
|
||||
/* asctime_r(&result, stime); */
|
||||
|
||||
printf("%s: Worker %ld finished.\n", stime, data->number);
|
||||
printf("%s: Worker %zu finished.\n", stime, data->number);
|
||||
grib_handle_delete(hs);
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ int opt_dump = 0; /* If 1 then dump handle to /dev/null */
|
|||
int opt_clone = 0; /* If 1 then clone source handle */
|
||||
int opt_write = 0; /* If 1 write handle to file */
|
||||
|
||||
static int encode_file(char* template_file, char* output_file)
|
||||
static int encode_file(const char* template_file, const char* output_file)
|
||||
{
|
||||
FILE *in, *out = NULL;
|
||||
grib_handle* source_handle = NULL;
|
||||
|
@ -138,11 +138,11 @@ int main(int argc, char** argv)
|
|||
parallel = 0;
|
||||
}
|
||||
if (parallel) {
|
||||
printf("Running parallel in %ld threads. %ld iterations (prod=%ld)\n", NUM_THREADS, FILES_PER_ITERATION, NUM_THREADS * FILES_PER_ITERATION);
|
||||
printf("Running parallel in %zu threads. %zu iterations (prod=%zu)\n", NUM_THREADS, FILES_PER_ITERATION, NUM_THREADS * FILES_PER_ITERATION);
|
||||
printf("Options: dump=%d, clone=%d, write=%d\n", opt_dump, opt_clone, opt_write);
|
||||
}
|
||||
else {
|
||||
printf("Running sequentially in %ld runs. %ld iterations\n", NUM_THREADS, FILES_PER_ITERATION);
|
||||
printf("Running sequentially in %zu runs. %zu iterations\n", NUM_THREADS, FILES_PER_ITERATION);
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -193,7 +193,7 @@ void do_stuff(void* ptr)
|
|||
|
||||
for (i = 0; i < FILES_PER_ITERATION; i++) {
|
||||
if (opt_write) {
|
||||
snprintf(output_file, 50, "output/output_file_%ld-%ld.grib", data->number, i);
|
||||
snprintf(output_file, 50, "output/output_file_%zu-%zu.grib", data->number, i);
|
||||
encode_file(INPUT_FILE, output_file);
|
||||
}
|
||||
else {
|
||||
|
@ -206,5 +206,5 @@ void do_stuff(void* ptr)
|
|||
strftime(stime, 32, "%H:%M:%S", &result); /* Try to get milliseconds here too*/
|
||||
/* asctime_r(&result, stime); */
|
||||
|
||||
printf("%s: Worker %ld finished.\n", stime, data->number);
|
||||
printf("%s: Worker %zu finished.\n", stime, data->number);
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
void usage(char* prog)
|
||||
void usage(const char* prog)
|
||||
{
|
||||
printf("usage: %s filename\n", prog);
|
||||
exit(1);
|
||||
|
@ -32,7 +32,7 @@ int main(int argc, char* argv[])
|
|||
|
||||
if (argc != 2) usage(argv[0]);
|
||||
|
||||
printf("sizeof(off_t)=%d sizeof(long)=%d\n", sizeof(off_t), sizeof(long));
|
||||
printf("sizeof(off_t)=%zu sizeof(long)=%zu\n", sizeof(off_t), sizeof(long));
|
||||
|
||||
f = fopen(argv[1], "r");
|
||||
if (!f) {
|
||||
|
@ -50,7 +50,7 @@ int main(int argc, char* argv[])
|
|||
}
|
||||
rsizeout = fread(str, 1, rsizein, f);
|
||||
if (rsizeout != rsizein) {
|
||||
printf("rsizein=%d rsizeout=%d\n", rsizein, rsizeout);
|
||||
printf("rsizein=%zu rsizeout=%zu\n", rsizein, rsizeout);
|
||||
printf("end of file\n");
|
||||
exit(1);
|
||||
}
|
||||
|
|
|
@ -206,7 +206,7 @@ void gribex_check(int err) {
|
|||
|
||||
|
||||
|
||||
void usage(char* prog) {
|
||||
void usage(const char* prog) {
|
||||
printf("usage: %s [-a outfile | -w outfile ] grib_file repetitions bitsPerValue\n",prog);
|
||||
exit(1);
|
||||
}
|
||||
|
|
|
@ -53,7 +53,7 @@ int grib_tool_init(grib_runtime_options* options)
|
|||
if (!options->action) {
|
||||
const char* filt = options->infile_extra->name;
|
||||
if (strcmp(filt, "-") == 0) filt = "stdin";
|
||||
fprintf(stderr, "Error: %s: unable to create action\n", filt);
|
||||
fprintf(stderr, "ERROR: %s: unable to create action\n", filt);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
@ -88,7 +88,8 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
|
|||
|
||||
err = grib_handle_apply_action(h, options->action);
|
||||
if (err != GRIB_SUCCESS && options->fail) {
|
||||
printf("ERROR: %s\n", grib_get_error_message(err));
|
||||
fprintf(stderr, "ERROR: %s (message %d)\n",
|
||||
grib_get_error_message(err), h->context->handle_file_count);
|
||||
exit(err);
|
||||
}
|
||||
return 0;
|
||||
|
|
|
@ -62,7 +62,7 @@ int grib_tool_before_getopt(grib_runtime_options* options)
|
|||
int grib_tool_init(grib_runtime_options* options)
|
||||
{
|
||||
if (options->set_values_count == 0 && !options->repack && !options->constant) {
|
||||
printf("ERROR: please provide some keys to set through the -s option or use the -r/-d options\n");
|
||||
fprintf(stderr, "ERROR: Please provide some keys to set through the -s option or use the -r/-d options\n");
|
||||
exit(1);
|
||||
}
|
||||
if (options->verbose)
|
||||
|
@ -73,7 +73,7 @@ int grib_tool_init(grib_runtime_options* options)
|
|||
}*/
|
||||
|
||||
if (grib_options_on("n:") && grib_options_on("d:")) {
|
||||
printf("Error: -n and -d options are incompatible. Choose one of the two please.\n");
|
||||
fprintf(stderr, "ERROR: -n and -d options are incompatible. Choose one of the two please.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ int grib_tool_init(grib_runtime_options* options)
|
|||
if (!options->action) {
|
||||
const char* filt = options->infile_extra->name;
|
||||
if (strcmp(filt, "-") == 0) filt = "stdin";
|
||||
fprintf(stderr, "Error: %s: unable to create action\n", filt);
|
||||
fprintf(stderr, "ERROR: %s: unable to create action\n", filt);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
@ -86,7 +86,8 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
|
|||
|
||||
err = grib_handle_apply_action(h, options->action);
|
||||
if (err != GRIB_SUCCESS && options->fail) {
|
||||
printf("ERROR: %s\n", grib_get_error_message(err));
|
||||
fprintf(stderr, "ERROR: %s (message %d)\n",
|
||||
grib_get_error_message(err), h->context->handle_file_count);
|
||||
exit(err);
|
||||
}
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue