NCEPLIBS-g2  3.4.8
getfield.F90 File Reference

Contains subroutines obtain grid information and the unpacked data (section 3 - 6) for a field from a GRIB2 file. More...

Go to the source code of this file.

Functions/Subroutines

subroutine getfield (cgrib, lcgrib, ifldnum, igds, igdstmpl, igdslen, ideflist, idefnum, ipdsnum, ipdstmpl, ipdslen, coordlist, numcoord, ndpts, idrsnum, idrstmpl, idrslen, ibmap, bmap, fld, ierr)
 This subroutine returns the Grid Definition, Product Definition, Bit-map (if applicable), and the unpacked data for a given data field. More...
 
subroutine unpack3 (cgrib, lcgrib, iofst, igds, igdstmpl, mapgridlen, ideflist, idefnum, ierr)
 This subroutine unpacks Section 3 (Grid Definition Section) starting at octet 6 of that Section. More...
 
subroutine unpack4 (cgrib, lcgrib, iofst, ipdsnum, ipdstmpl, mappdslen, coordlist, numcoord, ierr)
 This subroutine unpacks Section 4 (Product Definition Section) starting at octet 6 of that Section. More...
 
subroutine unpack5 (cgrib, lcgrib, iofst, ndpts, idrsnum, idrstmpl, mapdrslen, ierr)
 This subroutine unpacks Section 5 (Data Representation Section) starting at octet 6 of that Section. More...
 
subroutine unpack6 (cgrib, lcgrib, iofst, ngpts, ibmap, bmap, ierr)
 This subroutine unpacks Section 6 (Bit-Map Section) starting at octet 6 of that Section. More...
 

Detailed Description

Contains subroutines obtain grid information and the unpacked data (section 3 - 6) for a field from a GRIB2 file.

Author
Stephen Gilbert
Date
2000-05-26

Definition in file getfield.F90.

Function/Subroutine Documentation

◆ getfield()

subroutine getfield ( character(len = 1), dimension(lcgrib), intent(in)  cgrib,
integer, intent(in)  lcgrib,
integer, intent(in)  ifldnum,
integer, dimension(*), intent(out)  igds,
integer, dimension(*), intent(out)  igdstmpl,
integer, intent(out)  igdslen,
integer, dimension(*), intent(out)  ideflist,
integer, intent(out)  idefnum,
integer, intent(out)  ipdsnum,
integer, dimension(*), intent(out)  ipdstmpl,
integer, intent(out)  ipdslen,
real, dimension(*), intent(out)  coordlist,
integer, intent(out)  numcoord,
integer, intent(out)  ndpts,
integer, intent(out)  idrsnum,
integer, dimension(*), intent(out)  idrstmpl,
integer, intent(out)  idrslen,
integer, intent(out)  ibmap,
logical*1, dimension(*), intent(out)  bmap,
real, dimension(*), intent(out)  fld,
integer, intent(out)  ierr 
)

This subroutine returns the Grid Definition, Product Definition, Bit-map (if applicable), and the unpacked data for a given data field.

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.

Parameters
[in]cgribCharacter array that contains the GRIB2 message.
[in]lcgribLength (in bytes) of GRIB message array cgrib.
[in]ifldnumSpecifies which field in the GRIB2 message to return.
[out]igdsContains information read from the appropriate GRIB Grid Definition Section 3 for the field being returned. Must be dimensioned >= 5.
  • igds(1) Source of grid definition (see Code Table 3.0).
  • igds(2) Number of grid points in the defined grid.
  • igds(3) 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.
  • igds(4) Interpretation of list for optional points definition (Code Table 3.11).
  • igds(5) Grid Definition Template Number (Code Table 3.1).
