|
SURFEX v7.3
General documentation of Surfex
|
00001 ! ################################################################# 00002 SUBROUTINE SURFACE_CD(PRI, PZREF, PUREF, PZ0EFF, PZ0H, & 00003 PCD, PCDN) 00004 ! ################################################################# 00005 ! 00006 !!**** *SURFACE_CD* 00007 !! 00008 !! PURPOSE 00009 !! ------- 00010 ! 00011 ! Computes the drag coefficients for 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 !! MODD_GROUND_PAR 00037 !! 00038 !! 00039 !! REFERENCE 00040 !! --------- 00041 !! 00042 !! 00043 !! AUTHOR 00044 !! ------ 00045 !! 00046 !! V. Masson * Meteo-France * 00047 !! 00048 !! MODIFICATIONS 00049 !! ------------- 00050 !! Original 20/01/98 00051 !! 02/04/01 (P Jabouille) limitation of Z0 with 0.5 PUREF 00052 !------------------------------------------------------------------------------- 00053 ! 00054 !* 0. DECLARATIONS 00055 ! ------------ 00056 ! 00057 USE MODD_CSTS,ONLY : XKARMAN 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) :: PZREF ! reference height of the first 00071 ! atmospheric level 00072 REAL, DIMENSION(:), INTENT(IN) :: PUREF ! reference height of the wind 00073 ! ! NOTE this is different from ZZREF 00074 ! ! ONLY in stand-alone/forced mode, 00075 ! ! NOT when coupled to a model (MesoNH) 00076 REAL, DIMENSION(:), INTENT(IN) :: PZ0EFF ! roughness length for momentum 00077 ! with subgrid-scale orography 00078 REAL, DIMENSION(:), INTENT(IN) :: PZ0H ! roughness length for heat 00079 ! 00080 REAL, DIMENSION(:), INTENT(OUT) :: PCD ! drag coefficient for momentum 00081 REAL, DIMENSION(:), INTENT(OUT) :: PCDN ! neutral drag coefficient for momentum 00082 ! 00083 !* 0.2 declarations of local variables 00084 ! 00085 ! 00086 REAL :: ZZ0EFF, ZZ0H, ZMU, 00087 ZCMSTAR, ZPM, ZCM, ZFM 00088 INTEGER :: JJ 00089 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00090 00091 ! Functions : 00092 REAL :: X, CMSTAR, PM 00093 CMSTAR(X) = 6.8741 + 2.6933*X - 0.3601*X*X + 0.0154*X*X*X 00094 PM (X) = 0.5233 - 0.0815*X + 0.0135*X*X - 0.0010*X*X*X 00095 00096 !------------------------------------------------------------------------------- 00097 ! 00098 !* 1. Drag coefficient for momentum transfers 00099 ! --------------------------------------- 00100 ! 00101 00102 ! 00103 IF (LHOOK) CALL DR_HOOK('SURFACE_CD',0,ZHOOK_HANDLE) 00104 DO JJ=1,SIZE(PRI) 00105 ZZ0EFF = MIN(PZ0EFF(JJ),PUREF(JJ)*0.5) 00106 ZZ0H = MIN(ZZ0EFF,PZ0H(JJ)) 00107 ! 00108 ZMU = LOG( MIN(ZZ0EFF/ZZ0H,200.) ) 00109 ! 00110 PCDN(JJ) = (XKARMAN/LOG(PUREF(JJ)/ZZ0EFF))**2 00111 00112 ZCMSTAR = CMSTAR(ZMU) 00113 ZPM = PM(ZMU) 00114 ! 00115 ZCM = 10.*ZCMSTAR*PCDN(JJ)*( PUREF(JJ)/ZZ0EFF )**ZPM 00116 ! 00117 IF ( PRI(JJ) > 0.0 ) THEN 00118 ZFM = 1. + 10.*PRI(JJ) / SQRT( 1.+5.*PRI(JJ) ) 00119 ZFM = 1. / ZFM 00120 ELSE 00121 ZFM = 1. - 10.*PRI(JJ) / ( 1.+ZCM*SQRT(-PRI(JJ)) ) 00122 ENDIF 00123 ! 00124 PCD(JJ) = PCDN(JJ)*ZFM 00125 ! 00126 ENDDO 00127 IF (LHOOK) CALL DR_HOOK('SURFACE_CD',1,ZHOOK_HANDLE) 00128 ! 00129 !------------------------------------------------------------------------------- 00130 ! 00131 END SUBROUTINE SURFACE_CD
1.8.0