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

Amélioration des ratqs interactifs par Louis

File:
1 edited

Legend:

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