Ignore:
Timestamp:
Jul 12, 2025, 8:27:38 PM (7 days ago)
Author:
jyg
Message:

Improvement of the representation of the effect of wake genesis on wake_deltat and wake_deltaq:
an exponential scheme is implemented, similar to the one used for the gravity wave term.
The previous (explicit) scheme led to strong instabilities.

The new scheme is implemented in subroutine "wake2"of lmdz_wake.f90.
Implementation in subroutine "wake" still to be done.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/lmdz_wake.f90

    r5763 r5775  
    24782478  ! Cgw    : vitesse de propagation de onde de gravite
    24792479  ! LL     : distance between 2 wakes
     2480  ! Tgen   : 1 sur le temps caracteristique d'amortissement par les naissances de poches
    24802481
    24812482  ! -------------------------------------------------------------------------
     
    25732574  REAL, DIMENSION (klon, klev)                          :: cgw
    25742575  REAL, DIMENSION (klon, klev)                          :: tgw
     2576  REAL, DIMENSION (klon, klev)                          :: tgen
    25752577
    25762578  ! Variables liees au calcul de hw
     
    29312933dp_omgb(:,:) = 0.
    29322934dp_deltomg(:,:) = 0.
     2935tgen(:,:) = 0.
    29332936hw(:) = 0.
    29342937wape(:) = 0.
     
    38173820            entr(i, k) = entr_p(i,k) + gfl(i)*cstar(i) + &
    38183821                         sigmaw(i)*(1.-sigmaw(i))*dp_deltomg(i, k)   
     3822            tgen(i,k) = entr_p(i,k)/sigmaw(i)
    38193823!>jyg
    38203824            wkspread(i, k) = (entr(i,k)-detr(i,k))/sigmaw(i)
     
    38483852          !! term (d_deltat_dadv); hence only the entrainment due to population dynamics (entr_p)
    38493853          !! appears in the expression of d_deltatw.
    3850           IF (dtimesub*tgw(i,k)<1.E-10) THEN
     3854          IF (dtimesub*(tgw(i,k)+tgen(i,k))<1.E-10) THEN
    38513855!!!            d_deltatw(i, k) = dtimesub*(ff(i)+dtke(i,k) - &        ! nouvelle notation
    38523856            d_deltatw(i, k) = dtimesub*(d_deltat_dadv(i,k)+d_deltat_lsadv(i,k)+d_deltat_dcv(i,k) - &
    3853                entr_p(i,k)*deltatw(i,k)/sigmaw(i) - &
    38543857               (death_rate(i)*sigmaw(i)+detr(i,k))*deltatw(i,k)/(1.-sigmaw(i)) - & ! cc
    3855                tgw(i,k)*deltatw(i,k) )
     3858               (tgw(i,k)+tgen(i,k))*deltatw(i,k) )
    38563859          ELSE
    3857             d_deltatw(i, k) = 1/tgw(i, k)*(1-exp(-dtimesub*tgw(i,k)))* &
     3860            d_deltatw(i, k) = 1/(tgw(i,k)+tgen(i,k))*(1-exp(-dtimesub*(tgw(i,k)+tgen(i,k))))* &
    38583861!!!               (ff(i)+dtke(i,k) - &                                ! nouvelle notation
    38593862               (d_deltat_dadv(i,k)+d_deltat_lsadv(i,k)+d_deltat_dcv(i,k) - &
    3860                 entr_p(i,k)*deltatw(i,k)/sigmaw(i) - &
    38613863                (death_rate(i)*sigmaw(i)+detr(i,k))*deltatw(i,k)/(1.-sigmaw(i)) - &
    3862                 tgw(i,k)*deltatw(i,k) )
     3864                (tgw(i,k)+tgen(i,k))*deltatw(i,k) )
    38633865          END IF
    38643866
     
    38683870          !! term (d_deltaq_dadv); hence only the entrainment due to population dynamics (entr_p)
    38693871          !! appears in the expression of d_deltaqw.
    3870           d_deltaqw(i, k) = dtimesub*(d_deltaq_dadv(i,k)+d_deltaq_lsadv(i,k)+d_deltaq_dcv(i,k) - &
    3871             entr_p(i,k)*deltaqw(i,k)/sigmaw(i) - &
    3872             (death_rate(i)*sigmaw(i)+detr(i,k))*deltaqw(i,k)/(1.-sigmaw(i)))
     3872          IF (dtimesub*tgen(i,k)<1.E-10) THEN
     3873            d_deltaqw(i, k) = dtimesub*(d_deltaq_dadv(i,k)+d_deltaq_lsadv(i,k)+d_deltaq_dcv(i,k) - &
     3874               (death_rate(i)*sigmaw(i)+detr(i,k))*deltaqw(i,k)/(1.-sigmaw(i)) - &
     3875               tgen(i,k)*deltaqw(i,k))
     3876          ELSE
     3877            d_deltaqw(i, k) = 1/tgen(i,k)*(1-exp(-dtimesub*tgen(i,k))) * &
     3878               (d_deltaq_dadv(i,k)+d_deltaq_lsadv(i,k)+d_deltaq_dcv(i,k) - &
     3879               (death_rate(i)*sigmaw(i)+detr(i,k))*deltaqw(i,k)/(1.-sigmaw(i)) - &
     3880               tgen(i,k)*deltaqw(i,k))
     3881          END IF
    38733882          ! cc
    38743883
     
    38853894      PRINT *, 'wake-4.4, isubstep= ', isubstep,' deltatw(igout,k) ', (k,deltatw(igout,k), k=1,klev)
    38863895      PRINT *, 'wake-4.4, isubstep= ', isubstep,' d_deltat_dcv(igout,k) ', (k,d_deltat_dcv(igout,k), k=1,klev)
     3896      PRINT *, 'wake-4.4, isubstep= ', isubstep,' d_deltat_dadv(igout,k) ', (k,d_deltat_dadv(igout,k), k=1,klev)
     3897      PRINT *, 'wake-4.4, isubstep= ', isubstep,' d_deltat_lsadv(igout,k) ', (k,d_deltat_lsadv(igout,k), k=1,klev)
     3898      PRINT *, 'wake-4.4, isubstep= ', isubstep,' tgen(igout,k)*deltatw(igout,k) ', (k,tgen(igout,k)*deltatw(igout,k), k=1,klev)
    38873899      PRINT *, 'wake-4.4, isubstep= ', isubstep,' tgw(igout,k)*deltatw(igout,k) ', (k,tgw(igout,k)*deltatw(igout,k), k=1,klev)
    38883900      PRINT *, 'wake-4.4, isubstep= ', isubstep,' death_rate(igout) ', death_rate(igout)
Note: See TracChangeset for help on using the changeset viewer.