module params_ecmwf
!$$$  SUBPROGRAM DOCUMENTATION BLOCK
!                .      .    .                                       .
! MODULE:    params_ecmwf
!   PRGMMR: Gordon         ORG: W/NP11    DATE: 2006-09-07
!
! ABSTRACT: This Fortran Module contains info on all the available 
!           ECMWF GRIB Parameters.
!
! PROGRAM HISTORY LOG:
! 2006-09-07  Gordon   -  Modified from Steve Gilbert's params.f for NCEP GRIB data
! 2007-04-20  Vuong    -  Add more parameters
! 2007-10-11  Vuong    -  Add more parameters
! 2011-11-16  Vuong    -  Add parameters MAX and MIN temperature
! 2013-07-24  Vuong    -  Removed sape in abbreviation
!
! USAGE:    use params
!
! ATTRIBUTES:
!   LANGUAGE: Fortran 90
!   MACHINE:  IBM SP
!
!$$$

      integer,parameter :: MAXPARAM=179

      type gribparam
          integer :: g1tblver
          integer :: grib1val
          integer :: grib2dsc
          integer :: grib2cat
          integer :: grib2num
          character(len=8) :: abbrev
      end type gribparam

      type(gribparam),dimension(MAXPARAM) :: paramlist

      data paramlist(1) /gribparam(128,1,255,255,255,'STRF')/
      data paramlist(2) /gribparam(128,002,255,255,255,'VPOT')/
      data paramlist(3) /gribparam(128,003,255,255,255,'THTA')/
      data paramlist(4) /gribparam(128,004,255,255,255,'THTE')/
      data paramlist(5) /gribparam(128,005,255,255,255,'THTS')/
      data paramlist(6) /gribparam(128,011,255,255,255,'UDVW')/
      data paramlist(7) /gribparam(128,012,255,255,255,'VDVW')/
      data paramlist(8) /gribparam(128,013,255,255,255,'URTW')/
      data paramlist(9) /gribparam(128,014,255,255,255,'VRTW')/
      data paramlist(10) /gribparam(128,021,255,255,255,'UCTP')/
      data paramlist(11) /gribparam(128,022,255,255,255,'UCLN')/
      data paramlist(12) /gribparam(128,023,255,255,255,'UCDV')/
      data paramlist(13) /gribparam(128,026,255,255,255,'CLAK')/
      data paramlist(14) /gribparam(128,027,255,255,255,'CVEGL')/
      data paramlist(15) /gribparam(128,028,255,255,255,'CVEGH')/
      data paramlist(16) /gribparam(128,029,255,255,255,'TVEGL')/
      data paramlist(17) /gribparam(128,030,255,255,255,'TVEGH')/
      data paramlist(18) /gribparam(128,031,255,255,255,'CSICE')/
      data paramlist(19) /gribparam(128,032,255,255,255,'ASNOW')/
      data paramlist(20) /gribparam(128,033,255,255,255,'RSNOW')/
      data paramlist(21) /gribparam(128,034,255,255,255,'SSTK')/
      data paramlist(22) /gribparam(128,035,255,255,255,'ISTL1')/
      data paramlist(23) /gribparam(128,036,255,255,255,'ISTL2')/
      data paramlist(24) /gribparam(128,037,255,255,255,'ISTL3')/
      data paramlist(25) /gribparam(128,038,255,255,255,'ISTL4')/
      data paramlist(26) /gribparam(128,039,255,255,255,'SWVL1')/
      data paramlist(27) /gribparam(128,040,255,255,255,'SWVL2')/
      data paramlist(28) /gribparam(128,041,255,255,255,'SWVL3')/
      data paramlist(29) /gribparam(128,042,255,255,255,'SWVL4')/
      data paramlist(30) /gribparam(128,043,255,255,255,'SOILT')/
      data paramlist(31) /gribparam(128,044,255,255,255,'ESNOW')/
      data paramlist(32) /gribparam(128,045,255,255,255,'SMLT')/
      data paramlist(33) /gribparam(128,046,255,255,255,'SDUR')/
      data paramlist(34) /gribparam(128,047,255,255,255,'DSRP')/
      data paramlist(35) /gribparam(128,048,255,255,255,'MAGSS')/
      data paramlist(36) /gribparam(128,049,255,255,255,'GUST')/
      data paramlist(37) /gribparam(128,050,255,255,255,'LSPF')/
      data paramlist(38) /gribparam(128,051,255,255,255,'TMXK24')/
      data paramlist(39) /gribparam(128,052,255,255,255,'TMNK24')/
      data paramlist(40) /gribparam(128,053,255,255,255,'MONT')/
      data paramlist(41) /gribparam(128,054,255,255,255,'PRES')/
      data paramlist(42) /gribparam(128,060,255,255,255,'PVOR')/
      data paramlist(43) /gribparam(128,127,255,255,255,'ATIDE')/
      data paramlist(44) /gribparam(128,128,255,255,255,'BVAL')/
      data paramlist(45) /gribparam(128,129,255,255,255,'HGHT')/
      data paramlist(46) /gribparam(128,130,0,0,0,'TMPK')/
      data paramlist(47) /gribparam(128,131,0,2,2,'UWND')/
      data paramlist(48) /gribparam(128,132,0,2,3,'VWND')/
      data paramlist(49) /gribparam(128,133,255,255,255,'SPCH')/
      data paramlist(50) /gribparam(128,134,255,255,255,'PRES')/
      data paramlist(51) /gribparam(128,135,255,255,255,'OMEG')/
      data paramlist(52) /gribparam(128,136,255,255,255,'TCWTR')/
      data paramlist(53) /gribparam(128,137,255,255,255,'TCWV')/
      data paramlist(54) /gribparam(128,138,255,255,255,'VORT')/
      data paramlist(55) /gribparam(128,139,255,255,255,'STL1')/
      data paramlist(56) /gribparam(128,140,255,255,255,'SWL1')/
      data paramlist(57) /gribparam(128,141,255,255,255,'SNOWD')/
      data paramlist(58) /gribparam(128,142,255,255,255,'S--M')/
      data paramlist(59) /gribparam(128,143,255,255,255,'C--M')/
      data paramlist(60) /gribparam(128,144,255,255,255,'SNOW')/
      data paramlist(61) /gribparam(128,145,255,255,255,'BLDS')/
      data paramlist(62) /gribparam(128,146,255,255,255,'SSHF')/
      data paramlist(63) /gribparam(128,147,255,255,255,'SLHF')/
      data paramlist(64) /gribparam(128,148,255,255,255,'CHNK')/
      data paramlist(65) /gribparam(128,149,255,255,255,'SNRAD')/
      data paramlist(66) /gribparam(128,150,255,255,255,'TNRAD')/
      data paramlist(67) /gribparam(128,151,0,3,1,'PMSL')/
      data paramlist(68) /gribparam(128,152,255,255,255,'LNSP')/
      data paramlist(69) /gribparam(128,153,255,255,255,'SWHR')/
      data paramlist(70) /gribparam(128,154,255,255,255,'LWHR')/
      data paramlist(71) /gribparam(128,155,255,255,255,'DIVG')/
      data paramlist(72) /gribparam(128,156,0,3,5,'HGHT')/
      data paramlist(73) /gribparam(128,157,0,1,1,'RELH')/
      data paramlist(74) /gribparam(128,158,255,255,255,'TSPRES')/
      data paramlist(75) /gribparam(128,159,255,255,255,'BLHGHT')/
      data paramlist(76) /gribparam(128,160,255,255,255,'SDOR')/
      data paramlist(77) /gribparam(128,161,255,255,255,'ISOR')/
      data paramlist(78) /gribparam(128,162,255,255,255,'ANOR')/
      data paramlist(79) /gribparam(128,163,255,255,255,'SLOR')/
      data paramlist(80) /gribparam(128,164,0,6,1,'TCLD')/
      data paramlist(81) /gribparam(128,165,0,2,2,'UWND')/
      data paramlist(82) /gribparam(128,166,0,2,3,'VWND')/
      data paramlist(83) /gribparam(128,167,0,0,0,'TMPK')/
      data paramlist(84) /gribparam(128,168,0,0,6,'DWPK')/
      data paramlist(85) /gribparam(128,169,255,255,255,'SSRD')/
      data paramlist(86) /gribparam(128,170,255,255,255,'STL2')/
      data paramlist(87) /gribparam(128,171,255,255,255,'SWL2')/
      data paramlist(88) /gribparam(128,172,255,255,255,'LAND')/
      data paramlist(89) /gribparam(128,173,255,255,255,'SROUGH')/
      data paramlist(90) /gribparam(128,174,255,255,255,'ALBD')/
      data paramlist(91) /gribparam(128,175,255,255,255,'STRD')/
      data paramlist(92) /gribparam(128,176,255,255,255,'SSRAD')/
      data paramlist(93) /gribparam(128,177,255,255,255,'STRAD')/
      data paramlist(94) /gribparam(128,178,255,255,255,'TSRAD')/
      data paramlist(95) /gribparam(128,179,255,255,255,'TTRAD')/
      data paramlist(96) /gribparam(128,180,255,255,255,'EWSS')/
      data paramlist(97) /gribparam(128,181,255,255,255,'NSSS')/
      data paramlist(98) /gribparam(128,182,255,255,255,'EVAP')/
      data paramlist(99) /gribparam(128,183,255,255,255,'STL3')/
      data paramlist(100) /gribparam(128,184,255,255,255,'SWL3')/
      data paramlist(101) /gribparam(128,185,255,255,255,'CCLD')/
      data paramlist(102) /gribparam(128,186,255,255,255,'LCLD')/
      data paramlist(103) /gribparam(128,187,255,255,255,'MCLD')/
      data paramlist(104) /gribparam(128,188,255,255,255,'HCLD')/
      data paramlist(105) /gribparam(128,189,255,255,255,'SUND')/
      data paramlist(106) /gribparam(128,190,255,255,255,'EWOV')/
      data paramlist(107) /gribparam(128,191,255,255,255,'NSOV')/
      data paramlist(108) /gribparam(128,192,255,255,255,'NWOV')/
      data paramlist(109) /gribparam(128,193,255,255,255,'NEOV')/
      data paramlist(110) /gribparam(128,194,255,255,255,'BTMP')/
      data paramlist(111) /gribparam(128,195,255,255,255,'LGWS')/
      data paramlist(112) /gribparam(128,196,255,255,255,'MGWS')/
      data paramlist(113) /gribparam(128,197,255,255,255,'GWDS')/
      data paramlist(114) /gribparam(128,198,255,255,255,'SKRC')/
      data paramlist(115) /gribparam(128,199,255,255,255,'VEGE')/
      data paramlist(116) /gribparam(128,200,255,255,255,'VSGO')/
      data paramlist(117) /gribparam(128,201,0,0,4,'TMXK')/
      data paramlist(118) /gribparam(128,202,0,0,5,'TMNK')/
      data paramlist(119) /gribparam(128,203,255,255,255,'OZMR')/
      data paramlist(120) /gribparam(128,204,255,255,255,'PRAW')/
      data paramlist(121) /gribparam(128,205,255,255,255,'RUNOFF')/
      data paramlist(122) /gribparam(128,206,255,255,255,'TCOZ')/
      data paramlist(123) /gribparam(128,207,255,255,255,'SPED')/
      data paramlist(124) /gribparam(128,208,255,255,255,'TSRC')/
      data paramlist(125) /gribparam(128,209,255,255,255,'TTRC')/
      data paramlist(126) /gribparam(128,210,255,255,255,'SSRC')/
      data paramlist(127) /gribparam(128,211,255,255,255,'STRC')/
      data paramlist(128) /gribparam(128,212,255,255,255,'SINSOL')/
      data paramlist(129) /gribparam(128,214,255,255,255,'DHRAD')/
      data paramlist(130) /gribparam(128,215,255,255,255,'DHVD')/
      data paramlist(131) /gribparam(128,216,255,255,255,'DHCC')/
      data paramlist(132) /gribparam(128,217,255,255,255,'DHLC')/
      data paramlist(133) /gribparam(128,218,255,255,255,'VDZW')/
      data paramlist(134) /gribparam(128,219,255,255,255,'VDMW')/
      data paramlist(135) /gribparam(128,220,255,255,255,'EWGD')/
      data paramlist(136) /gribparam(128,221,255,255,255,'NSGD')/
      data paramlist(137) /gribparam(128,222,255,255,255,'CTZW')/
      data paramlist(138) /gribparam(128,223,255,255,255,'CTMW')/
      data paramlist(139) /gribparam(128,224,255,255,255,'VDHUM')/
      data paramlist(140) /gribparam(128,225,255,255,255,'HTCC')/
      data paramlist(141) /gribparam(128,226,255,255,255,'HTLC')/
      data paramlist(142) /gribparam(128,227,255,255,255,'CRNH')/
      data paramlist(143) /gribparam(128,228,0,1,8,'APCP')/
      data paramlist(144) /gribparam(128,229,255,255,255,'IEWS')/
      data paramlist(145) /gribparam(128,230,255,255,255,'INSS')/
      data paramlist(146) /gribparam(128,231,255,255,255,'ISHF')/
      data paramlist(147) /gribparam(128,232,255,255,255,'MFLUX')/
      data paramlist(148) /gribparam(128,233,255,255,255,'ASHUM')/
      data paramlist(149) /gribparam(128,234,255,255,255,'LSRH')/
      data paramlist(150) /gribparam(128,235,255,255,255,'SKTMP')/
      data paramlist(151) /gribparam(128,236,255,255,255,'STL4')/
      data paramlist(152) /gribparam(128,237,255,255,255,'SWL4')/
      data paramlist(153) /gribparam(128,238,255,255,255,'TSNOW')/
      data paramlist(154) /gribparam(128,239,255,255,255,'CSNOWF')/
      data paramlist(155) /gribparam(128,240,255,255,255,'LSNOWF')/
      data paramlist(156) /gribparam(128,241,255,255,255,'ACLD')/
      data paramlist(157) /gribparam(128,242,255,255,255,'ALWTND')/
      data paramlist(158) /gribparam(128,243,255,255,255,'FALBD')/
      data paramlist(159) /gribparam(128,244,255,255,255,'FSROUGH')/
      data paramlist(160) /gribparam(128,245,255,255,255,'FLSR')/
      data paramlist(161) /gribparam(128,246,255,255,255,'CLWC')/
      data paramlist(162) /gribparam(128,247,255,255,255,'CIWC')/
      data paramlist(163) /gribparam(128,248,255,255,255,'CLOUD')/
      data paramlist(164) /gribparam(128,249,255,255,255,'AIWTND')/
      data paramlist(165) /gribparam(128,250,255,255,255,'ICEAGE')/
      data paramlist(166) /gribparam(128,251,255,255,255,'ATTE')/
      data paramlist(167) /gribparam(128,252,255,255,255,'ATHE')/
      data paramlist(168) /gribparam(128,253,255,255,255,'ATZE')/
      data paramlist(169) /gribparam(128,254,255,255,255,'ATMW')/
      data paramlist(170) /gribparam(128,255,255,255,255,'MISS')/
