ECC-1269: Cleanup

This commit is contained in:
Shahram Najm 2022-12-12 13:42:32 +00:00
parent a376d55785
commit ffdb8696f2
2 changed files with 155 additions and 149 deletions

View File

@ -0,0 +1,150 @@
/* ECC-1269 */
/* Old logic moved from src/grib_util.c function:grib_util_set_spec2 */
if (flags & GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING) {
if (packing_spec->packing == GRIB_UTIL_PACKING_USE_PROVIDED &&
strcmp(input_packing_type, "grid_simple_matrix")) {
switch (packing_spec->packing_type) {
case GRIB_UTIL_PACKING_TYPE_SPECTRAL_COMPLEX:
if (strcmp(input_packing_type, "spectral_complex") && !strcmp(input_packing_type, "spectral_simple"))
SET_STRING_VALUE("packingType", "spectral_complex");
break;
case GRIB_UTIL_PACKING_TYPE_SPECTRAL_SIMPLE:
if (strcmp(input_packing_type, "spectral_simple") && !strcmp(input_packing_type, "spectral_complex"))
SET_STRING_VALUE("packingType", "spectral_simple");
break;
case GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE:
if (strcmp(input_packing_type, "grid_simple") && !strcmp(input_packing_type, "grid_complex"))
SET_STRING_VALUE("packingType", "grid_simple");
break;
case GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE_MATRIX:
SET_STRING_VALUE("packingType", "grid_simple_matrix");
break;
case GRIB_UTIL_PACKING_TYPE_GRID_COMPLEX:
if (strcmp(input_packing_type, "grid_complex") && !strcmp(input_packing_type, "grid_simple"))
SET_STRING_VALUE("packingType", "grid_complex");
break;
case GRIB_UTIL_PACKING_TYPE_JPEG:
if (strcmp(input_packing_type, "grid_jpeg") && !strcmp(input_packing_type, "grid_simple"))
SET_STRING_VALUE("packingType", "grid_jpeg");
break;
case GRIB_UTIL_PACKING_TYPE_CCSDS:
if (strcmp(input_packing_type, "grid_ccsds") && !strcmp(input_packing_type, "grid_simple"))
SET_STRING_VALUE("packingType", "grid_ccsds");
break;
case GRIB_UTIL_PACKING_TYPE_IEEE:
if (strcmp(input_packing_type, "grid_ieee") && !strcmp(input_packing_type, "grid_simple"))
SET_STRING_VALUE("packingType", "grid_ieee");
break;
case GRIB_UTIL_PACKING_TYPE_GRID_SECOND_ORDER:
/* we delay the set of grid_second_order because we don't want
to do it on a field with bitsPerValue=0 */
setSecondOrder = 1;
break;
default:
fprintf(stderr, "GRIB_UTIL_SET_SPEC: invalid packing_spec->packing_type (%ld)\n",
(long)packing_spec->packing_type);
*err = GRIB_INTERNAL_ERROR;
goto cleanup;
break;
}
}
switch (packing_spec->accuracy) {
case GRIB_UTIL_ACCURACY_SAME_BITS_PER_VALUES_AS_INPUT:
break;
case GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES:
if (input_bits_per_value != packing_spec->bitsPerValue)
SET_LONG_VALUE("bitsPerValue", packing_spec->bitsPerValue);
break;
case GRIB_UTIL_ACCURACY_SAME_DECIMAL_SCALE_FACTOR_AS_INPUT:
break;
case GRIB_UTIL_ACCURACY_USE_PROVIDED_DECIMAL_SCALE_FACTOR:
if (input_decimal_scale_factor != packing_spec->decimalScaleFactor)
SET_LONG_VALUE("decimalScaleFactor", packing_spec->decimalScaleFactor);
break;
default:
fprintf(stderr, "GRIB_UTIL_SET_SPEC: invalid packing_spec->accuracy (%ld)\n", (long)packing_spec->accuracy);
*err = GRIB_INTERNAL_ERROR;
goto cleanup;
break;
}
/*nothing to be changed*/
if (count == 0) {
*err = -1;
return h;
}
if (h->context->debug == -1) {
print_values(h->context, spec, packing_spec, data_values, data_values_count, values, count);
}
if ((*err = grib_set_values(h, values, count)) != 0) {
fprintf(stderr, "GRIB_UTIL_SET_SPEC: Cannot set values: %s\n", grib_get_error_message(*err));
for (i = 0; i < count; i++)
if (values[i].error) fprintf(stderr, " %s %s\n", values[i].name, grib_get_error_message(values[i].error));
goto cleanup;
}
if (h->context->debug == -1) {
int j = 0;
fprintf(stderr, "ECCODES DEBUG grib_util: grib_set_double_array\n");
for (j = 0; j < 20; j++)
fprintf(stderr, "ECCODES DEBUG grib_util %g\n", data_values[j]);
fprintf(stderr, "ECCODES DEBUG grib_util: data_values_count=%d \n", (int)data_values_count);
}
if ((*err = grib_set_double_array(h, "values", data_values, data_values_count)) != 0) {
goto cleanup;
}
if (h->context->debug == -1)
fprintf(stderr, "ECCODES DEBUG grib_util: done grib_set_double_array \n");
/* convert to second_order if not constant field */
if (setSecondOrder) {
int constant = 0;
double missingValue = 0;
grib_get_double(h, "missingValue", &missingValue);
constant = is_constant_field(missingValue, data_values, data_values_count);
if (!constant) {
size_t packTypeLen;
if (editionNumber == 1) {
long numberOfGroups;
grib_handle* htmp = grib_handle_clone(h);
packTypeLen = 17;
grib_set_string(htmp, "packingType", "grid_second_order", &packTypeLen);
grib_get_long(htmp, "numberOfGroups", &numberOfGroups);
/* GRIBEX is not able to decode overflown numberOfGroups with SPD */
if (numberOfGroups > 65534 && h->context->no_spd) {
packTypeLen = 24;
grib_set_string(h, "packingType", "grid_second_order_no_SPD", &packTypeLen);
grib_handle_delete(htmp);
}
else {
grib_handle_delete(h);
h = htmp;
}
}
else {
packTypeLen = 17;
grib_set_string(h, "packingType", "grid_second_order", &packTypeLen);
grib_set_double_array(h, "values", data_values, data_values_count);
}
}
else {
if (h->context->gribex_mode_on) {
h->context->gribex_mode_on = 0;
grib_set_double_array(h, "values", data_values, data_values_count);
h->context->gribex_mode_on = 1;
}
}
}
return h;
} /* flags & GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING */

