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)



File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.