Skip to content

Commit

Permalink
GRIB message validity checker: Performance
Browse files Browse the repository at this point in the history
  • Loading branch information
shahramn committed Feb 26, 2025
1 parent 14deb57 commit 60f74ab
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 30 deletions.
51 changes: 24 additions & 27 deletions src/accessor/grib_accessor_class_message_is_valid.cc
Original file line number Diff line number Diff line change
Expand Up @@ -95,32 +95,29 @@ int grib_accessor_message_is_valid_t::check_grid_and_packing_type()
return GRIB_SUCCESS;
}

int grib_accessor_message_is_valid_t::check_field_values()
{
if (handle_->context->debug)
fprintf(stderr, "ECCODES DEBUG %s: %s\n", TITLE, __func__);

int err = GRIB_SUCCESS;
double* values = NULL;
size_t size = 0;
grib_context* c = handle_->context;

if ((err = grib_get_size(handle_, "values", &size)) != GRIB_SUCCESS)
return err;
values = (double*)grib_context_malloc_clear(c, size * sizeof(double));
if (!values)
return GRIB_OUT_OF_MEMORY;

if ((err = grib_get_double_array(handle_, "values", values, &size)) != GRIB_SUCCESS) {
if (err == GRIB_FUNCTIONALITY_NOT_ENABLED) {
err = GRIB_SUCCESS;
}
grib_context_free(c, values);
return err;
}
grib_context_free(c, values);
return GRIB_SUCCESS;
}
// int grib_accessor_message_is_valid_t::check_field_values()
// {
// if (handle_->context->debug)
// fprintf(stderr, "ECCODES DEBUG %s: %s\n", TITLE, __func__);
// int err = GRIB_SUCCESS;
// double* values = NULL;
// size_t size = 0;
// grib_context* c = handle_->context;
// if ((err = grib_get_size(handle_, "values", &size)) != GRIB_SUCCESS)
// return err;
// values = (double*)grib_context_malloc(c, size * sizeof(double));
// if (!values)
// return GRIB_OUT_OF_MEMORY;
// if ((err = grib_get_double_array(handle_, "values", values, &size)) != GRIB_SUCCESS) {
// if (err == GRIB_FUNCTIONALITY_NOT_ENABLED) {
// err = GRIB_SUCCESS;
// }
// grib_context_free(c, values);
// return err;
// }
// grib_context_free(c, values);
// return GRIB_SUCCESS;
// }

int grib_accessor_message_is_valid_t::check_number_of_missing()
{
Expand Down Expand Up @@ -473,7 +470,7 @@ int grib_accessor_message_is_valid_t::unpack_long(long* val, size_t* len)
static check_func check_functions[] = {
&grib_accessor_message_is_valid_t::check_date,
&grib_accessor_message_is_valid_t::check_grid_and_packing_type,
&grib_accessor_message_is_valid_t::check_field_values,
// &grib_accessor_message_is_valid_t::check_field_values,
&grib_accessor_message_is_valid_t::check_number_of_missing,
&grib_accessor_message_is_valid_t::check_grid_pl_array,
&grib_accessor_message_is_valid_t::check_geoiterator,
Expand Down
8 changes: 5 additions & 3 deletions tests/grib_check_message_validity.sh
Original file line number Diff line number Diff line change
Expand Up @@ -153,9 +153,11 @@ grib_check_key_equals $tempGrib isMessageValid 0

# Check data values
# ------------------------------
${tools_dir}/grib_set -s bitsPerValue=25 $data_dir/sample.grib2 $tempGrib
grib_check_key_equals $tempGrib isMessageValid 0 2>$tempText
grep -q "Data section size mismatch" $tempText
# Note: This is actually quite an expensive check .... for now disabled
#
# ${tools_dir}/grib_set -s bitsPerValue=25 $data_dir/sample.grib2 $tempGrib
# grib_check_key_equals $tempGrib isMessageValid 0 2>$tempText
# grep -q "Data section size mismatch" $tempText


# Check number of values, missing etc
Expand Down

0 comments on commit 60f74ab

Please sign in to comment.