SURFEX v7.3
General documentation of Surfex
|
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