SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/cls_tq.F90
Go to the documentation of this file.
00001 !     #########
00002        SUBROUTINE CLS_TQ( PTA, PQA, PPA, PPS, PHT,    &
00003                             PCD, PCH, PRI,              &
00004                             PTS, PHU, PZ0H, PH,         &
00005                             PTNM, PQNM, PHUNM           )  
00006 !     #####################################################################
00007 !
00008 !!****  *PARAMCLS*  
00009 !!
00010 !!    PURPOSE
00011 !!    -------
00012 !
00013 !         
00014 !     
00015 !!**  METHOD
00016 !!    ------
00017 !
00018 !!    EXTERNAL
00019 !!    --------
00020 !!
00021 !!    none
00022 !!
00023 !!    IMPLICIT ARGUMENTS
00024 !!    ------------------ 
00025 !!
00026 !!    USE MODD_CST
00027 !!    USE MODD_GROUND_PAR
00028 !!
00029 !!      
00030 !!    REFERENCE
00031 !!    ---------
00032 !!
00033 !!      
00034 !!    AUTHOR
00035 !!    ------
00036 !!
00037 !!
00038 !!    MODIFICATIONS
00039 !!    -------------
00040 !!
00041 !!      Original    26/10/98
00042 !!      S. Riette   06/2009 CLS_2M becomes CLS_TQ, height now is an argument
00043 !-------------------------------------------------------------------------------
00044 !
00045 !*       0.     DECLARATIONS
00046 !               ------------
00047 !
00048 USE MODD_CSTS,     ONLY : XG, XCPD, XKARMAN
00049 USE MODD_SURF_PAR, ONLY : XUNDEF
00050 !
00051 USE MODE_THERMOS
00052 !
00053 !
00054 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00055 USE PARKIND1  ,ONLY : JPRB
00056 !
00057 IMPLICIT NONE
00058 !
00059 !*      0.1    declarations of arguments
00060 !
00061 !
00062 !
00063 REAL, DIMENSION(:), INTENT(IN)       :: PTA    ! atmospheric temperature
00064 REAL, DIMENSION(:), INTENT(IN)       :: PQA    ! atmospheric humidity (kg/kg)
00065 REAL, DIMENSION(:), INTENT(IN)       :: PPA    ! atmospheric level pressure
00066 REAL, DIMENSION(:), INTENT(IN)       :: PPS    ! surface pressure
00067 REAL, DIMENSION(:), INTENT(IN)       :: PHT    ! atmospheric level height (temp)
00068 REAL, DIMENSION(:), INTENT(IN)       :: PCD    ! drag coefficient for momentum
00069 REAL, DIMENSION(:), INTENT(IN)       :: PCH    ! drag coefficient for heat
00070 REAL, DIMENSION(:), INTENT(IN)       :: PRI    ! Richardson number
00071 REAL, DIMENSION(:), INTENT(IN)       :: PTS    ! surface temperature
00072 REAL, DIMENSION(:), INTENT(IN)       :: PHU    ! near-surface humidity (%)
00073 REAL, DIMENSION(:), INTENT(IN)       :: PZ0H   ! roughness length for heat
00074 REAL, DIMENSION(:), INTENT(IN)       :: PH     ! height of diagnostic
00075 !
00076 REAL, DIMENSION(:), INTENT(OUT)      :: PTNM   ! temperature at n meters
00077 REAL, DIMENSION(:), INTENT(OUT)      :: PQNM   ! specific humidity at n meters
00078 REAL, DIMENSION(:), INTENT(OUT)      :: PHUNM  ! relative humidity at n meters
00079 !
00080 !*      0.2    declarations of local variables
00081 !
00082 REAL, DIMENSION(SIZE(PTA)) :: ZBNH,ZBH,ZRS
00083 REAL, DIMENSION(SIZE(PTA)) :: ZLOGS,ZCORS,ZIV
00084 REAL, DIMENSION(SIZE(PTA)) :: ZQSATA, ZHUA
00085 REAL, DIMENSION(SIZE(PTA)) :: ZQSATNM, ZPNM, ZQS, ZQSATS
00086  CHARACTER(LEN=2)           :: YHUMIDITY
00087 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00088 !
00089 !-------------------------------------------------------------------------------
00090 !
00091 IF (LHOOK) CALL DR_HOOK('CLS_TQ',0,ZHOOK_HANDLE)
00092 PTNM (:) = XUNDEF
00093 PQNM(:)  = XUNDEF
00094 PHUNM(:) = XUNDEF
00095 !
00096 ZBNH   (:) = 0.
00097 ZBH    (:) = 0.
00098 ZRS    (:) = 0.
00099 ZLOGS  (:) = 0.
00100 ZCORS  (:) = 0.
00101 ZIV    (:) = 0.
00102 ZQSATA (:) = 0.
00103 ZHUA   (:) = 0.
00104 ZQSATS (:) = 0.
00105 ZPNM   (:) = 0.
00106 ZQSATNM(:) = 0.
00107 ZQS    (:) = 0.
00108 !
00109 !*      1.     preparatory calculations
00110 !              ------------------------
00111 !
00112 ZBNH(:)=LOG( PHT(:)/PZ0H(:))
00113 !
00114 ZBH(:)=XKARMAN*SQRT( PCD(:) )/PCH(:) 
00115 !
00116 ZRS(:)=MIN(PH/PHT(:),1.)
00117 !
00118 ZLOGS(:)=LOG(1.+ZRS(:)*(EXP(ZBNH(:)) -1.))
00119 !
00120 !*      2.     Stability effects
00121 !              -----------------
00122 !
00123 WHERE (PRI(:)>=0.)
00124   ZCORS(:)=ZRS(:)*(ZBNH(:)-ZBH(:))
00125 END WHERE
00126 !
00127 WHERE (PRI(:)< 0.)
00128   ZCORS(:)=LOG(1.+ZRS(:)*(EXP(MAX(0.,ZBNH(:)-ZBH(:)))-1.))
00129 END WHERE
00130 !
00131 !*      3.     Interpolation of thermodynamical variables
00132 !              ------------------------------------------
00133 !
00134 ZIV=MAX(0.,MIN(1.,(ZLOGS(:)-ZCORS(:))/ZBH(:)))
00135 PTNM(:)=PTS(:)+ZIV(:)*(PTA(:)-PTS(:))
00136 !
00137 !*      4.     Interpolation of relative humidity
00138 !              ----------------------------------
00139 !
00140 !* choice of interpolated variable
00141 !
00142 YHUMIDITY='Q '
00143 !
00144 ZPNM(:) = PPS(:) + PH/PHT(:) * (PPA(:)-PPS(:))
00145 ZQSATNM(:) = QSAT(PTNM(:),ZPNM(:))
00146 !
00147 IF (YHUMIDITY=='Q ') THEN
00148 !        
00149   ZQSATS(:) = QSAT(PTS(:),PPS(:))
00150   ZQS(:)    = PHU(:)*ZQSATS(:)
00151   PQNM(:)   = ZQS(:)+ZIV(:)*(PQA(:)-ZQS(:))
00152   PQNM(:)   = MIN (ZQSATNM(:),PQNM(:)) !must be below saturation
00153   PHUNM(:)  = PQNM(:) / ZQSATNM(:)
00154 !
00155 ELSE IF (YHUMIDITY=='HU') THEN
00156 !        
00157   ZQSATA(:) = QSAT(PTA(:),PPA(:))
00158   ZHUA(:)   = PQA(:) / ZQSATA(:)
00159   PHUNM(:)  = PHU(:)+ZIV(:)*(ZHUA(:)-PHU(:))
00160   PQNM(:)   = PHUNM(:) * ZQSATNM(:)
00161 !
00162 END IF
00163 IF (LHOOK) CALL DR_HOOK('CLS_TQ',1,ZHOOK_HANDLE)
00164 !
00165 !-------------------------------------------------------------------------------
00166 !
00167 END SUBROUTINE CLS_TQ