mirror of https://github.com/ecmwf/eccodes.git
grid_complex: cleanups
This commit is contained in:
parent
3518cbeeab
commit
6ddbf5b4d0
|
@ -225,9 +225,9 @@ static void init(grib_accessor* a, const long v, grib_arguments* args)
|
||||||
|
|
||||||
#define ONES (~(int)0)
|
#define ONES (~(int)0)
|
||||||
|
|
||||||
/*#define UNDEFINED 9.999e20*/
|
// #define UNDEFINED 9.999e20
|
||||||
/*#define UNDEFINED_LOW 9.9989e20*/
|
// #define UNDEFINED_LOW 9.9989e20
|
||||||
/*#define UNDEFINED_HIGH 9.9991e20*/
|
// #define UNDEFINED_HIGH 9.9991e20
|
||||||
#define UNDEFINED 9999.0
|
#define UNDEFINED 9999.0
|
||||||
#define UNDEFINED_LOW 9998.9
|
#define UNDEFINED_LOW 9998.9
|
||||||
#define UNDEFINED_HIGH 9999.1
|
#define UNDEFINED_HIGH 9999.1
|
||||||
|
@ -617,7 +617,7 @@ static int unpack(grib_accessor* a, T* val, const size_t* len)
|
||||||
if ((err = grib_get_long_internal(gh, self->typeOfOriginalFieldValues, &typeOfOriginalFieldValues)) != GRIB_SUCCESS)
|
if ((err = grib_get_long_internal(gh, self->typeOfOriginalFieldValues, &typeOfOriginalFieldValues)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
/* Don't call grib_get_long_internal to suppress error message being output */
|
// Don't call grib_get_long_internal to suppress error message being output
|
||||||
if ((err = grib_get_long(gh, self->groupSplittingMethodUsed, &groupSplittingMethodUsed)) != GRIB_SUCCESS)
|
if ((err = grib_get_long(gh, self->groupSplittingMethodUsed, &groupSplittingMethodUsed)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
@ -652,9 +652,8 @@ static int unpack(grib_accessor* a, T* val, const size_t* len)
|
||||||
self->dirty = 0;
|
self->dirty = 0;
|
||||||
|
|
||||||
sec_val = (long*)grib_context_malloc(a->context, (n_vals) * sizeof(long));
|
sec_val = (long*)grib_context_malloc(a->context, (n_vals) * sizeof(long));
|
||||||
if (!sec_val)
|
if (!sec_val) return GRIB_OUT_OF_MEMORY;
|
||||||
return GRIB_OUT_OF_MEMORY;
|
memset(sec_val, 0, (n_vals) * sizeof(long)); // See SUP-718
|
||||||
memset(sec_val, 0, (n_vals) * sizeof(long)); /* See SUP-718 */
|
|
||||||
|
|
||||||
buf_ref = buf + a->offset;
|
buf_ref = buf + a->offset;
|
||||||
|
|
||||||
|
@ -692,24 +691,23 @@ static int unpack(grib_accessor* a, T* val, const size_t* len)
|
||||||
return GRIB_DECODING_ERROR;
|
return GRIB_DECODING_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*grib_decode_long_array(buf_vals, &vals_p, nbits_per_group_val, nvals_per_group,
|
// grib_decode_long_array(buf_vals, &vals_p, nbits_per_group_val, nvals_per_group, &sec_val[vcount]);
|
||||||
&sec_val[vcount]); */
|
|
||||||
if (missingValueManagementUsed == 0) {
|
if (missingValueManagementUsed == 0) {
|
||||||
/* No explicit missing values included within data values */
|
// No explicit missing values included within data values
|
||||||
for (j = 0; j < nvals_per_group; j++) {
|
for (j = 0; j < nvals_per_group; j++) {
|
||||||
DebugAssertAccess(sec_val, (long)(vcount + j), n_vals);
|
DebugAssertAccess(sec_val, (long)(vcount + j), n_vals);
|
||||||
sec_val[vcount + j] = group_ref_val + grib_decode_unsigned_long(buf_vals, &vals_p, nbits_per_group_val);
|
sec_val[vcount + j] = group_ref_val + grib_decode_unsigned_long(buf_vals, &vals_p, nbits_per_group_val);
|
||||||
/*printf("sec_val[%ld]=%ld\n", vcount+j, sec_val[vcount+j]);*/
|
// printf("sec_val[%ld]=%ld\n", vcount+j, sec_val[vcount+j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (missingValueManagementUsed == 1) {
|
else if (missingValueManagementUsed == 1) {
|
||||||
/* Primary missing values included within data values */
|
// Primary missing values included within data values
|
||||||
long maxn = 0; /* (1 << bits_per_value) - 1; */
|
long maxn = 0; // (1 << bits_per_value) - 1;
|
||||||
for (j = 0; j < nvals_per_group; j++) {
|
for (j = 0; j < nvals_per_group; j++) {
|
||||||
if (nbits_per_group_val == 0) {
|
if (nbits_per_group_val == 0) {
|
||||||
maxn = (1 << bits_per_value) - 1;
|
maxn = (1 << bits_per_value) - 1;
|
||||||
if (group_ref_val == maxn) {
|
if (group_ref_val == maxn) {
|
||||||
sec_val[vcount + j] = LONG_MAX; /* missing value */
|
sec_val[vcount + j] = LONG_MAX; // missing value
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
long temp = grib_decode_unsigned_long(buf_vals, &vals_p, nbits_per_group_val);
|
long temp = grib_decode_unsigned_long(buf_vals, &vals_p, nbits_per_group_val);
|
||||||
|
@ -720,7 +718,7 @@ static int unpack(grib_accessor* a, T* val, const size_t* len)
|
||||||
long temp = grib_decode_unsigned_long(buf_vals, &vals_p, nbits_per_group_val);
|
long temp = grib_decode_unsigned_long(buf_vals, &vals_p, nbits_per_group_val);
|
||||||
maxn = (1 << nbits_per_group_val) - 1;
|
maxn = (1 << nbits_per_group_val) - 1;
|
||||||
if (temp == maxn) {
|
if (temp == maxn) {
|
||||||
sec_val[vcount + j] = LONG_MAX; /* missing value */
|
sec_val[vcount + j] = LONG_MAX; // missing value
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sec_val[vcount + j] = group_ref_val + temp;
|
sec_val[vcount + j] = group_ref_val + temp;
|
||||||
|
@ -729,14 +727,14 @@ static int unpack(grib_accessor* a, T* val, const size_t* len)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (missingValueManagementUsed == 2) {
|
else if (missingValueManagementUsed == 2) {
|
||||||
/* Primary and secondary missing values included within data values */
|
// Primary and secondary missing values included within data values
|
||||||
long maxn = (1 << bits_per_value) - 1;
|
long maxn = (1 << bits_per_value) - 1;
|
||||||
long maxn2 = 0; /* maxn - 1; */
|
long maxn2 = 0; // maxn - 1
|
||||||
for (j = 0; j < nvals_per_group; j++) {
|
for (j = 0; j < nvals_per_group; j++) {
|
||||||
if (nbits_per_group_val == 0) {
|
if (nbits_per_group_val == 0) {
|
||||||
maxn2 = maxn - 1;
|
maxn2 = maxn - 1;
|
||||||
if (group_ref_val == maxn || group_ref_val == maxn2) {
|
if (group_ref_val == maxn || group_ref_val == maxn2) {
|
||||||
sec_val[vcount + j] = LONG_MAX; /* missing value */
|
sec_val[vcount + j] = LONG_MAX; // missing value
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
long temp = grib_decode_unsigned_long(buf_vals, &vals_p, nbits_per_group_val);
|
long temp = grib_decode_unsigned_long(buf_vals, &vals_p, nbits_per_group_val);
|
||||||
|
@ -748,7 +746,7 @@ static int unpack(grib_accessor* a, T* val, const size_t* len)
|
||||||
maxn = (1 << nbits_per_group_val) - 1;
|
maxn = (1 << nbits_per_group_val) - 1;
|
||||||
maxn2 = maxn - 1;
|
maxn2 = maxn - 1;
|
||||||
if (temp == maxn || temp == maxn2) {
|
if (temp == maxn || temp == maxn2) {
|
||||||
sec_val[vcount + j] = LONG_MAX; /* missing value */
|
sec_val[vcount + j] = LONG_MAX; // missing value
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sec_val[vcount + j] = group_ref_val + temp;
|
sec_val[vcount + j] = group_ref_val + temp;
|
||||||
|
@ -765,8 +763,8 @@ static int unpack(grib_accessor* a, T* val, const size_t* len)
|
||||||
unsigned long extras[2] = {0, };
|
unsigned long extras[2] = {0, };
|
||||||
ref_p = 0;
|
ref_p = 0;
|
||||||
|
|
||||||
/* For Complex packing, order == 0 */
|
// For Complex packing, order == 0
|
||||||
/* For Complex packing and spatial differencing, order == 1 or 2 (code table 5.6) */
|
// For Complex packing and spatial differencing, order == 1 or 2 (code table 5.6)
|
||||||
if (orderOfSpatialDifferencing != 1 && orderOfSpatialDifferencing != 2) {
|
if (orderOfSpatialDifferencing != 1 && orderOfSpatialDifferencing != 2) {
|
||||||
grib_context_log(a->context, GRIB_LOG_ERROR,
|
grib_context_log(a->context, GRIB_LOG_ERROR,
|
||||||
"grid_complex unpacking: Unsupported order of spatial differencing %ld", orderOfSpatialDifferencing);
|
"grid_complex unpacking: Unsupported order of spatial differencing %ld", orderOfSpatialDifferencing);
|
||||||
|
@ -780,7 +778,7 @@ static int unpack(grib_accessor* a, T* val, const size_t* len)
|
||||||
bias = grib_decode_signed_longb(buf_ref, &ref_p, numberOfOctetsExtraDescriptors * 8);
|
bias = grib_decode_signed_longb(buf_ref, &ref_p, numberOfOctetsExtraDescriptors * 8);
|
||||||
|
|
||||||
post_process(a->context, sec_val, n_vals, orderOfSpatialDifferencing, bias, extras);
|
post_process(a->context, sec_val, n_vals, orderOfSpatialDifferencing, bias, extras);
|
||||||
/*de_spatial_difference (a->context, sec_val, n_vals, orderOfSpatialDifferencing, bias);*/
|
// de_spatial_difference (a->context, sec_val, n_vals, orderOfSpatialDifferencing, bias);
|
||||||
}
|
}
|
||||||
|
|
||||||
binary_s = (T)grib_power(binary_scale_factor, 2);
|
binary_s = (T)grib_power(binary_scale_factor, 2);
|
||||||
|
@ -867,8 +865,7 @@ static int sizeofsection2(int mn, int mx, int n, int ref_bits, int width_bits,
|
||||||
return find_nbits(mx - mn + has_undef) * n + ref_bits + width_bits;
|
return find_nbits(mx - mn + has_undef) * n + ref_bits + width_bits;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int size_all(struct section* s, int ref_bits, int width_bits,
|
static int size_all(struct section* s, int ref_bits, int width_bits, int has_undef)
|
||||||
int has_undef)
|
|
||||||
{
|
{
|
||||||
int bits;
|
int bits;
|
||||||
|
|
||||||
|
@ -1087,7 +1084,6 @@ static void exchange(struct section* s, int* v, int has_undef, int LEN_SEC_MAX)
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (s->missing == 1 || t->missing == 1) { s=t; continue; }
|
// if (s->missing == 1 || t->missing == 1) { s=t; continue; }
|
||||||
|
|
||||||
// 3/2014 val0 = v[s->i1];
|
// 3/2014 val0 = v[s->i1];
|
||||||
// 3/2014 val1 = v[t->i0];
|
// 3/2014 val1 = v[t->i0];
|
||||||
|
|
||||||
|
@ -1214,7 +1210,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
|
||||||
{
|
{
|
||||||
unsigned char* sec7;
|
unsigned char* sec7;
|
||||||
grib_accessor_data_g22order_packing* self = reinterpret_cast<grib_accessor_data_g22order_packing*>(a);
|
grib_accessor_data_g22order_packing* self = reinterpret_cast<grib_accessor_data_g22order_packing*>(a);
|
||||||
grib_handle* gh = grib_handle_of_accessor(a);
|
grib_handle* gh = grib_handle_of_accessor(a);
|
||||||
|
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
|
@ -1228,14 +1224,11 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
|
||||||
long decimal_scale_factor;
|
long decimal_scale_factor;
|
||||||
long optimize_scale_factor;
|
long optimize_scale_factor;
|
||||||
long typeOfOriginalFieldValues;
|
long typeOfOriginalFieldValues;
|
||||||
// long groupSplittingMethodUsed;
|
// long groupSplittingMethodUsed, numberOfGroupsOfDataValues, referenceForGroupWidths;
|
||||||
long missingValueManagementUsed;
|
long missingValueManagementUsed;
|
||||||
long primaryMissingValueSubstitute;
|
long primaryMissingValueSubstitute;
|
||||||
long secondaryMissingValueSubstitute;
|
long secondaryMissingValueSubstitute;
|
||||||
// long numberOfGroupsOfDataValues;
|
|
||||||
// long referenceForGroupWidths;
|
|
||||||
long numberOfBitsUsedForTheGroupWidths;
|
long numberOfBitsUsedForTheGroupWidths;
|
||||||
// long trueLengthOfLastGroup;
|
|
||||||
long numberOfBitsUsedForTheScaledGroupLengths;
|
long numberOfBitsUsedForTheScaledGroupLengths;
|
||||||
long orderOfSpatialDifferencing;
|
long orderOfSpatialDifferencing;
|
||||||
long numberOfOctetsExtraDescriptors;
|
long numberOfOctetsExtraDescriptors;
|
||||||
|
@ -1249,11 +1242,11 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
|
||||||
int j, j0, k, *v, binary_scale, nbits, has_undef, extra_0, extra_1;
|
int j, j0, k, *v, binary_scale, nbits, has_undef, extra_0, extra_1;
|
||||||
unsigned int i, ii;
|
unsigned int i, ii;
|
||||||
int vmn, vmx, vbits;
|
int vmn, vmx, vbits;
|
||||||
/*Sections*/
|
// Sections
|
||||||
double max_val, min_val, ref, frange, dec_factor, scale;
|
double max_val, min_val, ref, frange, dec_factor, scale;
|
||||||
double mn, mx;
|
double mn, mx;
|
||||||
struct section start, *list, *list_backup, *s;
|
struct section start, *list, *list_backup, *s;
|
||||||
/*Group*/
|
// Group
|
||||||
int ngroups, grefmx, glenmn, glenmx, gwidmn, gwidmx, len_last;
|
int ngroups, grefmx, glenmn, glenmx, gwidmn, gwidmx, len_last;
|
||||||
int size_sec7;
|
int size_sec7;
|
||||||
int *refs, *lens, *widths, *itmp, *itmp2;
|
int *refs, *lens, *widths, *itmp, *itmp2;
|
||||||
|
@ -1276,9 +1269,8 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
|
||||||
return err;
|
return err;
|
||||||
if ((err = grib_get_long_internal(gh, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS)
|
if ((err = grib_get_long_internal(gh, self->decimal_scale_factor, &decimal_scale_factor)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
if ((err = grib_get_long_internal(gh, self->optimize_scale_factor, &optimize_scale_factor)) != GRIB_SUCCESS)
|
|
||||||
return err;
|
optimize_scale_factor = 1; // TODO(masn): To be reviewed
|
||||||
optimize_scale_factor = 1; /* TODO: To be reviewed */
|
|
||||||
|
|
||||||
if ((err = grib_get_long_internal(gh, self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS)
|
if ((err = grib_get_long_internal(gh, self->binary_scale_factor, &binary_scale_factor)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
|
@ -1304,16 +1296,9 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
|
||||||
max_bits = bits_per_value; // TODO(masn)
|
max_bits = bits_per_value; // TODO(masn)
|
||||||
|
|
||||||
// Note:
|
// Note:
|
||||||
// orderOfSpatialDifferencing = 0 means "grid_complex"
|
// orderOfSpatialDifferencing = 0 means "grid_complex"
|
||||||
// orderOfSpatialDifferencing = 1 means "grid_complex_spatial_differencing" with orderOfSpatialDifferencing=1
|
// orderOfSpatialDifferencing = 1 means "grid_complex_spatial_differencing" with orderOfSpatialDifferencing=1
|
||||||
// orderOfSpatialDifferencing = 2 means "grid_complex_spatial_differencing" with orderOfSpatialDifferencing=2
|
// orderOfSpatialDifferencing = 2 means "grid_complex_spatial_differencing" with orderOfSpatialDifferencing=2
|
||||||
// The variable "packing_mode" in wgrib2 (file complex_pk.c) has 3 possible values:
|
|
||||||
// packing_mode = 1 grid_complex
|
|
||||||
// packing_mode = 2 grid_complex_spatial_differencing with orderOfSpatialDifferencing=1
|
|
||||||
// packing_mode = 3 grid_complex_spatial_differencing with orderOfSpatialDifferencing=2
|
|
||||||
//
|
|
||||||
// TODO(masn): This needs to be reviewed!
|
|
||||||
//
|
|
||||||
|
|
||||||
use_bitmap = bitmap_present;
|
use_bitmap = bitmap_present;
|
||||||
wanted_bits = bits_per_value;
|
wanted_bits = bits_per_value;
|
||||||
|
@ -1330,38 +1315,37 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
|
||||||
size_t packing_type_len = strlen(packing_type);
|
size_t packing_type_len = strlen(packing_type);
|
||||||
grib_set_string_internal(gh, "packingType", packing_type, &packing_type_len);
|
grib_set_string_internal(gh, "packingType", packing_type, &packing_type_len);
|
||||||
|
|
||||||
|
if ((err = grib_set_double_internal(gh, self->reference_value, grib_ieee_to_long(0.0))) != GRIB_SUCCESS)
|
||||||
if ((err = grib_set_double_internal(gh, self->reference_value, grib_ieee_to_long(0.0))) != GRIB_SUCCESS) /* 12-15 */
|
|
||||||
return err;
|
return err;
|
||||||
if ((err = grib_set_long_internal(gh, self->binary_scale_factor, 0)) != GRIB_SUCCESS) /* 16-17 */
|
if ((err = grib_set_long_internal(gh, self->binary_scale_factor, 0)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
if ((err = grib_set_long_internal(gh, self->decimal_scale_factor, 0)) != GRIB_SUCCESS) /* 18-19 */
|
if ((err = grib_set_long_internal(gh, self->decimal_scale_factor, 0)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
if ((err = grib_set_long_internal(gh, self->bits_per_value, 8)) != GRIB_SUCCESS) /* 20 */
|
if ((err = grib_set_long_internal(gh, self->bits_per_value, 8)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
if ((err = grib_set_long_internal(gh, self->typeOfOriginalFieldValues, 0)) != GRIB_SUCCESS) /* 21 */
|
if ((err = grib_set_long_internal(gh, self->typeOfOriginalFieldValues, 0)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
if ((err = grib_set_long_internal(gh, self->groupSplittingMethodUsed, 1)) != GRIB_SUCCESS) /* 22 */
|
if ((err = grib_set_long_internal(gh, self->groupSplittingMethodUsed, 1)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
if ((err = grib_set_long_internal(gh, self->missingValueManagementUsed, 1)) != GRIB_SUCCESS) /* 23 */
|
if ((err = grib_set_long_internal(gh, self->missingValueManagementUsed, 1)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
if ((err = grib_set_long_internal(gh, self->primaryMissingValueSubstitute, grib_ieee_to_long(static_cast<float>(9.999e20)))) != GRIB_SUCCESS) /* 24-27 */
|
if ((err = grib_set_long_internal(gh, self->primaryMissingValueSubstitute, grib_ieee_to_long(static_cast<float>(9.999e20)))) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
if ((err = grib_set_long_internal(gh, self->secondaryMissingValueSubstitute, 0xFFFFFFFF)) != GRIB_SUCCESS) /* 28-31 */
|
if ((err = grib_set_long_internal(gh, self->secondaryMissingValueSubstitute, 0xFFFFFFFF)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
if ((err = grib_set_long_internal(gh, self->numberOfGroupsOfDataValues, 1)) != GRIB_SUCCESS) /* 32-35 */
|
if ((err = grib_set_long_internal(gh, self->numberOfGroupsOfDataValues, 1)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
if ((err = grib_set_long_internal(gh, self->referenceForGroupWidths, grib_ieee_to_long(0.0))) != GRIB_SUCCESS) /* 36 */
|
if ((err = grib_set_long_internal(gh, self->referenceForGroupWidths, grib_ieee_to_long(0.0))) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
if ((err = grib_set_long_internal(gh, self->numberOfBitsUsedForTheGroupWidths, 8)) != GRIB_SUCCESS) /* 37 */
|
if ((err = grib_set_long_internal(gh, self->numberOfBitsUsedForTheGroupWidths, 8)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
if ((err = grib_set_long_internal(gh, self->referenceForGroupLengths, *len)) != GRIB_SUCCESS) /* 38-41 */
|
if ((err = grib_set_long_internal(gh, self->referenceForGroupLengths, *len)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
if ((err = grib_set_long_internal(gh, self->lengthIncrementForTheGroupLengths, 1)) != GRIB_SUCCESS) /* 42 */
|
if ((err = grib_set_long_internal(gh, self->lengthIncrementForTheGroupLengths, 1)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
if ((err = grib_set_long_internal(gh, self->trueLengthOfLastGroup, *len)) != GRIB_SUCCESS) /* 43-46 */
|
if ((err = grib_set_long_internal(gh, self->trueLengthOfLastGroup, *len)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
if ((err = grib_set_long_internal(gh, self->numberOfBitsUsedForTheScaledGroupLengths, 8)) != GRIB_SUCCESS) /* 47 */
|
if ((err = grib_set_long_internal(gh, self->numberOfBitsUsedForTheScaledGroupLengths, 8)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
// Section 6
|
// Section 6
|
||||||
|
@ -1385,15 +1369,12 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
|
||||||
dec_scale = -decimal_scale_factor;
|
dec_scale = -decimal_scale_factor;
|
||||||
bin_scale = binary_scale_factor;
|
bin_scale = binary_scale_factor;
|
||||||
|
|
||||||
/* compute bitmap section */
|
//compute bitmap section
|
||||||
/*if (use_bitmap == 0 || ndef == ndata) {*/
|
//if (use_bitmap == 0 || ndef == ndata) {
|
||||||
/* if ((err = grib_set_long_internal(gh, "bitmapPresent", 0)) != GRIB_SUCCESS)*/
|
// if ((err = grib_set_long_internal(gh, "bitmapPresent", 0)) != GRIB_SUCCESS) return err;
|
||||||
/* return err;*/
|
//} else {
|
||||||
/*}*/
|
// if ((err = grib_set_long_internal(gh, "bitmapPresent", 1)) != GRIB_SUCCESS) return err;
|
||||||
/*else {*/
|
//}
|
||||||
/* if ((err = grib_set_long_internal(gh, "bitmapPresent", 1)) != GRIB_SUCCESS)*/
|
|
||||||
/* return err;*/
|
|
||||||
/*}*/
|
|
||||||
|
|
||||||
nndata = use_bitmap ? ndef : ndata;
|
nndata = use_bitmap ? ndef : ndata;
|
||||||
has_undef = use_bitmap ? 0 : ndata != ndef;
|
has_undef = use_bitmap ? 0 : ndata != ndef;
|
||||||
|
@ -1500,10 +1481,8 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
|
||||||
extra_0 = extra_1 = 0; // turn off warnings
|
extra_0 = extra_1 = 0; // turn off warnings
|
||||||
|
|
||||||
if (orderOfSpatialDifferencing == 2) {
|
if (orderOfSpatialDifferencing == 2) {
|
||||||
// delta_delta(v, nndata, &vmn, &vmx, &extra_0, &extra_1);
|
// delta_delta(v, nndata, &vmn, &vmx, &extra_0, &extra_1);
|
||||||
|
|
||||||
// single core version
|
// single core version
|
||||||
|
|
||||||
{
|
{
|
||||||
int last, last0, penultimate;
|
int last, last0, penultimate;
|
||||||
for (i = 0; i < nndata; i++) {
|
for (i = 0; i < nndata; i++) {
|
||||||
|
@ -1534,8 +1513,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (orderOfSpatialDifferencing == 1) {
|
else if (orderOfSpatialDifferencing == 1) {
|
||||||
// delta(v, nndata, &vmn, &vmx, &extra_0);
|
// delta(v, nndata, &vmn, &vmx, &extra_0);
|
||||||
|
|
||||||
// single core version
|
// single core version
|
||||||
{
|
{
|
||||||
int last, last0;
|
int last, last0;
|
||||||
|
@ -1563,7 +1541,6 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
|
||||||
int_min_max_array(v, nndata, &vmn, &vmx);
|
int_min_max_array(v, nndata, &vmn, &vmx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
grib_context_log(a->context, GRIB_LOG_DEBUG, "COMPLEX: 2: vmx %d vmn %d nbits %d", vmx, vmn,
|
grib_context_log(a->context, GRIB_LOG_DEBUG, "COMPLEX: 2: vmx %d vmn %d nbits %d", vmx, vmn,
|
||||||
find_nbits(vmx - vmn + has_undef));
|
find_nbits(vmx - vmn + has_undef));
|
||||||
|
@ -1575,8 +1552,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
|
||||||
vmx = vmx - vmn;
|
vmx = vmx - vmn;
|
||||||
vbits = find_nbits(vmx + has_undef);
|
vbits = find_nbits(vmx + has_undef);
|
||||||
|
|
||||||
/* size of merged struct */
|
// size of merged struct
|
||||||
|
|
||||||
ii = 0;
|
ii = 0;
|
||||||
nstruct = 1;
|
nstruct = 1;
|
||||||
for (i = 1; i < nndata; i++) {
|
for (i = 1; i < nndata; i++) {
|
||||||
|
@ -1691,7 +1667,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// finished making segments
|
// finished making segments
|
||||||
// findout number of bytes for extra info (orderOfSpatialDifferencing 2/3)
|
// find out number of bytes for extra info (orderOfSpatialDifferencing 2/3)
|
||||||
|
|
||||||
if (orderOfSpatialDifferencing != 0) { // packing modes 2/3
|
if (orderOfSpatialDifferencing != 0) { // packing modes 2/3
|
||||||
k = vmn >= 0 ? find_nbits(vmn) + 1 : find_nbits(-vmn) + 1;
|
k = vmn >= 0 ? find_nbits(vmn) + 1 : find_nbits(-vmn) + 1;
|
||||||
|
@ -1712,7 +1688,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
|
||||||
if (s == NULL) {
|
if (s == NULL) {
|
||||||
return GRIB_INTERNAL_ERROR;
|
return GRIB_INTERNAL_ERROR;
|
||||||
}
|
}
|
||||||
ngroups = 0; // number of groups
|
ngroups = 0; // number of groups
|
||||||
|
|
||||||
while (s) {
|
while (s) {
|
||||||
ngroups++;
|
ngroups++;
|
||||||
|
@ -1730,7 +1706,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
|
||||||
return GRIB_OUT_OF_MEMORY;
|
return GRIB_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* make vectors so we can OpenMP the loop */
|
// make vectors so we can OpenMP the loop
|
||||||
for (i = ii = 0, s = start.tail; ii < ngroups; ii++, s = s->tail) {
|
for (i = ii = 0, s = start.tail; ii < ngroups; ii++, s = s->tail) {
|
||||||
lens[ii] = s->i1 - s->i0 + 1;
|
lens[ii] = s->i1 - s->i0 + 1;
|
||||||
i += lens[ii];
|
i += lens[ii];
|
||||||
|
@ -1859,7 +1835,6 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
|
||||||
}
|
}
|
||||||
size_sec7 += (k >> 3) + ((k & 7) ? 1 : 0);
|
size_sec7 += (k >> 3) + ((k & 7) ? 1 : 0);
|
||||||
|
|
||||||
|
|
||||||
sec7 = reinterpret_cast<unsigned char*>(grib_context_malloc(a->context, size_sec7));
|
sec7 = reinterpret_cast<unsigned char*>(grib_context_malloc(a->context, size_sec7));
|
||||||
if (sec7 == NULL) {
|
if (sec7 == NULL) {
|
||||||
grib_context_log(a->context, GRIB_LOG_ERROR, "grid_complex packing: unable to allocate %d bytes", size_sec7);
|
grib_context_log(a->context, GRIB_LOG_ERROR, "grid_complex packing: unable to allocate %d bytes", size_sec7);
|
||||||
|
@ -1933,7 +1908,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t* len)
|
||||||
grib_context_free(a->context, itmp2);
|
grib_context_free(a->context, itmp2);
|
||||||
grib_context_free(a->context, data);
|
grib_context_free(a->context, data);
|
||||||
|
|
||||||
/* ECC-259: Set correct number of values */
|
// ECC-259: Set correct number of values
|
||||||
if ((err = grib_set_long_internal(gh, self->numberOfValues, *len)) != GRIB_SUCCESS)
|
if ((err = grib_set_long_internal(gh, self->numberOfValues, *len)) != GRIB_SUCCESS)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
@ -1977,7 +1952,7 @@ static int unpack_double_element_set(grib_accessor* a, const size_t* index_array
|
||||||
double* values;
|
double* values;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
/* GRIB-564: The indexes in index_array relate to codedValues NOT values! */
|
// GRIB-564: The indexes in index_array relate to codedValues NOT values!
|
||||||
err = grib_get_size(grib_handle_of_accessor(a), "codedValues", &size);
|
err = grib_get_size(grib_handle_of_accessor(a), "codedValues", &size);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
Loading…
Reference in New Issue