NCEPLIBS-g2c
1.7.0
|
Header file for NCEPLIBS-g2c library. More...
#include <stdio.h>
#include <stdint.h>
Go to the source code of this file.
Data Structures | |
struct | gribfield |
Struct for GRIB field. More... | |
Macros | |
#define | G2_ADD_MSG_COMPLETE -2 |
GRIB message already complete. More... | |
#define | G2_ADD_MSG_INIT -1 |
GRIB message was not initialized - call g2_create() first. More... | |
#define | G2_ADDFIELD_BAD_BITMAP -8 |
In g2_addfield() no bitmap in the GRIB message. More... | |
#define | G2_ADDFIELD_BAD_DRT -7 |
In g2_addfield() unsupported Data Representationi Template. More... | |
#define | G2_ADDFIELD_BAD_GDS -6 |
In g2_addfield() section 3 (GDS) not previously defined in message. More... | |
#define | G2_ADDFIELD_BAD_GDT -9 |
In g2_addfield() GDT of one of 5.50 through 5.53 required when using DRT 5.51. More... | |
#define | G2_ADDFIELD_BAD_PDT -5 |
In g2_addfield() could not find requested Product Definition Template. More... | |
#define | G2_ADDFIELD_ERR -10 |
In g2_addfield() error packing data field. More... | |
#define | G2_ADDGRID_BAD_GDT -5 |
In g2_addgrid() Could not find requested Grid Definition Template. More... | |
#define | G2_BAD_SEC -4 |
Previous Section was unexpected. More... | |
#define | G2_BAD_SEC_COUNTS -3 |
Sum of Section byte counts doesn't add to total byte count. More... | |
#define | G2_CREATE_GRIB_VERSION -1 |
Wrong GRIB version for g2_create(), must be 2. More... | |
#define | G2_GETFLD_BAD_END 7 |
g2_getfld() didn't find "7777" at end of message. More... | |
#define | G2_GETFLD_BAD_SEC1 15 |
Error in g2_getfld() unpacking section 1. More... | |
#define | G2_GETFLD_BAD_SEC2 16 |
Error in g2_getfld() unpacking section 2. More... | |
#define | G2_GETFLD_BAD_SEC3 10 |
Error in g2_getfld() unpacking section 3. More... | |
#define | G2_GETFLD_BAD_SEC4 11 |
Error in g2_getfld() unpacking section 4. More... | |
#define | G2_GETFLD_BAD_SEC5 12 |
Error in g2_getfld() unpacking section 5. More... | |
#define | G2_GETFLD_BAD_SEC6 13 |
Error in g2_getfld() unpacking section 6. More... | |
#define | G2_GETFLD_BAD_SEC7 14 |
Error in g2_getfld() unpacking section 7. More... | |
#define | G2_GETFLD_GRIB_VERSION 2 |
Wrong GRIB version for g2_getfld(), must be 2. More... | |
#define | G2_GETFLD_INVAL 3 |
g2_getfld() data field request number was not positive. More... | |
#define | G2_GETFLD_INVAL_SEC 8 |
g2_getfld() encountered unrecognized section. More... | |
#define | G2_GETFLD_NO_BITMAP 17 |
In g2_getfld() previous bitmap specified, yet none exists. More... | |
#define | G2_GETFLD_NO_DRT 9 |
In g2_getfld(), Data Representation Template not implemented. More... | |
#define | G2_GETFLD_NO_GRIB 1 |
g2_getfld() can't find beginning characters "GRIB". More... | |
#define | G2_GETFLD_WRONG_END 4 |
g2_info() found "7777" not where expected. More... | |
#define | G2_GETFLD_WRONG_NFLDS 6 |
In g2_getfld() message did not contain the requested number of data fields. More... | |
#define | G2_GRIBEND_MSG_INIT -1 |
In g2_gribend() GRIB message was not initialized - call g2_create() first. More... | |
#define | G2_INFO_BAD_END 5 |
g2_info() didn't find "7777" at end of message. More... | |
#define | G2_INFO_GRIB_VERSION 2 |
Wrong GRIB version for g2_info(), must be 2. More... | |
#define | G2_INFO_INVAL_SEC 6 |
g2_info() found invalid section number. More... | |
#define | G2_INFO_NO_GRIB 1 |
g2_info() can't find beginning characters "GRIB". More... | |
#define | G2_INFO_NO_SEC1 3 |
g2_info() can't find section 1. More... | |
#define | G2_INFO_WRONG_END 4 |
g2_info() found "7777" not where expected. More... | |
#define | G2_JASPER_DECODE -3 |
In dec_jpeg2000() error decoding image with jasper. More... | |
#define | G2_JASPER_DECODE_COLOR -5 |
In dec_jpeg2000() decoded image had multiple color components. More... | |
#define | G2_JASPER_ENCODE -3 |
In enc_jpeg2000() error encoding image with jasper. More... | |
#define | G2_JASPER_INIT -2 |
In enc_jpeg2000()/dec_jpeg2000() error initializing jasper library. More... | |
#define | G2_JPCUNPACK_MEM 1 |
In jpcunpack() or other unpack function: out of memory. More... | |
#define | G2_JPEG2000_ENABLED 1 |
Decoding/encoding JPEG2000 is enabled. More... | |
#define | G2_NO_ERROR 0 |
Function succeeded. More... | |
#define | G2_PNG_ENABLED 1 |
Decoding/encoding PNG is enabled. More... | |
#define | G2_SPECUNPACK_TYPE -3 |
In specunpack() Can't handle 64 or 128 bit floats. More... | |
#define | G2_UNPACK3_BAD_GDT 5 |
In g2_unpack3(), undefined Grid Definition Template. More... | |
#define | G2_UNPACK4_BAD_PDT 5 |
In g2_unpack4(), undefined Product Definition Template. More... | |
#define | G2_UNPACK5_BAD_DRT 7 |
In g2_unpack5(), undefined Data Representation Template. More... | |
#define | G2_UNPACK6_BAD_BITMAP 4 |
In g2_unpack6(), unrecognized pre-defined bit-map. More... | |
#define | G2_UNPACK7_BAD_DRT 4 |
In g2_unpack7(), unrecognized Data Representation Template. More... | |
#define | G2_UNPACK7_CORRUPT_SEC 7 |
In g2_unpack7(), corrupt section 7. More... | |
#define | G2_UNPACK7_WRONG_GDT 5 |
In g2_unpack7(), need one of GDT 3.50 through 3.53 to decode DRT 5.51. More... | |
#define | G2_UNPACK_BAD_SEC 2 |
Bad section number in unpacking function. More... | |
#define | G2_UNPACK_NO_MEM 6 |
Error allocating memory in unpack function. More... | |
#define | G2_VERSION "1.7.0" |
Current version of NCEPLIBS-g2c library. More... | |
#define | G2C_MSG_COMPLETE -51 |
GRIB message already complete. More... | |
#define | G2C_NO_ERROR 0 |
No error. More... | |
#define | G2C_NOT_GRIB -50 |
GRIB header not found. More... | |
Typedefs | |
typedef float | g2float |
Float type. More... | |
typedef int64_t | g2int |
Long integer type. More... | |
typedef uint64_t | g2intu |
Unsigned long integer type. More... | |
typedef struct gribfield | gribfield |
Struct for GRIB field. More... | |
Functions | |
g2int | g2_addfield (unsigned char *cgrib, g2int ipdsnum, g2int *ipdstmpl, float *coordlist, g2int numcoord, g2int idrsnum, g2int *idrstmpl, float *fld, g2int ngrdpts, g2int ibmap, g2int *bmap) |
This routine packs up Sections 4 through 7 for a given field and adds them to a GRIB2 message. More... | |
g2int | g2_addgrid (unsigned char *cgrib, g2int *igds, g2int *igdstmpl, g2int *ideflist, g2int idefnum) |
This routine packs up a Grid Definition Section (Section 3) and adds it to a GRIB2 message. More... | |
g2int | g2_addlocal (unsigned char *cgrib, unsigned char *csec2, g2int lcsec2) |
This routine adds a Local Use Section (Section 2) to a GRIB2 message. More... | |
g2int | g2_create (unsigned char *cgrib, g2int *listsec0, g2int *listsec1) |
This routine initializes a new GRIB2 message and packs GRIB2 Section 0 (Indicator Section) and Section 1 (Identification Section). More... | |
void | g2_free (gribfield *gfld) |
This routine frees up memory that was allocated for struct gribfield. More... | |
g2int | g2_getfld (unsigned char *cgrib, g2int ifldnum, g2int unpack, g2int expand, gribfield **gfld) |
This subroutine returns all the metadata, template values, bit-map (if applicable), and the unpacked data for a given data field. More... | |
g2int | g2_gribend (unsigned char *cgrib) |
This routine finalizes a GRIB2 message after all grids and fields have been added. More... | |
g2int | g2_info (unsigned char *cgrib, g2int *listsec0, g2int *listsec1, g2int *numfields, g2int *numlocal) |
This subroutine searches through a GRIB2 message and returns the number of gridded fields found in the message and the number (and maximum size) of Local Use Sections. More... | |
g2int | g2_unpack1 (unsigned char *cgrib, g2int *iofst, g2int **ids, g2int *idslen) |
This subroutine unpacks Section 1 - Identification Section as defined in GRIB Edition 2. More... | |
g2int | g2_unpack2 (unsigned char *cgrib, g2int *iofst, g2int *lencsec2, unsigned char **csec2) |
This subroutine unpacks Section 2 (Local Use Section) as defined in GRIB Edition 2. More... | |
g2int | g2_unpack3 (unsigned char *cgrib, g2int *iofst, g2int **igds, g2int **igdstmpl, g2int *mapgridlen, g2int **ideflist, g2int *idefnum) |
This routine unpacks Section 3 (Grid Definition Section) as defined in GRIB Edition 2. More... | |
g2int | g2_unpack4 (unsigned char *cgrib, g2int *iofst, g2int *ipdsnum, g2int **ipdstmpl, g2int *mappdslen, float **coordlist, g2int *numcoord) |
This subroutine unpacks Section 4 (Product Definition Section) as defined in GRIB Edition 2. More... | |
g2int | g2_unpack5 (unsigned char *cgrib, g2int *iofst, g2int *ndpts, g2int *idrsnum, g2int **idrstmpl, g2int *mapdrslen) |
This subroutine unpacks Section 5 (Data Representation Section) as defined in GRIB Edition 2. More... | |
g2int | g2_unpack6 (unsigned char *cgrib, g2int *iofst, g2int ngpts, g2int *ibmap, g2int **bmap) |
This subroutine unpacks Section 6 (Bit-Map Section) as defined in GRIB Edition 2. More... | |
g2int | g2_unpack7 (unsigned char *cgrib, g2int *iofst, g2int igdsnum, g2int *igdstmpl, g2int idrsnum, g2int *idrstmpl, g2int ndpts, float **fld) |
This subroutine unpacks Section 7 (Data Section) as defined in GRIB Edition 2. More... | |
int | g2c_set_log_level (int new_level) |
Use this to set the global log level. More... | |
void | jpcpack (float *fld, g2int width, g2int height, g2int *idrstmpl, unsigned char *cpack, g2int *lcpack) |
This subroutine packs up a data field into a JPEG2000 code stream. More... | |
void | jpcpackd (double *fld, g2int width, g2int height, g2int *idrstmpl, unsigned char *cpack, g2int *lcpack) |
This subroutine packs up a data field into a JPEG2000 code stream. More... | |
g2int | jpcunpack (unsigned char *cpack, g2int len, g2int *idrstmpl, g2int ndpts, float *fld) |
Unpack JPEG2000 compressed data into an array of floats, using info from the GRIB2 Data Representation Template 5.40 or 5.40000. More... | |
g2int | jpcunpackd (unsigned char *cpack, g2int len, g2int *idrstmpl, g2int ndpts, double *fld) |
Unpack JPEG2000 compressed data into an array of doubles, using info from the GRIB2 Data Representation Template 5.40 or 5.40000. More... | |
void | pngpack (float *fld, g2int width, g2int height, g2int *idrstmpl, unsigned char *cpack, g2int *lcpack) |
This subroutine packs up a float data field into PNG image format. More... | |
void | pngpackd (double *fld, g2int width, g2int height, g2int *idrstmpl, unsigned char *cpack, g2int *lcpack) |
This subroutine packs up a double data field into PNG image format. More... | |
g2int | pngunpack (unsigned char *cpack, g2int len, g2int *idrstmpl, g2int ndpts, float *fld) |
This subroutine unpacks a data field that was packed into a PNG image format using info from the GRIB2 Data Representation Template 5.41 or 5.40010. More... | |
g2int | pngunpackd (unsigned char *cpack, g2int len, g2int *idrstmpl, g2int ndpts, double *fld) |
This subroutine unpacks a data field that was packed into a PNG image format using info from the GRIB2 Data Representation Template 5.41 or 5.40010. More... | |
void | seekgb (FILE *lugb, g2int iseek, g2int mseek, g2int *lskip, g2int *lgrib) |
This subprogram searches a file for the next GRIB Message. More... | |
Header file for NCEPLIBS-g2c library.
Date | Programmer | Comments |
---|---|---|
2002-10-25 | Gilbert | Initial |
2009-01-14 | Vuong | Changed struct template to gtemplate |
2021-11-9 | Ed Hartnett | Moved many prototypes to new internal header grib2_int.h. |
2022-04-15 | Ed Hartnett | Added error codes related to JPEG. |
2022-08-15 | Ed Hartnett | Added compression functions for double. |
Definition in file grib2.h.
struct gribfield |
Data Fields | ||
---|---|---|
g2int * | bmap |
Integer array containing decoded bitmap, if ibmap=0 or ibap=254. Otherwise NULL. |
float * | coord_list | Array containing floating point values intended to document the vertical discretisation associated to model data on hybrid coordinate vertical levels (part of Section 4). |
g2int | discipline | Message Discipline (see Table 0.0). |
g2int | expanded |
Logical value indicating whether the data field was expanded to the grid in the case where a bit-map is present. If true, the data points in fld match the grid points and zeros were inserted at grid points where data was bit-mapped out. If false, the data values in ld were not expanded to the grid and are just a consecutive array of data points corresponding to each value of "1" in bmap. |
float * | fld | Array of ndpts unpacked data points. |
g2int | griddef |
Source of grid definition (see Table 3.0).
|
g2int | ibmap |
Bitmap indicator (see Table 6.0).
|
g2int | idrtlen | Number of elements in idrtmpl. |
g2int * | idrtmpl | Contains the data values for the Data Representation Template specified by idrtnum. |
g2int | idrtnum | Data Representation Template Number (see Table 5.0). |
g2int * | idsect |
Contains the entries in the Identification Section (Section 1).
|
g2int | idsectlen | Number of elements in idsect. |
g2int | ifldnum | Field number within GRIB message. |
g2int | igdtlen |
Number of elements in igdtmpl - i.e. number of entries in Grid Defintion Template. |
g2int * | igdtmpl | Contains the data values for the Grid Definition Template specified by igdtnum. |
g2int | igdtnum | Grid Definition Template Number (See Table 3.1). |
g2int | interp_opt |
Interpretation of list for optional points definition. (See Table 3.11). |
g2int | ipdtlen |
Number of elements in ipdtmpl - i.e. number of entries in Product Defintion Template. |
g2int * | ipdtmpl | Contains the data values for the Product Definition Template specified by ipdtnum. |
g2int | ipdtnum | Product Definition Template Number (see Table 4.0). |
g2int * | list_opt |
(Used if numoct_opt .ne. 0) This array contains the number of grid points contained in each row (or column) (part of Section 3). NULL if numoct_opt = 0. |
unsigned char * | local | Pointer to character array containing contents of Local Section 2, if included. |
g2int | locallen | Length of array local. |
g2int | ndpts | Number of data points unpacked and returned. |
g2int | ngrdpts | Number of grid points in the defined grid. |
g2int | num_coord | Number of values in array coord_list. |
g2int | num_opt |
(Used if numoct_opt .ne. 0) The number of entries in array ideflist - i.e. number of rows (or columns) for which optional grid points are defined. This value is set to zero, if numoct_opt=0. |
g2int | numoct_opt |
Number of octets needed for each additional grid points definition. Used to define number of points in each row (or column) for non-regular grids. = 0, if using regular grid. |
g2int | unpacked |
Logical value indicating whether the bitmap and data values were unpacked. If false, bmap and fld pointers are NULL. |
g2int | version | GRIB edition number (2). |
#define G2_ADD_MSG_COMPLETE -2 |
#define G2_ADD_MSG_INIT -1 |
GRIB message was not initialized - call g2_create() first.
#define G2_ADDFIELD_BAD_BITMAP -8 |
In g2_addfield() no bitmap in the GRIB message.
#define G2_ADDFIELD_BAD_DRT -7 |
In g2_addfield() unsupported Data Representationi Template.
#define G2_ADDFIELD_BAD_GDS -6 |
In g2_addfield() section 3 (GDS) not previously defined in message.
#define G2_ADDFIELD_BAD_GDT -9 |
In g2_addfield() GDT of one of 5.50 through 5.53 required when using DRT 5.51.
#define G2_ADDFIELD_BAD_PDT -5 |
In g2_addfield() could not find requested Product Definition Template.
#define G2_ADDFIELD_ERR -10 |
In g2_addfield() error packing data field.
#define G2_ADDGRID_BAD_GDT -5 |
In g2_addgrid() Could not find requested Grid Definition Template.
#define G2_BAD_SEC_COUNTS -3 |
#define G2_CREATE_GRIB_VERSION -1 |
Wrong GRIB version for g2_create(), must be 2.
#define G2_GETFLD_BAD_END 7 |
g2_getfld() didn't find "7777" at end of message.
#define G2_GETFLD_BAD_SEC1 15 |
Error in g2_getfld() unpacking section 1.
#define G2_GETFLD_BAD_SEC2 16 |
Error in g2_getfld() unpacking section 2.
#define G2_GETFLD_BAD_SEC3 10 |
Error in g2_getfld() unpacking section 3.
#define G2_GETFLD_BAD_SEC4 11 |
Error in g2_getfld() unpacking section 4.
#define G2_GETFLD_BAD_SEC5 12 |
Error in g2_getfld() unpacking section 5.
#define G2_GETFLD_BAD_SEC6 13 |
Error in g2_getfld() unpacking section 6.
#define G2_GETFLD_BAD_SEC7 14 |
Error in g2_getfld() unpacking section 7.
#define G2_GETFLD_GRIB_VERSION 2 |
Wrong GRIB version for g2_getfld(), must be 2.
#define G2_GETFLD_INVAL 3 |
g2_getfld() data field request number was not positive.
#define G2_GETFLD_INVAL_SEC 8 |
g2_getfld() encountered unrecognized section.
#define G2_GETFLD_NO_BITMAP 17 |
In g2_getfld() previous bitmap specified, yet none exists.
#define G2_GETFLD_NO_DRT 9 |
In g2_getfld(), Data Representation Template not implemented.
#define G2_GETFLD_NO_GRIB 1 |
g2_getfld() can't find beginning characters "GRIB".
#define G2_GETFLD_WRONG_END 4 |
#define G2_GETFLD_WRONG_NFLDS 6 |
In g2_getfld() message did not contain the requested number of data fields.
#define G2_GRIBEND_MSG_INIT -1 |
In g2_gribend() GRIB message was not initialized - call g2_create() first.
#define G2_INFO_BAD_END 5 |
#define G2_INFO_GRIB_VERSION 2 |
#define G2_INFO_INVAL_SEC 6 |
#define G2_INFO_NO_GRIB 1 |
#define G2_INFO_WRONG_END 4 |
#define G2_JASPER_DECODE -3 |
In dec_jpeg2000() error decoding image with jasper.
#define G2_JASPER_DECODE_COLOR -5 |
In dec_jpeg2000() decoded image had multiple color components.
#define G2_JASPER_ENCODE -3 |
In enc_jpeg2000() error encoding image with jasper.
#define G2_JASPER_INIT -2 |
In enc_jpeg2000()/dec_jpeg2000() error initializing jasper library.
#define G2_JPCUNPACK_MEM 1 |
In jpcunpack() or other unpack function: out of memory.
#define G2_JPEG2000_ENABLED 1 |
#define G2_SPECUNPACK_TYPE -3 |
In specunpack() Can't handle 64 or 128 bit floats.
#define G2_UNPACK3_BAD_GDT 5 |
In g2_unpack3(), undefined Grid Definition Template.
#define G2_UNPACK4_BAD_PDT 5 |
In g2_unpack4(), undefined Product Definition Template.
#define G2_UNPACK5_BAD_DRT 7 |
In g2_unpack5(), undefined Data Representation Template.
#define G2_UNPACK6_BAD_BITMAP 4 |
In g2_unpack6(), unrecognized pre-defined bit-map.
#define G2_UNPACK7_BAD_DRT 4 |
In g2_unpack7(), unrecognized Data Representation Template.
#define G2_UNPACK7_CORRUPT_SEC 7 |
In g2_unpack7(), corrupt section 7.
#define G2_UNPACK7_WRONG_GDT 5 |
In g2_unpack7(), need one of GDT 3.50 through 3.53 to decode DRT 5.51.
#define G2_UNPACK_BAD_SEC 2 |
#define G2_UNPACK_NO_MEM 6 |
#define G2_VERSION "1.7.0" |
typedef float g2float |
typedef uint64_t g2intu |
g2int g2_addfield | ( | unsigned char * | cgrib, |
g2int | ipdsnum, | ||
g2int * | ipdstmpl, | ||
float * | coordlist, | ||
g2int | numcoord, | ||
g2int | idrsnum, | ||
g2int * | idrstmpl, | ||
float * | fld, | ||
g2int | ngrdpts, | ||
g2int | ibmap, | ||
g2int * | bmap | ||
) |
This routine packs up Sections 4 through 7 for a given field and adds them to a GRIB2 message.
They are Product Definition Section, Data Representation Section, Bit-Map Section and Data Section, respectively.
This routine is used with routines g2_create(), g2_addlocal(), g2_addgrid(), and g2_gribend() to create a complete GRIB2 message. Function g2_create() must be called first to initialize a new GRIB2 message. Function g2_addgrid() must be called after g2_create() and before this routine to add the appropriate grid description to the GRIB2 message. A call to g2_gribend() is required to complete GRIB2 message after all fields have been added.
Date | Programmer | Comments |
---|---|---|
2002-11-05 | Gilbert | Initial |
2002-12-23 | Gilbert | Added complex spherical harmonic packing |
2003-08-27 | Gilbert | Added support for new templates using PNG and JPEG2000 algorithms/templates. |
2004-11-29 | Gilbert | JPEG2000 now can use WMO Template 5.40 PNG can use WMO Template 5.41. Added packing algorithm check. |
2005-05-10 | Gilbert | Imposed minimum size on cpack. |
2009-01-14 | Vuong | Changed structure name template to gtemplate |
cgrib | Char array that contains the GRIB2 message to which sections 4 through 7 should be added. Must be allocated large enough to store the entire GRIB2 message. |
ipdsnum | Product Definition Template Number (see Code Table 4.0). |
ipdstmpl | Contains the data values for the Product Definition Template specified by ipdsnum. |
coordlist | Array containg floating point values intended to document the vertical discretisation associated to model data on hybrid coordinate vertical levels. |
numcoord | number of values in array coordlist. |
idrsnum | Data Representation Template Number (see Code Table 5.0). |
idrstmpl | The data values for the Data Representation Template specified by idrsnum. Note that some values in this template (eg. reference values, number of bits, etc...) may be changed by the data packing algorithms. Use this to specify scaling factors and order of spatial differencing, if desired. |
fld | Array of data points to pack. |
ngrdpts | Number of data points in grid. i.e. size of fld and bmap. |
ibmap | Bitmap indicator (see Code Table 6.0)
|
bmap | Integer array containing bitmap to be added (if ibmap = 0). |
Definition at line 98 of file g2_addfield.c.
References cmplxpack(), gtemplate::ext, gtemplate::extlen, extpdstemplate(), G2_ADD_MSG_COMPLETE, G2_ADD_MSG_INIT, G2_ADDFIELD_BAD_BITMAP, G2_ADDFIELD_BAD_DRT, G2_ADDFIELD_BAD_GDS, G2_ADDFIELD_BAD_GDT, G2_ADDFIELD_BAD_PDT, G2_ADDFIELD_ERR, G2_BAD_SEC, G2_BAD_SEC_COUNTS, g2c_check_msg(), G2C_MSG_COMPLETE, G2C_NOT_GRIB, gbit(), getdim(), getdrstemplate(), getpdstemplate(), getpoly(), jpcpack(), gtemplate::map, gtemplate::maplen, mkieee(), gtemplate::needext, pngpack(), sbit(), sbits(), simpack(), and specpack().
g2int g2_addgrid | ( | unsigned char * | cgrib, |
g2int * | igds, | ||
g2int * | igdstmpl, | ||
g2int * | ideflist, | ||
g2int | idefnum | ||
) |
This routine packs up a Grid Definition Section (Section 3) and adds it to a GRIB2 message.
It is used with routines g2_create(), g2_addlocal(), g2_addfield(), and g2_gribend() to create a complete GRIB2 message. g2_create() must be called first to initialize a new GRIB2 message.
Date | Programmer | Comments |
---|---|---|
2002-11-01 | Gilbert | Initial. |
2009-01-14 | Vuong | Changed structure name template to gtemplate |
cgrib | Char array that contains the GRIB2 message to which section should be added. Must be allocated large enough to store the entire GRIB2 message. |
igds | Contains information needed for GRIB Grid Definition Section 3. Must be dimensioned >= 5.
|
igdstmpl | Contains the data values for the specified Grid Definition Template (igds[4]). Each element of this integer array contains an entry (in the order specified) of Grid Defintion Template. |
ideflist | (Used if igds[2] != 0) This array contains the number of grid points contained in each row (or column). |
idefnum | (Used if igds[2] != 0) The number of entries in array ideflist. i.e. number of rows (or columns) for which optional grid points are defined. |
Definition at line 70 of file g2_addgrid.c.
References gtemplate::ext, extgridtemplate(), gtemplate::extlen, G2_ADD_MSG_COMPLETE, G2_ADD_MSG_INIT, G2_ADDGRID_BAD_GDT, G2_BAD_SEC, G2_BAD_SEC_COUNTS, g2c_check_msg(), G2C_MSG_COMPLETE, G2C_NOT_GRIB, gbit(), getgridtemplate(), gtemplate::map, gtemplate::maplen, gtemplate::needext, sbit(), and sbits().
This routine adds a Local Use Section (Section 2) to a GRIB2 message.
It is used with routines g2_create(), g2_addgrid(), g2_addfield(), and g2_gribend() to create a complete GRIB2 message.
cgrib | Char array that contains the GRIB2 message to which section 2 should be added. Must be allocated large enough to store the entire GRIB2 message. |
csec2 | Character array containing information to be added in Section 2. |
lcsec2 | Number of bytes of character array csec2 to be added to Section 2. |
Definition at line 40 of file g2_addlocal.c.
References G2_ADD_MSG_COMPLETE, G2_ADD_MSG_INIT, G2_BAD_SEC, G2_BAD_SEC_COUNTS, g2c_check_msg(), G2C_MSG_COMPLETE, G2C_NOT_GRIB, gbit(), and sbit().
This routine initializes a new GRIB2 message and packs GRIB2 Section 0 (Indicator Section) and Section 1 (Identification Section).
This routine is used with routines g2_addlocal(), g2_addgrid(), g2_addfield(), and g2_gribend() to create a complete GRIB2 message. g2_create() must be called first to initialize a new GRIB2 message. A call to g2_gribend() is required to complete GRIB2 message after all fields have been added.
[in] | cgrib | Character array to contain the GRIB2 message. Must be allocated large enough to store the entire GRIB2 message. |
[in] | listsec0 | Contains information needed for GRIB Indicator Section 0. Must be dimensioned >= 2.
|
[in] | listsec1 | Contains information needed for GRIB Identification Section 1. Must be dimensioned >= 13.
|
This routine is intended for use with routines g2_addlocal(), g2_addgrid(), g2_addfield(), and g2_gribend() to create a complete GRIB2 message.
Definition at line 68 of file g2_create.c.
References G2_CREATE_GRIB_VERSION, LENSEC0, MAPSEC1LEN, and sbit().
void g2_free | ( | gribfield * | gfld | ) |
This routine frees up memory that was allocated for struct gribfield.
gfld | pointer to gribfield structure (defined in include file grib2.h) returned from routine g2_getfld(). |
Definition at line 24 of file g2_free.c.
References gribfield::bmap, gribfield::coord_list, gribfield::fld, gribfield::idrtmpl, gribfield::idsect, gribfield::igdtmpl, gribfield::ipdtmpl, gribfield::list_opt, and gribfield::local.
Referenced by g2_getfld().
g2int g2_getfld | ( | unsigned char * | cgrib, |
g2int | ifldnum, | ||
g2int | unpack, | ||
g2int | expand, | ||
gribfield ** | gfld | ||
) |
This subroutine returns all the metadata, template values, bit-map (if applicable), and the unpacked data for a given data field.
All of the information returned is stored in a gribfield structure, which is defined in file grib2.h. Users of this routine will need to include grib2.h in their source code that calls this routine.
Since there can be multiple data fields packed into a GRIB2 message, the calling routine indicates which field is being requested with the ifldnum argument.
Date | Programmer | Comments |
---|---|---|
2002-10-28 | Gilbert | Initial |
2013-08-08 | Vuong | Free up memory in array igds - free(igds) |
cgrib | Character pointer to the GRIB2 message. |
ifldnum | Specifies which field in the GRIB2 message to return. The first field is number 1, Fortran style. |
unpack | Boolean value indicating whether to unpack bitmap/data field.
|
expand | Boolean value indicating whether the data points should be expanded to the correspond grid, if a bit-map is present. This argument is ignored if unpack == 0 OR if the returned field does not contain a bit-map.
|
gfld | pointer to structure gribfield containing all decoded data for the data field. |
Routine g2_info() can be used to first determine how many data fields exist in a given GRIB message.
Definition at line 91 of file g2_getfld.c.
References gribfield::bmap, gribfield::coord_list, gribfield::discipline, gribfield::expanded, gribfield::fld, g2_free(), G2_GETFLD_BAD_END, G2_GETFLD_BAD_SEC1, G2_GETFLD_BAD_SEC2, G2_GETFLD_BAD_SEC3, G2_GETFLD_BAD_SEC4, G2_GETFLD_BAD_SEC5, G2_GETFLD_BAD_SEC6, G2_GETFLD_BAD_SEC7, G2_GETFLD_GRIB_VERSION, G2_GETFLD_INVAL, G2_GETFLD_INVAL_SEC, G2_GETFLD_NO_BITMAP, G2_GETFLD_NO_GRIB, G2_GETFLD_WRONG_END, G2_GETFLD_WRONG_NFLDS, G2_NO_ERROR, g2_unpack1(), g2_unpack2(), g2_unpack3(), g2_unpack4(), g2_unpack5(), g2_unpack6(), g2_unpack7(), gbit(), gribfield::griddef, gribfield::ibmap, gribfield::idrtlen, gribfield::idrtmpl, gribfield::idrtnum, gribfield::idsect, gribfield::idsectlen, gribfield::ifldnum, gribfield::igdtlen, gribfield::igdtmpl, gribfield::igdtnum, gribfield::interp_opt, gribfield::ipdtlen, gribfield::ipdtmpl, gribfield::ipdtnum, gribfield::list_opt, gribfield::local, gribfield::locallen, gribfield::ndpts, gribfield::ngrdpts, gribfield::num_coord, gribfield::num_opt, gribfield::numoct_opt, gribfield::unpacked, and gribfield::version.
g2int g2_gribend | ( | unsigned char * | cgrib | ) |
This routine finalizes a GRIB2 message after all grids and fields have been added.
It adds the End Section ("7777") to the end of the GRIB message and calculates the length and stores it in the appropriate place in Section 0. This routine is used with routines g2_create(), g2_addlocal(), g2_addgrid(), and g2_addfield() to create a complete GRIB2 message.
cgrib | Char array containing all the data sections added be previous calls to g2_create(), g2_addlocal(), g2_addgrid(), and g2_addfield(). After function is called, contains the finalized GRIB2 message. |
Definition at line 37 of file g2_gribend.c.
References G2_ADD_MSG_COMPLETE, G2_ADD_MSG_INIT, G2_BAD_SEC, G2_BAD_SEC_COUNTS, g2c_check_msg(), G2C_MSG_COMPLETE, G2C_NOT_GRIB, gbit(), and sbit().
g2int g2_info | ( | unsigned char * | cgrib, |
g2int * | listsec0, | ||
g2int * | listsec1, | ||
g2int * | numfields, | ||
g2int * | numlocal | ||
) |
This subroutine searches through a GRIB2 message and returns the number of gridded fields found in the message and the number (and maximum size) of Local Use Sections.
Also various checks are performed to see if the message is a valid GRIB2 message.
cgrib | Character pointer to the GRIB2 message. |
listsec0 | pointer to an array containing information decoded from GRIB Indicator Section 0. Must be allocated with >= 3 elements.
|
listsec1 | Pointer to an array containing information read from GRIB Identification Section 1. Must be allocated with >= 13 elements.
|
numfields | The number of gridded fields found in the GRIB message. That is, the number of occurences of Sections 4 - 7. |
numlocal | The number of Local Use Sections ( Section 2 ) found in the GRIB message. |
Definition at line 67 of file g2_info.c.
References G2_INFO_BAD_END, G2_INFO_GRIB_VERSION, G2_INFO_INVAL_SEC, G2_INFO_NO_GRIB, G2_INFO_NO_SEC1, G2_INFO_WRONG_END, and gbit().
This subroutine unpacks Section 1 - Identification Section as defined in GRIB Edition 2.
cgrib | char array containing Section 1 of the GRIB2 message. |
iofst | Bit offset for the beginning of Section 1 in cgrib. |
ids | Pointer that gets an array which contians the information read from Section 1, the Identification section. This array is allocated by this function, and must be freed by caller (using g2_free()).
|
idslen | Number of elements in ids. |
Definition at line 55 of file g2_unpack1.c.
References G2_NO_ERROR, G2_UNPACK_BAD_SEC, G2_UNPACK_NO_MEM, and gbit().
Referenced by g2_getfld().
This subroutine unpacks Section 2 (Local Use Section) as defined in GRIB Edition 2.
Date | Programmer | Comments |
---|---|---|
2002-10-31 | Gilbert | Initial |
2008-12-23 | Wesley | Initialize lencsec2 Length of Local Use data |
2010-08-05 | Vuong | If section 2 has zero length, ierr=0 |
cgrib | char array containing Section 2 of the GRIB2 message. |
iofst | Pointer that contains the bit offset for the beginning of Section 2 in cgrib. The modified version will be returned. |
lencsec2 | Length (in octets) of Local Use data. |
csec2 | Pointer to a pointer that will get an allocated array containing local use data. This memory must be freed by the caller. |
Definition at line 38 of file g2_unpack2.c.
References G2_NO_ERROR, G2_UNPACK_BAD_SEC, G2_UNPACK_NO_MEM, and gbit().
Referenced by g2_getfld().
g2int g2_unpack3 | ( | unsigned char * | cgrib, |
g2int * | iofst, | ||
g2int ** | igds, | ||
g2int ** | igdstmpl, | ||
g2int * | mapgridlen, | ||
g2int ** | ideflist, | ||
g2int * | idefnum | ||
) |
This routine unpacks Section 3 (Grid Definition Section) as defined in GRIB Edition 2.
Date | Programmer | Comments |
---|---|---|
2002-10-31 | Gilbert | Initial |
2009-01-14 | Vuong | Changed structure name template to gtemplate |
cgrib | Char array ontaining Section 3 of the GRIB2 message. |
iofst | Bit offset for the beginning of Section 3 in cgrib. |
igds | Contains information read from the appropriate GRIB Grid Definition Section 3 for the field being returned.
|
igdstmpl | Pointer to integer array containing the data values for the Grid Definition Template specified by igds[4]. |
mapgridlen | Number of elements in igdstmpl. i.e. number of entries in Grid Defintion Template specified by igds[4]. |
ideflist | (Used if igds[2] .ne. 0) Pointer to integer array containing the number of grid points contained in each row (or column). |
idefnum | (Used if igds[2] .ne. 0) The number of entries in array ideflist - i.e. number of rows (or columns) for which optional grid points are defined. |
Definition at line 57 of file g2_unpack3.c.
References gtemplate::ext, extgridtemplate(), gtemplate::extlen, G2_NO_ERROR, G2_UNPACK3_BAD_GDT, G2_UNPACK_BAD_SEC, G2_UNPACK_NO_MEM, gbit(), gbits(), getgridtemplate(), gtemplate::map, gtemplate::maplen, and gtemplate::needext.
Referenced by g2_getfld(), getdim(), and getpoly().
g2int g2_unpack4 | ( | unsigned char * | cgrib, |
g2int * | iofst, | ||
g2int * | ipdsnum, | ||
g2int ** | ipdstmpl, | ||
g2int * | mappdslen, | ||
float ** | coordlist, | ||
g2int * | numcoord | ||
) |
This subroutine unpacks Section 4 (Product Definition Section) as defined in GRIB Edition 2.
Date | Programmer | Comments |
---|---|---|
2002-10-31 | Gilbert | Initial |
2009-01-14 | Vuong | Changed structure name template to gtemplate |
cgrib | Array containing Section 4 of the GRIB2 message. |
iofst | Bit offset of the beginning of Section 4 in cgrib. Returned with updated bit offset. |
ipdsnum | Product Definition Template Number (see Table 4.0). |
ipdstmpl | Pointer that gets an integer array containing the data values for the Product Definition Template specified by ipdsnum. |
mappdslen | Number of elements in ipdstmpl - i.e. number of entries in Product Defintion Template specified by ipdsnum. |
coordlist | Pointer that gets an array containing floating point values intended to document the vertical discretisation associated to model data on hybrid coordinate vertical levels. |
numcoord | number of values in array coordlist. |
Definition at line 46 of file g2_unpack4.c.
References gtemplate::ext, gtemplate::extlen, extpdstemplate(), G2_NO_ERROR, G2_UNPACK4_BAD_PDT, G2_UNPACK_BAD_SEC, G2_UNPACK_NO_MEM, gbit(), gbits(), getpdstemplate(), gtemplate::map, gtemplate::maplen, gtemplate::needext, and rdieee().
Referenced by g2_getfld().
g2int g2_unpack5 | ( | unsigned char * | cgrib, |
g2int * | iofst, | ||
g2int * | ndpts, | ||
g2int * | idrsnum, | ||
g2int ** | idrstmpl, | ||
g2int * | mapdrslen | ||
) |
This subroutine unpacks Section 5 (Data Representation Section) as defined in GRIB Edition 2.
Date | Programmer | Comments |
---|---|---|
2002-10-31 | Gilbert | Initial |
2009-01-14 | Vuong | Changed structure name template to gtemplate |
cgrib | char array containing Section 5 of the GRIB2 message. |
iofst | Bit offset for the beginning of Section 5 in cgrib. Returned with bit offset at the end of Section 5. |
ndpts | Number of data points unpacked and returned. |
idrsnum | Data Representation Template Number (see Code Table 5.0). |
idrstmpl | Pointer to an integer array containing the data values for the specified Data Representation Template (N=idrsnum). Each element of this integer array contains an entry (in the order specified) of Data Representation Template 5.N. |
mapdrslen- | Number of elements in idrstmpl. i.e. number of entries in Data Representation Template 5.N (N=idrsnum). |
Definition at line 42 of file g2_unpack5.c.
References gtemplate::ext, extdrstemplate(), gtemplate::extlen, G2_NO_ERROR, G2_UNPACK5_BAD_DRT, G2_UNPACK_BAD_SEC, G2_UNPACK_NO_MEM, gbit(), getdrstemplate(), gtemplate::map, gtemplate::maplen, and gtemplate::needext.
Referenced by g2_getfld().
g2int g2_unpack6 | ( | unsigned char * | cgrib, |
g2int * | iofst, | ||
g2int | ngpts, | ||
g2int * | ibmap, | ||
g2int ** | bmap | ||
) |
This subroutine unpacks Section 6 (Bit-Map Section) as defined in GRIB Edition 2.
cgrib | char array containing Section 6 of the GRIB2 message. |
iofst | Bit offset of the beginning of Section 6 in cgrib. |
ngpts | Number of grid points specified in the bit-map |
ibmap | Bitmap indicator (see Code Table 6.0)
|
bmap | Pointer to an integer array containing decoded bitmap. (if ibmap=0) |
Definition at line 33 of file g2_unpack6.c.
References G2_NO_ERROR, G2_UNPACK_BAD_SEC, G2_UNPACK_NO_MEM, gbit(), and gbits().
Referenced by g2_getfld().
g2int g2_unpack7 | ( | unsigned char * | cgrib, |
g2int * | iofst, | ||
g2int | igdsnum, | ||
g2int * | igdstmpl, | ||
g2int | idrsnum, | ||
g2int * | idrstmpl, | ||
g2int | ndpts, | ||
float ** | fld | ||
) |
This subroutine unpacks Section 7 (Data Section) as defined in GRIB Edition 2.
Date | Programmer | Comments |
---|---|---|
2002-10-31 | Gilbert | Initial |
2002-12-20 | Gilbert | Added GDT info to arguments and added 5.51 processing. |
2003-08-29 | Gilbert | New templates using PNG and JPEG2000 algorithms/templates. |
2004-11-29 | Gilbert | JPEG2000 now allowed to use WMO Template 5.40 PNG allowed to use 5.41 |
2004-12-16 | Taylor | Added check on comunpack return code. |
2008-12-23 | Wesley | Initialize Number of data points unpacked |
cgrib | char array containing Section 7 of the GRIB2 message |
iofst | Bit offset of the beginning of Section 7 in cgrib. |
igdsnum | Grid Definition Template Number (see Code Table 3.0) (Only used for DRS Template 5.51) |
igdstmpl | Pointer to an integer array containing the data values for the specified Grid Definition Template (N=igdsnum). Each element of this integer array contains an entry (in the order specified) of Grid Definition Template 3.N. (Only used for DRS Template 5.51). |
idrsnum | Data Representation Template Number (see Code Table 5.0) |
idrstmpl | Pointer to an integer array containing the data values for the specified Data Representation Template (N=idrsnum). Each element of this integer array contains an entry (in the order specified) of Data Representation Template 5.N |
ndpts | Number of data points unpacked and returned. |
fld | Pointer to a float array containing the unpacked data field. |
Definition at line 55 of file g2_unpack7.c.
References comunpack(), G2_NO_ERROR, G2_UNPACK7_BAD_DRT, G2_UNPACK7_CORRUPT_SEC, G2_UNPACK7_WRONG_GDT, G2_UNPACK_BAD_SEC, G2_UNPACK_NO_MEM, gbit(), jpcunpack(), pngunpack(), rdieee(), simunpack(), and specunpack().
Referenced by g2_getfld().
int g2c_set_log_level | ( | int | new_level | ) |
Use this to set the global log level.
Set it to -1 to turn off all logging. Set it to 0 to show only errors, and to higher numbers to show more and more logging details. If logging is not enabled when building NCEPLIBS-g2c, this function will do nothing.
new_level | The new logging level. |
Definition at line 124 of file util.c.
References G2C_NO_ERROR, and LOG.
void jpcpack | ( | float * | fld, |
g2int | width, | ||
g2int | height, | ||
g2int * | idrstmpl, | ||
unsigned char * | cpack, | ||
g2int * | lcpack | ||
) |
This subroutine packs up a data field into a JPEG2000 code stream.
After the data field is scaled, and the reference value is subtracted out, it is treated as a grayscale image and passed to a JPEG2000 encoder. It also fills in GRIB2 Data Representation Template 5.40 or 5.40000 with the appropriate values.
fld | Pointer to the float or double data values to pack. |
width | The number of points in the x direction. |
height | The number of points in the y direction. |
idrstmpl | Contains the array of values for Data Representation Template Table 5.40 or 5.40000.
|
cpack | A pointer that will get the packed data field. Must be allocated before this function is called. Pass the allocated size in the lcpack parameter. |
lcpack | Pointer that gets the length of packed field in cpack. This must be set by the calling function to the size available in cpack. |
Definition at line 253 of file jpcpack.c.
References jpcpack_int().
void jpcpackd | ( | double * | fld, |
g2int | width, | ||
g2int | height, | ||
g2int * | idrstmpl, | ||
unsigned char * | cpack, | ||
g2int * | lcpack | ||
) |
This subroutine packs up a data field into a JPEG2000 code stream.
After the data field is scaled, and the reference value is subtracted out, it is treated as a grayscale image and passed to a JPEG2000 encoder. It also fills in GRIB2 Data Representation Template 5.40 or 5.40000 with the appropriate values.
fld | Pointer to the float or double data values to pack. |
width | The number of points in the x direction. |
height | The number of points in the y direction. |
idrstmpl | Contains the array of values for Data Representation Template Table 5.40 or 5.40000.
|
cpack | A pointer that will get the packed data field. Must be allocated before this function is called. Pass the allocated size in the lcpack parameter. |
lcpack | Pointer that gets the length of packed field in cpack. This must be set by the calling function to the size available in cpack. |
Definition at line 294 of file jpcpack.c.
References jpcpack_int().
Unpack JPEG2000 compressed data into an array of floats, using info from the GRIB2 Data Representation Template 5.40 or 5.40000.
cpack | The packed data. |
len | The length of the packed data. |
idrstmpl | Pointer to array of values for Data Representation Template 5.40 or 5.40000. |
ndpts | The number of data values to unpack. |
fld | A pointer that gets the unpacked data values as an array of float. |
Definition at line 108 of file jpcunpack.c.
References jpcunpack_int().
Unpack JPEG2000 compressed data into an array of doubles, using info from the GRIB2 Data Representation Template 5.40 or 5.40000.
cpack | The packed data. |
len | The length of the packed data. |
idrstmpl | Pointer to array of values for Data Representation Template 5.40 or 5.40000. |
ndpts | The number of data values to unpack. |
fld | A pointer that gets the unpacked data values as an array of double. |
Definition at line 135 of file jpcunpack.c.
References jpcunpack_int().
void pngpack | ( | float * | fld, |
g2int | width, | ||
g2int | height, | ||
g2int * | idrstmpl, | ||
unsigned char * | cpack, | ||
g2int * | lcpack | ||
) |
This subroutine packs up a float data field into PNG image format.
After the data field is scaled, and the reference value is subtracted out, it is treated as a grayscale image and passed to a PNG encoder. It also fills in GRIB2 Data Representation Template 5.41 or 5.40010 with the appropriate values.
fld | Pointer to array of float that contains the data values to pack. |
width | Number of points in the x direction. |
height | Number of points in the y direction. |
idrstmpl | Contains the array of values for Data Representation Template 5.41 or 5.40010.
|
cpack | The packed data field. |
lcpack | length of packed field cpack. |
Definition at line 224 of file pngpack.c.
References pngpack_int().
void pngpackd | ( | double * | fld, |
g2int | width, | ||
g2int | height, | ||
g2int * | idrstmpl, | ||
unsigned char * | cpack, | ||
g2int * | lcpack | ||
) |
This subroutine packs up a double data field into PNG image format.
After the data field is scaled, and the reference value is subtracted out, it is treated as a grayscale image and passed to a PNG encoder. It also fills in GRIB2 Data Representation Template 5.41 or 5.40010 with the appropriate values.
fld | Pointer to array of double that contains the data values to pack. |
width | Number of points in the x direction. |
height | Number of points in the y direction. |
idrstmpl | Contains the array of values for Data Representation Template 5.41 or 5.40010.
|
cpack | The packed data field. |
lcpack | length of packed field cpack. |
Definition at line 259 of file pngpack.c.
References pngpack_int().
This subroutine unpacks a data field that was packed into a PNG image format using info from the GRIB2 Data Representation Template 5.41 or 5.40010.
cpack | The packed data field (character*1 array). |
len | length of packed field cpack(). |
idrstmpl | Pointer to array of values for Data Representation Template 5.41 or 5.40010. |
ndpts | The number of data values to unpack. |
fld | Contains the unpacked data values. |
Definition at line 105 of file pngunpack.c.
References pngunpack_int().
This subroutine unpacks a data field that was packed into a PNG image format using info from the GRIB2 Data Representation Template 5.41 or 5.40010.
cpack | The packed data field (character*1 array). |
len | length of packed field cpack(). |
idrstmpl | Pointer to array of values for Data Representation Template 5.41 or 5.40010. |
ndpts | The number of data values to unpack. |
fld | Contains the unpacked data values. |
Definition at line 128 of file pngunpack.c.
References pngunpack_int().
This subprogram searches a file for the next GRIB Message.
The search is done starting at byte offset iseek of the file referenced by lugb for mseek bytes at a time. If found, the starting position and length of the message are returned in lskip and lgrib, respectively. The search is terminated when an EOF or I/O error is encountered.
Date | Programmer | Comments |
---|---|---|
2002-10-28 | GILBERT | Modified from Iredell's skgb subroutine |
2009-01-16 | VUONG | Changed lskip to 4 instead of sizof(g2int) |
lugb | FILE pointer for the file to search. File must be opened before this routine is called. |
iseek | number of bytes in the file to skip before search. |
mseek | number of bytes to search at a time (must be at least 16). |
lskip | number of bytes to skip from the beggining of the file to where the GRIB message starts. |
lgrib | number of bytes in message (set to 0, if no message found). |
Definition at line 39 of file seekgb.c.
References BITS_PER_BYTE, and gbit().