Changeset 407 for LMDZ.3.3/branches


Ignore:
Timestamp:
Oct 15, 2002, 4:59:04 PM (22 years ago)
Author:
lmdzadmin
Message:

Diagnostics supplementaires: T2m, q2m, u et v a 10m JP/IM
IM/LF

File:
1 edited

Legend:

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

    r400 r407  
    1616     .                  flux_t,flux_q,flux_u,flux_v,cdragh,cdragm,
    1717     .                  dflux_t,dflux_q,
    18      .                  zcoefh,zu1,zv1)
     18     .                  zcoefh,zu1,zv1, t2m, q2m, u10m, v10m)
    1919cAA .                  itr, tr, flux_surf, d_tr)
    2020cAA REM:
     
    3535      USE ioipsl
    3636      USE interface_surf
     37      USE stdlevvar_int
    3738      IMPLICIT none
    3839c======================================================================
     
    169170c
    170171#include "YOMCST.h"
     172#include "YOETHF.h"
     173#include "FCTTRE.h"
    171174      REAL u1lay(klon), v1lay(klon)
    172175      REAL delp(klon,klev)
     
    203206      integer idayref
    204207#include "temps.h"
    205      
     208      REAL t2m(klon,nbsrf), q2m(klon,nbsrf)
     209      REAL u10m(klon,nbsrf), v10m(klon,nbsrf)
     210c
     211      REAL yt2m(klon), yq2m(klon), yu10m(klon)
     212c
     213      REAL uzon(klon), vmer(klon)
     214      REAL tair1(klon), qair1(klon), tairsol(klon)
     215      REAL psfce(klon), patm(klon)
     216c
     217      REAL qairsol(klon), zgeo1(klon)
     218      REAL rugo1(klon)
     219c
     220      LOGICAL zxli ! utiliser un jeu de fonctions simples
     221      PARAMETER (zxli=.FALSE.)
     222c
     223      REAL zt, zqs, zdelta, zcor
     224      REAL t_coup
     225      PARAMETER(t_coup=273.15)
     226C
     227      PRINT*,'IMclmain klon=',klon
    206228      IF (first_appel) THEN
    207229          first_appel=.false.
     
    276298      yv1 = 0.0
    277299      yrads = 0.0
    278       ypaprs = 0.0
    279300      ypaprs = 0.0
    280301      ypplay = 0.0
     
    573594      ENDDO
    574595c
     596c
     597#undef T2m     
     598#ifdef T2m
     599ccc diagnostic t,q a 2m et u, v a 10m
     600c
     601      DO j=1, knon
     602        i = ni(j)
     603        uzon(j) = yu(j,1) + y_d_u(j,1)
     604        vmer(j) = yv(j,1) + y_d_v(j,1)
     605        tair1(j) = yt(j,1) + y_d_t(j,1)
     606        qair1(j) = yq(j,1) + y_d_q(j,1)
     607        zgeo1(j) = RD * tair1(j) / (0.5*(ypaprs(j,1)+ypplay(j,1)))
     608     &                   * (ypaprs(j,1)-ypplay(j,1))
     609        tairsol(j) = yts(j) + y_d_ts(j)
     610        rugo1(j) = yrugos(j)
     611        IF(nsrf.EQ.is_oce) THEN
     612         rugo1(j) = rugos(i,nsrf)
     613        ENDIF
     614        psfce(j)=ypaprs(j,1)
     615        patm(j)=ypplay(j,1)
     616c
     617        IF (nsrf.EQ.1) THEN
     618          qairsol(j) = yqsol(j)
     619        ELSE IF(nsrf.GT.1) THEN
     620         zt = ts(i,nsrf)
     621         IF (thermcep) THEN
     622           zdelta = MAX(0.,SIGN(1.,RTT-zt))
     623           zqs = R2ES * FOEEW(zt,zdelta) / ypplay(j,1)
     624           zqs = MIN(0.5,zqs)
     625           zcor = 1./(1.-RETV*zqs)
     626           zqs = zqs*zcor
     627         ELSE
     628           IF (zt .LT. t_coup) THEN
     629             zqs = qsats(zt) / ypplay(j,1)
     630           ELSE
     631             zqs = qsatl(zt) / ypplay(j,1)
     632           ENDIF
     633         ENDIF   
     634         qairsol(j) = zqs
     635        ENDIF   
     636      ENDDO
     637c
     638      IF(nsrf.EQ.3) THEN
     639       j=1465
     640       WRITE(*,*)' INstO',klon,knon,nsrf,zxli,uzon(j),vmer(j),
     641     & tair1(j),qair1(j),zgeo1(j),tairsol(j),qairsol(j),rugo1(j),
     642     & psfce(j),patm(j)
     643      ENDIF
     644c
     645      CALL stdlevvar(klon, knon, nsrf, zxli,
     646     &               uzon, vmer, tair1, qair1, zgeo1,
     647     &               tairsol, qairsol, rugo1, psfce, patm,
     648     &               yt2m, yq2m, yu10m)
     649
     650c
     651      IF(nsrf.EQ.3) THEN
     652       j=1465
     653       WRITE(*,*)' OUstd',klon,knon,nsrf,zxli,uzon(j),vmer(j),
     654     & tair1(j),qair1(j),zgeo1(j),tairsol(j),qairsol(j),rugo1(j),
     655     & psfce(j),patm(j)
     656       WRITE(*,*)' tqu',yt2m(j),yq2m(j),yu10m(j)
     657      ENDIF
     658c
     659      DO j=1, knon
     660       i = ni(j)
     661       t2m(i,nsrf)=yt2m(j)
     662
     663        IF(nsrf.EQ.3) THEN
     664         IF(j.EQ.1465) THEN
     665         WRITE(*,*) 't2m APRES stdlev',j,i,tair1(j),t2m(i,nsrf),
     666     $   tairsol(j),rlon(i),rlat(i)
     667         ENDIF
     668        ENDIF
     669c
     670       q2m(i,nsrf)=yq2m(j)
     671c
     672c u10m, v10m : composantes du vent a 10m sans spirale de Ekman
     673       u10m(i,nsrf)=(yu10m(j) * uzon(j))/sqrt(uzon(j)**2+vmer(j)**2)
     674       v10m(i,nsrf)=(yu10m(j) * vmer(j))/sqrt(uzon(j)**2+vmer(j)**2)
     675c
     676      ENDDO
     677#else
     678       DO j=1, knon
     679         t2m(i,nsrf)=0.
     680         q2m(i,nsrf)=0.
     681         u10m(i,nsrf)=0.
     682         v10m(i,nsrf)=0.
     683       ENDDO
     684#endif
    57568599999 CONTINUE
    576686c
     
    10281138     .                  u,v,t,q,
    10291139     .                  pcfm, pcfh)
     1140      USE clcdrag_int
    10301141      IMPLICIT none
    10311142c======================================================================
     
    10701181      REAL cepdu2, ckap, cb, cc, cd, clam
    10711182      PARAMETER (cepdu2 =(0.1)**2)
    1072       PARAMETER (ckap=0.35)
     1183      PARAMETER (CKAP=0.4)
    10731184      PARAMETER (cb=5.0)
    10741185      PARAMETER (cc=5.0)
     
    11031214      REAL zri(klon)
    11041215      REAL zl2(klon)
    1105       REAL zcfm1(klon), zcfm2(klon)
    1106       REAL zcfh1(klon), zcfh2(klon)
    1107       REAL zdphi, zdu2, ztvd, ztvu, ztsolv, zcdn
    1108       REAL zscf, zucf, zcr
     1216
     1217      REAL u1(klon), v1(klon), t1(klon), q1(klon), z1(klon)
     1218      REAL pcfm1(klon), pcfh1(klon)
     1219c
     1220      REAL zdphi, zdu2, ztvd, ztvu, zcdn
     1221      REAL zscf
    11091222      REAL zt, zq, zdelta, zcvm5, zcor, zqs, zfr, zdqs
    11101223      REAL z2geomf, zalh2, zalm2, zscfh, zscfm
     
    11161229c essai qsurf
    11171230      real qsurf(klon)
    1118       real friv, frih
    11191231c
    11201232      LOGICAL appel1er
     
    11881300c Calculer le frottement au sol (Cdrag)
    11891301c
    1190       CALL clcdrag(knon, nsrf, zxli, u, v, t, q, zgeop,
    1191      .             ts, qsurf, rugos, pcfm, pcfh, zcdn, zri)
     1302c     DO i = 1, knon
     1303      DO i = 1, klon
     1304       u1(i) = u(i,1)
     1305       v1(i) = v(i,1)
     1306       t1(i) = t(i,1)
     1307       q1(i) = q(i,1)
     1308       z1(i) = zgeop(i,1)
     1309      ENDDO
     1310c
     1311      CALL clcdrag(klon, knon, nsrf, zxli,
     1312     $             u1, v1, t1, q1, z1,
     1313     $             ts, qsurf, rugos,
     1314     $             pcfm1, pcfh1)
     1315C
     1316      DO i = 1, knon
     1317       pcfm(i,1)=pcfm1(i)
     1318       pcfh(i,1)=pcfh1(i)
     1319      ENDDO
    11921320c
    11931321c Calculer les coefficients turbulents dans l'atmosphere
     
    11961324         itop(i) = isommet
    11971325      ENDDO
     1326
     1327      PRINT*,' isommet=',isommet,' knon=',knon
    11981328
    11991329      DO k = 2, isommet
     
    13101440      END
    13111441
    1312       SUBROUTINE clcdrag(knon, nsrf, zxli,
    1313      .                   u, v, t, q, zgeop,
    1314      .                   ts, qsurf, rugos,
    1315      .                   pcfm, pcfh, zcdn, zri)
    1316 c ================================================================= c
    1317 c Objet : calcul cdrags pour le moment et les flux chaleur sensible, latente (pcfm,pcfh)
    1318 c         et du nombre de Richardson zri
    1319 c ================================================================= c
    1320       IMPLICIT NONE
    1321 #include "dimensions.h"
    1322 #include "dimphy.h"
    1323 #include "YOMCST.h"
    1324 #include "YOETHF.h"
    1325 #include "indicesol.h"
    1326 c
    1327       INTEGER knon, nsrf
    1328       REAL ts(klon), qsurf(klon)
    1329       REAL u(klon,klev), v(klon,klev), t(klon,klev), q(klon,klev)
    1330       REAL zgeop(klon,klev)
    1331       REAL rugos(klon), zri(klon)
    1332 c
    1333       REAL zcdn
    1334       REAL pcfm(klon,klev), pcfh(klon,klev)
    1335 c
    1336 c Quelques constantes et options:
    1337 c
    1338       REAL ckap, cb, cc, cd, cepdu2
    1339       PARAMETER (ckap=0.35)
    1340       PARAMETER (cb=5.0)
    1341       PARAMETER (cc=5.0)
    1342       PARAMETER (cd=5.0)
    1343       PARAMETER (cepdu2 =(0.1)**2)
    1344 c
    1345 c Variables locales
    1346       INTEGER i
    1347       REAL zdu2, zdphi, ztsolv, ztvd, zscf, zucf, zcr
    1348       REAL friv, frih
    1349       REAL zcfm1(klon), zcfm2(klon)
    1350       REAL zcfh1(klon), zcfh2(klon)
    1351 c
    1352 c Fonctions thermodynamiques et fonctions d'instabilite
    1353       REAL fsta, fins, x
    1354       LOGICAL zxli
    1355       fsta(x) = 1.0 / (1.0+10.0*x*(1+8.0*x))
    1356       fins(x) = SQRT(1.0-18.0*x)
    1357 c
    1358 c Calculer le frottement au sol (Cdrag)
    1359 c
    1360       DO i = 1, knon
    1361          zdu2=max(cepdu2,u(i,1)**2+v(i,1)**2)
    1362          zdphi=zgeop(i,1)
    1363 c        ztsolv = ts(i) * (1.0+RETV*q(i,1)) ! qsol approx = q(i,1)
    1364          ztsolv = ts(i) * (1.0+RETV*qsurf(i))
    1365          ztvd=(t(i,1)+zdphi/RCPD/(1.+RVTMP2*q(i,1)))
    1366      .       *(1.+RETV*q(i,1))
    1367          zri(i)=zgeop(i,1)*(ztvd-ztsolv)/(zdu2*ztvd)
    1368          zcdn = (ckap/log(1.+zgeop(i,1)/(RG*rugos(i))))**2
    1369          IF (zri(i) .ge. 0.) THEN ! situation stable
    1370            IF (.NOT.zxli) THEN
    1371            zscf=SQRT(1.+cd*ABS(zri(i)))
    1372            FRIV = AMAX1(1. / (1.+2.*CB*zri(i)/ZSCF), 0.1)
    1373 !           zcfm1(i) = zcdn/(1.+2.0*cb*zri(i)/ zscf)
    1374            zcfm1(i) = zcdn * FRIV
    1375            FRIH = AMAX1(1./ (1.+3.*CB*zri(i)*ZSCF), 0.1 )
    1376 !           zcfh1(i) = zcdn/(1.+3.0*cb*zri(i)*zscf)
    1377            zcfh1(i) = zcdn * FRIH
    1378            pcfm(i,1) = zcfm1(i)
    1379            pcfh(i,1) = zcfh1(i)
    1380            ELSE
    1381            pcfm(i,1) = zcdn* fsta(zri(i))
    1382            pcfh(i,1) = zcdn* fsta(zri(i))
    1383            ENDIF
    1384          ELSE ! situation instable
    1385            IF (.NOT.zxli) THEN
    1386            zucf=1./(1.+3.0*cb*cc*zcdn*SQRT(ABS(zri(i))
    1387      .              *(1.0+zgeop(i,1)/(RG*rugos(i)))))
    1388            zcfm2(i) = zcdn*amax1((1.-2.0*cb*zri(i)*zucf),0.1)
    1389            zcfh2(i) = zcdn*amax1((1.-3.0*cb*zri(i)*zucf),0.1)
    1390            pcfm(i,1) = zcfm2(i)
    1391            pcfh(i,1) = zcfh2(i)
    1392            ELSE
    1393            pcfm(i,1) = zcdn* fins(zri(i))
    1394            pcfh(i,1) = zcdn* fins(zri(i))
    1395            ENDIF
    1396            zcr = (0.0016/(zcdn*SQRT(zdu2)))*ABS(ztvd-ztsolv)**(1./3.)
    1397            IF(nsrf.EQ.is_oce)pcfh(i,1)=zcdn*(1.0+zcr**1.25)**(1./1.25)
    1398          ENDIF
    1399       END DO
    1400       RETURN
    1401       END
    1402 
    14031442      SUBROUTINE coefkz2(nsrf, knon, paprs, pplay,t,
    14041443     .                  pcfm, pcfh)
     
    16111650      PARAMETER (isommet=klev)
    16121651      REAL vk
    1613       PARAMETER (vk=0.35)
     1652      PARAMETER (vk=0.40)
    16141653      REAL ricr
    16151654      PARAMETER (ricr=0.4)
Note: See TracChangeset for help on using the changeset viewer.