|
SURFEX v7.3
General documentation of Surfex
|
00001 ! ###################################################################### 00002 SUBROUTINE SURFACE_AERO_COND(PRI, PZREF, PUREF, PVMOD, PZ0,& 00003 PZ0H, PAC, PRA, PCH ) 00004 ! ###################################################################### 00005 ! 00006 !!**** *SURFACE_AERO_COND* 00007 !! 00008 !! PURPOSE 00009 !! ------- 00010 ! 00011 ! Computes the drag coefficients for heat and momentum near the ground 00012 ! 00013 ! 00014 !!** METHOD 00015 !! ------ 00016 ! 00017 ! 00018 ! 00019 ! 1 and 2 : computation of relative humidity near the ground 00020 ! 00021 ! 3 : richardson number 00022 ! 00023 ! 4 : the aerodynamical resistance for heat transfers is deduced 00024 ! 00025 ! 5 : the drag coefficient for momentum ZCD is computed 00026 ! 00027 ! 00028 !! EXTERNAL 00029 !! -------- 00030 !! 00031 !! 00032 !! IMPLICIT ARGUMENTS 00033 !! ------------------ 00034 !! 00035 !! MODD_CST 00036 !! 00037 !! 00038 !! REFERENCE 00039 !! --------- 00040 !! 00041 !! 00042 !! AUTHOR 00043 !! ------ 00044 !! 00045 !! V. Masson * Meteo-France * 00046 !! 00047 !! MODIFICATIONS 00048 !! ------------- 00049 !! Original 20/01/98 00050 !! 02/04/01 (P Jabouille) limitation of Z0 with 0.5 PUREF 00051 !------------------------------------------------------------------------------- 00052 ! 00053 !* 0. DECLARATIONS 00054 ! ------------ 00055 ! 00056 USE MODD_CSTS,ONLY : XKARMAN 00057 USE MODI_WIND_THRESHOLD 00058 ! 00059 USE MODE_THERMOS 00060 ! 00061 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00062 USE PARKIND1 ,ONLY : JPRB 00063 ! 00064 IMPLICIT NONE 00065 ! 00066 !* 0.1 declarations of arguments 00067 ! 00068 ! 00069 REAL, DIMENSION(:), INTENT(IN) :: PRI ! Richardson number 00070 REAL, DIMENSION(:), INTENT(IN) :: PVMOD ! module of the horizontal wind 00071 REAL, DIMENSION(:), INTENT(IN) :: PZREF ! reference height of the first 00072 ! atmospheric level 00073 REAL, DIMENSION(:), INTENT(IN) :: PUREF ! reference height of the wind 00074 ! NOTE this is different from ZZREF 00075 ! ONLY in stand-alone/forced mode, 00076 ! NOT when coupled to a model (MesoNH) 00077 REAL, DIMENSION(:), INTENT(IN) :: PZ0 ! roughness length for momentum 00078 REAL, DIMENSION(:), INTENT(IN) :: PZ0H ! roughness length for heat 00079 ! 00080 REAL, DIMENSION(:), INTENT(OUT) :: PAC ! aerodynamical conductance 00081 REAL, DIMENSION(:), INTENT(OUT) :: PRA ! aerodynamical resistance 00082 REAL, DIMENSION(:), INTENT(OUT) :: PCH ! drag coefficient for heat 00083 ! 00084 !* 0.2 declarations of local variables 00085 ! 00086 ! 00087 REAL, DIMENSION(SIZE(PRI)) :: ZZ0, ZZ0H, ZMU, 00088 ZFH, ZCHSTAR, ZPH, ZCDN, 00089 ZSTA, ZDI, ZWORK1, ZWORK2, ZWORK3 00090 REAL, DIMENSION(SIZE(PRI)) :: ZVMOD 00091 ! 00092 INTEGER :: JJ 00093 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00094 ! 00095 ! Functions: 00096 REAL :: X, CHSTAR, PH 00097 CHSTAR(X) = 3.2165 + 4.3431*X + 0.5360*X*X - 0.0781*X*X*X 00098 PH (X) = 0.5802 - 0.1571*X + 0.0327*X*X - 0.0026*X*X*X 00099 ! 00100 !------------------------------------------------------------------------------- 00101 ! 00102 !* 4. Surface aerodynamic resistance for heat transfers 00103 ! ------------------------------------------------- 00104 ! 00105 IF (LHOOK) CALL DR_HOOK('SURFACE_AERO_COND',0,ZHOOK_HANDLE) 00106 ZVMOD(:) = WIND_THRESHOLD(PVMOD(:),PUREF(:)) 00107 ! 00108 DO JJ=1,SIZE(PRI) 00109 00110 ZZ0(JJ) = MIN(PZ0(JJ),PUREF(JJ)*0.5) 00111 ZZ0H(JJ) = MIN(ZZ0(JJ),PZ0H(JJ)) 00112 ZZ0H(JJ) = MIN(ZZ0H(JJ),PZREF(JJ)*0.5) 00113 ! 00114 ZWORK1(JJ)=LOG( PUREF(JJ)/ZZ0(JJ) ) 00115 ZWORK2(JJ)=PZREF(JJ)/ZZ0H(JJ) 00116 ZWORK3(JJ)=ZVMOD(JJ)*ZVMOD(JJ) 00117 00118 ZMU(JJ) = MAX( LOG( ZZ0(JJ)/ZZ0H(JJ) ), 0.0 ) 00119 ZFH(JJ) = ZWORK1(JJ) / LOG(ZWORK2(JJ)) 00120 ! 00121 ZCHSTAR(JJ) = CHSTAR(ZMU(JJ)) 00122 ZPH(JJ) = PH(ZMU(JJ)) 00123 ! 00124 ! 00125 ZCDN(JJ) = (XKARMAN/ZWORK1(JJ))**2. 00126 ! 00127 ! 00128 ZSTA(JJ) = PRI(JJ)*ZWORK3(JJ) 00129 ! 00130 ! 00131 IF ( PRI(JJ) < 0.0 ) THEN 00132 ZDI(JJ) = 1. / ( ZVMOD(JJ) & 00133 +ZCHSTAR(JJ)*ZCDN(JJ)*15. & 00134 *ZWORK2(JJ)**ZPH(JJ) & 00135 *ZFH(JJ) * SQRT(-ZSTA(JJ)) & 00136 ) 00137 PAC(JJ) = ZCDN(JJ)*(ZVMOD(JJ)-15.* ZSTA(JJ)*ZDI(JJ))*ZFH(JJ) 00138 00139 ELSE 00140 ZDI(JJ) = SQRT(ZWORK3(JJ) + 5. * ZSTA(JJ) ) 00141 PAC(JJ) = ZCDN(JJ)*ZVMOD(JJ)/(1.+15.*ZSTA(JJ)*ZDI(JJ) & 00142 / ZWORK3(JJ) /ZVMOD(JJ) )*ZFH(JJ) 00143 ENDIF 00144 ! 00145 PRA(JJ) = 1. / PAC(JJ) 00146 ! 00147 PCH(JJ) = 1. / (PRA(JJ) * ZVMOD(JJ)) 00148 ! 00149 ENDDO 00150 IF (LHOOK) CALL DR_HOOK('SURFACE_AERO_COND',1,ZHOOK_HANDLE) 00151 ! 00152 !------------------------------------------------------------------------------- 00153 ! 00154 END SUBROUTINE SURFACE_AERO_COND
1.8.0