[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GEMPAK #SKK-738821]: dcgrib2 problem with GEMPAK5.11.4
- Subject: [GEMPAK #SKK-738821]: dcgrib2 problem with GEMPAK5.11.4
- Date: Wed, 02 Sep 2009 16:54:49 -0600
James,
Attached is a patched decode_grib2.c for GEMPAK 5.11.4 to be placed in
$NAWIPS/unidata/ldmbridge/dcgrib2/
to build after copying the file:
cd $NAWIPS/unidata/ldmbridge/dcgrib2/
make all
make install
This update fixes a grib2->gempak grid decoding conflict assigning ensemble
extensions to parameter names.
Michael James
Unidata Support Staff
> Hi Michael,
>
> I haven't received any response in nearly a week. So, I'm resending an
> email I sent out last Wednesday(in the event you've been so busy that my
> original email got lost in the shuffle).
> --------------------------------------------------------------------------
>
>
> Since I already missed the 12Z ensemble run, I ran dcgrib2 manually with
> a random ensemble file(ftp-ed from NCEP server). As you suggested, I
> included ENSEXT into the command:
>
> dcgrib2 -c 090819/1200 -v 2 -e ENSEXT=0 -e
> gec00.t12z.pgrb2af30
>
> When I run gdinfo, I see the following(just looking at 500 mb level but
> similar for other levels):
>
> NUM TIME1 TIME2 LEVL1 LEVL2 VCORD PARM
> 27 090819/1200F030 500 PRES HGHTC002
> 28 090819/1200F030 500 PRES TMPKC002
> 29 090819/1200F030 500 PRES RELHC002
> 30 090819/1200F030 500 PRES URELC002
> 31 090819/1200F030 500 PRES VRELC002
>
> If I run ENSEXT=1, I see this:
>
> NUM TIME1 TIME2 LEVL1 LEVL2 VCORD PARM
> 27 090819/1200F030 500 PRES
> HGHTC002C002
> 28 090819/1200F030 500 PRES
> TMPKC002C002
> 29 090819/1200F030 500 PRES
> RELHC002C002
> 30 090819/1200F030 500 PRES
> URELC002C002
> 31 090819/1200F030 500 PRES
> VRELC002C002
>
> I also ran it pointing to the 5.11.1 tables, but no change occurred. I
> don't think the 5.11.4 tables are at fault. When I ran dcgrib2 from
> 5.11.1, the parameter names didn't include the ensemble member name even
> when pointing to the 5.11.4 tables(ENSEXT=1 will append ensemble name,
> however). So, am I using the wrong syntax? Do you get the proper result
> with your dcgrib2(5.11.4)? It's also my interpretation that grib2 data
> will default with no extension name if ENSEXT is not set(which it isn't
> in my pqact for this data...using template found in
> $NAWIPS/ldm/etc/templates/pqact.gempak_decoders.in).
>
> On a happier note, the problem with gempak not recording the GVCORD name
> "HYBL" was my fault for using an old Sun workstation(version 5.10.2 when
> "HYBL" wasn't a vertical coordinate option).
>
> James
>
> ----------------------------------------------
> James Murakami
> Staff Meteorologist/Student Affairs
> Department of Atmospheric and Oceanic Sciences
> University of California, Los Angeles
> 405 Hilgard Ave.
> Los Angeles, CA 90095-1565
>
>
> e-mail: address@hidden
> telephone: 310-825-2418
> Fax: 310-206-5219
> ----------------------------------------------
>
>
>
> Unidata GEMPAK Support wrote:
> > Hi James,
> >
> > You're going to want to check that ENSEXT is not set to 1 in your
> > pqact.gempak entries for ensemble grids.
> >
> > >From the dcgrib2 man page,
> >
> > http://www.unidata.ucar.edu/cgi-bin/gempak/manual/decoders_index?dcgrib2
> >
> > ENSEXT : Environmental variable for adding ensemble extensions to parameter
> > names
> > If ENSEXT is not set, use of PDSEXT parameter name extensions
> > defaults
> > to yes for grib1 and no for grib2. If ENSEXT is set, and equal
> > to 1,
> > then the extension will be added to parameter names. If ENSEXT
> > is
> > set, and not equal to 1, the PDS extension will not be added to
> > parameter
> > names.
> >
> >
> > That should do it, let me know if you have further questions.
> >
> > Michael James
> > Unidata User Support
> >
> >
> >
> >
> >> Hi,
> >>
> >> I installed the latest GEMPAK(5.11.4) last week, and I noticed some
> >> problems. For this email, I'm addressing a problem with how dcgrib2
> >> decodes GFS ensemble and RUC data(via the CONDUIT feed). What I see is
> >> dcgrib2 labeling ensemble parameters with the run variation name.
> >> That is, if one looks at temperature data, dcgrib2 produces labels of
> >> TMPKP001, TMPKP002, ...TMPKP20(TMPKC002 for the control run) for any
> >> given level. The prior version(5.11.1) just used the label, TMPK
> >> regardless of ensemble member(this is the preferred labeling). Also, for
> >> RUC data, there is no VCORD name given for ones that should be labeled
> >> "HYBL"(using gdinfo program to view all this). Again, the previous
> >> version did not omit this.
> >>
> >> Since I didn't see any mention of the above in the support email
> >> archive, I'm assuming that my GEMPAK didn't compile quite
> >> right(functional but with flaws). It was installed on a computer with
> >> OS Mandriva 2008(a derivative of Redhat, I'm told). I've attached the
> >> make.out using g77(got a similar result compiling with gfortran). I
> >> compressed the file as it's rather large(2 megabytes). There were no
> >> "fatal" errors, but many warnings show up. However, I should tell you
> >> that for the previous version, a lot of similar warning messages
> >> occurred too. 5.11.1 continues to be our operational version for
> >> now(I've not encountered any relevant problems with usage).
> >>
> >> I'd appreciate your input on what I can do to correct some of these
> >> warning statements(if they are relevant for a correctly functional
> >> GEMPAK package). It's possible that another problem related to how NMAP2
> >> works might then be corrected(then, I won't need to send a separate
> >> email for this problem).
> >>
> >> James
> >>
> >> --
> >> ----------------------------------------------
> >> James Murakami
> >> Staff Meteorologist/Student Affairs
> >> Department of Atmospheric and Oceanic Sciences
> >> University of California, Los Angeles
> >> 405 Hilgard Ave.
> >> Los Angeles, CA 90095-1565
> >>
> >>
> >> e-mail: address@hidden
> >> telephone: 310-825-2418
> >> Fax: 310-206-5219
> >> ----------------------------------------------
> >>
> >>
> >>
> >>
> >>
> >
> >
> > Ticket Details
> > ===================
> > Ticket ID: SKK-738821
> > Department: Support GEMPAK
> > Priority: Normal
> > Status: Open
> >
> >
> >
>
>
Ticket Details
===================
Ticket ID: SKK-738821
Department: Support GEMPAK
Priority: Normal
Status: Open
#include "gb2def.h"
#include "dccmn.h" /* for ivrblv global variable */
#include "gbcmn.h" /* for gds global variable */
#include "dcgrib.h"
extern int ensext;
extern int pkmeth; /* pkmeth = MDGRB2 defaults to GRIB2 storage, MDGDEC uses
old method */
void
decode_grib2 (unsigned char *cgrib, int lenbul,
char *gemfil, char *filnam, int maxgrd)
/************************************************************************
* void decode_grib2 ( cgrib, lenbul, gemfil, filnam, naxgrd) *
* unsigned char *cgrib Input grib product *
* int lenbul length of input product *
* char *gemfil User specified output file name *
* char *filnam final output filename *
* int maxgrd Maximum number of grids in new file *
* *
* Error Codes *
* Log: *
* Chiz/Unidata 12/03 Created *
* James/Unidata 9/09 Accounted for prmext *
*************************************************************************/
{
int numgrds = maxgrd;
int i, n, ilen1, ilen2, prmext, ier, iret;
int iflno;
g2int unpack = 0, expand = 0;
g2int listsec0[3], listsec1[13], numlocal;
Gribmsg curr_g2;
Geminfo curr_gem;
char vcoord[20], errstr[133], gdattm[2][DTTMSZ], extstr[20];
int ighdr[LLGDHD];
int gdflag = 255, iprec;
static int tblinit = 0;
static char errgrp[] = "DECODE_GRIB2";
static int replace = 1;
static char g2tables[5][LLMXLN] = { 0 }, *tbllist[5];
curr_g2.cgrib2 = cgrib;
curr_g2.mlength = lenbul;
curr_g2.gfld = NULL;
curr_g2.field_tot = 0;
if (!tblinit)
{
for (i = 0; i < 5; i++)
tbllist[i] = g2tables[i];
tblinit = !0;
}
if ((ier =
g2_info (curr_g2.cgrib2, listsec0, listsec1, &(curr_g2.field_tot),
&numlocal)) != 0)
{
dc_wclg (0, errgrp, ier, "g2_info failed", &iret);
return;
}
for (n = 0; n < curr_g2.field_tot; n++)
{
ier = g2_getfld (curr_g2.cgrib2, n + 1, unpack, expand, &curr_g2.gfld);
/* initialize strings in geminfo structure */
memset ( curr_gem.cproj, 0, sizeof(curr_gem.cproj));
memset ( curr_gem.parm, 0, sizeof(curr_gem.parm));
memset ( curr_gem.gdattm1, 0, sizeof(curr_gem.gdattm1));
memset ( curr_gem.gdattm2, 0, sizeof(curr_gem.gdattm2));
gb2_2gem (&curr_g2, &curr_gem, tbllist, ensext, &ier);
/* make sure the times are null terminated, since the routine above
strncpy's 1 more character than the fortran routine provides */
curr_gem.gdattm1[DTTMSZ-1] = '\0';
curr_gem.gdattm2[DTTMSZ-1] = '\0';
if (ivrblv >= 4)
gb2_diag (curr_g2.gfld, gdflag);
/* TODO: Convert these to GEMPAK weather codes and store as grid data */
if (ivrblv >= 3)
{
if ( ( numlocal > 0 ) && ( curr_g2.gfld->locallen > 0 ) && (
curr_g2.gfld->local != NULL ) )
{
int i2vers = (int)curr_g2.gfld->local[0];
int i2grp = gb_btoi ( curr_g2.gfld->local,1,2,0);
int i2val = gb_btoi ( curr_g2.gfld->local,3,4,0);
int i2ref = gb_btoi ( curr_g2.gfld->local,7,4,0);
int i2scale = gb_btoi ( curr_g2.gfld->local,11,2,0);
int i2bits = (int)curr_g2.gfld->local[13];
int i2type = (int)curr_g2.gfld->local[14];
g2int *i2out;
printf("Local Section2 used [length= %d]\n",curr_g2.gfld->locallen);
printf("check curr_g2.gfld->idsect[3] %d\n",curr_g2.gfld->idsect[3]);
printf("check type %d\n",i2type);
printf("section2 local %d %d %d\n",i2vers,i2grp,i2val);
if(i2type == 1)
{ /* simple packing using integers */
i2out = (g2int *)malloc(i2val*(sizeof(int)));
gbits ( curr_g2.gfld->local, i2out, (g2int)(15*8), (g2int)i2bits,
(g2int)0, (g2int)i2val);
for(i=0;i<i2val;i++)
{
if ( i2out[i] == 0 )
printf("\n");
else
printf("%c",i2out[i]);
}
printf("\n");
free(i2out);
}
}
}
if (ier != 0)
{
sprintf (errstr, "Could not determine parameter name %d %d %d %d
[%d]\0",
curr_g2.gfld->discipline, curr_g2.gfld->ipdtmpl[0],
curr_g2.gfld->ipdtmpl[1],curr_g2.gfld->ipdtnum,
curr_gem.vcord);
dc_wclg (0, errgrp, ier, errstr, &iret);
g2_free (curr_g2.gfld);
curr_g2.gfld = NULL;
continue;
}
if (curr_g2.gfld->griddef == 0) /* note... the center defined grid
number is not provided */
pds.grid_id = decode_g2gnum (curr_g2.gfld);
else
pds.grid_id = curr_g2.gfld->griddef;
pds.center = curr_g2.gfld->idsect[0];
pds.izero = curr_g2.gfld->idsect[1];
pds.process = curr_g2.gfld->ipdtmpl[4];
gds.kx = curr_g2.kx;
gds.ky = curr_g2.ky;
cst_rmbl ( curr_gem.gdattm1, gdattm[0], &i, &iret );
cst_rmbl ( curr_gem.gdattm2, gdattm[1], &i, &iret );
dcflnam2 (gemfil, filnam, &numgrds, curr_g2.gfld, gdattm[0], gdattm[1],
&ier);
if (ier == 0)
{
memset (ighdr, 0, sizeof (ighdr));
dcogfil2 (filnam, &iflno, numgrds, curr_gem);
if ( pkmeth == MDGRB2 )
{
gb2_wgem(curr_g2, curr_gem, n + 1, iflno, replace,
ighdr, &ier);
/* method for storing necessary portion of GRIB2 product (Chiz)
* sections 3,4,5,6,7. Write template arrays for sect 3,4.
* Determine location to start of section 5, and length through
section 7.
* Write length of data to GEMPAK grid file.
* Can be read through g2_unpack#.c routines.
*/
}
else
{
if (FGSIZ < (curr_g2.kx * curr_g2.ky))
{
FGRID =
(float *) realloc (FGRID,
(curr_g2.kx * curr_g2.ky) *
sizeof (float));
if ( FGRID == NULL ) {
sprintf (errstr, "Reallocating grid for %d points [nx %d ny %d]
failed\0",
curr_g2.kx * curr_g2.ky, curr_g2.kx, curr_g2.ky);
dc_wclg (3, errgrp, 0, errstr, &iret);
g2_free (curr_g2.gfld);
curr_g2.gfld = NULL;
FGSIZ = 0;
return;
}
FGSIZ = curr_g2.kx * curr_g2.ky;
}
/*
* Unpack GRIB2 grid
*/
gb2_grid (&curr_g2, curr_gem.iuscal, curr_gem.rmsval,
&iprec, FGRID, &iret);
/* Check JPEG & PNG missing values -- not needed currently --
if ((curr_g2.gfld->idrtnum == 40000)
|| (curr_g2.gfld->idrtnum == 40)
|| (curr_g2.gfld->idrtnum == 41)
|| (curr_g2.gfld->idrtnum == 40010))
dcmisjpg (curr_g2, FGRID);*/
/*
* write grid out to gempak file.
*/
/*gd_wpgd (&iflno, FGRID, &curr_g2.kx, &curr_g2.ky, ighdr,
(char *)gdattm, curr_gem.level,
&curr_gem.vcord, curr_gem.parm, &replace,
&pkmeth, &iprec, &ier, DTTMSZ, 12);*/
cgd_wpgd (&iflno, FGRID, &curr_g2.kx, &curr_g2.ky, ighdr,
curr_gem.gdattm1, curr_gem.gdattm2,
&curr_gem.level[0], &curr_gem.level[1],
&curr_gem.vcord, curr_gem.parm, &replace,
&pkmeth, &iprec, &ier );
}
lv_ccrd (&curr_gem.vcord, vcoord, &iret, sizeof (vcoord) - 1);
vcoord[sizeof (vcoord) - 1] = '\0';
cst_rmbl ( vcoord, vcoord, &i, &iret );
curr_gem.parm[sizeof(curr_gem.parm)-1] = '\0';
cst_rmbl( curr_gem.parm, curr_gem.parm, &i, &iret);
sprintf (errstr, "%s [%s] %d:%d %s %d %d\0", curr_gem.parm,
gdattm[0], curr_gem.level[0], curr_gem.level[1],
vcoord, curr_g2.kx, curr_g2.ky);
if (ier != 0)
dc_wclg (0, errgrp, ier, errstr, &iret);
else
dc_wclg (1, errgrp, ier, errstr, &iret);
}
else
{
sprintf (errstr, "decode_g2gds failed\0");
dc_wclg (0, errgrp, ier, errstr, &iret);
}
g2_free (curr_g2.gfld);
curr_g2.gfld = NULL;
}
if (ivrblv >= 2)
{
sprintf (errstr, "numfields %d numlocal %d\0", curr_g2.field_tot,
numlocal);
dc_wclg (2, errgrp, ier, errstr, &iret);
}
}