Changeset 1518 for LMDZ5/trunk


Ignore:
Timestamp:
May 12, 2011, 3:32:22 PM (14 years ago)
Author:
idelkadi
Message:

Modifications des routines de convection :

  • correction de bug : le champ sigd n'etait pas decompresse avant d'etre sorti de la convection.
  • sortir de nouveaux champs de convection (plcl, plfc, wb)
Location:
LMDZ5/trunk/libf/phylmd
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/concvl.F

    r1398 r1518  
    55     .             d_t,d_q,d_u,d_v,d_tra,
    66     .             rain, snow, kbas, ktop, sigd,
    7      .             cbmf,upwd,dnwd,dnwdbis,Ma,mip,Vprecip,
     7     .             cbmf,plcl,plfc,wbeff,upwd,dnwd,dnwdbis,
     8     .             Ma,mip,Vprecip,
    89     .             cape,cin,tvp,Tconv,iflag,
    910     .             pbase,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr,
     
    120121       INTEGER i,k,itra
    121122       REAL qs(klon,klev),qs_wake(klon,klev)
    122        REAL cbmf(klon)
     123       REAL cbmf(klon),plcl(klon),plfc(klon),wbeff(klon)
    123124cLF       SAVE cbmf
    124125cIM/JYG      REAL, SAVE, ALLOCATABLE :: cbmf(:)
     
    246247         DO i = 1, klon
    247248          cbmf(i) = 0.
     249          plcl(i) = 0.
     250          plfc(i) = 0.
     251          wbeff(i) = 0.
    248252          sigd(i) = 0.
    249253         ENDDO
     
    357361     .              em_sig1feed,em_sig2feed,em_wght,
    358362     .              iflag,d_t,d_q,d_u,d_v,d_tra,rain,kbas,ktop,
    359      $              cbmf,work1,work2,ptop2,sigd,
     363     $              cbmf,plcl,plfc,wbeff,work1,work2,ptop2,sigd,
    360364     $              Ma,mip,Vprecip,upwd,dnwd,dnwdbis,qcondc,wd,
    361365     $              cape,cin,tvp,
     
    364368      endif 
    365369C------------------------------------------------------------------
     370      print *,' cva_driver -> cbmf,plcl,plfc,wbeff ',
     371     .          cbmf(1),plcl(1),plfc(1),wbeff(1)
    366372
    367373      DO i = 1,klon
  • LMDZ5/trunk/libf/phylmd/cv3a_uncompress.F

    r1398 r1518  
    11      SUBROUTINE cv3a_uncompress(nloc,len,ncum,nd,ntra,idcum
    22     :         ,iflag,kbas,ktop
    3      :         ,precip,cbmf,sig,w0,ptop2
     3     :         ,precip,cbmf,plcl,plfc,wbeff,sig,w0,ptop2
    44     :         ,ft,fq,fu,fv,ftra
    5      :         ,Ma,mip,Vprecip,upwd,dnwd,dnwd0
     5     :         ,sigd,Ma,mip,Vprecip,upwd,dnwd,dnwd0
    66     :         ,qcondc,wd,cape,cin
    77     :         ,tvp
     
    1010     :         ,asupmaxmin
    1111     o         ,iflag1,kbas1,ktop1
    12      :         ,precip1,cbmf1,sig1,w01,ptop21
     12     :         ,precip1,cbmf1,plcl1,plfc1,wbeff1,sig1,w01,ptop21
    1313     :         ,ft1,fq1,fu1,fv1,ftra1
    14      :         ,Ma1,mip1,Vprecip1,upwd1,dnwd1,dnwd01
     14     :         ,sigd1,Ma1,mip1,Vprecip1,upwd1,dnwd1,dnwd01
    1515     :         ,qcondc1,wd1,cape1,cin1
    1616     :         ,tvp1
     
    3535      integer idcum(nloc)
    3636      integer iflag(nloc),kbas(nloc),ktop(nloc)
    37       real precip(nloc),cbmf(nloc)
     37      real precip(nloc),cbmf(nloc),plcl(nloc),plfc(nloc)
     38      real wbeff(len)
    3839      real sig(nloc,nd), w0(nloc,nd),ptop2(nloc)
    3940      real ft(nloc,nd), fq(nloc,nd), fu(nloc,nd), fv(nloc,nd)
    4041      real ftra(nloc,nd,ntra)
     42      real sigd(nloc)
    4143      real Ma(nloc,nd),mip(nloc,nd),Vprecip(nloc,nd+1)
    4244      real upwd(nloc,nd),dnwd(nloc,nd),dnwd0(nloc,nd)
     
    5153c outputs:
    5254      integer iflag1(len),kbas1(len),ktop1(len)
    53       real precip1(len),cbmf1(len)
     55      real precip1(len),cbmf1(len),plcl1(nloc),plfc1(nloc)
     56      real wbeff1(len)
    5457      real sig1(len,nd), w01(len,nd),ptop21(len)
    5558      real ft1(len,nd), fq1(len,nd), fu1(len,nd), fv1(len,nd)
    5659      real ftra1(len,nd,ntra)
     60      real sigd1(len)
    5761      real Ma1(len,nd),mip1(len,nd),Vprecip1(len,nd+1)
    5862      real upwd1(len,nd),dnwd1(len,nd),dnwd01(len,nd)
     
    7074        do 2000 i=1,ncum
    7175         ptop21(idcum(i))=ptop2(i)
     76         sigd1(idcum(i))=sigd(i)
    7277         precip1(idcum(i))=precip(i)
    7378         cbmf1(idcum(i))=cbmf(i)
     79         plcl1(idcum(i))=plcl(i)
     80         plfc1(idcum(i))=plfc(i)
     81         wbeff1(idcum(i))=wbeff(i)
    7482         iflag1(idcum(i))=iflag(i)
    7583         kbas1(idcum(i))=kbas(i)
  • LMDZ5/trunk/libf/phylmd/cv3p1_closure.F

    r1516 r1518  
    77     o                      ,sig,w0,ptop2,cape,cin,m,iflag,coef
    88     :                      ,Plim1,Plim2,asupmax,supmax0
    9      :                      ,asupmaxmin,cbmf)
     9     :                      ,asupmaxmin,cbmf,plfc,wbeff)
    1010
    1111*
     
    4949      real asupmax(nloc,nd),supmax0(nloc)
    5050      real asupmaxmin(nloc)
     51      real cbmf(nloc),plfc(nloc)
     52      real wbeff(nloc)
    5153      integer iflag(nloc)
    5254c
     
    6365      integer nsupmax(nloc)
    6466      real supcrit,temp(nloc,nd)
    65       real P1(nloc),Pmin(nloc),plfc(nloc)
     67      real P1(nloc),Pmin(nloc)
    6668      real asupmax0(nloc)
    6769      logical ok(nloc)
    6870      real siglim(nloc,nd),wlim(nloc,nd),mlim(nloc,nd)
    6971      real wb2(nloc)
    70       real cbmflim(nloc),cbmf1(nloc),cbmfmax(nloc),cbmf(nloc)
     72      real cbmflim(nloc),cbmf1(nloc),cbmfmax(nloc)
    7173      real cbmflast(nloc)
    72       real wbeff(nloc)
    73 
    7474      real coef(nloc)
    7575      real xp(nloc),xq(nloc),xr(nloc),discr(nloc),b3(nloc),b4(nloc)
     
    203203           nsupmax(il)=i
    204204           ok(il)=.false.
    205         ENDIF    ! end IF (P(i) ...
     205        ENDIF    ! end IF (P(i) ...  )
    206206        ENDIF    ! end IF (icb+1 le i le inb)
    207207        ENDDO
     
    308308     $             /(P(il,i)-P(il,i-1))
    309309         GO TO 425
    310         ENDIF    ! end IF (P(i) ...
     310        ENDIF    ! end IF (P(i) ... )
    311311        ENDIF    ! end IF (icb+1 le i le inb)
    312312        ENDDO
     
    517517      ENDDO
    518518c
    519       if (flag_wb==0) then
    520          wbeff(:)=wbmax
    521       else if (flag_wb==1) then
    522          wbeff(1:ncum)=wbmax/(1.+500./(ph(1:ncum,1)-plfc(1:ncum)))
    523       else
    524          stop'cas non prevu iflag_wb'
    525 ! ligne a suprimer un jour ...
    526       endif
    527 !     if (ncum==1) print*,'WB ',plfc,wbeff,alp2,cin
    528 
     519      IF (flag_wb==0) THEN
     520        wbeff(:) = wbmax
     521      ELSE IF (flag_wb==1) THEN
     522        wbeff(1:ncum) = wbmax/(1.+500./(ph(1:ncum,1)-plfc(1:ncum)))
     523      ELSE IF (flag_wb==2) THEN
     524        wbeff(1:ncum) = wbmax*(0.01*(ph(1:ncum,1)-plfc(1:ncum)))**2
     525      ENDIF
     526c
    529527      DO il = 1,ncum
    530 
    531 !jyg    Modification du coef de wb*wb pour conformite avec papier Wake
    532 !       cbmf1(il) = alp2(il)/(0.5*wb*wb-Cin(il))
    533 ! A partir de mai 2011 on revient au 2 wb^2, conformement au papier.
    534 ! les versions d'avant (NPv2 et al) tournaient avec 0.5 wb^2 et wb=1m/s
    535 ! equivalent  a wb=1 m/s pour la nouvelle formulation
    536 ! Puis passage de wb constant a wbeff variable suivant flag_wb
    537 
     528cjyg    Modification du coef de wb*wb pour conformite avec papier Wake
     529cc       cbmf1(il) = alp2(il)/(0.5*wb*wb-Cin(il))
    538530       cbmf1(il) = alp2(il)/(2.*wbeff(il)*wbeff(il)-Cin(il))
    539 
    540531       if(cbmf1(il).EQ.0.AND.alp2(il).NE.0.) THEN
    541532        write(lunout,*)
  • LMDZ5/trunk/libf/phylmd/cva_driver.F

    r1517 r1518  
    1111     &                   sig1feed1,sig2feed1,wght1,
    1212     o                   iflag1,ft1,fq1,fu1,fv1,ftra1,
    13      &                   precip1,kbas1,ktop1,cbmf1,
     13     &                   precip1,kbas1,ktop1,
     14     &                   cbmf1,plcl1,plfc1,wbeff1,
    1415     &                   sig1,w01,                  !input/output
    15      &                   ptop21,sigd,
     16     &                   ptop21,sigd1,
    1617     &                   Ma1,mip1,Vprecip1,upwd1,dnwd1,dnwd01,
    1718     &                   qcondc1,wd1,
     
    150151      integer ktop1(len)
    151152      real cbmf1(len)
    152 !      real cbmflast(len)
     153      real plcl1(klon)
     154      real plfc1(klon)
     155      real wbeff1(klon)
    153156      real sig1(len,klev)      !input/output
    154157      real w01(len,klev)       !input/output
    155158      real ptop21(len)
     159      real sigd1(len)
    156160      real Ma1(len,nd)
    157161      real mip1(len,nd)
     
    320324c$OMP THREADPRIVATE(debut)
    321325
    322       real plcl1(klon)
    323326      real tnk1(klon)
    324327      real thnk1(klon)
     
    365368      integer inb(nloc), inbis(nloc)
    366369
    367       real cbmf(nloc),plcl(nloc)
     370      real cbmf(nloc),plcl(nloc),plfc(nloc),wbeff(nloc)
    368371      real t(nloc,klev),q(nloc,klev),qs(nloc,klev)
    369372      real t_wake(nloc,klev),q_wake(nloc,klev),qs_wake(nloc,klev)
     
    495498      call  zilch(cbmf1   ,nword1)
    496499      call  zilch(ptop21  ,nword1)
     500      sigd1=0.
    497501      call  zilch(Ma1     ,nword2)
    498502      call  zilch(mip1    ,nword2)
     
    794798     o                       ,sig,w0,ptop2,cape,cin,m,iflag,coef_clos
    795799     :                       ,Plim1,Plim2,asupmax,supmax0
    796      :                       ,asupmaxmin,cbmf)
     800     :                       ,asupmaxmin,cbmf,plfc,wbeff)
     801       
     802        print *,'cv3p1_closure-> plfc,wbeff ', plfc(1),wbeff(1)
    797803       ENDIF
    798804      endif   ! iflag_con.eq.3
     
    863869      if (debut) THEN
    864870       print *,'cv_unsat-> '
    865        debut=.FALSE.
    866871      endif !(debut) THEN
    867872!
     
    889894     :                    ,tls,tps,qcondc,wd
    890895     :                    ,ftd,fqd)
    891 !      print *,' cv3_yield -> fqd(1) = ',fqd(1,1)
    892       endif
    893 
     896      endif
     897c
     898      if (debut) THEN
     899       print *,' cv3_yield -> fqd(1) = ',fqd(1,1)
     900      endif !(debut) THEN
     901c
    894902      if (iflag_con.eq.4) then
    895903       CALL cv_yield(nloc,ncum,nd,nk,icb,inb,delt
     
    912920       CALL cv3a_uncompress(nloc,len,ncum,nd,ntra,idcum
    913921     :          ,iflag,icb,inb
    914      :          ,precip,cbmf,sig,w0,ptop2
     922     :          ,precip,cbmf,plcl,plfc,wbeff,sig,w0,ptop2
    915923     :          ,ft,fq,fu,fv,ftra
    916      :          ,Ma,mip,Vprecip,upwd,dnwd,dnwd0
     924     :          ,sigd,Ma,mip,Vprecip,upwd,dnwd,dnwd0
    917925     ;          ,qcondc,wd,cape,cin
    918926     :          ,tvp
     
    921929     :          ,asupmaxmin
    922930     o          ,iflag1,kbas1,ktop1
    923      o          ,precip1,cbmf1,sig1,w01,ptop21
     931     o          ,precip1,cbmf1,plcl1,plfc1,wbeff1,sig1,w01,ptop21
    924932     o          ,ft1,fq1,fu1,fv1,ftra1
    925      o          ,Ma1,mip1,Vprecip1,upwd1,dnwd1,dnwd01
     933     o          ,sigd1,Ma1,mip1,Vprecip1,upwd1,dnwd1,dnwd01
    926934     o          ,qcondc1,wd1,cape1,cin1
    927935     o          ,tvp1
     
    944952
    945953      ENDIF ! ncum>0
     954c
     955      if (debut) THEN
     956       print *,' cv_compress -> '
     957       debut=.FALSE.
     958      endif !(debut) THEN
     959c
    946960
    9479619999  continue
  • LMDZ5/trunk/libf/phylmd/phys_output_mod.F90

    r1507 r1518  
    229229  type(ctrl_out),save :: o_ptop         = ctrl_out((/ 1, 5, 10, 10, 10 /),'ptop')
    230230  type(ctrl_out),save :: o_fbase        = ctrl_out((/ 1, 10, 10, 10, 10 /),'fbase')
     231  type(ctrl_out),save :: o_plcl        = ctrl_out((/ 1, 10, 10, 10, 10 /),'plcl')
     232  type(ctrl_out),save :: o_plfc        = ctrl_out((/ 1, 10, 10, 10, 10 /),'plfc')
     233  type(ctrl_out),save :: o_wbeff        = ctrl_out((/ 1, 10, 10, 10, 10 /),'wbeff')
    231234  type(ctrl_out),save :: o_prw          = ctrl_out((/ 1, 1, 10, 10, 10 /),'prw')
    232235
     
    10041007 CALL histdef2d(iff,o_ptop%flag,o_ptop%name, "Cld top pressure", "Pa")
    10051008 CALL histdef2d(iff,o_fbase%flag,o_fbase%name, "Cld base mass flux", "kg/m2/s")
     1009 CALL histdef2d(iff,o_plcl%flag,o_plcl%name, "Lifting Condensation Level", "hPa")
     1010 CALL histdef2d(iff,o_plfc%flag,o_plfc%name, "Level of Free Convection", "hPa")
     1011 CALL histdef2d(iff,o_wbeff%flag,o_wbeff%name, "Conv. updraft velocity at LFC", "m/s")
    10061012 CALL histdef2d(iff,o_prw%flag,o_prw%name, "Precipitable water", "kg/m2")
    10071013   type_ecri(1) = 't_max(X)'
  • LMDZ5/trunk/libf/phylmd/phys_output_write.h

    r1507 r1518  
    550550      CALL histwrite_phy(nid_files(iff),o_fbase%name,itau_w,ema_cbmf)
    551551        ENDIF
     552
     553        IF (o_plcl%flag(iff)<=lev_files(iff)) THEN
     554      CALL histwrite_phy(nid_files(iff),o_plcl%name,itau_w,plcl)
     555        ENDIF
     556
     557        IF (o_plfc%flag(iff)<=lev_files(iff)) THEN
     558      CALL histwrite_phy(nid_files(iff),o_plfc%name,itau_w,plfc)
     559        ENDIF
     560
     561        IF (o_wbeff%flag(iff)<=lev_files(iff)) THEN
     562      CALL histwrite_phy(nid_files(iff),o_wbeff%name,itau_w,wbeff)
     563        ENDIF
     564
    552565
    553566        IF (o_prw%flag(iff)<=lev_files(iff)) THEN
  • LMDZ5/trunk/libf/phylmd/physiq.F

    r1517 r1518  
    871871      REAL dnwd0(klon,klev)     ! unsaturated downdraft mass flux
    872872      REAL tvp(klon,klev)       ! virtual temp of lifted parcel
     873      REAL plcl(klon)           ! Lifting Condensation Level
     874      REAL plfc(klon)           ! Level of Free Convection
     875      REAL wbeff(klon)          ! saturated updraft velocity at LFC
    873876      CHARACTER*40 capemaxcels  !max(CAPE)
    874877
     
    879882      INTEGER ntra              ! nb traceurs pour convect4.3
    880883      REAL pori_con(klon)    ! pressure at the origin level of lifted parcel
    881       REAL plcl_con(klon),dtma_con(klon),dtlcl_con(klon)
     884      REAL dtma_con(klon),dtlcl_con(klon)
    882885      REAL dtvpdt1(klon,klev), dtvpdq1(klon,klev)
    883886      REAL dplcldt(klon), dplcldr(klon)
     
    21862189     .        d_t_con,d_q_con,d_u_con,d_v_con,d_tr,
    21872190     .        rain_con, snow_con, ibas_con, itop_con, sigd,
    2188      .        ema_cbmf,upwd,dnwd,dnwd0,
     2191     .        ema_cbmf,plcl,plfc,wbeff,upwd,dnwd,dnwd0,
    21892192     .        Ma,mip,Vprecip,cape,cin,tvp,Tconv,iflagctrl,
    21902193     .        pbase,bbase,dtvpdt1,dtvpdq1,dplcldt,dplcldr,qcondc,wd,
Note: See TracChangeset for help on using the changeset viewer.