!--------------------------------------- LICENCE BEGIN -----------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer,
! version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer
!version 3 or (at your option) any later version that should be found at:
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software;
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec),
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
module varNameList_mod 5,1
use bufr
implicit none
save
private
! public variables (parameters)
public :: vnl_numvarmax3D,vnl_numvarmax2D,vnl_numvarmax,vnl_varNameList3D,vnl_varNameList2D,vnl_varNameList
! public procedures
public :: vnl_varListIndex3d,vnl_varListIndex2d,vnl_varListIndex,vnl_varnameFromVarnum
public :: vnl_vartypeFromVarname,vnl_vartypeFromVarnum
integer, parameter :: vnl_numvarmax3D=23,vnl_numvarmax2D=4
character(len=4), parameter :: vnl_varNameList3D(vnl_numvarmax3D) = (/'UU ','VV ','GZ ','TT ','HU ','LQ ','ES ','VT ', &
'PP ','CC ','UC ','UT ','TB ','DW ','O3 ','CH4 ','CO2 ','CO ','NO2 ','N2O ','HCHO','SO2 ','NH3 ' /)
character(len=2), parameter :: varTypeList3D(vnl_numvarmax3D) = (/'MM', 'MM', 'TH', 'TH', 'TH', 'TH', 'TH', 'TH', &
'MM', 'MM', 'MM', 'TH', 'TH', 'TH', 'TH', 'TH', 'TH', 'TH', 'TH', 'TH', 'TH', 'TH', 'TH'/)
character(len=4), parameter :: vnl_varNameList2D(vnl_numvarmax2D) = (/'P0 ','TG ','UP ','PB '/)
character(len=2), parameter :: varTypeList2D(vnl_numvarmax2D) = (/'SF', 'SF', 'SF', 'SF'/)
integer, parameter :: vnl_numvarmax=vnl_numvarmax3D+vnl_numvarmax2D
character(len=4), parameter :: vnl_varNameList(vnl_numvarmax) = (/ vnl_varNameList3D, vnl_varNameList2D /)
character(len=2), parameter :: varTypeList(vnl_numvarmax) = (/ varTypeList3D, varTypeList2D /)
contains
function vnl_varListIndex3d(varName) result(listIndex),1
implicit none
character(len=*), intent(in) :: varName
integer :: jvar,listIndex
listIndex=-1
do jvar=1,vnl_numvarmax3D
if(varName.eq.vnl_varNameList3d(jvar)) then
listIndex=jvar
exit
endif
enddo
if(listIndex.le.0) then
call abort3d
('vnl_varListIndex3D: Unknown variable name! ' // varName)
endif
end function vnl_varListIndex3d
function vnl_varListIndex2d(varName) result(listIndex),1
implicit none
character(len=*), intent(in) :: varName
integer :: jvar,listIndex
listIndex=-1
do jvar=1,vnl_numvarmax2D
if(varName.eq.vnl_varNameList2d(jvar)) then
listIndex=jvar
exit
endif
enddo
if(listIndex.le.0) then
call abort3d
('vnl_varListIndex2D: Unknown variable name! ' // varName)
endif
end function vnl_varListIndex2d
function vnl_varListIndex(varName) result(listIndex) 15,1
implicit none
character(len=*), intent(in) :: varName
integer :: jvar,listIndex
listIndex=-1
do jvar=1,vnl_numvarmax
if(varName.eq.vnl_varNameList(jvar)) then
listIndex=jvar
exit
endif
enddo
if(listIndex.le.0) then
call abort3d
('vnl_varListIndex: Unknown variable name! ' // varName)
endif
end function vnl_varListIndex
function vnl_varnameFromVarnum(varNumber,varTrNumber) result(varName) 4,3
implicit none
integer, intent(in) :: varNumber
integer, intent(in), optional :: varTrNumber
character(len=4) :: varName
varName=' '
select case (varNumber)
case(BUFR_NEUU,BUFR_NEUS)
varName='UU'
case(BUFR_NEVV,BUFR_NEVS)
varName='VV'
case(BUFR_NETT,BUFR_NETS)
varName='TT'
case(BUFR_NEDZ,BUFR_NEGZ)
varName='GZ'
case(BUFR_NEHU,BUFR_NEHS,BUFR_NEES,BUFR_NESS)
varName='HU'
case(BUFR_NEPS,BUFR_NEPN)
varName='P0'
case(BUFR_NERF,BUFR_NEBD,BUFR_NEZD)
varName='TT' ! temporarily associate refractivity and ZTD with temperature
case(BUFR_NEDW)
varName='DW'
case(BUFR_NETR)
if (present(varTrNumber)) then
select case (varTrNumber)
case(BUFR_NETR_O3)
varname='O3'
case(BUFR_NETR_H2O)
varname='HU'
case(BUFR_NETR_CH4)
varname='CH4'
case(BUFR_NETR_CO2)
varname='CO2'
case(BUFR_NETR_CO)
varname='CO'
case(BUFR_NETR_NO2)
varname='NO2'
case(BUFR_NETR_N2O)
varname='N2O'
case(BUFR_NETR_HCHO)
varname='HCHO'
case(BUFR_NETR_SO2)
varname='SO2'
case default
write(*,*) 'vnl_varnameFromVarnum: Unknown TR variable number! ',varTrNumber
call abort3d
('aborting in vnl_varnameFromVarnum')
end select
else
call abort3d
('vnl_varnameFromVarnum: Missing TR variable number ')
endif
case default
write(*,*) 'vnl_varnameFromVarnum: Unknown variable number! ',varNumber
call abort3d
('aborting in vnl_varnameFromVarnum')
end select
end function vnl_varnameFromVarnum
function vnl_vartypeFromVarname(varName) result(varType) 23,1
implicit none
character(len=*), intent(in) :: varName
character(len=2) :: varType
varType = varTypeList(vnl_varListIndex
(varName))
end function vnl_vartypeFromVarname
function vnl_vartypeFromVarnum(varNumber,varTrNumber) result(varType) 19,3
implicit none
integer, intent(in) :: varNumber
integer, intent(in), optional :: varTrNumber
character(len=2) :: varType
character(len=4) :: varName
if (present(varTrNumber)) then
varName = vnl_varnameFromVarnum
(varNumber,varTrNumber)
else
varName = vnl_varnameFromVarnum
(varNumber)
endif
varType = varTypeList(vnl_varListIndex
(varName))
end function vnl_vartypeFromVarnum
end module varNameList_mod