Ignore:
Timestamp:
Jan 10, 2017, 3:30:46 PM (8 years ago)
Author:
jyg
Message:

Changes to convection and wakes:
+ convection is allowed only when

Plcl < 0.99*psurf

Controlled by cv_flag_feed=2 (D:1)


+ check on the triangular shape of
DT_wk.

Controlled by flag_wk_check_trgl=y
(D : n)



Location:
LMDZ5/trunk/libf/phylmd
Files:
3 edited

Legend:

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

    r2671 r2757  
    8383
    8484! Var interm pour le getin
     85     cv_flag_feed=1
     86     CALL getin_p('cv_flag_feed',cv_flag_feed)
    8587     dpbase=-40.
    8688     CALL getin_p('dpbase',dpbase)
     
    453455    END DO
    454456  END DO !  iter
     457
    455458  DO i = 1, len
    456459    p2feed(i) = pfeed(i)
     
    467470! --- are reasonable
    468471! -------------------------------------------------------------------
    469   DO i = 1, len
    470     IF (((tnk(i)<250.0) .OR. (qnk(i)<=0.0)) .AND. (iflag(i)==0)) iflag(i) = 7
    471   END DO
     472  IF (cv_flag_feed == 1) THEN
     473    DO i = 1, len
     474      IF (((tnk(i)<250.0)                       .OR.  &
     475           (qnk(i)<=0.0))                       .AND. &
     476          (iflag(i)==0)) iflag(i) = 7
     477    END DO
     478  ELSEIF (cv_flag_feed >= 2) THEN
     479! --- and demand that LCL be high enough
     480    DO i = 1, len
     481      IF (((tnk(i)<250.0)                       .OR.  &
     482           (qnk(i)<=0.0)                        .OR.  &
     483           (plcl(i)>min(0.99*ph(i,1),ph(i,3)))) .AND. &
     484          (iflag(i)==0)) iflag(i) = 7
     485    END DO
     486  ENDIF
    472487
    473488! -------------------------------------------------------------------
  • LMDZ5/trunk/libf/phylmd/cv3param.h

    r2508 r2757  
    1111      logical ok_intermittent
    1212      integer noff, minorig, nl, nlp, nlm
     13      integer cv_flag_feed
     14      integer flag_epKEorig,flag_wb
    1315      real sigdz, spfac
    14       integer flag_epKEorig,flag_wb
    1516      real pbcrit, ptcrit
    1617      real elcrit, tlcrit
     
    3536                      ,delta, betad  &
    3637                      ,flag_epKEorig &
    37                       ,flag_wb &
     38                      ,flag_wb, cv_flag_feed &
    3839                      ,noff, minorig, nl, nlp, nlm  &
    3940                      ,ok_convstop, ok_intermittent &
  • LMDZ5/trunk/libf/phylmd/wake.F90

    r2671 r2757  
    171171  !$OMP THREADPRIVATE(stark, wdens_ref, coefgw, alpk, crep_upper, crep_sol)
    172172
     173  LOGICAL, SAVE                                         :: flag_wk_check_trgl
     174  !$OMP THREADPRIVATE(flag_wk_check_trgl)
     175
    173176  REAL                                                  :: delta_t_min
    174177  INTEGER                                               :: nsub
     
    200203  REAL, DIMENSION (klon)                                :: z, dz, hw0
    201204  INTEGER, DIMENSION (klon)                             :: ktop, kupper
     205
     206  ! Variables liées au test de la forme triangulaire du profil de Delta_theta
     207  REAL, DIMENSION (klon)                                :: sum_half_dth
     208  REAL, DIMENSION (klon)                                :: dz_half
    202209
    203210  ! Sub-timestep tendencies and related variables
     
    321328  WRITE(*,*) 'wdens_ref=', wdens_ref
    322329  WRITE(*,*) 'coefgw=', coefgw
     330
     331  flag_wk_check_trgl=.false.
     332  CALL getin_p('flag_wk_check_trgl ', flag_wk_check_trgl)
     333  WRITE(*,*) 'flag_wk_check_trgl=', flag_wk_check_trgl
    323334
    324335  first=.false.
     
    824835
    825836  IF (prt_level>=10) THEN
    826     PRINT *, 'wake-4, sigmaw(igout), cstar(igout), wape(igout) ', &
    827                       sigmaw(igout), cstar(igout), wape(igout)
     837    PRINT *, 'wake-4, sigmaw(igout), cstar(igout), wape(igout), ktop(igout) ', &
     838                      sigmaw(igout), cstar(igout), wape(igout), ktop(igout)
    828839  ENDIF
    829840
     
    846857    END DO
    847858    IF (prt_level>=10) THEN
    848       PRINT *, 'wake-4.1, isubstep,wk_adv(igout),cstar(igout),wape(igout) ', &
    849                           isubstep,wk_adv(igout),cstar(igout),wape(igout)
     859      PRINT *, 'wake-4.1, isubstep,wk_adv(igout),cstar(igout),wape(igout), ptop(igout) ', &
     860                          isubstep,wk_adv(igout),cstar(igout),wape(igout), ptop(igout)
    850861    ENDIF
    851862
     
    962973    IF (prt_level>=10) THEN
    963974      PRINT *, 'wake-4.2, omg(igout,k) ', (k,omg(igout,k), k=1,klev)
    964       PRINT *, 'wake-4.2, omgtop(igout) ', omgtop(igout)
     975      PRINT *, 'wake-4.2, omgtop(igout), ptop(igout), ktop(igout) ', &
     976                          omgtop(igout), ptop(igout), ktop(igout)
    965977    ENDIF
    966978
     
    16091621
    16101622  IF (prt_level>=10) THEN
    1611     PRINT *, 'wake-5, sigmaw(igout), cstar(igout), wape(igout) ', &
    1612                       sigmaw(igout), cstar(igout), wape(igout)
     1623    PRINT *, 'wake-5, sigmaw(igout), cstar(igout), wape(igout), ptop(igout) ', &
     1624                      sigmaw(igout), cstar(igout), wape(igout), ptop(igout)
    16131625  ENDIF
    16141626
     
    16321644      sum_thvu(i) = 0.
    16331645      sum_dth(i) = 0.
     1646      sum_half_dth(i) = 0.
    16341647      sum_dq(i) = 0.
    16351648      sum_rho(i) = 0.
     
    16461659      av_dtdwn(i) = 0.
    16471660      av_dqdwn(i) = 0.
     1661
     1662      dthmin(i) = -delta_t_min
    16481663    END IF
    16491664  END DO
     
    16851700      z(i) = 1.
    16861701      dz(i) = 1.
     1702      dz_half(i) = 1.
    16871703      sum_thvu(i) = thu(i, 1)*(1.+epsim1*qu(i,1))*dz(i)
    16881704      sum_dth(i) = 0.
     
    16961712        ! cc
    16971713        dz(i) = -(amax1(ph(i,k+1),ptop(i))-ph(i,k))/(rho(i,k)*rg)
     1714        dz_half(i) = -(amax1(ph(i,k+1),0.5*(ptop(i)+ph(i,1)))-ph(i,k))/(rho(i,k)*rg)
    16981715        IF (dz(i)>0) THEN
    16991716          z(i) = z(i) + dz(i)
     
    17071724          sum_dtdwn(i) = sum_dtdwn(i) + dtdwn(i, k)*dz(i)
    17081725          sum_dqdwn(i) = sum_dqdwn(i) + dqdwn(i, k)*dz(i)
     1726!
     1727          dthmin(i) = min(dthmin(i), dth(i,k))
     1728        END IF
     1729        IF (dz_half(i)>0) THEN
     1730          sum_half_dth(i) = sum_half_dth(i) + dth(i, k)*dz_half(i)
    17091731        END IF
    17101732      END IF
     
    17501772
    17511773  ! Filter out bad wakes
     1774
     1775  IF (flag_wk_check_trgl) THEN
     1776    ! Check triangular shape of dth profile
     1777    DO i = 1, klon
     1778      IF (ok_qx_qw(i)) THEN
     1779        !! print *,'wake, hw0(i), dthmin(i) ', hw0(i), dthmin(i)
     1780        !! print *,'wake, 2.*sum_dth(i)/(hw0(i)*dthmin(i)) ', &
     1781        !!                2.*sum_dth(i)/(hw0(i)*dthmin(i))
     1782        !! print *,'wake, sum_half_dth(i), sum_dth(i) ', &
     1783        !!                sum_half_dth(i), sum_dth(i)
     1784        IF ((hw0(i) < 1.) .or. (dthmin(i) >= -delta_t_min) ) THEN
     1785          wape2(i) = -1.
     1786          !! print *,'wake, rej 1'
     1787        ELSE IF (abs(2.*sum_dth(i)/(hw0(i)*dthmin(i)) - 1.) > 0.5) THEN
     1788          wape2(i) = -1.
     1789          !! print *,'wake, rej 2'
     1790        ELSE IF (abs(sum_half_dth(i)) < 0.5*abs(sum_dth(i)) ) THEN
     1791          wape2(i) = -1.
     1792          !! print *,'wake, rej 3'
     1793        END IF
     1794      END IF
     1795    END DO
     1796  END IF
     1797
    17521798
    17531799  DO k = 1, klev
Note: See TracChangeset for help on using the changeset viewer.