View File

@ -997,155 +997,11 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
goto cleanup; goto cleanup;
}*/ }*/
/* ECC-1269 */ /* ECC-1269:
#if 0 * Code that was here was moved to "deprecated" directory
if (flags & GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING) { * See grib_util.GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING.c
if (packing_spec->packing == GRIB_UTIL_PACKING_USE_PROVIDED && * Dealing with obsolete option GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING
strcmp(input_packing_type, "grid_simple_matrix")) { */
switch (packing_spec->packing_type) {
case GRIB_UTIL_PACKING_TYPE_SPECTRAL_COMPLEX:
if (strcmp(input_packing_type, "spectral_complex") && !strcmp(input_packing_type, "spectral_simple"))
SET_STRING_VALUE("packingType", "spectral_complex");
break;
case GRIB_UTIL_PACKING_TYPE_SPECTRAL_SIMPLE:
if (strcmp(input_packing_type, "spectral_simple") && !strcmp(input_packing_type, "spectral_complex"))
SET_STRING_VALUE("packingType", "spectral_simple");
break;
case GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE:
if (strcmp(input_packing_type, "grid_simple") && !strcmp(input_packing_type, "grid_complex"))
SET_STRING_VALUE("packingType", "grid_simple");
break;
case GRIB_UTIL_PACKING_TYPE_GRID_SIMPLE_MATRIX:
SET_STRING_VALUE("packingType", "grid_simple_matrix");
break;
case GRIB_UTIL_PACKING_TYPE_GRID_COMPLEX:
if (strcmp(input_packing_type, "grid_complex") && !strcmp(input_packing_type, "grid_simple"))
SET_STRING_VALUE("packingType", "grid_complex");
break;
case GRIB_UTIL_PACKING_TYPE_JPEG:
if (strcmp(input_packing_type, "grid_jpeg") && !strcmp(input_packing_type, "grid_simple"))
SET_STRING_VALUE("packingType", "grid_jpeg");
break;
case GRIB_UTIL_PACKING_TYPE_CCSDS:
if (strcmp(input_packing_type, "grid_ccsds") && !strcmp(input_packing_type, "grid_simple"))
SET_STRING_VALUE("packingType", "grid_ccsds");
break;
case GRIB_UTIL_PACKING_TYPE_IEEE:
if (strcmp(input_packing_type, "grid_ieee") && !strcmp(input_packing_type, "grid_simple"))
SET_STRING_VALUE("packingType", "grid_ieee");
break;
case GRIB_UTIL_PACKING_TYPE_GRID_SECOND_ORDER:
/* we delay the set of grid_second_order because we don't want
to do it on a field with bitsPerValue=0 */
setSecondOrder = 1;
break;
default:
fprintf(stderr, "GRIB_UTIL_SET_SPEC: invalid packing_spec->packing_type (%ld)\n",
(long)packing_spec->packing_type);
*err = GRIB_INTERNAL_ERROR;
goto cleanup;
break;
}
}
switch (packing_spec->accuracy) {
case GRIB_UTIL_ACCURACY_SAME_BITS_PER_VALUES_AS_INPUT:
break;
case GRIB_UTIL_ACCURACY_USE_PROVIDED_BITS_PER_VALUES:
if (input_bits_per_value != packing_spec->bitsPerValue)
SET_LONG_VALUE("bitsPerValue", packing_spec->bitsPerValue);
break;
case GRIB_UTIL_ACCURACY_SAME_DECIMAL_SCALE_FACTOR_AS_INPUT:
break;
case GRIB_UTIL_ACCURACY_USE_PROVIDED_DECIMAL_SCALE_FACTOR:
if (input_decimal_scale_factor != packing_spec->decimalScaleFactor)
SET_LONG_VALUE("decimalScaleFactor", packing_spec->decimalScaleFactor);
break;
default:
fprintf(stderr, "GRIB_UTIL_SET_SPEC: invalid packing_spec->accuracy (%ld)\n", (long)packing_spec->accuracy);
*err = GRIB_INTERNAL_ERROR;
goto cleanup;
break;
}
/*nothing to be changed*/
if (count == 0) {
*err = -1;
return h;
}
if (h->context->debug == -1) {
print_values(h->context, spec, packing_spec, data_values, data_values_count, values, count);
}
if ((*err = grib_set_values(h, values, count)) != 0) {
fprintf(stderr, "GRIB_UTIL_SET_SPEC: Cannot set values: %s\n", grib_get_error_message(*err));
for (i = 0; i < count; i++)
if (values[i].error) fprintf(stderr, " %s %s\n", values[i].name, grib_get_error_message(values[i].error));
goto cleanup;
}
if (h->context->debug == -1) {
int j = 0;
fprintf(stderr, "ECCODES DEBUG grib_util: grib_set_double_array\n");
for (j = 0; j < 20; j++)
fprintf(stderr, "ECCODES DEBUG grib_util %g\n", data_values[j]);
fprintf(stderr, "ECCODES DEBUG grib_util: data_values_count=%d \n", (int)data_values_count);
}
if ((*err = grib_set_double_array(h, "values", data_values, data_values_count)) != 0) {
goto cleanup;
}
if (h->context->debug == -1)
fprintf(stderr, "ECCODES DEBUG grib_util: done grib_set_double_array \n");
/* convert to second_order if not constant field */
if (setSecondOrder) {
int constant = 0;
double missingValue = 0;
grib_get_double(h, "missingValue", &missingValue);
constant = is_constant_field(missingValue, data_values, data_values_count);
if (!constant) {
size_t packTypeLen;
if (editionNumber == 1) {
long numberOfGroups;
grib_handle* htmp = grib_handle_clone(h);
packTypeLen = 17;
grib_set_string(htmp, "packingType", "grid_second_order", &packTypeLen);
grib_get_long(htmp, "numberOfGroups", &numberOfGroups);
/* GRIBEX is not able to decode overflown numberOfGroups with SPD */
if (numberOfGroups > 65534 && h->context->no_spd) {
packTypeLen = 24;
grib_set_string(h, "packingType", "grid_second_order_no_SPD", &packTypeLen);
grib_handle_delete(htmp);
}
else {
grib_handle_delete(h);
h = htmp;
}
}
else {
packTypeLen = 17;
grib_set_string(h, "packingType", "grid_second_order", &packTypeLen);
grib_set_double_array(h, "values", data_values, data_values_count);
}
}
else {
if (h->context->gribex_mode_on) {
h->context->gribex_mode_on = 0;
grib_set_double_array(h, "values", data_values, data_values_count);
h->context->gribex_mode_on = 1;
}
}
}
return h;
} /* flags & GRIB_UTIL_SET_SPEC_FLAGS_ONLY_PACKING */
#endif
grid_type = get_grid_type_name(spec->grid_type); grid_type = get_grid_type_name(spec->grid_type);
if (!grid_type) { if (!grid_type) {