Changeset 2243 for LMDZ5/trunk/libf/phylmd/cdrag.F90
- Timestamp:
- Mar 24, 2015, 2:28:51 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/cdrag.F90
r2232 r2243 4 4 SUBROUTINE cdrag( knon, nsrf, & 5 5 speed, t1, q1, zgeop1, & 6 psol, tsurf, qsurf, rugos, &6 psol, tsurf, qsurf, z0m, z0h, & 7 7 pcfm, pcfh, zri, pref ) 8 8 … … 45 45 ! tsurf---input-R- temperature de l'air a la surface 46 46 ! qsurf---input-R- humidite de l'air a la surface 47 ! rugos---input-R- rugosite47 ! z0m, z0h---input-R- rugosite 48 48 !! u1, v1 are removed, speed is used. Fuxing WANG, 04/03/2015, 49 49 !! u1------input-R- vent zonal au 1er niveau du modele … … 71 71 REAL, DIMENSION(klon), INTENT(IN) :: tsurf ! Surface temperature (K) 72 72 REAL, DIMENSION(klon), INTENT(IN) :: qsurf ! Surface humidity (Kg/Kg) 73 REAL, DIMENSION(klon), INTENT(IN) :: rugos! Rugosity at surface (m)73 REAL, DIMENSION(klon), INTENT(IN) :: z0m, z0h ! Rugosity at surface (m) 74 74 ! paprs, pplay u1, v1: to be deleted 75 75 ! they were in the old clcdrag. Fuxing WANG, 04/03/2015 … … 113 113 REAL, DIMENSION(klon) :: zcfh1, zcfh2 ! Drag coefficient for heat flux 114 114 LOGICAL, PARAMETER :: zxli=.FALSE. ! calcul des cdrags selon Laurent Li 115 REAL, DIMENSION(klon) :: zcdn ! Drag coefficient in neutral conditions115 REAL, DIMENSION(klon) :: zcdn_m, zcdn_h ! Drag coefficient in neutral conditions 116 116 ! 117 117 ! Fonctions thermodynamiques et fonctions d'instabilite … … 174 174 *(1.+RETV*max(q1(i),0.0)) ! negative q1 set to zero 175 175 zri(i) = zgeop1(i)*(ztvd-ztsolv)/(zdu2*ztvd) 176 zcdn(i) = (CKAP/LOG(1.+zgeop1(i)/(RG*rugos(i))))**2 176 177 178 ! Coefficients CD neutres pour m et h 179 zcdn_m(i) = (CKAP/LOG(1.+zgeop1(i)/(RG*z0m(i))))**2 180 zcdn_h(i) = (CKAP/LOG(1.+zgeop1(i)/(RG*z0h(i))))**2 177 181 178 182 IF (zri(i) .GT. 0.) THEN ! situation stable … … 181 185 zscf = SQRT(1.+CD*ABS(zri(i))) 182 186 friv = AMAX1(1. / (1.+2.*CB*zri(i)/ZSCF), f_ri_cd_min) 183 zcfm1(i) = zcdn (i) * friv187 zcfm1(i) = zcdn_m(i) * friv 184 188 frih = AMAX1(1./ (1.+3.*CB*zri(i)*ZSCF), f_ri_cd_min ) 185 189 !!$ PB zcfh1(i) = zcdn(i) * frih 186 190 !!$ PB zcfh1(i) = f_cdrag_stable * zcdn(i) * frih 187 zcfh1(i) = f_cdrag_ter * zcdn (i) * frih188 IF(nsrf.EQ.is_oce) zcfh1(i) = f_cdrag_oce * zcdn (i) * frih191 zcfh1(i) = f_cdrag_ter * zcdn_h(i) * frih 192 IF(nsrf.EQ.is_oce) zcfh1(i) = f_cdrag_oce * zcdn_h(i) * frih 189 193 !!$ PB 190 194 pcfm(i) = zcfm1(i) 191 195 pcfh(i) = zcfh1(i) 192 196 ELSE 193 pcfm(i) = zcdn (i)* fsta(zri(i))194 pcfh(i) = zcdn (i)* fsta(zri(i))197 pcfm(i) = zcdn_m(i)* fsta(zri(i)) 198 pcfh(i) = zcdn_h(i)* fsta(zri(i)) 195 199 ENDIF 196 200 ELSE ! situation instable 197 201 IF (.NOT.zxli) THEN 198 zucf = 1./(1.+3.0*CB*CC*zcdn (i)*SQRT(ABS(zri(i)) &199 *(1.0+zgeop1(i)/(RG* rugos(i)))))200 zcfm2(i) = zcdn (i)*amax1((1.-2.0*CB*zri(i)*zucf),f_ri_cd_min)201 !!$ PB zcfh2(i) = zcdn (i)*amax1((1.-3.0*cb*zri(i)*zucf),f_ri_cd_min)202 zcfh2(i) = f_cdrag_ter*zcdn (i)*amax1((1.-3.0*CB*zri(i)*zucf),f_ri_cd_min)202 zucf = 1./(1.+3.0*CB*CC*zcdn_m(i)*SQRT(ABS(zri(i)) & 203 *(1.0+zgeop1(i)/(RG*z0m(i))))) 204 zcfm2(i) = zcdn_m(i)*amax1((1.-2.0*CB*zri(i)*zucf),f_ri_cd_min) 205 !!$ PB zcfh2(i) = zcdn_h(i)*amax1((1.-3.0*cb*zri(i)*zucf),f_ri_cd_min) 206 zcfh2(i) = f_cdrag_ter*zcdn_h(i)*amax1((1.-3.0*CB*zri(i)*zucf),f_ri_cd_min) 203 207 pcfm(i) = zcfm2(i) 204 208 pcfh(i) = zcfh2(i) 205 209 ELSE 206 pcfm(i) = zcdn (i)* fins(zri(i))207 pcfh(i) = zcdn (i)* fins(zri(i))210 pcfm(i) = zcdn_m(i)* fins(zri(i)) 211 pcfh(i) = zcdn_h(i)* fins(zri(i)) 208 212 ENDIF 209 213 ! cdrah sur l'ocean cf. Miller et al. (1992) 210 zcr = (0.0016/(zcdn (i)*SQRT(zdu2)))*ABS(ztvd-ztsolv)**(1./3.)211 IF(nsrf.EQ.is_oce) pcfh(i) =f_cdrag_oce* zcdn (i)*(1.0+zcr**1.25)**(1./1.25)214 zcr = (0.0016/(zcdn_m(i)*SQRT(zdu2)))*ABS(ztvd-ztsolv)**(1./3.) 215 IF(nsrf.EQ.is_oce) pcfh(i) =f_cdrag_oce* zcdn_h(i)*(1.0+zcr**1.25)**(1./1.25) 212 216 ENDIF 213 217 END DO
Note: See TracChangeset
for help on using the changeset viewer.