!
! This file contains a module, which is used to pass around information
! from the Vtable from one program component to another
!
module Table
  implicit none

! We have parameterized the maximum number of variables we expect to want to 
! read:
  integer, parameter :: maxlines=100

! Each variable has a name.  The names are stored in array NAMVAR.
! Initialize the NAMVAR field to blanks:
  character (LEN=9) , dimension(maxlines) :: namvar = ' '

! Array DUNITS holds the unit strings for the fields.
  character (LEN=25), dimension(maxlines) :: Dunits = ' '

! Array DDESC holds the description strings for the fields.
  character (LEN=46), dimension(maxlines) :: Ddesc =  ' '

! Most of the fields are output, but some are not.  The names of the
! fields we want to output are stored in NAMEOUT.  Initialize the 
! NAMEOUT field to blanks:
  character (LEN=9) , dimension(maxlines) :: nameout = ' '
  character (LEN=25), dimension(maxlines) :: unitout = ' '
  character (LEN=46), dimension(maxlines) :: descout = ' '

! MAXVAR is the count of variables we have read.  It is initialized to ZERO.
  integer :: maxvar = 0

! MAXOUT is the count of the variables we want to output.
! Initialize it to zero.
  integer :: maxout = 0

! Array GCODE holds the GRIB1 param numbers of the fields we want to access:
  integer, dimension(maxlines) :: gcode
! Array LCODE holds the GRIB1 level types of the params we want to access:
  integer, dimension(maxlines) :: lcode

! Array G2_GCODE holds the GRIB2 param numbers of the fields we want to access
! and the GRIB2 level types of the params we want to access:
  integer, dimension(5,maxlines) :: g2code

! Array LEVEL1 holds the Level-1 values of the fields we want:
! If the Vtable has a '*' for the Level-1 value, LEVEL1 has 
! the value -99.
  integer, dimension(maxlines) :: level1

! Array LEVEL2 holds the Level-2 values of the fields we want.
! If LEVEL2 is not needed for a particular field, it is set to 
! -99.
  integer, dimension(maxlines) :: level2

! Array IPRTY holds the priority values of the fields:
! Priorities are used with surface fields, when we have 
! encountered the situation where a field may be stored in two different
! ways in a file.  Ultimately, the field with the lower priority number
! (i.e., higher priority) is what is output.
  integer, dimension(maxlines) :: iprty

  integer :: blankcode = -99
  integer :: splatcode = -88

end module Table