This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
>From: "Arthur A. Person" <address@hidden> >Organization: UCAR/Unidata >Keywords: 200101261553.f0QFrIX19200 >Hi... > >We switched to gempak5.6.a yesterday afternoon and the overnight decoding >of the mrf grid 003 appears in error. To verify this, I used a raw grib >data file (mrf.010126.drfmr.T00Z.PGrbF00) as test input to the old dcgrib >decoder and plotted it with gempak5.6.a and got a correct result. When I >repeated this with dcgrib2 and plotted it, the field looks like a 500mb >height (I tested 500mb height at the 00Z forecast hour only) but was very >smooth with little or no correlation to reality. Can you give me a clue >what might be going on here? > > Thanks. > > Art. > >Arthur A. Person >Research Assistant, System Administrator >Penn State Department of Meteorology >email: address@hidden, phone: 814-863-1563 > Art, These international exchange grids have the GRIB scan mode in the opposite sense from the other NCEP grids (jdrct = 0 rather than 1). So, they'll have to be unpacked and flipped before storage since the display programs can't handle this. I've attatched an updated version of: $NAWIPS/unidata/ldmbridge/dcgrib2/dcwppg.c You should be able to replace the current version with this version. Then, rebuild dcgrib2 with: cd $NAWIPS/unidata/ldmbridge/dcgrib2 make clean make all make install make clean Thanks for pointing this out (same will exist for Grid 002). Steve Chiswell
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <gemprm.h>
#include <gbcmn.h>
#include <uscore.h>
#ifdef UNDERSCORE
#define na_rhdr na_rhdr_
#define gd_wppg gd_wppg_
#define lv_ccrd lv_ccrd_
#endif
extern int idrct,jdrct,consec;
void dcwppg(iflno,xgrid,subgrid)
int iflno,*xgrid,subgrid;
{
int lengrd,iret;
int ighdr[LLGDHD];
int itime[3],iaccm,ilevel[2];
char gdattm[2][20],parm[12];
int level[2],ivcord,iuscal;
float rmsval;
int lens,i;
float scale;
float difval=0,ref;
int loglev,numerr;
int nocoord=0,noparm=0;
int _itrue = TRUE, _ifalse = FALSE, packmeth=MDGGRB;
int reindex=0;
static char errgrp[]="DCGRIB";
char errstr[128],vcoord[20];
for(i=0;i<LLGDHD;i++) ighdr[i] = 0;
gb_ftim(itime,&iaccm,&iret);
gb_vlev(ilevel,&iret);
na_rhdr ( itime, &iaccm, &ilevel, &pds.vcoord, &pds.parameter, &pds.version,
gdattm, &level, &ivcord, parm, &iuscal, &rmsval, &pds.pdse,
pds.extension, &iret,
sizeof(gdattm[0]),sizeof(parm),strlen(pds.extension) );
errstr[0] = '\0';
if(iret == 0)
{
lengrd = (bds.length - 11) / sizeof(int);
if(((bds.length - 11) % sizeof(int)) > 0) lengrd = lengrd + 1;
ref = bds.ref_value * pow ( 10.0, (double) (iuscal - pds.dec_scale) );
scale = pow ( 2.0, (double) bds.binary_scale ) * pow ( 10.0, (double)
(iuscal - pds.dec_scale) );
if((idrct != 0)||(jdrct != 1)||(consec != 0)) reindex = 1;
if(gds.grid_proj == 203)
dcfillgrid(iflno,xgrid,lengrd,rmsval,iuscal, ighdr, gdattm, level,
ivcord, parm,&iret);
else if((subgrid != 0)||(pds.isbms)||(bds.num_bits<2)||(reindex != 0))
dcsubgrid(iflno,xgrid,lengrd,rmsval,iuscal, ighdr, gdattm, level, ivcord,
parm, subgrid);
else
{
gd_wppg ( &iflno, xgrid, &lengrd, &gds.kx, &gds.ky, ighdr, gdattm, level,
&ivcord, parm,
&_itrue, &packmeth, &bds.num_bits, &_ifalse, &ref, &scale, &difval,
&iret,20,12 );
}
numerr = iret;
loglev = 2;
}
else
{
/* 3 no parm found in table */
/* 2 no vert found */
if(iret == 3) noparm = 1;
if(iret == 2) nocoord = 1;
numerr = iret;
loglev = 0;
}
if(noparm != 0)
sprintf(errstr,"%03d\0",pds.parameter);
else
{
st_lstr(parm,&lens,&iret,12);
strncat(errstr,parm,lens);
}
strncat(errstr," ",1);
st_lstr(gdattm[0],&lens,&iret,20);
strncat(errstr,gdattm[0],lens);
strncat(errstr," ",1);
if(nocoord != 0)
sprintf(errstr+strlen(errstr),"%03d\0",pds.vcoord);
else
{
lv_ccrd(&ivcord,vcoord,&iret,sizeof(vcoord));
st_lstr(vcoord,&lens,&iret,sizeof(vcoord));
strncat(errstr,vcoord,lens);
}
sprintf(errstr+strlen(errstr)," %4d %4d %3d\0",level[0],level[1],pds.grid_id);
dc_wclg(loglev,errgrp,numerr,errstr,&iret);
}