Ignore:
Timestamp:
Jan 5, 2016, 4:37:49 PM (8 years ago)
Author:
crio
Message:

Nouvelle option d'epluchage de l'ascendance adiabatique dans le schema d'Emanuel: epluchage fonction de B/w2 au lieu de w. S'active avec iflag_mix_adiab=1 (valeur par defaut iflag_mix_adiab=0). Fonctionne avec iflag_mix=0 et iflag_mix=1.
Correction de bugs dans le schema de convection pour le calcul de inb, cape et buoy (sous le meme flag pour l'instant).
New option for the erosion of the adiabatic ascent in the Emanuel scheme: erosion function of B/w2 instead of w. Activated by iflag_mix_adiab=1 (standard value iflag_mix_adiab=0). Should work with iflag_mix=0 and iflag_mix=1.
Various bug corrections in the convection scheme for the computation of inb, cape, buoy (protected by the same flag for now).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/cv3p2_closure.F90

    r2398 r2420  
    5959  REAL                                               :: deltap, fac, w, amu
    6060  REAL, DIMENSION (nloc, nd)                         :: rhodp               ! Factor such that m=rhodp*sig*w
     61  REAL                                               :: dz
    6162  REAL                                               :: pbmxup
    6263  REAL, DIMENSION (nloc, nd)                         :: dtmin, sigold
     
    8586  REAL, DIMENSION (nloc)                             :: alp2                  ! Alp with offset
    8687
     88!CR: variables for new erosion of adiabiatic ascent
     89  REAL, DIMENSION (nloc, nd)                         :: mad, me, betalim, beta_coef
     90  REAL, DIMENSION (nloc, nd)                         :: med, md
     91  REAL                                               :: coef_peel
     92  PARAMETER (coef_peel=0.25)
     93
    8794  REAL                                               :: sigmax
    8895  PARAMETER (sigmax=0.1)
     
    120127    END DO
    121128  END DO
     129
     130!CR: initializations for erosion of adiabatic ascent
     131  DO k = 1,nl
     132    DO il = 1, ncum
     133        mad(il,k)=0.
     134        me(il,k)=0.
     135        betalim(il,k)=1.
     136        wlim(il,k)=0.
     137    ENDDO
     138  ENDDO
    122139
    123140  ! -------------------------------------------------------
     
    496513      IF ((k>=(icb(il)+1)) .AND. (k<=inb(il))) THEN
    497514
     515        IF (iflag_mix_adiab.eq.1) THEN
     516!CR:computation of cape from LCL: keep flag or to modify in all cases?
     517        deltap = min(plcl(il), ph(il,k-1)) - min(plcl(il), ph(il,k))
     518        ELSE
    498519        deltap = min(pbase(il), ph(il,k-1)) - min(pbase(il), ph(il,k))
     520        ENDIF
    499521        cape(il) = cape(il) + rrd*buoy(il, k-1)*deltap/p(il, k-1)
    500522        cape(il) = amax1(0.0, cape(il))
     
    681703                         (k,w0(igout,k),sig(igout,k), k=icb(igout),inb(igout))
    682704
     705!CR: new erosion of adiabatic ascent: modification of m
     706!computation of the sum of ascending fluxes
     707  IF (iflag_mix_adiab.eq.1) THEN
     708
     709!Verification sum(me)=sum(m)
     710  DO k = 1,nl+1
     711    DO il = 1, ncum
     712       md(il,k)=0.
     713       med(il,k)=0.
     714    ENDDO
     715  ENDDO
     716
     717  DO k = nl,1,-1
     718    DO il = 1, ncum
     719           md(il,k)=md(il,k+1)+m(il,k+1)
     720    ENDDO
     721  ENDDO
     722
     723  DO k = nl,1,-1
     724    DO il = 1, ncum
     725        IF ((k>=(icb(il))) .AND. (k<=inb(il))) THEN
     726           mad(il,k)=mad(il,k+1)+m(il,k+1)
     727        ENDIF
     728!        print*,"mad",il,k,mad(il,k)
     729    ENDDO
     730  ENDDO
     731
     732!CR: erosion of each adiabatic ascent during its ascent
     733
     734!Computation of erosion coefficient beta_coef
     735  DO k = 1, nl
     736    DO il = 1, ncum
     737       IF ((k>=(icb(il)+1)) .AND. (k<=inb(il)) .AND. (mlim(il,k).gt.0.)) THEN     
     738!          print*,"beta_coef",il,k,icb(il),inb(il),buoy(il,k),tv(il,k),wlim(il,k),wlim(il,k+1)
     739          beta_coef(il,k)=RG*coef_peel*buoy(il,k)/tv(il,k)/((wlim(il,k)+wlim(il,k+1))/2.)**2
     740       ELSE
     741          beta_coef(il,k)=0.
     742       ENDIF
     743    ENDDO
     744  ENDDO
     745
     746!  print*,"apres beta_coef"
     747
     748  DO k = 1, nl
     749    DO il = 1, ncum
     750
     751      IF ((k>=(icb(il)+1)) .AND. (k<=inb(il))) THEN
     752
     753!        print*,"dz",il,k,tv(il, k-1)
     754        dz = (ph(il,k-1)-ph(il,k))/(p(il, k-1)/(rrd*tv(il, k-1))*RG)
     755        betalim(il,k)=betalim(il,k-1)*exp(-1.*beta_coef(il,k-1)*dz)
     756!        betalim(il,k)=betalim(il,k-1)*exp(-RG*coef_peel*buoy(il,k-1)/tv(il,k-1)/5.**2*dz)
     757!        print*,"me",il,k,mlim(il,k),buoy(il,k),wlim(il,k),mad(il,k)
     758        dz = (ph(il,k)-ph(il,k+1))/(p(il, k)/(rrd*tv(il, k))*RG)
     759!        me(il,k)=betalim(il,k)*(m(il,k)+RG*coef_peel*buoy(il,k)/tv(il,k)/((wlim(il,k)+wlim(il,k+1))/2.)**2*dz*mad(il,k))
     760        me(il,k)=betalim(il,k)*(m(il,k)+beta_coef(il,k)*dz*mad(il,k))
     761!        print*,"B/w2",il,k,RG*coef_peel*buoy(il,k)/tv(il,k)/((wlim(il,k)+wlim(il,k+1))/2.)**2*dz   
     762     
     763      END IF
     764       
     765!Modification of m
     766      m(il,k)=me(il,k)
     767    END DO
     768  END DO
     769 
     770!  DO il = 1, ncum
     771!     dz = (ph(il,icb(il))-ph(il,icb(il)+1))/(p(il, icb(il))/(rrd*tv(il, icb(il)))*RG)
     772!     m(il,icb(il))=m(il,icb(il))+RG*coef_peel*buoy(il,icb(il))/tv(il,icb(il)) &
     773!                  /((wlim(il,icb(il))+wlim(il,icb(il)+1))/2.)**2*dz*mad(il,icb(il))
     774!     print*,"wlim(icb)",icb(il),wlim(il,icb(il)),m(il,icb(il))
     775!  ENDDO
     776
     777!Verification sum(me)=sum(m)
     778  DO k = nl,1,-1
     779    DO il = 1, ncum
     780           med(il,k)=med(il,k+1)+m(il,k+1)
     781!           print*,"somme(me),somme(m)",il,k,icb(il),med(il,k),md(il,k),me(il,k),m(il,k),wlim(il,k)
     782    ENDDO
     783  ENDDO
     784
     785
     786  ENDIF !(iflag_mix_adiab)
     787!RC
     788
    683789  ! c 3. Compute final cloud base mass flux;
    684790  ! c    set iflag to 3 if cloud base mass flux is exceedingly small and is
Note: See TracChangeset for help on using the changeset viewer.