! Added 4/20/2007 - For missing GRIB1 to GRIB2 conversions
      data paramlist(171) /gribparam(1,33,0,2,2,'UGRD')/
      data paramlist(172) /gribparam(1,34,0,2,3,'VGRD')/
      data paramlist(173) /gribparam(1,2,0,3,1,'PRMSL')/
      data paramlist(174) /gribparam(1,7,0,3,5,'HGT')/
! Added 10/11/2007- Add more parameters
      data paramlist(175) /gribparam(1,11,0,0,0,'TMP')/
      data paramlist(176) /gribparam(1,52,0,1,1,'RH')/
      data paramlist(177) /gribparam(1,41,0,2,10,'ABSV')/
! Added 11/16/2011- Add more parameters
      data paramlist(178) /gribparam(128,121,0,0,4,'TMXK')/
      data paramlist(179) /gribparam(128,122,0,0,5,'TMNK')/

      contains


         subroutine param_ecmwf_g1_to_g2(g1val,g1ver,g2disc,g2cat,g2num)
!$$$  SUBPROGRAM DOCUMENTATION BLOCK
!                .      .    .                                       .
! SUBPROGRAM:    param_ecmwf_g1_to_g2 
!   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2001-06-05
!
! ABSTRACT: This subroutine returns the corresponding GRIB2 Discipline
!   Category and Number for a given GRIB1 parameter value and table version.
!
! PROGRAM HISTORY LOG:
! 2000-05-11  Gilbert
!
! USAGE:    CALL param_ecmwf_g1_to_g2(g1val,g1ver,g2disc,g2cat,g2num)
!   INPUT ARGUMENT LIST:
!     g1val    - GRIB1 parameter number for which discipline is requested
!     g1ver    - GRIB1 parameter table version number
!
!   OUTPUT ARGUMENT LIST:      
!     g2disc   - corresponding GRIB2 Discipline number
!     g2cat    - corresponding GRIB2 Category number
!     g2num    - corresponding GRIB2 Parameter number within Category g2cat
!
! ATTRIBUTES:
!   LANGUAGE: Fortran 90
!   MACHINE:  IBM SP
!
!$$$
           integer,intent(in) :: g1val,g1ver
           integer,intent(out) :: g2disc,g2cat,g2num

           g2disc=255
           g2cat=255
           g2num=255
