ECC-924: GRIB2: Add support for encoding AROME and ALADIN fields

This commit is contained in:
Shahram Najm 2019-05-15 15:04:26 +01:00
commit e96037eeb8
8 changed files with 1776 additions and 1789 deletions

View File

@ -22,6 +22,6 @@
20 20 Version implemented on 8 November 2017
21 21 Version implemented on 2 May 2018
22 22 Version implemented on 7 November 2018
23 23 Pre-operational to be implemented by next amendment
23 23 Version implemented on 15 May 2019
# 24-254 Future versions
255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used.

View File

@ -12,20 +12,20 @@ codetable[1] biFourierTruncationType ('3.25.table',masterDir,localDir) : dump;
# Lx - Full domain length in X-direction. Size in metres of the domain along x-axis
unsigned[8] Lx;
meta geography.LxInMetres scale(Lx,one,thousand) : dump;
alias geography.LxInMetres = Lx;
# Lux - Useful domain length in X-direction. Size in metres of model forecast subdomain along x-axis
unsigned[8] Lux;
meta geography.LuxInMetres scale(Lux,one,thousand) : dump;
# Lcx - Coupling domain width in X-direction
alias geography.LuxInMetres=Lux;
# Lcx - Coupling domain width in X-direction. Width in metres of coupling area within forecast domain along x-axis
unsigned[8] Lcx;
meta geography.LcxInMetres scale(Lcx,one,thousand) : dump;
alias geography.LcxInMetres=Lcx;
# Ly - Full domain length in Y-direction
unsigned[8] Ly;
meta geography.LyInMetres scale(Ly,one,thousand) : dump;
alias geography.LyInMetres=Ly;
# Luy - Useful domain length in Y-direction
unsigned[8] Luy;
meta geography.LuyInMetres scale(Luy,one,thousand) : dump;
alias geography.LuyInMetres=Luy;
# Lcy - Coupling domain width in Y-direction
unsigned[8] Lcy;
meta geography.LcyInMetres scale(Lcy,one,thousand) : dump;
alias geography.LcyInMetres=Lcy;

View File

@ -18,16 +18,14 @@ codetable[1] biFourierPackingModeForAxes ('5.26.table',masterDir,localDir) = 0 :
# biFourierDoNotPackAxes
constant laplacianScalingFactorUnset = -2147483647;
signed[4] laplacianScalingFactor : edition_specific ;
signed[4] laplacianScalingFactor : edition_specific ; # units of 10^-6
meta data.laplacianOperator scale(laplacianScalingFactor,one,million,truncateLaplacian) ;
meta laplacianOperatorIsSet evaluate(laplacianScalingFactor != laplacianScalingFactorUnset && !computeLaplacianOperator);
unsigned[2] biFourierResolutionSubSetParameterN ;
unsigned[2] biFourierResolutionSubSetParameterM ;
# TODO. Need to fix up the sample file samples/lambert_bf_grib2.tmpl
#unsigned[4] totalNumberOfValuesInUnpackedSubset = 0 : dump;
unsigned[2] biFourierResolutionSubSetParameterN : dump ; # NS
unsigned[2] biFourierResolutionSubSetParameterM : dump ; # MS
unsigned[4] totalNumberOfValuesInUnpackedSubset = 0 : dump; # TS
# This is read_only until we support other values
codetable[1] unpackedSubsetPrecision ('5.7.table',masterDir,localDir) = 1 : dump;

View File

@ -41,6 +41,7 @@ meta codedValues data_g2bifourier_packing(
biFourierSubTruncationType,
biFourierPackingModeForAxes,
biFourierMakeTemplate,
totalNumberOfValuesInUnpackedSubset,
numberOfValues
): read_only;

Binary file not shown.

View File

@ -41,6 +41,7 @@
MEMBERS= const char* biFourierSubTruncationType
MEMBERS= const char* biFourierDoNotPackAxes
MEMBERS= const char* biFourierMakeTemplate
MEMBERS= const char* totalNumberOfValuesInUnpackedSubset
MEMBERS=const char* numberOfValues
END_CLASS_DEF
@ -94,6 +95,7 @@ typedef struct grib_accessor_data_g2bifourier_packing {
const char* biFourierSubTruncationType;
const char* biFourierDoNotPackAxes;
const char* biFourierMakeTemplate;
const char* totalNumberOfValuesInUnpackedSubset;
const char* numberOfValues;
} grib_accessor_data_g2bifourier_packing;
@ -191,6 +193,7 @@ static void init(grib_accessor* a,const long v, grib_arguments* args)
self->biFourierSubTruncationType = grib_arguments_get_name(gh,args,self->carg++);
self->biFourierDoNotPackAxes = grib_arguments_get_name(gh,args,self->carg++);
self->biFourierMakeTemplate = grib_arguments_get_name(gh,args,self->carg++);
self->totalNumberOfValuesInUnpackedSubset = grib_arguments_get_name(gh,args,self->carg++);
/*self->numberOfValues = grib_arguments_get_name(gh,args,self->carg++);*/
a->flags |= GRIB_ACCESSOR_FLAG_DATA;
@ -931,6 +934,9 @@ static int pack_double(grib_accessor* a, const double* val, size_t *len)
grib_buffer_replace (a, buf, buflen, 1, 1);
if ((ret = grib_set_long_internal (gh, self->totalNumberOfValuesInUnpackedSubset, bt->n_vals_sub)) != GRIB_SUCCESS)
goto cleanup;
if ((ret = grib_set_long_internal (gh, self->number_of_values, bt->n_vals_bif)) != GRIB_SUCCESS)
goto cleanup;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff