Changeset 389 for LMDZ.3.3/branches/rel-LF/libf
- Timestamp:
- Jul 17, 2002, 11:06:29 AM (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ.3.3/branches/rel-LF/libf/phylmd/clmain.F
r363 r389 482 482 DO j = 1, knon 483 483 yrugm(j) = 0.018*ycoefm(j,1) * (yu1(j)**2+yv1(j)**2)/RG 484 $ + 0.000014 / sqrt(ycoefm(j,1) * (yu1(j)**2+yv1(j)**2)) 484 485 yrugm(j) = MAX(1.5e-05,yrugm(j)) 485 486 ENDDO … … 1100 1101 REAL zcfm1(klon), zcfm2(klon) 1101 1102 REAL zcfh1(klon), zcfh2(klon) 1102 REAL zdphi, zdu2, ztvd, ztvu, ztsolv, zcdn 1103 c$$$ REAL zdphi, zdu2, ztvd, ztvu, ztsolv, zcdn 1104 c$$$cPB differenciation coefficient de frottement drag et flux chaleur 1105 REAL zdphi, zdu2, ztvd, ztvu, ztsolv, zcdn,zcdh, rugh 1103 1106 REAL zscf, zucf, zcr 1104 1107 REAL zt, zq, zdelta, zcvm5, zcor, zqs, zfr, zdqs … … 1183 1186 c Calculer le frottement au sol (Cdrag) 1184 1187 c 1185 CALL clcdrag(knon, nsrf, zxli, u, v, t, q, zgeop, 1186 . ts, qsurf, rugos, pcfm, pcfh, zcdn, zri) 1188 c$$$c PB 1189 c$$$c essais d'itération pour l'océan 1190 c 1191 rugh = 1.3 e-4 1192 IF (nsrf.EQ.is_oce) THEN 1193 DO k=1,10 1194 c$$$ WRITE(*,*) 'k',k 1195 c$$$ WRITE(*,*) rugos(100) 1196 DO i = 1, knon 1197 zdu2=max(cepdu2,u(i,1)**2+v(i,1)**2) 1198 zdphi=zgeop(i,1) 1199 ztsolv = ts(i) * (1.0+RETV*q(i,1)) ! qsol approx = q(i,1) 1200 c$$$ ztsolv = ts(i) * (1.0+RETV*qsurf(i)) 1201 ztvd=(t(i,1)+zdphi/RCPD/(1.+RVTMP2*q(i,1))) 1202 . *(1.+RETV*q(i,1)) 1203 zri(i)=zgeop(i,1)*(ztvd-ztsolv)/(zdu2*ztvd) 1204 zcdn = (ckap/log(1.+zgeop(i,1)/(RG*rugos(i))))**2 1205 c PB ajout drag neutre pour flux chaleur 1206 zcdh = ckap**2/(log(1.+zgeop(i,1)/(RG*rugos(i))) 1207 $ * log(1.+zgeop(i,1)/(RG*rugh))) 1208 IF (zri(i) .ge. 0.) THEN ! situation stable 1209 IF (.NOT.zxli) THEN 1210 zscf=SQRT(1.+cd*ABS(zri(i))) 1211 FRIV = AMAX1(1. / (1.+2.*CB*zri(i)/ZSCF), 0.1) 1212 ! zcfm1(i) = zcdn/(1.+2.0*cb*zri(i)/ zscf) 1213 zcfm1(i) = zcdn * FRIV 1214 FRIH = AMAX1(1./ (1.+3.*CB*zri(i)*ZSCF), 0.1 ) 1215 ! zcfh1(i) = zcdn/(1.+3.0*cb*zri(i)*zscf) 1216 c PB avec drag neutre pour flux chaleur different 1217 c zcfh1(i) = zcdn * FRIH 1218 zcfh1(i) = zcdh * FRIH 1219 pcfm(i,1) = zcfm1(i) 1220 pcfh(i,1) = zcfh1(i) 1221 ELSE 1222 pcfm(i,1) = zcdn* fsta(zri(i)) 1223 pcfh(i,1) = zcdn* fsta(zri(i)) 1224 ENDIF 1225 ELSE ! situation instable 1226 IF (.NOT.zxli) THEN 1227 zucf=1./(1.+3.0*cb*cc*zcdn*SQRT(ABS(zri(i)) 1228 . *(1.0+zgeop(i,1)/(RG*rugos(i))))) 1229 zcfm2(i) = zcdn*amax1((1.-2.0*cb*zri(i)*zucf),0.1) 1230 c PB ajout pour prendre drag neutre des flux chaleur different drag neutre vent 1231 zucf=1./(1.+3.0*cb*cc*zcdh*SQRT(ABS(zri(i)) 1232 . *(1.0+zgeop(i,1)/(RG*rugh)))) 1233 c$$$ zcfh2(i) = zcdn*amax1((1.-3.0*cb*zri(i)*zucf),0.1) 1234 zcfh2(i) = zcdh*amax1((1.-3.0*cb*zri(i)*zucf),0.1) 1235 pcfm(i,1) = zcfm2(i) 1236 pcfh(i,1) = zcfh2(i) 1237 ELSE 1238 pcfm(i,1) = zcdn* fins(zri(i)) 1239 pcfh(i,1) = zcdn* fins(zri(i)) 1240 ENDIF 1241 zcr = (0.0016/(zcdh*SQRT(zdu2)))*ABS(ztvd-ztsolv)**(1./3.) 1242 IF(nsrf.EQ.is_oce)pcfh(i,1)=zcdh*(1.0+zcr**1.25)**(1./1.25) 1243 ENDIF 1244 C 1245 c$$$C PB test drag 1246 c$$$ pcfm(i,1)=zcdn 1247 c$$$ pcfh(i,1) = zcdn 1248 rugos(i)= 0.018*pcfm(i,1) * zdu2/RG 1249 $ +0.11*0.000014/sqrt(pcfm(i,1) * zdu2) 1250 rugh = 0.62*0.000014/sqrt(pcfm(i,1) * zdu2)+1.4e-5 1251 END DO 1252 END DO 1253 1254 ELSE 1255 DO i = 1, knon 1256 zdu2=max(cepdu2,u(i,1)**2+v(i,1)**2) 1257 zdphi=zgeop(i,1) 1258 ztsolv = ts(i) * (1.0+RETV*q(i,1)) ! qsol approx = q(i,1) 1259 c ztsolv = ts(i) * (1.0+RETV*qsurf(i)) 1260 ztvd=(t(i,1)+zdphi/RCPD/(1.+RVTMP2*q(i,1))) 1261 . *(1.+RETV*q(i,1)) 1262 zri(i)=zgeop(i,1)*(ztvd-ztsolv)/(zdu2*ztvd) 1263 zcdn = (ckap/log(1.+zgeop(i,1)/(RG*rugos(i))))**2 1264 c pb ajout pour avoir drage neutre flux chaleur differents 1265 zcdh = ckap**2/(log(1.+zgeop(i,1)/(RG*rugos(i))) 1266 $ * log(1.+zgeop(i,1)/(RG*1.3e-4))) 1267 IF (zri(i) .ge. 0.) THEN ! situation stable 1268 IF (.NOT.zxli) THEN 1269 zscf=SQRT(1.+cd*ABS(zri(i))) 1270 FRIV = AMAX1(1. / (1.+2.*CB*zri(i)/ZSCF), 0.1) 1271 ! zcfm1(i) = zcdn/(1.+2.0*cb*zri(i)/ zscf) 1272 zcfm1(i) = zcdn * FRIV 1273 FRIH = AMAX1(1./ (1.+3.*CB*zri(i)*ZSCF), 0.1 ) 1274 ! zcfh1(i) = zcdn/(1.+3.0*cb*zri(i)*zscf) 1275 c$$$C Modif pour drag neutre flux chaleur differents 1276 c$$$ zcfh1(i) = zcdn * FRIH 1277 zcfh1(i) = zcdh * FRIH 1278 pcfm(i,1) = zcfm1(i) 1279 pcfh(i,1) = zcfh1(i) 1280 ELSE 1281 pcfm(i,1) = zcdn* fsta(zri(i)) 1282 pcfh(i,1) = zcdn* fsta(zri(i)) 1283 ENDIF 1284 ELSE ! situation instable 1285 IF (.NOT.zxli) THEN 1286 zucf=1./(1.+3.0*cb*cc*zcdn*SQRT(ABS(zri(i)) 1287 . *(1.0+zgeop(i,1)/(RG*rugos(i))))) 1288 zcfm2(i) = zcdn*amax1((1.-2.0*cb*zri(i)*zucf),0.1) 1289 C PB ajout pour drage neutre flux chaleur differents 1290 zucf=1./(1.+3.0*cb*cc*zcdn*SQRT(ABS(zri(i)) 1291 . *(1.0+zgeop(i,1)/(RG*rugos(i))))) 1292 c$$$ zcfh2(i) = zcdn*amax1((1.-3.0*cb*zri(i)*zucf),0.1) 1293 zcfh2(i) = zcdh*amax1((1.-3.0*cb*zri(i)*zucf),0.1) 1294 pcfm(i,1) = zcfm2(i) 1295 pcfh(i,1) = zcfh2(i) 1296 ELSE 1297 pcfm(i,1) = zcdn* fins(zri(i)) 1298 pcfh(i,1) = zcdn* fins(zri(i)) 1299 ENDIF 1300 zcr = (0.0016/(zcdn*SQRT(zdu2)))*ABS(ztvd-ztsolv)**(1./3.) 1301 IF(nsrf.EQ.is_oce)pcfh(i,1)=zcdn*(1.0+zcr**1.25)**(1./1.25) 1302 ENDIF 1303 C 1304 c$$$C PB test drag 1305 c$$$ pcfm(i,1)=zcdn 1306 c$$$ pcfh(i,1) = zcdn 1307 END DO 1308 c$$$CPB fin test iterations 1309 ENDIF 1187 1310 c 1188 1311 c Calculer les coefficients turbulents dans l'atmosphere
Note: See TracChangeset
for help on using the changeset viewer.