Ignore:
Timestamp:
Jun 20, 2001, 3:29:52 PM (23 years ago)
Author:
lmdzadmin
Message:

Merge de la physique avec la branche principale
LF

File:
1 edited

Legend:

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

    r223 r230  
    281281      SAVE agesno                 ! age de la neige
    282282c
     283      REAL alb_neig(klon)
     284      SAVE alb_neig               ! albedo de la neige
     285cKE43
     286c Variables liees a la convection de K. Emanuel (sb):
     287c
     288      REAL ema_workcbmf(klon)   ! cloud base mass flux
     289      SAVE ema_workcbmf
     290
     291      REAL ema_cbmf(klon)       ! cloud base mass flux
     292      SAVE ema_cbmf
     293
     294      REAL ema_pcb(klon)        ! cloud base pressure
     295      SAVE ema_pcb
     296
     297      REAL ema_pct(klon)        ! cloud top pressure
     298      SAVE ema_pct
     299
     300      REAL bas, top             ! cloud base and top levels
     301      SAVE bas
     302      SAVE top
     303
     304      REAL Ma(klon,klev)        ! undilute upward mass flux
     305      SAVE Ma
     306      REAL ema_work1(klon, klev), ema_work2(klon, klev)
     307      SAVE ema_work1, ema_work2
     308      REAL wdn(klon), tdn(klon), qdn(klon)
     309c Variables locales pour la couche limite (al1):
     310c
     311cAl1      REAL pblh(klon)           ! Hauteur de couche limite
     312cAl1      SAVE pblh
     313c34EK
    283314c
    284315c Variables locales:
     
    346377      EXTERNAL condsurf  ! lire les conditions aux limites
    347378      EXTERNAL conlmd    ! convection (schema LMD)
     379cKE43
     380      EXTERNAL conema  ! convect4.3
    348381      EXTERNAL fisrtilp  ! schema de condensation a grande echelle (pluie)
    349382cAA
     
    426459c
    427460      REAL zphi(klon,klev)
     461      REAL zx_tmp_x(iim), zx_tmp_yjjmp1
     462      REAL zx_relief(iim,jjmp1)
     463      REAL zx_aire(iim,jjmp1)
     464cKE43
     465c Variables locales pour la convection de K. Emanuel (sb):
     466c
     467      REAL upwd(klon,klev)      ! saturated updraft mass flux
     468      REAL dnwd(klon,klev)      ! saturated downdraft mass flux
     469      REAL dnwd0(klon,klev)     ! unsaturated downdraft mass flux
     470      REAL tvp(klon,klev)       ! virtual temp of lifted parcel
     471      REAL cape(klon)           ! CAPE
     472      SAVE cape
     473      REAL pbase(klon)          ! cloud base pressure
     474      SAVE pbase
     475      REAL bbase(klon)          ! cloud base buoyancy
     476      SAVE bbase
     477      REAL rflag(klon)          ! flag fonctionnement de convect
     478c -- convect43:
     479      INTEGER ntra              ! nb traceurs pour convect4.3
     480      REAL pori_con(klon)    ! pressure at the origin level of lifted parcel
     481      REAL plcl_con(klon),dtma_con(klon),dtlcl_con(klon)
     482      REAL dtvpdt1(klon,klev), dtvpdq1(klon,klev)
     483      REAL dplcldt(klon), dplcldr(klon)
     484c?     .     condm_con(klon,klev),conda_con(klon,klev),
     485c?     .     mr_con(klon,klev),ep_con(klon,klev)
     486c?     .    ,sadiab(klon,klev),wadiab(klon,klev)
     487c --
     488c34EK
    428489c
    429490c Variables du changement
     
    460521      REAL d_u_lif(klon,klev), d_v_lif(klon,klev)
    461522      REAL d_t_lif(klon,klev)
     523
     524      REAL ratqs(klon,klev)
     525      LOGICAL zpt_conv(klon,klev)
     526
    462527c
    463528c Variables liees a l'ecriture de la bande histoire physique
     
    595660         PRINT*, "Clef pour la convection, iflag_con=", iflag_con
    596661c
     662cKE43
     663c Initialisation pour la convection de K.E. (sb):
     664         IF (iflag_con.EQ.4) THEN
     665
     666         PRINT*, "*** Convection de Kerry Emanuel 4.3  "
     667         PRINT*, "On va utiliser le melange convectif des traceurs qui"
     668         PRINT*, "est calcule dans convect4.3"
     669         PRINT*, " !!! penser aux logical flags de phytrac"
     670
     671          DO i = 1, klon
     672           ema_cbmf(i) = 0.
     673           ema_pcb(i)  = 0.
     674           ema_pct(i)  = 0.
     675           ema_workcbmf(i) = 0.
     676          ENDDO
     677         ENDIF
     678c34EK
    597679         IF (ok_orodr) THEN
    598680         DO i=1,klon
     
    665747     .                 1,iim,1,jjmp1, 0, zjulian, dtime,
    666748     .                 nhori, nid_day)
    667 c         CALL histvert(nid_day, "presnivs", "Vertical levels", "mb",
    668 c     .                 klev, presnivs, nvert)
    669          call histvert(nid_day, 'sig_s', 'Niveaux sigma','-',
    670      .              klev, znivsig, nvert)
     749         CALL histvert(nid_day, "presnivs", "Vertical levels", "mb",
     750     .                 klev, presnivs, nvert)
     751c        call histvert(nid_day, 'sig_s', 'Niveaux sigma','-',
     752c    .              klev, znivsig, nvert)
    671753c
    672754         zsto = dtime
     
    888970     .                 1,iim,1,jjmp1, 0, zjulian, dtime,
    889971     .                 nhori, nid_mth)
    890 c         CALL histvert(nid_mth, "presnivs", "Vertical levels", "mb",
    891 c     .                 klev, presnivs, nvert)
    892          call histvert(nid_mth, 'sig_s', 'Niveaux sigma','-',
    893      .              klev, znivsig, nvert)
     972         CALL histvert(nid_mth, "presnivs", "Vertical levels", "mb",
     973     .                 klev, presnivs, nvert)
     974c        call histvert(nid_mth, 'sig_s', 'Niveaux sigma','-',
     975c    .              klev, znivsig, nvert)
    894976c
    895977         zsto = dtime
     
    10971179     .                "ave(X)", zsto,zout)
    10981180c
     1181cKE43
     1182      IF (iflag_con .EQ. 4) THEN ! sb
     1183c
     1184         CALL histdef(nid_mth, "cape", "Conv avlbl pot ener", "J/Kg",
     1185     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
     1186     .                "ave(X)", zsto,zout)
     1187c
     1188         CALL histdef(nid_mth, "pbase", "Cld base pressure", "hPa",
     1189     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
     1190     .                "ave(X)", zsto,zout)
     1191c
     1192         CALL histdef(nid_mth, "ptop", "Cld top pressure", "hPa",
     1193     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
     1194     .                "ave(X)", zsto,zout)
     1195c
     1196         CALL histdef(nid_mth, "fbase", "Cld base mass flux", "Kg/m2/s",
     1197     .                iim,jjmp1,nhori, 1,1,1, -99, 32,
     1198     .                "ave(X)", zsto,zout)
     1199c
     1200c
     1201      ENDIF
     1202c34EK
     1203c
    10991204c Champs 3D:
    11001205c
     
    11781283     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
    11791284     .                "ave(X)", zsto,zout)
     1285
     1286         CALL histdef(nid_mth, "ptconv", "POINTS CONVECTIFS"," ",
     1287     .                iim,jjm+1,nhori, klev,1,klev,nvert, 32,
     1288     .                "ave(X)", zsto,zout)
     1289
     1290         CALL histdef(nid_mth, "ratqs", "RATQS"," ",
     1291     .                iim,jjm+1,nhori, klev,1,klev,nvert, 32,
     1292     .                "ave(X)", zsto,zout)
     1293
    11801294c
    11811295         CALL histdef(nid_mth, "dtajs", "Dry adjust. dT", "K/s",
     
    12501364         ENDIF
    12511365c
     1366cKE43
     1367      IF (iflag_con.EQ.4) THEN ! (sb)
     1368c
     1369         CALL histdef(nid_mth, "upwd", "saturated updraft", "Kg/m2/s",
     1370     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
     1371     .                "ave(X)", zsto,zout)
     1372c
     1373         CALL histdef(nid_mth, "dnwd", "saturated downdraft","Kg/m2/s",
     1374     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
     1375     .                "ave(X)", zsto,zout)
     1376c
     1377         CALL histdef(nid_mth, "dnwd0", "unsat. downdraft", "Kg/m2/s",
     1378     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
     1379     .                "ave(X)", zsto,zout)
     1380c
     1381         CALL histdef(nid_mth,"Ma","undilute adiab updraft","Kg/m2/s",
     1382     .                iim,jjmp1,nhori, klev,1,klev,nvert, 32,
     1383     .                "ave(X)", zsto,zout)
     1384c
     1385c
     1386      ENDIF
     1387c34EK
    12521388         CALL histend(nid_mth)
    12531389c
     
    12751411     .                 1,iim,1,jjmp1, 0, zjulian, dtime,
    12761412     .                 nhori, nid_ins)
    1277 c         CALL histvert(nid_ins, "presnivs", "Vertical levels", "mb",
    1278 c     .                 klev, presnivs, nvert)
    1279          call histvert(nid_ins, 'sig_s', 'Niveaux sigma','-',
    1280      .              klev, znivsig, nvert)
     1413         CALL histvert(nid_ins, "presnivs", "Vertical levels", "mb",
     1414     .                 klev, presnivs, nvert)
     1415c        call histvert(nid_ins, 'sig_s', 'Niveaux sigma','-',
     1416c    .              klev, znivsig, nvert)
    12811417c
    12821418c
     
    16851821c
    16861822      DO nsrf = 1, nbsrf
    1687       DO i = 1, klon
    1688          IF (pctsrf(i,nsrf).LT.epsfra) ftsol(i,nsrf) = zxtsol(i)
    1689       ENDDO
     1823        DO i = 1, klon
     1824          IF (pctsrf(i,nsrf) .LT. epsfra) ftsol(i,nsrf) = zxtsol(i)
     1825        ENDDO
    16901826      ENDDO
    16911827
     
    17501886c    s             d_t_con, d_q_con,
    17511887c    s             rain_con, snow_con, ibas_con, itop_con)
     1888cKE43
     1889      ELSE IF (iflag_con.EQ.4) THEN
     1890c nb of tracers for the KE convection:
     1891          if (nqmax .GE. 4) then
     1892              ntra = nbtr
     1893          else
     1894              ntra = 1
     1895          endif
     1896cke43 (arguments inutiles enleves => des SAVE dans conema43?)
     1897c$$$          CALL conema43(dtime,paprs,pplay,t_seri,q_seri,
     1898c$$$     $        u_seri,v_seri,tr_seri,nbtr,
     1899c$$$     .        ema_workcbmf,
     1900c$$$     .        d_t_con,d_q_con,d_u_con,d_v_con,d_tr,
     1901c$$$     .        wdn, tdn, qdn,
     1902c$$$     .        rain_con, snow_con, ibas_con, itop_con,
     1903c$$$     .        upwd,dnwd,dnwd0,bas,top,Ma,cape,tvp,rflag,
     1904c$$$     .        pbase
     1905c$$$     .        ,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr,
     1906c$$$     .        pori_con,plcl_con,dtma_con,dtlcl_con)
     1907          CALL conema (dtime,paprs,pplay,t_seri,q_seri,
     1908     $        u_seri,v_seri,tr_seri,nbtr,
     1909     .        ema_work1,ema_work2,
     1910     .        d_t_con,d_q_con,d_u_con,d_v_con,d_tr,
     1911c$$$     .        wdn, tdn, qdn,
     1912     .        rain_con, snow_con, ibas_con, itop_con,
     1913     .        upwd,dnwd,dnwd0,bas,top,Ma,cape,tvp,rflag,
     1914     .        pbase
     1915     .        ,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr)
     1916c$$$     .        pori_con,plcl_con,dtma_con,dtlcl_con)
     1917          DO i = 1, klon
     1918            ema_pcb(i)  = pbase(i)
     1919          ENDDO
     1920          DO i = 1, klon
     1921            ema_pct(i)  = paprs(i,itop_con(i))
     1922          ENDDO
     1923          DO i = 1, klon
     1924            ema_cbmf(i) = ema_workcbmf(i)
     1925          ENDDO     
    17521926      ELSE
    1753       PRINT*, "iflag_con non-prevu", iflag_con
    1754       CALL abort
     1927          PRINT*, "iflag_con non-prevu", iflag_con
     1928          CALL abort
    17551929      ENDIF
    17561930
     
    17661940      ENDDO
    17671941      IF (check) THEN
    1768          za = qcheck(klon,klev,paprs,q_seri,ql_seri,paire)
    1769          PRINT*, "aprescon=", za
    1770          zx_t = 0.0
    1771          za = 0.0
    1772          DO i = 1, klon
     1942          za = qcheck(klon,klev,paprs,q_seri,ql_seri,paire)
     1943          PRINT*, "aprescon=", za
     1944          zx_t = 0.0
     1945          za = 0.0
     1946          DO i = 1, klon
    17731947            za = za + paire(i)/FLOAT(klon)
    17741948            zx_t = zx_t + (rain_con(i)+snow_con(i))*paire(i)/FLOAT(klon)
    1775         ENDDO
    1776          zx_t = zx_t/za*dtime
    1777          PRINT*, "Precip=", zx_t
     1949          ENDDO
     1950          zx_t = zx_t/za*dtime
     1951          PRINT*, "Precip=", zx_t
    17781952      ENDIF
    17791953      IF (zx_ajustq) THEN
    1780          DO i = 1, klon
     1954          DO i = 1, klon
    17811955            z_apres(i) = 0.0
    1782          ENDDO
    1783          DO k = 1, klev
    1784          DO i = 1, klon
    1785             z_apres(i) = z_apres(i) + (q_seri(i,k)+ql_seri(i,k))
    1786      .                        *(paprs(i,k)-paprs(i,k+1))/RG
    1787          ENDDO
    1788          ENDDO
    1789          DO i = 1, klon
    1790          z_factor(i) = (z_avant(i)-(rain_con(i)+snow_con(i))*dtime)
    1791      .                /z_apres(i)
    1792          ENDDO
    1793          DO k = 1, klev
    1794          DO i = 1, klon
    1795          IF (z_factor(i).GT.(1.0+1.0E-08) .OR.
    1796      .       z_factor(i).LT.(1.0-1.0E-08)) THEN
    1797                q_seri(i,k) = q_seri(i,k) * z_factor(i)
    1798          ENDIF
    1799          ENDDO
    1800          ENDDO
     1956          ENDDO
     1957          DO k = 1, klev
     1958            DO i = 1, klon
     1959              z_apres(i) = z_apres(i) + (q_seri(i,k)+ql_seri(i,k))
     1960     .            *(paprs(i,k)-paprs(i,k+1))/RG
     1961            ENDDO
     1962          ENDDO
     1963          DO i = 1, klon
     1964            z_factor(i) = (z_avant(i)-(rain_con(i)+snow_con(i))*dtime)
     1965     .          /z_apres(i)
     1966          ENDDO
     1967          DO k = 1, klev
     1968            DO i = 1, klon
     1969              IF (z_factor(i).GT.(1.0+1.0E-08) .OR.
     1970     .            z_factor(i).LT.(1.0-1.0E-08)) THEN
     1971                  q_seri(i,k) = q_seri(i,k) * z_factor(i)
     1972              ENDIF
     1973            ENDDO
     1974          ENDDO
    18011975      ENDIF
    18021976      zx_ajustq=.FALSE.
     
    18041978      IF (nqmax.GT.2) THEN !--melange convectif de traceurs
    18051979c
    1806       IF (iflag_con.NE.2) THEN
    1807          PRINT*, "Pour l instant, seul conflx fonctionne avec traceurs"
    1808          PRINT*,' Mettre iflag_con = 2  dans  run.def et repasser  !'
    1809          CALL abort
    1810       ENDIF
     1980          IF (iflag_con .NE. 2 .AND.  iflag_con .NE. 4 ) THEN
     1981              PRINT*, 'Pour l instant, seul conflx fonctionne ',
     1982     $            'avec traceurs', iflag_con
     1983              PRINT*,' Mettre iflag_con',
     1984     $            ' = 2  ou 4 dans run.def et repasser'
     1985              CALL abort
     1986              ENDIF
    18111987c
    18121988      ENDIF !--nqmax.GT.2
     
    18211997      ENDDO
    18221998      ENDDO
     1999
     2000c   RATQS
     2001      call calcratqs (
     2002     I            paprs,pplay,q_seri,d_t_con,d_t_ajs
     2003     O           ,ratqs,zpt_conv)
    18232004c
    18242005c Appeler le processus de condensation a grande echelle
     
    18262007c
    18272008      CALL fisrtilp_tr(dtime,paprs,pplay,
    1828      .           t_seri, q_seri,
     2009     .           t_seri, q_seri,ratqs,
    18292010     .           d_t_lsc, d_q_lsc, d_ql_lsc, rneb, cldliq,
    18302011     .           rain_lsc, snow_lsc,
     
    20602241c   Calcul  des tendances traceurs
    20612242c====================================================================
     2243C Pascale : il faut quand meme apeller phytrac car il gere les sorties
     2244cKE43       des traceurs => il faut donc mettre des flags a .false.
     2245      IF (iflag_con.EQ.4) THEN
     2246c           on ajoute les tendances calculees par KE43
     2247        DO iq=1, nqmax-2 ! Sandrine a -3 ???
     2248        DO k = 1, nlev
     2249        DO i = 1, klon
     2250          tr_seri(i,k,iq) = tr_seri(i,k,iq) + d_tr(i,k,iq)
     2251        ENDDO
     2252        ENDDO
     2253        WRITE(iqn,'(i2.2)') iq
     2254        CALL minmaxqfi(tr_seri(1,1,iq),0.,1.e33,'couche lim iq='//iqn)
     2255        ENDDO
    20622256CMAF modif pour garder info du nombre de traceurs auxquels
    20632257C la physique s'applique
     2258      ELSE
     2259CMAF modif pour garder info du nombre de traceurs auxquels
     2260C la physique s'applique
    20642261C
    20652262      call phytrac (rnpb,
    2066      I                   debut,
     2263     I                   debut,lafin,
    20672264     I                   nqmax-2,
    20682265     I                   nlon,nlev,dtime,
     
    20732270     I                   rlon,presnivs,paire,pphis,
    20742271     O                   tr_seri)
     2272      ENDIF
    20752273
    20762274      IF (offline) THEN
     
    20782276         call phystokenc (
    20792277     I                   nlon,nlev,pdtphys,rlon,rlat,
    2080      I                   pmfu, pmfd, pen_u, pde_u, pen_d, pde_d,
     2278     I                   t,pmfu, pmfd, pen_u, pde_u, pen_d, pde_d,
    20812279     I                   ycoefh,yu1,yv1,ftsol,pctsrf,
    20822280     I                   frac_impa, frac_nucl,
    2083      I                   pphis,paire,dtime,itap,
    2084      O                   physid)
     2281     I                   pphis,paire,dtime,itap)
     2282
    20852283
    20862284      ENDIF
     
    24752673      CALL gr_fi_ecrit(1, klon,iim,jjmp1, vq,zx_tmp_2d)
    24762674      CALL histwrite(nid_mth,"vq",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
     2675cKE43
     2676      IF (iflag_con .EQ. 4) THEN ! sb
     2677c
     2678      CALL gr_fi_ecrit(1, klon,iim,jjmp1, cape,zx_tmp_2d)
     2679      CALL histwrite(nid_mth,"cape",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
     2680c
     2681      CALL gr_fi_ecrit(1, klon,iim,jjmp1,pbase,zx_tmp_2d)
     2682      CALL histwrite(nid_mth,"pbase",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
     2683c
     2684      CALL gr_fi_ecrit(1, klon,iim,jjmp1,ema_pct,zx_tmp_2d)
     2685      CALL histwrite(nid_mth,"ptop",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
     2686c
     2687      CALL gr_fi_ecrit(1, klon,iim,jjmp1,ema_cbmf,zx_tmp_2d)
     2688      CALL histwrite(nid_mth,"fbase",itap,zx_tmp_2d,iim*jjmp1,ndex2d)
     2689c
     2690c
     2691      ENDIF
     2692c34EK
    24772693c
    24782694c Champs 3D:
     
    25572773      CALL histwrite(nid_mth,"dqeva",itap,zx_tmp_3d,
    25582774     .                                   iim*jjmp1*klev,ndex3d)
     2775c
     2776      CALL gr_fi_ecrit(klev,klon,iim,jjm+1, zpt_conv, zx_tmp_3d)
     2777      CALL histwrite(nid_mth,"ptconv",itap,zx_tmp_3d,
     2778     .                                   iim*(jjm+1)*klev,ndex3d)
     2779c
     2780      CALL gr_fi_ecrit(klev,klon,iim,jjm+1, ratqs, zx_tmp_3d)
     2781      CALL histwrite(nid_mth,"ratqs",itap,zx_tmp_3d,
     2782     .                                   iim*(jjm+1)*klev,ndex3d)
    25592783c
    25602784      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, d_t_ajs, zx_tmp_3d)
     
    26282852      ENDDO
    26292853      ENDIF
     2854cKE43
     2855      IF (iflag_con.EQ.4) THEN ! (sb)
     2856c
     2857      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, upwd, zx_tmp_3d)
     2858      CALL histwrite(nid_mth,"upwd",itap,zx_tmp_3d,
     2859     .                                   iim*jjmp1*klev,ndex3d)
     2860c
     2861      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, dnwd, zx_tmp_3d)
     2862      CALL histwrite(nid_mth,"dnwd",itap,zx_tmp_3d,
     2863     .                                   iim*jjmp1*klev,ndex3d)
     2864c
     2865      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, dnwd0, zx_tmp_3d)
     2866      CALL histwrite(nid_mth,"dnwd0",itap,zx_tmp_3d,
     2867     .                                   iim*jjmp1*klev,ndex3d)
     2868c
     2869      CALL gr_fi_ecrit(klev,klon,iim,jjmp1, Ma, zx_tmp_3d)
     2870      CALL histwrite(nid_mth,"Ma",itap,zx_tmp_3d,
     2871     .                                   iim*jjmp1*klev,ndex3d)
     2872c
     2873c
     2874      ENDIF
     2875c34EK
    26302876c
    26312877      if (ok_sync) then
Note: See TracChangeset for help on using the changeset viewer.