Changeset 4812 for LMDZ6/trunk


Ignore:
Timestamp:
Feb 9, 2024, 9:38:16 AM (3 months ago)
Author:
fhourdin
Message:

Amélioration des ratqs interactifs par Louis

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

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/lmdz_ratqs_ini.F90

    r4740 r4812  
    5858
    5959
    60 tau_var = 700. ! temps de relaxation de la variabilité pour les thermiques
     60tau_var = 700. ! temps de relaxation de la variabilit?? pour les thermiques
    6161fac_tau = 2.
    6262tau_cumul = 1000
    63 a_ratqs_wake = 3.    ! paramètre pilotant l'importance du terme dépendant des poches froides
     63a_ratqs_wake = 3.    ! param??tre pilotant l'importance du terme d??pendant des poches froides
    6464a_ratqs_cv = 1.
    6565CALL getin_p('tau_var', tau_var)
     
    7070
    7171!--------------------------------------------------------
    72 ! Initialisation des variances pour la paramétrisation
     72! Initialisation des variances pour la param??trisation
    7373! pronostique des variances de Louis.
    7474! Ne marche pour le moment qu'en 1D en forcant une
    75 ! initialisation des variances à une valeur constante.
     75! initialisation des variances ?? une valeur constante.
    7676! A terme la variance doit devenir une variable d'etat
    7777! passee en argument
     
    8181    do k=1,klev
    8282      do i=1,klon
    83           povariance(i,k) = 0.0000001
    84           var_conv(i,k) = 0.
     83          povariance(i,k) = 0.00000000001
     84          var_conv(i,k) = 0.00000000001
    8585      enddo
    8686    enddo
  • LMDZ6/trunk/libf/phylmd/lmdz_ratqs_main.F90

    r4613 r4812  
    259259! FH 22/09/2009
    260260! La ligne ci-dessous faisait osciller le modele et donnait une solution
    261 ! assymptotique bidon et dépendant fortement du pas de temps.
     261! assymptotique bidon et d??pendant fortement du pas de temps.
    262262!        ratqs(:,:)=sqrt(ratqs(:,:)**2+ratqss(:,:)**2)
    263263!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  • LMDZ6/trunk/libf/phylmd/lmdz_ratqs_multi.F90

    r4664 r4812  
    3838
    3939!========================================================================
    40 ! L. d'Alençon, 25/02/2021
     40! L. d'Alen??on, 25/02/2021
    4141! Cette subroutine calcule une valeur de ratqsbas interactive 
    42 ! Elle est appelée par la subroutine ratqs lorsque iflag_ratqs = 11.
     42! Elle est appel??e par la subroutine ratqs lorsque iflag_ratqs = 11.
    4343!========================================================================
    4444
     
    6868real, dimension(klon,klev) :: wake_dq
    6969
    70 
    7170real, dimension(klon) :: max_sigd, max_dqconv,max_sigt
    7271real, dimension(klon,klev) :: zoa,zocarrea,pdocarreadj,pocarre,po,pdoadj,varq_therm
    73 
     72real, dimension(klon,klev) :: var_moy, var_var, var_desc_th,var_det_conv,var_desc_prec,var_desc_conv,sigma_therm
    7473
    7574lev_out=0.
     
    8584      enddo
    8685!-------------------------------------------------------------------------
    87 !  Caclul du terme de détrainement de la variance pour les thermiques
     86!  Caclul du terme de d??trainement de la variance pour les thermiques
    8887!-------------------------------------------------------------------------
    8988
     
    103102      detr0(:,:) = detr_therm(:,:)
    104103
    105 ! calcul du carré de l'humidité spécifique
     104! calcul du carr?? de l'humidit?? sp??cifique et circulation dans les thermiques
    106105      po(:,:) = q_seri(:,:)
    107106      call thermcell_dq(klon,klev,dqimpl,pdtphys,fm0,entr0,zmasse,  &
     
    115114      &                   pocarre,pdocarreadj,zocarrea,lev_out)
    116115
    117      
     116
     117! variance de l'humidit?? sp??cifique totale dans les thermiques     
    118118      do k=1,klev
    119119         do i=1,klon     
     
    122122      enddo
    123123
     124! calcul des termes sources de la variance avec thermiques et convection profonde (voir Klein 2005 par exemple)
     125      do k=1,klev
     126         do i=1,klon     
     127            var_moy(i,k) = detr0(i,k)*((zoa(i,k)-po(i,k))**2)/zmasse(i,k)
     128            var_var(i,k) = detr0(i,k)*(varq_therm(i,k)-povariance(i,k))/zmasse(i,k)
     129            var_det_conv(i,k) =  a_ratqs_cv*(detrain_cv(i,k)/zmasse(i,k))
     130            if (sigd(i).ne.0) then
     131               var_desc_prec(i,k) = sigd(i)*(1-sigd(i))*(fqd(i,k)*tau_cumul/sigd(i))**2/tau_cumul
     132            else
     133               var_desc_prec(i,k) = 0
     134            endif
     135         enddo
     136      enddo
     137
     138      do k=1,klev-1
     139         do i=1,klon     
     140            var_desc_th(i,k) = fm0(i,k+1)*povariance(i,k+1)/zmasse(i,k) -  &
     141               fm0(i,k)*povariance(i,k)/zmasse(i,k)
     142            var_desc_conv(i,k) = ((povariance(i,k+1)-povariance(i,k))*(fm_cv(i,k)/zmasse(i,k)))
     143         enddo
     144      enddo
     145      var_desc_th(:,klev) = var_desc_th(:,klev-1)
     146      var_desc_conv(:,klev) = var_desc_conv(:,klev-1)
    124147     
    125148      if (klein) then
     
    134157         do k=1,klev-1
    135158            do i=1,klon     
    136                povariance(i,k)= (detr0(i,k)*((zoa(i,k)-po(i,k))**2 + (varq_therm(i,k)-povariance(i,k)))/zmasse(i,k) + fm0(i,k+1)*povariance(i,k+1)/zmasse(i,k) -  &
    137                fm0(i,k)*povariance(i,k)/zmasse(i,k) +  &
    138                a_ratqs_cv*(detrain_cv(i,k)/zmasse(i,k)) +  sigd(i)*(1-sigd(i))*qd0(i,k)**2/tau_cumul  &   
    139                 + ((povariance(i,k+1)-povariance(i,k))*(fm_cv(i,k)/zmasse(i,k))))*pdtphys + povariance(i,k)
     159               povariance(i,k)= (var_moy(i,k) + var_var(i,k) + var_desc_th(i,k) +  &
     160               var_det_conv(i,k) +  var_desc_prec(i,k)  &   
     161                + var_desc_conv(i,k))*pdtphys + povariance(i,k)
    140162               povariance(i,k)= povariance(i,k)*exp(-pdtphys/tau_diss(i,k))
    141163            enddo
     
    148170         do k=1,klev-1
    149171            do i=1,klon
    150                if (sigd(i).ne.0) then
     172               if (sigd(i).ne.0) then    ! termes de variance par accumulation
    151173                 qd0(i,k) = fqd(i,k)*tau_cumul/sigd(i)
    152174               endif
     
    159181            do i=1,klon     
    160182               povariance(i,k)= (pdocarreadj(i,k)-2.*po(i,k)*pdoadj(i,k) +  &
    161                a_ratqs_cv*(sigt_cv(i,k)*(1-sigt_cv(i,k))*q0(i,k)**2/tau_cumul + sigd(i)*(1-sigd(i))*qd0(i,k)**2/tau_cumul) +  &
    162                ((povariance(i,k+1)-povariance(i,k))*(fm_cv(i,k)/zmasse(i,k))))*pdtphys + povariance(i,k)
     183               a_ratqs_cv*(sigt_cv(i,k)*(1-sigt_cv(i,k))*q0(i,k)**2/tau_cumul + var_desc_prec(i,k) +  &
     184               var_desc_conv(i,k)))*pdtphys + povariance(i,k)
    163185               povariance(i,k)=povariance(i,k)*exp(-pdtphys/tau_diss(i,k))
    164186            enddo
     
    167189!         fqd(:,:)=sigt_cv(:,:)*(1-sigt_cv(:,:))*q0(:,:)**2/tau_cumul
    168190      endif
    169      
    170 !-------------------------------------------------------------------------
    171 !  Caclul du terme de détrainement de la variance pour la convection (version fausse avec deux calculs de variance indépendants)
    172 !-------------------------------------------------------------------------
    173 
    174 !      if (klein_conv) then
    175 !        detrain_p(:,:) = 0.
    176 !        detraincv(:,:) = 0.
    177 !        dqp(:,:)    = 0.
    178      
    179 !        do k=1,klev-1
    180 !          do i=1,klon
    181 !           dqp(i,k) = q_seri(i,k) - qp(i,k)
    182 !           detraincv(i,k) = abs(detrain_cv(i,k))
    183          
    184 !         if ((mp(i,k)-mp(i,k+1)).le.0) then
    185 !            detrain_p(i,k) = (mp(i,k+1)-mp(i,k))
    186 !         endif
    187 !          enddo
    188 !        enddo
    189 
    190 !        do k=1,klev-1
    191 !          do i=1,klon
    192 !            qd0(:,:) = 0.0
    193 !            if (sigd(i).ne.0) then
    194 !              qd0(i,k) = fqd(i,k)*tau_cumul/sigd(i)
    195 !            endif
    196 !          enddo
    197 !        enddo
    198 
    199 !        do k=1,klev-1
    200 !          do i=1,klon           
    201 !            var_conv(i,k)= var_conv(i,k)*exp(-pdtphys/tau_conv) +  &
    202 !                (a_ratqs_cv*(detraincv(i,k)/zmasse(i,k)) +  sigd(i)*(1-sigd(i))*qd0(i,k)**2/tau_cumul  &   
    203 !                + ((var_conv(i,k+1)-var_conv(i,k))*(fm_cv(i,k)/zmasse(i,k))))* &
    204 !              ((dqp(i,k)**2)*(detrain_p(i,k)/zmasse(i,k))))* & ! les termes de descentes précipitantes qui seront traités autrement
    205 !              (((mp(i,k)-mp(i,k+1))/zmasse(i,k))*dqp(i,k)**2) + (2*mp(i,k)*dqp(i,k)*(qp(i,k+1)-qp(i,k))/zmasse(i,k)))* &
    206 !                (1.-exp(-pdtphys/tau_conv))/(1/tau_conv)     
    207 !          enddo
    208 !        enddo
    209 !        var_conv(:,klev) = var_conv(:,klev-1)
    210 !        fqd(:,:) = var_conv(:,:)
    211 !      else
    212 
    213 
    214 !        do k=1,klev-1
    215 !          do i=1,klon           
    216 !            var_conv(i,k)= var_conv(i,k)*exp(-pdtphys/tau_conv) +  &
    217 !                (a_ratqs_cv*(sigt_cv(i,k)*(1-sigt_cv(i,k))*q0(i,k)**2/pdtphys + sigd(i)*(1-sigd(i))*qd0(i,k)**2/tau_cumul) +  &   ! somme des contributions des descentes précipitantes et des flux mélangés
    218 !                + ((var_conv(i,k+1)-var_conv(i,k))*(fm_cv(i,k)/zmasse(i,k))))* & ! flux compensatoires dans l'environnement
    219 !                (1.-exp(-pdtphys/tau_conv))/(1/tau_conv)
    220 !             ((var_conv(i,k+1)-var_conv(i,k))*(fm_cv(i,k)/zmasse(i,k))) 
    221 !          enddo
    222 !        enddo
    223 !        var_conv(:,klev) = var_conv(:,klev-1)
    224 !      endif
    225191
    226192!-------------------------------------------------------------------------
     
    231197        do i=1,klon
    232198           if(q_seri(i,k).ge.1E-7) then
    233                ratqs_inter_(i,k) = abs(povariance(i,k))**0.5/q_seri(i,k)
     199               ratqs_inter_(i,k) = abs(povariance(i,k))**0.5/q_seri(i,k)   
     200               sigma_therm(i,k) = abs(varq_therm(i,k))**0.5     ! sigma dans les thermiques
    234201           else
    235202               ratqs_inter_(i,k) = 0. 
     203               sigma_therm(i,k) = 0.
    236204           endif
    237205        enddo
     
    403371!
    404372! Field, P.R., Hill, A., Furtado, K., Korolev, A., 2014b. Mixed-phase clouds in a turbulent environment. Part
    405 ! 2: analytic treatment. Q. J. R. Meteorol. Soc. 21, 26512663. https://doi.org/10.1002/qj.2175.
     373! 2: analytic treatment. Q. J. R. Meteorol. Soc. 21, 2651???2663. https://doi.org/10.1002/qj.2175.
    406374!
    407375! Furtado, K., Field, P.R., Boutle, I.A., Morcrette, C.R., Wilkinson, J., 2016. A physically-based, subgrid
    408376! parametrization for the production and maintenance of mixed-phase clouds in a general circulation
    409 ! model. J. Atmos. Sci. 73, 279291. https://doi.org/10.1175/JAS-D-15-0021.
     377! model. J. Atmos. Sci. 73, 279???291. https://doi.org/10.1175/JAS-D-15-0021.
    410378
    411379USE lmdz_ratqs_ini, ONLY : RG,RV,RD,RCPD,RLSTT,RLVTT,RTT
Note: See TracChangeset for help on using the changeset viewer.