Changeset 389 for LMDZ.3.3/branches


Ignore:
Timestamp:
Jul 17, 2002, 11:06:29 AM (22 years ago)
Author:
lmdzadmin
Message:

Modifs de Pascale sur les cdrags
LF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ.3.3/branches/rel-LF/libf/phylmd/clmain.F

    r363 r389  
    482482      DO j = 1, knon
    483483         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))
    484485         yrugm(j) = MAX(1.5e-05,yrugm(j))
    485486      ENDDO
     
    11001101      REAL zcfm1(klon), zcfm2(klon)
    11011102      REAL zcfh1(klon), zcfh2(klon)
    1102       REAL zdphi, zdu2, ztvd, ztvu, ztsolv, zcdn
     1103c$$$      REAL zdphi, zdu2, ztvd, ztvu, ztsolv, zcdn
     1104c$$$cPB differenciation coefficient de frottement drag et flux chaleur
     1105      REAL zdphi, zdu2, ztvd, ztvu, ztsolv, zcdn,zcdh, rugh
    11031106      REAL zscf, zucf, zcr
    11041107      REAL zt, zq, zdelta, zcvm5, zcor, zqs, zfr, zdqs
     
    11831186c Calculer le frottement au sol (Cdrag)
    11841187c
    1185       CALL clcdrag(knon, nsrf, zxli, u, v, t, q, zgeop,
    1186      .             ts, qsurf, rugos, pcfm, pcfh, zcdn, zri)
     1188c$$$c PB
     1189c$$$c essais d'itération pour l'océan
     1190c
     1191      rugh = 1.3 e-4
     1192      IF (nsrf.EQ.is_oce) THEN
     1193      DO k=1,10
     1194c$$$        WRITE(*,*) 'k',k
     1195c$$$        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)
     1200c$$$         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
     1205c 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)
     1216c PB avec drag neutre pour flux chaleur different
     1217c           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)
     1230c 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))))
     1233c$$$           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
     1244C
     1245c$$$C PB test drag
     1246c$$$         pcfm(i,1)=zcdn
     1247c$$$         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)
     1259c         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
     1264c 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)
     1275c$$$C Modif pour drag neutre flux chaleur differents
     1276c$$$           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)
     1289C 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)))))
     1292c$$$           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
     1303C
     1304c$$$C PB test drag
     1305c$$$         pcfm(i,1)=zcdn
     1306c$$$         pcfh(i,1) = zcdn
     1307      END DO
     1308c$$$CPB fin test iterations
     1309      ENDIF
    11871310c
    11881311c Calculer les coefficients turbulents dans l'atmosphere
Note: See TracChangeset for help on using the changeset viewer.