FUNCTION QSATW_2D(PT,PP,KMASK,KL) RESULT(PQSAT)
! ######################################
!
!!**** *QSATW * - function to compute saturation vapor humidity from
!! temperature
!!
!! PURPOSE
!! -------
! The purpose of this function is to compute the saturation vapor
! pressure from temperature
!
!
!!** METHOD
!! ------
!! Given temperature T (PT), the saturation vapor pressure es(T)
!! (FOES(PT)) is computed by integration of the Clapeyron equation
!! from the triple point temperature Tt (XTT) and the saturation vapor
!! pressure of the triple point es(Tt) (XESTT), i.e
!!
!! es(T)= EXP( alphaw - betaw /T - gammaw Log(T) )
!!
!! with :
!! alphaw (XALPW) = LOG(es(Tt))+ betaw/Tt + gammaw Log(Tt)
!! betaw (XBETAW) = Lv(Tt)/Rv + gammaw Tt
!! gammaw (XGAMW) = (Cl -Cpv) /Rv
!!
!! Then, the specific humidity at saturation is deduced.
!!
!!
!! EXTERNAL
!! --------
!! NONE
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!! Module MODD_CST : comtains physical constants
!! XALPW : Constant for saturation vapor pressure function
!! XBETAW : Constant for saturation vapor pressure function
!! XGAMW : Constant for saturation vapor pressure function
!!
!! REFERENCE
!! ---------
!! Book2 of documentation of Meso-NH
!!
!!
!! AUTHOR
!! ------
!! V. Masson * Meteo France *
!!
!! MODIFICATIONS
!! -------------
!! Original 21/09/98
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_SURF_PAR, ONLY : XUNDEF
USE MODD_CSTS
!
IMPLICIT NONE
!
!* 0.1 Declarations of arguments and results
!
!
REAL, DIMENSION(:,:), INTENT(IN) :: PT ! Temperature
! (Kelvin)
REAL, DIMENSION(:,:), INTENT(IN) :: PP ! Pressure
! (Pa)
!
INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: KMASK
! KMASK = Number of soil moisture layers (DIF option)
INTEGER, INTENT(IN), OPTIONAL :: KL
! KL = Max number of soil moisture layers (DIF option)
!
REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2)) :: PQSAT ! saturation vapor
! specific humidity
! with respect to
! water (kg/kg)
!
!* 0.2 Declarations of local variables
!
REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2)) :: ZFOES
!
INTEGER, DIMENSION(SIZE(PT,1)) :: IMASK
!
INTEGER :: INL
REAL(KIND=JPRB) :: ZHOOK_HANDLE
!-------------------------------------------------------------------------------
!
IF (LHOOK) CALL DR_HOOK('MODE_THERMOS:QSATW_2D',0,ZHOOK_HANDLE)
!
IF(PRESENT(KMASK).AND.PRESENT(KL))THEN
IMASK(:)=KMASK(:)
INL=KL
ELSE
IMASK(:)=SIZE(PT,2)
INL=SIZE(PT,2)
ENDIF
!
PQSAT(:,:)=XUNDEF
ZFOES(:,:)=0.0
!
!
!* 1. COMPUTE SATURATION VAPOR PRESSURE
! ---------------------------------
!
ZFOES(:,1:INL) = PSAT(PT(:,1:INL),IMASK(:))
!
!* 2. COMPUTE SATURATION HUMIDITY
! ---------------------------
!
PQSAT(:,:) = XRD/XRV*ZFOES(:,:)/PP(:,:) / (1.+(XRD/XRV-1.)*ZFOES(:,:)/PP(:,:))
!
IF (LHOOK) CALL DR_HOOK('MODE_THERMOS:QSATW_2D',1,ZHOOK_HANDLE)
!-------------------------------------------------------------------------------
!
END FUNCTION QSATW_2D