[out]igdstmplContains the data values for the specified Grid Definition Template (NN=igds(5)). Each element of this integer array contains an entry (in the order specified) of Grid Defintion Template 3.NN. A safe dimension for this array can be obtained in advance from maxvals(2), which is returned from subroutine gribinfo().
[out]igdslenNumber of elements in igdstmpl. i.e. number of entries in Grid Defintion Template 3.NN (NN=igds(5)).
[out]ideflist(Used if igds(3) .ne. 0) This array contains the number of grid points contained in each row (or column). (part of Section 3) A safe dimension for this array can be obtained in advance from maxvals(3), which is returned from subroutine gribinfo().
[out]idefnum(Used if igds(3) .ne. 0) The number of entries in array ideflist - i.e. number of rows (or columns) for which optional grid points are defined.
[out]ipdsnumProduct Definition Template Number (see Code Table 4.0).
[out]ipdstmplContains the data values for the specified Product Definition Template (N=ipdsnum). Each element of this integer array contains an entry (in the order specified) of Product Defintion Template 4.N. A safe dimension for this array can be obtained in advance from maxvals(4), which is returned from subroutine gribinfo().
[out]ipdslenNumber of elements in ipdstmpl - i.e. number of entries in Product Defintion Template 4.N (N=ipdsnum).
[out]coordlistArray containg floating point values intended to document the vertical discretisation associated to model data on hybrid coordinate vertical levels (part of Section 4). The dimension of this array can be obtained in advance from maxvals(5), which is returned from subroutine gribinfo().
[out]numcoordnumber of values in array coordlist.
[out]ndptsNumber of data points unpacked and returned.
[out]idrsnumData Representation Template Number (see Code Table 5.0).
[out]idrstmplContains 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 Product Defintion Template 5.N A safe dimension for this array can be obtained in advance from maxvals(6), which is returned from subroutine gribinfo().
[out]idrslenNumber of elements in idrstmpl. i.e. number of entries in Data Representation Template specified by idrsnum.
[out]ibmapBitmap indicator (see Code Table 6.0).
  • 0 bitmap applies and is included in Section 6.
  • 1-253 Predefined bitmap applies.
  • 254 Previously defined bitmap applies to this field.
  • 255 Bit map does not apply to this product.
[out]bmapLogical*1 array containing decoded bitmap (if ibmap=0). The dimension of this array can be obtained in advance from maxvals(7), which is returned from subroutine gribinfo().
[out]fldArray of ndpts unpacked data points. A safe dimension for this array can be obtained in advance from maxvals(7), which is returned from subroutine gribinfo().
[out]ierrError return code.
  • 0 no error.
  • 1 Beginning characters "GRIB" not found.
  • 2 GRIB message is not Edition 2.
  • 3 The data field request number was not positive.
  • 4 End string "7777" found, but not where expected.
  • 6 GRIB message did not contain the requested number of data fields.
  • 7 End string "7777" not found at end of message.
  • 9 Data Representation Template 5.NN not yet implemented.
  • 10 Error unpacking Section 3.
  • 11 Error unpacking Section 4.
  • 12 Error unpacking Section 5.
  • 13 Error unpacking Section 6.
  • 14 Error unpacking Section 7.
Note
Note that subroutine gribinfo can be used to first determine how many data fields exist in a given GRIB message.
Author
Stephen Gilbert
Date
2000-05-26

Definition at line 106 of file getfield.F90.

References comunpack(), g2_gbytec(), jpcunpack(), pngunpack(), rdieee(), simunpack(), unpack3(), unpack4(), unpack5(), and unpack6().

◆ unpack3()

subroutine unpack3 ( character(len = 1), dimension(lcgrib), intent(in)  cgrib,
integer, intent(in)  lcgrib,
integer, intent(inout)  iofst,
integer, dimension(*), intent(out)  igds,
integer, dimension(*), intent(out)  igdstmpl,
integer  mapgridlen,
integer, dimension(*), intent(out)  ideflist,
integer, intent(out)  idefnum,
integer, intent(out)  ierr 
)

This subroutine unpacks Section 3 (Grid Definition Section) starting at octet 6 of that Section.

Parameters
[in]cgribCharacter array that contains the GRIB2 message.
[in]lcgribLength (in bytes) of GRIB message array cgrib.
[in,out]iofstBit offset of the beginning (in) or the end (out) of Section 3.
[out]igdsContains information read from the appropriate GRIB Grid Definition Section 3 for the field being returned. Must be dimensioned >= 5.
  • igds(1) Source of grid definition (see Code Table - 3.0)
    • igds(2) Number of grid points in the defined grid.
    • igds(3) 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.
    • igds(4) Interpretation of list for optional points definition. (Code Table 3.11).
    • igds(5) Grid Definition Template Number (Code Table 3.1).
[out]igdstmplContains the data values for the specified Grid Definition Template (NN=igds(5)). Each element of this integer array contains an entry (in the order specified) of Grid Defintion Template 3.NN.
[out]mapgridlenNumber of elements in igdstmpl - i.e. number of entries in Grid Defintion Template 3.NN (NN=igds(5)).
[out]ideflist(Used if igds(3) .ne. 0). This array contains the number of grid points contained in each row (or column) (part of Section 3).
[out]idefnum(Used if igds(3) .ne. 0). The number of entries in array ideflist - i.e. number of rows (or columns) for which optional grid points are defined.
[out]ierrError return code.
  • 0 no error.
  • 5 "GRIB" message contains an undefined Grid Definition Template.
Author
Stephen Gilbert
Date
2000-05-26

Definition at line 374 of file getfield.F90.

