Ignore:
Timestamp:
Dec 5, 2024, 11:09:43 AM (7 days ago)
Author:
evignon
Message:

update de la paramétrisation de phase des nuages de Lea et nettoyage associé

File:
1 edited

Legend:

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

    r5285 r5383  
    240240!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    241241
    242 SUBROUTINE ICEFRAC_LSCP_TURB(klon, dtime, temp, pplay, paprsdn, paprsup, qice_ini, snowcld, qtot_incl, cldfra, tke, tke_dissip, qliq, qvap_cld, qice, icefrac, dicefracdT, cldfraliq, sigma2_icefracturb, mean_icefracturb)
     242
     243SUBROUTINE ICEFRAC_LSCP_TURB(klon, dtime, temp, pplay, paprsdn, paprsup, omega, qice_ini, snowcld, qtot_incl, cldfra, tke,   &
     244                             tke_dissip, qliq, qvap_cld, qice, icefrac, dicefracdT, cldfraliq, sigma2_icefracturb, mean_icefracturb)
    243245!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    244246  ! Compute the liquid, ice and vapour content (+ice fraction) based
    245247  ! on turbulence (see Fields 2014, Furtado 2016, Raillard 2025)
    246   ! L.Raillard (30/08/24)
     248  ! L.Raillard (23/09/24)
    247249!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    248250
     
    251253   USE lmdz_lscp_ini, ONLY : RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG, RV, RPI
    252254   USE lmdz_lscp_ini, ONLY : seuil_neb, temp_nowater
    253    USE lmdz_lscp_ini, ONLY : tau_mixenv, lmix_mpc, naero5, gamma_snwretro, gamma_taud, capa_crystal
     255   USE lmdz_lscp_ini, ONLY : naero5, gamma_snwretro, gamma_taud, capa_crystal
    254256   USE lmdz_lscp_ini, ONLY : eps
    255257
    256258   IMPLICIT NONE
    257259
    258    INTEGER,   INTENT(IN)                           :: klon              !--number of horizontal grid points
    259    REAL,      INTENT(IN)                           :: dtime             !--time step [s]
    260 
    261    REAL,      INTENT(IN),       DIMENSION(klon)    :: temp              !--temperature
    262    REAL,      INTENT(IN),       DIMENSION(klon)    :: pplay             !--pressure in the middle of the layer       [Pa]
    263    REAL,      INTENT(IN),       DIMENSION(klon)    :: paprsdn           !--pressure at the bottom interface of the layer [Pa]
    264    REAL,      INTENT(IN),       DIMENSION(klon)    :: paprsup           !--pressure at the top interface of the layer [Pa]
    265    REAL,      INTENT(IN),       DIMENSION(klon)    :: qtot_incl         !--specific total cloud water content, in-cloud content [kg/kg]
    266    REAL,      INTENT(IN),       DIMENSION(klon)    :: cldfra            !--cloud fraction in gridbox [-]
    267    REAL,      INTENT(IN),       DIMENSION(klon)    :: tke               !--turbulent kinetic energy [m2/s2]
    268    REAL,      INTENT(IN),       DIMENSION(klon)    :: tke_dissip        !--TKE dissipation [m2/s3]
    269 
    270    REAL,      INTENT(IN),       DIMENSION(klon)    :: qice_ini          !--initial specific ice content gridbox-mean [kg/kg]
     260   INTEGER,   INTENT(IN)                           :: klon                !--number of horizontal grid points
     261   REAL,      INTENT(IN)                           :: dtime               !--time step [s]
     262
     263   REAL,      INTENT(IN),       DIMENSION(klon)    :: temp                !--temperature
     264   REAL,      INTENT(IN),       DIMENSION(klon)    :: pplay               !--pressure in the middle of the layer           [Pa]
     265   REAL,      INTENT(IN),       DIMENSION(klon)    :: paprsdn             !--pressure at the bottom interface of the layer [Pa]
     266   REAL,      INTENT(IN),       DIMENSION(klon)    :: paprsup             !--pressure at the top interface of the layer    [Pa]
     267   REAL,      INTENT(IN),       DIMENSION(klon)    :: omega               !--resolved vertical velocity                    [Pa/s]
     268   REAL,      INTENT(IN),       DIMENSION(klon)    :: qtot_incl           !--specific total cloud water in-cloud content   [kg/kg]
     269   REAL,      INTENT(IN),       DIMENSION(klon)    :: cldfra              !--cloud fraction in gridbox                     [-]
     270   REAL,      INTENT(IN),       DIMENSION(klon)    :: tke                 !--turbulent kinetic energy                      [m2/s2]
     271   REAL,      INTENT(IN),       DIMENSION(klon)    :: tke_dissip          !--TKE dissipation                               [m2/s3]
     272
     273   REAL,      INTENT(IN),       DIMENSION(klon)    :: qice_ini            !--initial specific ice content gridbox-mean     [kg/kg]
    271274   REAL,      INTENT(IN),       DIMENSION(klon)    :: snowcld
    272    REAL,      INTENT(OUT),      DIMENSION(klon)    :: qliq              !--specific liquid content gridbox-mean [kg/kg]
    273    REAL,      INTENT(OUT),      DIMENSION(klon)    :: qvap_cld          !--specific cloud vapor content, gridbox-mean [kg/kg]
    274    REAL,      INTENT(OUT),      DIMENSION(klon)    :: qice              !--specific ice content gridbox-mean [kg/kg]
    275    REAL,      INTENT(OUT),      DIMENSION(klon)    :: icefrac           !--fraction of ice in condensed water [-]
     275   REAL,      INTENT(OUT),      DIMENSION(klon)    :: qliq                !--specific liquid content gridbox-mean          [kg/kg]
     276   REAL,      INTENT(OUT),      DIMENSION(klon)    :: qvap_cld            !--specific cloud vapor content, gridbox-mean    [kg/kg]
     277   REAL,      INTENT(OUT),      DIMENSION(klon)    :: qice                !--specific ice content gridbox-mean            [kg/kg]
     278   REAL,      INTENT(OUT),      DIMENSION(klon)    :: icefrac             !--fraction of ice in condensed water            [-]
    276279   REAL,      INTENT(OUT),      DIMENSION(klon)    :: dicefracdT
    277280
    278    REAL,      INTENT(OUT),      DIMENSION(klon)    :: cldfraliq         !--fraction of cldfra which is liquid only
    279    REAL,      INTENT(OUT),      DIMENSION(klon)    :: sigma2_icefracturb     !--Temporary
    280    REAL,      INTENT(OUT),      DIMENSION(klon)    :: mean_icefracturb      !--Temporary
    281 
    282    REAL, DIMENSION(klon) :: qzero, qsatl, dqsatl, qsati, dqsati         !--specific humidity saturation values
     281   REAL,      INTENT(OUT),      DIMENSION(klon)    :: cldfraliq           !--fraction of cldfra where liquid               [-]
     282   REAL,      INTENT(OUT),      DIMENSION(klon)    :: sigma2_icefracturb  !--Sigma2 of the ice supersaturation PDF         [-]
     283   REAL,      INTENT(OUT),      DIMENSION(klon)    :: mean_icefracturb    !--Mean of the ice supersaturation PDF           [-]
     284
     285   REAL, DIMENSION(klon) :: qzero, qsatl, dqsatl, qsati, dqsati           !--specific humidity saturation values
    283286   INTEGER :: i
    284287
    285    REAL :: qvap_incl, qice_incl, qliq_incl, qiceini_incl                !--In-cloud specific quantities [kg/kg]
    286    REAL :: qsnowcld_incl
    287    !REAL :: capa_crystal                                                 !--Capacitance of ice crystals  [-]
    288    REAL :: water_vapor_diff                                             !--Water-vapour diffusion coefficient in air [m2/s] (function of T&P)
    289    REAL :: air_thermal_conduct                                          !--Thermal conductivity of air [J/m/K/s] (function of T)
    290    REAL :: C0                                                           !--Lagrangian structure function [-]
    291    REAL :: tau_mixingenv
     288   REAL :: qvap_incl, qice_incl, qliq_incl, qiceini_incl                  !--In-cloud specific quantities                  [kg/kg]
     289   REAL :: water_vapor_diff                                               !--Water-vapour diffusion coeff in air (f(T,P))  [m2/s]
     290   REAL :: air_thermal_conduct                                            !--Thermal conductivity of air (f(T))            [J/m/K/s]
     291   REAL :: C0                                                             !--Lagrangian structure function                 [-]
    292292   REAL :: tau_dissipturb
    293    REAL :: invtau_phaserelax
     293   REAL :: tau_phaserelax
    294294   REAL :: sigma2_pdf, mean_pdf
    295295   REAL :: ai, bi, B0
    296296   REAL :: sursat_iceliq
    297    REAL :: sursat_env
     297   REAL :: sursat_equ
    298298   REAL :: liqfra_max
    299299   REAL :: sursat_iceext
    300    REAL :: nb_crystals                                                  !--number concentration of ice crystals [#/m3]
    301    REAL :: moment1_PSD                                                  !--1st moment of ice PSD
    302    REAL :: N0_PSD, lambda_PSD                                           !--parameters of the exponential PSD
    303 
    304    REAL :: rho_ice                                                      !--ice density [kg/m3]
     300   REAL :: nb_crystals                                                    !--number concentration of ice crystals          [#/m3]
     301   REAL :: moment1_PSD                                                    !--1st moment of ice PSD
     302   REAL :: N0_PSD, lambda_PSD                                             !--parameters of the exponential PSD
     303
     304   REAL :: rho_ice                                                        !--ice density                                  [kg/m3]
    305305   REAL :: cldfra1D
    306    REAL :: deltaz, rho_air
    307    REAL :: psati                                                        !--saturation vapor pressure wrt i [Pa]
     306   REAL :: rho_air
     307   REAL :: psati                                                          !--saturation vapor pressure wrt ice            [Pa]
    308308   
    309    C0            = 10.                                                  !--value assumed in Field2014           
     309   REAL :: vitw                                                           !--vertical velocity                             [m/s]
     310                                                                       
     311   C0            = 10.                                                    !--value assumed in Field2014           
    310312   rho_ice       = 950.
    311313   sursat_iceext = -0.1
    312    !capa_crystal  = 1. !r_ice                                       
    313314   qzero(:)      = 0.
    314315   cldfraliq(:)  = 0.
     
    317318
    318319   sigma2_icefracturb(:) = 0.
    319    mean_icefracturb(:)  = 0.
    320 
    321    !--wrt liquid water
     320   mean_icefracturb(:)   = 0.
     321
     322   !--wrt liquid
    322323   CALL calc_qsat_ecmwf(klon,temp(:),qzero(:),pplay(:),RTT,1,.false.,qsatl(:),dqsatl(:))
    323324   !--wrt ice
     
    327328    DO i=1,klon
    328329
    329 
    330330     rho_air  = pplay(i) / temp(i) / RD
    331      !deltaz   = ( paprsdn(i) - paprsup(i) ) / RG / rho_air(i)
     331
    332332     ! because cldfra is intent in, but can be locally modified due to test
    333333     cldfra1D = cldfra(i)
     
    364364           dicefracdT(i) = 0.
    365365
    366         ! MPC temperature
     366        !---------------------------------------------------------
     367        !--             MIXED PHASE TEMPERATURE REGIME         
     368        !---------------------------------------------------------
     369        !--In the mixed phase regime (-38°C< T <0°C) we distinguish
     370        !--3 possible subcases.
     371        !--1.  No pre-existing ice 
     372        !--2A. Pre-existing ice and no turbulence
     373        !--2B. Pre-existing ice and turbulence
    367374        ELSE
    368            ! Not enough TKE     
    369            IF ( tke_dissip(i) .LE. eps )  THEN
    370               qvap_cld(i)   = qsati(i) * cldfra1D
    371               qliq(i)       = 0.
    372               qice(i)       = MAX(0.,qtot_incl(i)-qsati(i)) * cldfra1D   
    373               cldfraliq(i)  = 0.
    374               icefrac(i)    = 1.
    375               dicefracdT(i) = 0.
     375
     376           vitw = -omega(i) / RG / rho_air
     377           qiceini_incl  = qice_ini(i) / cldfra1D + snowcld(i) * RG * dtime / ( paprsdn(i) - paprsup(i) ) / cldfra1D
     378
     379           !--1. No preexisting ice : if vertical motion, fully liquid
     380           !--cloud else fully iced cloud
     381           IF ( qiceini_incl .LT. eps ) THEN
     382              IF ( (vitw .GT. eps) .OR. (tke(i) .GT. eps) ) THEN
     383                 qvap_cld(i)   = qsatl(i) * cldfra1D
     384                 qliq(i)       = MAX(0.,qtot_incl(i)-qsatl(i)) * cldfra1D
     385                 qice(i)       = 0.
     386                 cldfraliq(i)  = 1.
     387                 icefrac(i)    = 0.
     388                 dicefracdT(i) = 0.
     389              ELSE
     390                 qvap_cld(i)   = qsati(i) * cldfra1D
     391                 qliq(i)       = 0.
     392                 qice(i)       = MAX(0.,qtot_incl(i)-qsati(i)) * cldfra1D
     393                 cldfraliq(i)  = 0.
     394                 icefrac(i)    = 1.
     395                 dicefracdT(i) = 0.
     396              ENDIF
    376397           
    377            ! Enough TKE   
    378            ELSE 
    379               print*,"MOUCHOIRACTIVE"
    380               !---------------------------------------------------------
    381               !--               ICE SUPERSATURATION PDF   
    382               !---------------------------------------------------------
    383               !--If -38°C< T <0°C and there is enough turbulence,
    384               !--we compute the cloud liquid properties with a Gaussian PDF
    385               !--of ice supersaturation F(Si) (Field2014, Furtado2016).
    386               !--Parameters of the PDF are function of turbulence and
    387               !--microphysics/existing ice.
     398
     399           !--2. Pre-existing ice :computation of ice properties for
     400           !--feedback
     401           ELSE
     402              ai = RG / RD / temp(i) * ( RD * RLSTT / RCPD / RV / temp(i) - 1. )
     403
     404              sursat_equ    = ai * vitw * tau_phaserelax
    388405
    389406              sursat_iceliq = qsatl(i)/qsati(i) - 1.
    390407              psati         = qsati(i) * pplay(i) / (RD/RV)
    391 
    392               !-------------- MICROPHYSICAL TERMS --------------
     408             
    393409              !--We assume an exponential ice PSD whose parameters
    394410              !--are computed following Morrison&Gettelman 2008
     
    399415              !--tau_phase_relax is the typical time of vapor deposition
    400416              !--onto ice crystals
    401              
    402               qiceini_incl  = qice_ini(i) / cldfra1D
    403               qsnowcld_incl = snowcld(i) * RG * dtime / ( paprsdn(i) - paprsup(i) ) / cldfra1D
    404               sursat_env    = max(0., (qtot_incl(i) - qiceini_incl)/qsati(i) - 1.)
    405               IF ( qiceini_incl .GT. eps ) THEN
    406                 nb_crystals = 1.e3 * 5.94e-5 * ( RTT - temp(i) )**3.33 * naero5**(0.0264*(RTT-temp(i))+0.0033)
    407                 lambda_PSD  = ( (RPI*rho_ice*nb_crystals) / (rho_air*(qiceini_incl + gamma_snwretro * qsnowcld_incl)) ) ** (1./3.)
    408                 N0_PSD      = nb_crystals * lambda_PSD
    409                 moment1_PSD = N0_PSD/lambda_PSD**2
    410               ELSE
    411                 moment1_PSD = 0.
    412               ENDIF
     417
     418              nb_crystals = 1.e3 * 5.94e-5 * ( RTT - temp(i) )**3.33 * naero5**(0.0264*(RTT-temp(i))+0.0033)
     419              lambda_PSD  = ( (RPI*rho_ice*nb_crystals) / (rho_air * qiceini_incl ) ) ** (1./3.)
     420              N0_PSD      = nb_crystals * lambda_PSD
     421              moment1_PSD = N0_PSD/lambda_PSD**2
    413422
    414423              !--Formulae for air thermal conductivity and water vapor diffusivity
     
    422431              B0 = 4. * RPI * capa_crystal * 1. / (  RLSTT**2 / air_thermal_conduct / RV / temp(i)**2  &
    423432                                                  +  RV * temp(i) / psati / water_vapor_diff  )
    424 
    425               invtau_phaserelax  = (bi * B0 * moment1_PSD )
    426 
    427 !             Old way of estimating moment1 : spherical crystals + monodisperse PSD             
    428 !             nb_crystals = rho_air * qiceini_incl / ( 4. / 3. * RPI * r_ice**3. * rho_ice )
    429 !             moment1_PSD = nb_crystals * r_ice
    430 
    431               !----------------- TURBULENT SOURCE/SINK TERMS -----------------
    432               !--Tau_mixingenv is the time needed to homogeneize the parcel
    433               !--with its environment by turbulent diffusion over the parcel
    434               !--length scale
    435               !--if lmix_mpc <0, tau_mixigenv value is prescribed
    436               !--else tau_mixigenv value is derived from tke_dissip and lmix_mpc
    437               !--Tau_dissipturb is the time needed turbulence to decay due to
    438               !--viscosity
    439 
     433              tau_phaserelax = 1. / (bi * B0 * moment1_PSD )
     434             
    440435              ai = RG / RD / temp(i) * ( RD * RLSTT / RCPD / RV / temp(i) - 1. )
    441               IF ( lmix_mpc .GT. 0 ) THEN
    442                  tau_mixingenv = ( lmix_mpc**2. / tke_dissip(i) )**(1./3.)
    443               ELSE
    444                  tau_mixingenv = tau_mixenv
    445               ENDIF
    446              
    447               tau_dissipturb = gamma_taud * 2. * 2./3. * tke(i) / tke_dissip(i) / C0
    448 
    449               !--------------------- PDF COMPUTATIONS ---------------------
    450               !--Formulae for sigma2_pdf (variance), mean of PDF in Furtado2016
    451               !--cloud liquid fraction and in-cloud liquid content are given
    452               !--by integrating resp. F(Si) and Si*F(Si)
    453               !--Liquid is limited by the available water vapor trough a
    454               !--maximal liquid fraction
    455 
    456               liqfra_max = MAX(0., (MIN (1.,( qtot_incl(i) - qiceini_incl - qsati(i) * (1 + sursat_iceext ) ) / ( qsatl(i) - qsati(i) ) ) ) )
    457               sigma2_pdf = 1./2. * ( ai**2 ) *  2./3. * tke(i) * tau_dissipturb / ( invtau_phaserelax + 1./tau_mixingenv )
    458               mean_pdf   = sursat_env * 1./tau_mixingenv / ( invtau_phaserelax + 1./tau_mixingenv )
    459               cldfraliq(i) = 0.5 * (1. - erf( ( sursat_iceliq - mean_pdf) / (SQRT(2.* sigma2_pdf) ) ) )
    460               IF (cldfraliq(i) .GT. liqfra_max) THEN
    461                   cldfraliq(i) = liqfra_max
    462               ENDIF
    463              
    464               qliq_incl = qsati(i) * SQRT(sigma2_pdf) / SQRT(2.*RPI) * EXP( -1.*(sursat_iceliq - mean_pdf)**2. / (2.*sigma2_pdf) )  &
    465                         - qsati(i) * cldfraliq(i) * (sursat_iceliq - mean_pdf )
    466              
    467               sigma2_icefracturb(i)= sigma2_pdf
    468               mean_icefracturb(i)  = mean_pdf
     436
     437              !--2A. No TKE : stationnary binary solution depending on omega
     438              ! If Sequ > Siw liquid cloud, else ice cloud
     439              IF ( tke_dissip(i) .LE. eps )  THEN
     440                 IF (sursat_equ .GT. sursat_iceliq) THEN
     441                    qvap_cld(i)   = qsatl(i) * cldfra1D
     442                    qliq(i)       = MAX(0.,qtot_incl(i)-qsatl(i)) * cldfra1D
     443                    qice(i)       = 0.
     444                    cldfraliq(i)  = 1.
     445                    icefrac(i)    = 0.
     446                    dicefracdT(i) = 0.
     447                 ELSE
     448                    qvap_cld(i)   = qsati(i) * cldfra1D
     449                    qliq(i)       = 0.
     450                    qice(i)       = MAX(0.,qtot_incl(i)-qsati(i)) * cldfra1D
     451                    cldfraliq(i)  = 0.
     452                    icefrac(i)    = 1.
     453                    dicefracdT(i) = 0.
     454                 ENDIF
     455                 
     456              !--2B. TKE and ice : ice supersaturation PDF
     457              !--we compute the cloud liquid properties with a Gaussian PDF
     458              !--of ice supersaturation F(Si) (Field2014, Furtado2016).
     459              !--Parameters of the PDF are function of turbulence and
     460              !--microphysics/existing ice.
     461              ELSE 
     462                     
     463                 !--Tau_dissipturb is the time needed for turbulence to decay
     464                 !--due to viscosity
     465                 tau_dissipturb = gamma_taud * 2. * 2./3. * tke(i) / tke_dissip(i) / C0
     466
     467                 !--------------------- PDF COMPUTATIONS ---------------------
     468                 !--Formulae for sigma2_pdf (variance), mean of PDF in Raillard2025
     469                 !--cloud liquid fraction and in-cloud liquid content are given
     470                 !--by integrating resp. F(Si) and Si*F(Si)
     471                 !--Liquid is limited by the available water vapor trough a
     472                 !--maximal liquid fraction
     473                 !--qice_ini(i) / cldfra1D = qiceincld without precip
     474
     475                 liqfra_max = MAX(0., (MIN (1.,( qtot_incl(i) - (qice_ini(i) / cldfra1D) - qsati(i) * (1 + sursat_iceext ) ) / ( qsatl(i) - qsati(i) ) ) ) )
     476                 sigma2_pdf = 1./2. * ( ai**2 ) *  2./3. * tke(i) * tau_dissipturb * tau_phaserelax
     477                 
     478                 mean_pdf = ai * vitw * tau_phaserelax
     479                 
     480                 cldfraliq(i) = 0.5 * (1. - erf( ( sursat_iceliq - mean_pdf) / (SQRT(2.* sigma2_pdf) ) ) )
     481                 IF (cldfraliq(i) .GT. liqfra_max) THEN
     482                     cldfraliq(i) = liqfra_max
     483                 ENDIF
     484                 
     485                 qliq_incl = qsati(i) * SQRT(sigma2_pdf) / SQRT(2.*RPI) * EXP( -1.*(sursat_iceliq - mean_pdf)**2. / (2.*sigma2_pdf) )  &
     486                           - qsati(i) * cldfraliq(i) * (sursat_iceliq - mean_pdf )
     487                 
     488                 sigma2_icefracturb(i)= sigma2_pdf
     489                 mean_icefracturb(i)  = mean_pdf
    469490     
    470               !------------ SPECIFIC VAPOR CONTENT AND WATER CONSERVATION  ------------
    471 
    472               IF ( (qliq_incl .LE. eps) .OR. (cldfraliq(i) .LE. eps) ) THEN
    473                   qliq_incl    = 0.
    474                   cldfraliq(i) = 0.
    475               END IF
    476                
    477               !--Specific humidity is the max between qsati and the weighted mean between
    478               !--qv in MPC patches and qv in ice-only parts. We assume that MPC parts are
    479               !--always at qsatl and ice-only parts slightly subsaturated (qsati*sursat_iceext+1)
    480               !--The whole cloud can therefore be supersaturated but never subsaturated.
    481 
    482               qvap_incl = MAX(qsati(i), ( 1. - cldfraliq(i) ) * (sursat_iceext + 1.) * qsati(i) + cldfraliq(i) * qsatl(i) )
    483 
    484 
    485               IF ( qvap_incl  .GE. qtot_incl(i) ) THEN
    486                  qvap_incl = qsati(i)
    487                  qliq_incl = qtot_incl(i) - qvap_incl
    488                  qice_incl = 0.
    489 
    490               ELSEIF ( (qvap_incl + qliq_incl) .GE. qtot_incl(i) ) THEN
    491                  qliq_incl = MAX(0.0,qtot_incl(i) - qvap_incl)
    492                  qice_incl = 0.
    493               ELSE
    494                  qice_incl = qtot_incl(i) - qvap_incl - qliq_incl
    495               END IF
    496 
    497               qvap_cld(i)   = qvap_incl * cldfra1D
    498               qliq(i)       = qliq_incl * cldfra1D
    499               qice(i)       = qice_incl * cldfra1D
    500               icefrac(i)    = qice(i) / ( qice(i) + qliq(i) )
    501               dicefracdT(i) = 0.
    502               !print*,'MPC turb'
    503 
    504            END IF ! Enough TKE
     491                 !------------ SPECIFIC VAPOR CONTENT AND WATER CONSERVATION  ------------
     492
     493                 IF ( (qliq_incl .LE. eps) .OR. (cldfraliq(i) .LE. eps) ) THEN
     494                     qliq_incl    = 0.
     495                     cldfraliq(i) = 0.
     496                 END IF
     497                  
     498                 !--Specific humidity is the max between qsati and the weighted mean between
     499                 !--qv in MPC patches and qv in ice-only parts. We assume that MPC parts are
     500                 !--always at qsatl and ice-only parts slightly subsaturated (qsati*sursat_iceext+1)
     501                 !--The whole cloud can therefore be supersaturated but never subsaturated.
     502
     503                 qvap_incl = MAX(qsati(i), ( 1. - cldfraliq(i) ) * (sursat_iceext + 1.) * qsati(i) + cldfraliq(i) * qsatl(i) )
     504
     505                 IF ( qvap_incl  .GE. qtot_incl(i) ) THEN
     506                    qvap_incl = qsati(i)
     507                    qliq_incl = qtot_incl(i) - qvap_incl
     508                    qice_incl = 0.
     509
     510                 ELSEIF ( (qvap_incl + qliq_incl) .GE. qtot_incl(i) ) THEN
     511                    qliq_incl = MAX(0.0,qtot_incl(i) - qvap_incl)
     512                    qice_incl = 0.
     513                 ELSE
     514                    qice_incl = qtot_incl(i) - qvap_incl - qliq_incl
     515                 END IF
     516
     517                 qvap_cld(i)   = qvap_incl * cldfra1D
     518                 qliq(i)       = qliq_incl * cldfra1D
     519                 qice(i)       = qice_incl * cldfra1D
     520                 icefrac(i)    = qice(i) / ( qice(i) + qliq(i) )
     521                 dicefracdT(i) = 0.
     522
     523              END IF ! Enough TKE
     524           
     525           END IF ! End qini
    505526
    506527        END IF ! ! MPC temperature
     
    510531   ENDDO ! klon
    511532END SUBROUTINE ICEFRAC_LSCP_TURB
     533!
    512534!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    513535
Note: See TracChangeset for help on using the changeset viewer.