! for testing
!           g2num=g1val
! for testing

           do n=1,MAXPARAM
              if ( paramlist(n)%grib1val.eq.g1val .AND.
     &            paramlist(n)%g1tblver.eq.g1ver ) then
                 g2disc=paramlist(n)%grib2dsc
                 g2cat=paramlist(n)%grib2cat
                 g2num=paramlist(n)%grib2num
c                print *,g2disc
c                print *,g2cat
c                print *,g2num
                 return
              endif
           enddo

           print *,'param_ecmwf_g1_to_g2:GRIB1 param ',g1val,
     &          ' not found.',
     &          ' for table version ',g1ver
           return
         end subroutine


         subroutine param_ecmwf_g2_to_g1(g2disc,g2cat,g2num,g1val,g1ver)
!$$$  SUBPROGRAM DOCUMENTATION BLOCK
!                .      .    .                                       .
! SUBPROGRAM:    param_ecmwf_g2_to_g1 
!   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-01-04
!
! ABSTRACT: This function returns the GRIB 1 parameter number for 
!   a given GRIB2 Discipline, Category and Parameter number.
!
! PROGRAM HISTORY LOG:
! 2001-06-05  Gilbert
!
! USAGE:     call param_ecmwf_g2_to_g1(g2disc,g2cat,g2num,g1val,g1ver)
!   INPUT ARGUMENT LIST:
!     g2disc   - GRIB2 discipline number (See Code Table 0.0)
!     g2cat    - corresponding GRIB2 Category number
!     g2num    - corresponding GRIB2 Parameter number within Category g2cat
!
!   OUTPUT ARGUMENT LIST:      
!     g1val    - GRIB1 parameter number for which discipline is requested
!     g1ver    - GRIB1 parameter table version number
!
! REMARKS: None
!
! ATTRIBUTES:
!   LANGUAGE: Fortran 90
!   MACHINE:  IBM SP
!
!$$$
           integer,intent(in) :: g2disc,g2cat,g2num
           integer,intent(out) :: g1val,g1ver

           g1val=255
           g1ver=255

! for testing
!           if ( g2disc.eq.255.and.g2cat.eq.255 ) then
!             g1val=g2num
!             g1ver=2
!             return
!           endif
! for testing

           do n=1,MAXPARAM
              if (paramlist(n)%grib2dsc.eq.g2disc.AND.
     &             paramlist(n)%grib2cat.eq.g2cat.AND.
     &             paramlist(n)%grib2num.eq.g2num) then
                 g1val=paramlist(n)%grib1val
                 g1ver=paramlist(n)%g1tblver
                 return
              endif
           enddo

           print *,'param_ecmwf_g2_to_g1:GRIB2 param ',g2disc,g2cat,
     &              g2num,' not found.'
           return
         end subroutine


      end module