Skip to content

Commit

Permalink
Per #2782, port over fixes from the bugfix_2782_main_v11.1_MASSDEN br…
Browse files Browse the repository at this point in the history
…anch over to the bugfix branch for develop. Will also add new GRIB2 filtering options in this branch.
  • Loading branch information
JohnHalleyGotway committed Jan 10, 2024
1 parent 9e2825c commit a3b46c3
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 7 deletions.
36 changes: 29 additions & 7 deletions src/libcode/vx_data2d_grib2/data2d_grib2.cc
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,9 @@ bool MetGrib2DataFile::data_plane(VarInfo &vinfo, DataPlane &plane) {
if( 1 < listMatch.size() ){
ConcatString msg;
for(size_t i=0; i < listMatch.size(); i++) {
msg << "record " << listMatch[i]->RecNum
msg << " Record " << listMatch[i]->RecNum
<< " field " << listMatch[i]->FieldNum
<< ", table 4." << listMatch[i]->PdsTmpl
<< ": ipdtmpl[" << listMatch[i]->IPDTmpl.n()
<< "] = ";
for(int j=0; j < listMatch[i]->IPDTmpl.n(); j++) {
Expand Down Expand Up @@ -259,8 +260,9 @@ int MetGrib2DataFile::data_plane_array(VarInfo &vinfo,
if( 1 < listMatchExact.size() ){
ConcatString msg;
for(size_t i=0; i < listMatchExact.size(); i++) {
msg << "record " << listMatchExact[i]->RecNum
msg << " Record " << listMatchExact[i]->RecNum
<< " field " << listMatchExact[i]->FieldNum
<< ", table 4." << listMatchExact[i]->PdsTmpl
<< ": ipdtmpl[" << listMatchExact[i]->IPDTmpl.n()
<< "] = ";
for(int j=0; j < listMatchExact[i]->IPDTmpl.n(); j++) {
Expand Down Expand Up @@ -728,11 +730,17 @@ void MetGrib2DataFile::read_grib2_record_list() {
rec->PdsTmpl = gfld->ipdtnum;
rec->ParmCat = gfld->ipdtmpl[0];
rec->Parm = gfld->ipdtmpl[1];
rec->Process = gfld->ipdtmpl[2];

// get the process id
if( gfld->ipdtnum != 46 && gfld->ipdtnum != 48 ) {
rec->Process = gfld->ipdtmpl[2];
}

// get the level type
if( gfld->ipdtnum == 46 ) {
rec->LvlTyp = gfld->ipdtmpl[15];
} else if( gfld->ipdtnum == 48 ) {
rec->LvlTyp = gfld->ipdtmpl[20];
} else {
rec->LvlTyp = gfld->ipdtmpl[9];
}
Expand All @@ -745,10 +753,16 @@ void MetGrib2DataFile::read_grib2_record_list() {
// check for template number 46
if( gfld->ipdtnum == 46 ) {
rec->LvlVal1 = scaled2dbl(gfld->ipdtmpl[16], gfld->ipdtmpl[17]);
rec->LvlVal2 = rec->LvlVal1;
// check for special fixed level types (1 through 10 or 101) and set the level values to 0
// Reference: https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table4-5.shtml
} else if( (rec->LvlTyp >= 1 && rec->LvlTyp <= 10) || rec->LvlTyp == 101 ) {
rec->LvlVal2 = rec->LvlVal1;
}
// check for template number 48
else if( gfld->ipdtnum == 48 ) {
rec->LvlVal1 = scaled2dbl(gfld->ipdtmpl[21], gfld->ipdtmpl[22]);
rec->LvlVal2 = rec->LvlVal1;
}
// check for special fixed level types (1 through 10 or 101) and set the level values to 0
// Reference: https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table4-5.shtml
else if( (rec->LvlTyp >= 1 && rec->LvlTyp <= 10) || rec->LvlTyp == 101 ) {
rec->LvlVal1 = 0;
rec->LvlVal2 = 0;
} else {
Expand Down Expand Up @@ -783,6 +797,14 @@ void MetGrib2DataFile::read_grib2_record_list() {
exit(1);
}

// aerosol type and size for templates 46 and 48
if( 46 == gfld->ipdtnum || 48 == gfld->ipdtnum ){
rec->AerosolTyp = gfld->ipdtmpl[2];
rec->AerosolIntervalTyp = gfld->ipdtmpl[3];
rec->AerosolSizeLower = scaled2dbl(gfld->ipdtmpl[4], gfld->ipdtmpl[5]);
rec->AerosolSizeUpper = scaled2dbl(gfld->ipdtmpl[6], gfld->ipdtmpl[7]);
}

// ensemble type and number for templates 1 and 11 (Table 4.6)
if( 1 == gfld->ipdtnum || 11 == gfld->ipdtnum ){
rec->EnsType = gfld->ipdtmpl[15];
Expand Down
4 changes: 4 additions & 0 deletions src/libcode/vx_data2d_grib2/data2d_grib2.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ typedef struct {
int ParmCat;
int Parm;
int Process;
int AerosolTyp;
int AerosolIntervalTyp;
double AerosolSizeLower;
double AerosolSizeUpper;
int LvlTyp;
double LvlVal1;
double LvlVal2;
Expand Down

0 comments on commit a3b46c3

Please sign in to comment.