References gridtemplates::extgridtemplate(), g2_gbytec(), g2_gbytesc(), and gridtemplates::getgridtemplate().

Referenced by getfield(), and gettemplates().

◆ unpack4()

subroutine unpack4 ( character(len = 1), dimension(lcgrib), intent(in)  cgrib,
integer, intent(in)  lcgrib,
integer, intent(inout)  iofst,
integer, intent(out)  ipdsnum,
integer, dimension(*), intent(out)  ipdstmpl,
integer  mappdslen,
real, dimension(*), intent(out)  coordlist,
integer, intent(out)  numcoord,
integer, intent(out)  ierr 
)

This subroutine unpacks Section 4 (Product Definition Section) starting at octet 6 of that Section.

Parameters
[in]cgribCharacter array that contains the GRIB2 message.
[in]lcgribLength (in bytes) of GRIB message array cgrib.
[in,out]iofstBit offset of the beginning (in) or the end (out) of Section 4.
[out]ipdsnumProduct Definition Template Number (see Code Table 4.0).
[out]ipdstmplContains the data values for the specified Product Definition Template (N=ipdsnum). Each element of this integer array contains an entry (in the order specified) of Product Defintion Template 4.N.
[out]mappdslenNumber of elements in ipdstmpl. i.e. number of entries in Product Defintion Template 4.N (N=ipdsnum).
[out]coordlist-Array containg floating point values intended to document the vertical discretisation associated to model data on hybrid coordinate vertical levels (part of Section 4).
[out]numcoordnumber of values in array coordlist.
[out]ierrError return code.
  • 0 no error.
  • 5 GRIB message contains an undefined Product Definition Template.
Author
Stephen Gilbert
Date
2000-05-26

Definition at line 504 of file getfield.F90.

References pdstemplates::extpdstemplate(), g2_gbytec(), g2_gbytesc(), pdstemplates::getpdstemplate(), and rdieee().

Referenced by getfield(), and gettemplates().

◆ unpack5()

subroutine unpack5 ( character(len = 1), dimension(lcgrib), intent(in)  cgrib,
integer, intent(in)  lcgrib,
integer, intent(inout)  iofst,
integer, intent(out)  ndpts,
integer, intent(out)  idrsnum,
integer, dimension(*), intent(out)  idrstmpl,
integer  mapdrslen,
integer, intent(out)  ierr 
)

This subroutine unpacks Section 5 (Data Representation Section) starting at octet 6 of that Section.

Parameters
[in]cgribCharacter array that contains the GRIB2 message.
[in]lcgribLength (in bytes) of GRIB message array cgrib.
[in,out]iofstBit offset of the beginning (in) or the end(out) of Section 5.
[out]ndptsNumber of data points unpacked and returned.
[out]idrsnumData Representation Template Number (see Code Table 5.0)
[out]idrstmplContains 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.
[out]mapdrslenNumber of elements in idrstmpl. i.e. number of entries in Data Representation Template 5.N (N = idrsnum).
[out]ierrError return code.
  • 0 no error.
  • 7 GRIB message contains an undefined Data Representation Template.
Author
Stephen Gilbert
Date
2000-05-26

Definition at line 613 of file getfield.F90.

References drstemplates::extdrstemplate(), g2_gbytec(), and drstemplates::getdrstemplate().

Referenced by getfield().

◆ unpack6()

subroutine unpack6 ( character(len = 1), dimension(lcgrib), intent(in)  cgrib,
integer, intent(in)  lcgrib,
integer, intent(inout)  iofst,
integer, intent(in)  ngpts,
integer, intent(out)  ibmap,
logical*1, dimension(ngpts), intent(out)  bmap,
integer, intent(out)  ierr 
)

This subroutine unpacks Section 6 (Bit-Map Section) starting at octet 6 of that Section.

Parameters
[in]cgribCharacter array that contains the GRIB2 message.
[in]lcgribLength (in bytes) of GRIB message array cgrib.
[in,out]iofstBit offset of the beginning (in) or the end (out) of Section 6.
[in]ngptsNumber of grid points specified in the bit-map.
[out]ibmapBitmap indicator (see Code Table 6.0).
  • 0 bitmap applies and is included in Section 6.
  • 1-253 Predefined bitmap applies.
  • 254 Previously defined bitmap applies to this field.
  • 255 Bit map does not apply to this product.
[out]bmapLogical*1 array containing decoded bitmap (if ibmap = 0).
[out]ierrError return code.
  • 0 no error.
  • 4 Unrecognized pre-defined bit-map.
Author
Stephen Gilbert
Date
2000-05-26

Definition at line 709 of file getfield.F90.

References g2_gbytec(), and g2_gbytesc().

Referenced by getfield().