Changeset 3767


Ignore:
Timestamp:
May 16, 2025, 3:35:51 PM (3 weeks ago)
Author:
jliu
Message:

implementation of GW mixing for tracers: tracers
vertical gradients are considered.

Location:
trunk/LMDZ.MARS
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/changelog.txt

    r3766 r3767  
    48414841== 14/05/2025 == JBC
    48424842Cleaning and improvement of robustness for "run0" and "run_month1" scripts with file checks and clearer errors.
     4843
     4844== 16/05/2025 == JLIU
     4845New implementation of non-orographic GWs mixing for tracers: now
     4846D_mix_tracer = D_eddy*tracers_density_gradient
     4847while keep the mixing coefficient unchanged for u and theta
  • trunk/LMDZ.MARS/libf/phymars/nonoro_gwd_mix_mod.F90

    r3726 r3767  
    127127    REAL d_eddy_mix_tot(ngrid, nlayer+1)
    128128    REAL d_eddy_mix(NW,ngrid)          ! Comprehensive Diffusion coefficients
     129    REAL d_wave(NW,ngrid)              ! coefficients consider the tracers' gradients
    129130    REAL u_eddy_mix_p(NW, ngrid)       ! Zonal Diffusion coefficients
    130131    REAL v_eddy_mix_p(NW, ngrid)       ! Meridional Diffusion coefficients
     
    141142    REAL pq_eddy_mix_tot(ngrid, nlayer+1,nq)
    142143    REAL zq(ngrid,nlayer,nq) ! advected field nq
     144    REAL zq_var(ngrid,nlayer,nq)
     145    REAL dzq_var(ngrid,nlayer,nq)
     146    REAL mdzq_var(nlayer,nq)
     147    REAL zq_ave(nlayer,nq)
     148    REAL dzq_ave(nlayer,nq)
     149    REAL zq_ratio(nlayer,nq)
    143150    REAL, save:: eff
    144151!$OMP THREADPRIVATE(eff)
     
    251258    zq(:,:,:)=pq(:,:,:)+dtime*pdq(:,:,:)
    252259    hh(:,:)=pht(:,:)+dtime*pdht(:,:)
     260
     261!  tracer average and gradients for mixing
     262    zq_ave(:,:)=0.
     263    zq_ave(:,:) = SUM(zq(:,:,:), dim=1) / real(ngrid)
     264   
     265    zq_var(:,:,:)=0.
     266    DO ii=1,ngrid
     267      zq_var(ii,:,:)=zq(ii,:,:)-zq_ave(:,:)
     268    endDO
     269
     270    dzq_var(:,:,:)=0.
     271    mdzq_var(:,:) =0.
     272    dzq_ave(:,:)  =0.
     273    zq_ratio(:,:) =0.
     274    DO LL=1,nlayer-1
     275       dzq_var(:, LL, :) = (zq_var(:, LL+1, :) - zq_var(:, LL, :))**2.
     276       mdzq_var(LL, :)   = SUM(dzq_var(:, LL, :), dim=1)/real(ngrid)
     277       dzq_ave(LL, :)    = (zq_ave(LL+1, :) - zq_ave(LL, :))**2.
     278       zq_ratio(LL,:)    = MAX(0., (mdzq_var(LL+1,:) + mdzq_var(LL,:)))&
     279                          /MAX(1E-15, (dzq_ave(LL+1,:) + dzq_ave(LL,:)))
     280      ! do qq=1,nq
     281      !   print*, 'ratio=', zq_ratio(LL,QQ)
     282      ! enddo
     283    endDO
     284    dzq_var(:,nlayer,:)    = dzq_var(:,nlayer-1, :)
     285    mdzq_var(nlayer,:)     = mdzq_var(nlayer-1, :)
     286    dzq_ave(nlayer,:)      = dzq_ave(nlayer-1, :)
    253287! Compute the real mass density by rho=p/R(T)T
    254288     DO ll=1,nlayer
     
    623657    pq_eddy_mix_tot(:, :,:)=0.
    624658    d_eddy_mix(:,:)=0.
     659    d_wave(:, :) =0.
    625660    d_eddy_mix_p_ll(nlayer,:,:)=d_eddy_mix_p_ll(nlayer-1,:,:)
    626661    d_eddy_mix_tot(:, :) =0.
     
    656691      ! print*, "this line is for tunning"
    657692      !endif
     693     ! d_wave(JW,:) = d_eddy_mix(JW, :)*(mdzq_var(LL,QQ)/dzq_ave(LL,QQ))**2.
    658694      DO QQ=1,NQ
    659695         DO JW=1,NW
    660          pq_eddy_mix_p(JW, :, QQ) = d_eddy_mix(JW, :)* (zq(:, LL + 1,QQ)- zq(:, LL, QQ)) &
    661                                    /(ZH(:, LL + 1)- ZH(:, LL))                           &
     696         d_wave(JW, :) = d_eddy_mix(JW, :)*zq_ratio(LL,QQ)
     697         pq_eddy_mix_p(JW, :, QQ) = d_wave(JW, :)* (zq(:, LL + 1,QQ)- zq(:, LL, QQ)) &
     698                                   /(ZH(:, LL + 1)- ZH(:, LL))                       &
    662699                                   *SIGN(1.,intr_freq_p(JW, :)) * SIN(ZP(JW, :)) 
    663700      !   pq_eddy_mix_tot(:, LL+1,QQ) = pq_eddy_mix_tot(:, LL+1,QQ)                   &
Note: See TracChangeset for help on using the changeset viewer.