Changeset 5383 for LMDZ6/trunk/libf


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

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

Location:
LMDZ6/trunk/libf
Files:
8 edited

Legend:

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

    r5268 r5383  
    77!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    88SUBROUTINE lscp(klon,klev,dtime,missing_val,            &
    9      paprs,pplay,temp,qt,qice_save,ptconv,ratqs,sigma_qtherm, &
     9     paprs,pplay,omega,temp,qt,ptconv,ratqs,sigma_qtherm, &
    1010     d_t, d_q, d_ql, d_qi, rneb, rneblsvol,             &
    1111     pfraclr, pfracld,                                  &
     
    106106USE lmdz_lscp_tools, ONLY : icefrac_lscp, icefrac_lscp_turb
    107107USE lmdz_lscp_tools, ONLY : fallice_velocity, distance_to_cloud_top
    108 !USE lmdz_lscp_condensation, ONLY : condensation_lognormal_test, condensation_ice_supersat
    109108USE lmdz_lscp_condensation, ONLY : condensation_lognormal, condensation_ice_supersat
    110109USE lmdz_lscp_poprecip, ONLY : poprecip_precld, poprecip_postcld
     
    138137  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: pplay           ! mid-layer pressure [Pa]
    139138  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: temp            ! temperature (K)
     139  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: omega           ! vertical velocity [Pa/s]
    140140  REAL, DIMENSION(klon,klev),      INTENT(IN)   :: qt              ! total specific humidity (in vapor phase in input) [kg/kg]
    141   REAL, DIMENSION(klon,klev),      INTENT(IN)   :: qice_save       ! ice specific from previous time step [kg/kg]
    142141  INTEGER,                         INTENT(IN)   :: iflag_cld_th    ! flag that determines the distribution of convective clouds
    143142  INTEGER,                         INTENT(IN)   :: iflag_ice_thermo! flag to activate the ice thermodynamics
     
    267266  !----------------
    268267  REAL,DIMENSION(klon) :: qsl, qsi                                ! saturation threshold at current vertical level
     268  REAL,DIMENSION(klon) :: qice_ini
    269269  REAL :: zct, zcl,zexpo
    270270  REAL, DIMENSION(klon,klev) :: ctot
     
    569569    ENDIF
    570570
     571    qice_ini = zq(:)*ratio_qi_qtot(:,k)
    571572    ! --------------------------------------------------------------------
    572573    ! P2> Precipitation evaporation/sublimation/melting
     
    579580        ! Calculation of saturation specific humidity
    580581        ! depending on temperature:
    581         CALL calc_qsat_ecmwf(klon,zt(:),qzero(:),pplay(:,k),RTT,0,.false.,zqs(:),zdqs(:))
     582        CALL calc_qsat_ecmwf(klon,zt,qzero,pplay(:,k),RTT,0,.false.,zqs,zdqs)
    582583        ! wrt liquid water
    583         CALL calc_qsat_ecmwf(klon,zt(:),qzero(:),pplay(:,k),RTT,1,.false.,qsl(:),dqsl(:))
     584        CALL calc_qsat_ecmwf(klon,zt,qzero,pplay(:,k),RTT,1,.false.,qsl,dqsl)
    584585        ! wrt ice
    585         CALL calc_qsat_ecmwf(klon,zt(:),qzero(:),pplay(:,k),RTT,2,.false.,qsi(:),dqsi(:))
     586        CALL calc_qsat_ecmwf(klon,zt,qzero,pplay(:,k),RTT,2,.false.,qsi,dqsi)
    586587
    587588        DO i = 1, klon
     
    763764
    764765     qtot(:)=zq(:)+zmqc(:)
    765      CALL calc_qsat_ecmwf(klon,zt(:),qtot(:),pplay(:,k),RTT,0,.false.,zqs(:),zdqs(:))
     766     CALL calc_qsat_ecmwf(klon,zt,qtot,pplay(:,k),RTT,0,.false.,zqs,zdqs)
    766767     DO i = 1, klon
    767768            zdelta = MAX(0.,SIGN(1.,RTT-zt(i)))
     
    874875
    875876        ! Treatment of non-boundary layer clouds (lognormale)
    876         ! condensation with qsat(T) variation (adaptation)
    877         ! Iterative resolution to converge towards qsat
    878         ! with update of temperature, ice fraction and qsat at
    879         ! each iteration
    880 
    881         ! todoan -> sensitivity to iflag_fisrtilp_qsat
     877        ! We iterate here to take into account the change in qsat(T) and ice fraction
     878        ! during the condensation process
     879        ! the increment in temperature is calculated using the first principle of
     880        ! thermodynamics (enthalpy conservation equation in a mesh composed of a cloud fraction
     881        ! and a clear sky fraction)
     882        ! note that we assume that the vapor in the cloud is at saturation for this calculation     
     883
    882884        DO iter=1,iflag_fisrtilp_qsat+1
    883885
     
    913915
    914916                  ! Calculation of saturation specific humidity and ice fraction
    915                   CALL calc_qsat_ecmwf(klon,Tbef(:),qtot(:),pplay(:,k),RTT,0,.false.,zqs(:),zdqs(:))
    916                   CALL calc_gammasat(klon,Tbef(:),qtot(:),pplay(:,k),gammasat(:),dgammasatdt(:))
     917                  CALL calc_qsat_ecmwf(klon,Tbef,qtot,pplay(:,k),RTT,0,.false.,zqs,zdqs)
     918                  CALL calc_gammasat(klon,Tbef,qtot,pplay(:,k),gammasat,dgammasatdt)
    917919                  ! saturation may occur at a humidity different from qsat (gamma qsat), so gamma correction for dqs
    918920                  zdqs(:) = gammasat(:)*zdqs(:)+zqs(:)*dgammasatdt(:)
     
    923925                  ENDIF
    924926
    925                   CALL icefrac_lscp(klon, zt(:), iflag_ice_thermo, zdistcltop(:),ztemp_cltop(:),zfice(:),dzfice(:))
     927                  CALL icefrac_lscp(klon, zt, iflag_ice_thermo, zdistcltop,ztemp_cltop,zfice,dzfice)
    926928
    927929                  !--AB Activates a condensation scheme that allows for
     
    975977                       klon, Tbef, zq, zqs, gammasat, ratqs(:,k), &
    976978                       keepgoing, rneb(:,k), zqn, qvc)
    977 !                   CALL condensation_lognormal_test( &
    978 !                       klon, klev, k, keepgoing, ratqs, gammasat, zq, zqs, &
    979 !                       zqn, qvc, rneb)
    980979
    981980
     
    10571056        ! Partition function depending on tke for non shallow-convective clouds
    10581057        IF (iflag_icefrac .GE. 1) THEN
    1059 
    1060            CALL icefrac_lscp_turb(klon, dtime, Tbef, pplay(:,k), paprs(:,k), paprs(:,k+1), qice_save(:,k), ziflcld, zqn, &
     1058           CALL icefrac_lscp_turb(klon, dtime, Tbef, pplay(:,k), paprs(:,k), paprs(:,k+1), omega(:,k), qice_ini, ziflcld, zqn, &
    10611059           rneb(:,k), tke(:,k), tke_dissip(:,k), zqliq, zqvapcl, zqice, zfice_turb, dzfice_turb, cldfraliq(:,k),sigma2_icefracturb(:,k), mean_icefracturb(:,k))
    1062 
    10631060        ENDIF
    10641061
  • LMDZ6/trunk/libf/phylmd/lmdz_lscp_condensation.f90

    r5268 r5383  
    88
    99CONTAINS
    10 
    11 !*********************************************************************************
    12 SUBROUTINE condensation_lognormal_test(klon,klev,k,keepgoing,ratqs, gammasat,zq, zqs, zqn, qvc, rneb)
    13 
    14 
    15 IMPLICIT NONE
    16 
    17 INTEGER, INTENT(IN)   :: klon,klev,k
    18 LOGICAL,  INTENT(IN)   , DIMENSION(klon) :: keepgoing     ! .TRUE. if a new condensation loop should be computed
    19 REAL, INTENT(IN), DIMENSION(klon,klev)   :: ratqs
    20 REAL, INTENT(IN), DIMENSION(klon)        :: zq, zqs,gammasat
    21 REAL, INTENT(INOUT), DIMENSION(klon)     :: zqn, qvc
    22 REAL, INTENT(INOUT), DIMENSION(klon,klev) :: rneb
    23 
    24 REAL, DIMENSION(klon) :: zpdf_sig,zpdf_k,zpdf_delta             ! lognormal parameters
    25 REAL, DIMENSION(klon) :: Zpdf_a,zpdf_b,zpdf_e1,zpdf_e2          ! lognormal intermediate variables
    26 INTEGER               :: i
    27 
    28 
    29 DO i=1,klon !todoan : check if loop in i is needed
    30 
    31     IF (keepgoing(i)) THEN
    32 
    33     zpdf_sig(i)=ratqs(i,k)*zq(i)
    34     zpdf_k(i)=-sqrt(log(1.+(zpdf_sig(i)/zq(i))**2))
    35     zpdf_delta(i)=log(zq(i)/(gammasat(i)*zqs(i)))
    36     zpdf_a(i)=zpdf_delta(i)/(zpdf_k(i)*sqrt(2.))
    37     zpdf_b(i)=zpdf_k(i)/(2.*sqrt(2.))
    38     zpdf_e1(i)=zpdf_a(i)-zpdf_b(i)
    39     zpdf_e1(i)=sign(min(ABS(zpdf_e1(i)),5.),zpdf_e1(i))
    40     zpdf_e1(i)=1.-erf(zpdf_e1(i))
    41     zpdf_e2(i)=zpdf_a(i)+zpdf_b(i)
    42     zpdf_e2(i)=sign(min(ABS(zpdf_e2(i)),5.),zpdf_e2(i))
    43     zpdf_e2(i)=1.-erf(zpdf_e2(i))
    44 
    45     IF (zpdf_e1(i).LT.1.e-10) THEN
    46         rneb(i,k)=0.
    47         zqn(i)=zqs(i)
    48         !--AB grid-mean vapor in the cloud - we assume saturation adjustment
    49         qvc(i) = 0.
    50     ELSE
    51         rneb(i,k)=0.5*zpdf_e1(i)
    52         zqn(i)=zq(i)*zpdf_e2(i)/zpdf_e1(i)
    53         !--AB grid-mean vapor in the cloud - we assume saturation adjustment
    54         qvc(i) = rneb(i,k) * zqs(i)
    55     ENDIF
    56 
    57     ENDIF ! keepgoing
    58 ENDDO ! loop on klon
    59 
    60 
    61 END SUBROUTINE condensation_lognormal_test
    6210
    6311
  • LMDZ6/trunk/libf/phylmd/lmdz_lscp_ini.f90

    r5268 r5383  
    222222  !$OMP THREADPRIVATE(rain_int_min)
    223223
    224   REAL, SAVE, PROTECTED :: thresh_precip_frac=1.E-6         ! precipitation fraction threshold TODO [-]
     224  REAL, SAVE, PROTECTED :: thresh_precip_frac=1.E-6         ! precipitation fraction threshold [-]
    225225  !$OMP THREADPRIVATE(thresh_precip_frac)
    226226
    227   REAL, SAVE, PROTECTED :: tau_mixenv=100000                ! Homogeneization time of mixed phase clouds [s]
    228   !$OMP THREADPRIVATE(tau_mixenv)
    229 
    230     REAL, SAVE, PROTECTED :: capa_crystal=1.                ! Sursaturation of ice part in mixed phase clouds [-]
     227  REAL, SAVE, PROTECTED :: capa_crystal=1.                  ! Crystal capacitance (shape factor) for lscp_icefrac_turb [-]
    231228  !$OMP THREADPRIVATE(capa_crystal)
    232 
    233   REAL, SAVE, PROTECTED :: lmix_mpc=1000                    ! Length of turbulent zones in Mixed Phase Clouds [m]
    234   !$OMP THREADPRIVATE(lmix_mpc)
    235229
    236230  REAL, SAVE, PROTECTED :: naero5=0.5                       ! Number concentration of aerosol larger than 0.5 microns [scm-3]
    237231  !$OMP THREADPRIVATE(naero5)
    238232
    239   REAL, SAVE, PROTECTED :: gamma_snwretro = 0.              ! Proportion of snow taken into account in ice retroaction in icefrac_turb [-]
     233  REAL, SAVE, PROTECTED :: gamma_snwretro = 0.              ! Proportion of snow taken into account in ice retroaction in lscp_icefrac_turb [-]
    240234  !$OMP THREADPRIVATE(gamma_snwretro)
    241235
    242   REAL, SAVE, PROTECTED :: gamma_taud = 1.                  ! Tuning coeff for tau_dissipturb [-]
     236  REAL, SAVE, PROTECTED :: gamma_taud = 1.                  ! Tuning coeff for Lagrangian decorrelation timescale in lscp_icefrac_turb [-]
    243237  !$OMP THREADPRIVATE(gamma_taud)
    244238
    245   REAL, SAVE, PROTECTED :: gamma_col=1.                     ! A COMMENTER TODO [-]
     239  REAL, SAVE, PROTECTED :: gamma_col=1.                     ! Tuning coefficient for rain collection efficiency (poprecip) [-]
    246240  !$OMP THREADPRIVATE(gamma_col)
    247241
    248   REAL, SAVE, PROTECTED :: gamma_agg=1.                     ! A COMMENTER TODO [-]
     242  REAL, SAVE, PROTECTED :: gamma_agg=1.                     ! Tuning coefficient for snow aggregation efficiency (poprecip) [-]
    249243  !$OMP THREADPRIVATE(gamma_agg)
    250244
    251   REAL, SAVE, PROTECTED :: gamma_rim=1.                     ! A COMMENTER TODO [-]
     245  REAL, SAVE, PROTECTED :: gamma_rim=1.                     ! Tuning coefficient for riming efficiency (poprecip) [-]
    252246  !$OMP THREADPRIVATE(gamma_rim)
     247 
     248  REAL, SAVE, PROTECTED :: gamma_melt=1.                    ! Tuning coefficient for snow melting efficiency (poprecip) [-]
     249  !$OMP THREADPRIVATE(gamma_melt)
     250 
     251  REAL, SAVE, PROTECTED :: gamma_freez=1.                   ! Tuning coefficient for rain collision freezing efficiency (poprecip) [-]
     252  !$OMP THREADPRIVATE(gamma_freez)
    253253
    254254  REAL, SAVE, PROTECTED :: rho_rain=1000.                   ! Rain density [kg/m3]
     
    258258  !$OMP THREADPRIVATE(rho_ice)
    259259
    260   REAL, SAVE, PROTECTED :: r_rain=500.E-6                   ! Rain droplets radius for POPRECIP [m]
     260  REAL, SAVE, PROTECTED :: r_rain=500.E-6                   ! Rain droplets radius (poprecip) [m]
    261261  !$OMP THREADPRIVATE(r_rain)
    262262
    263   REAL, SAVE, PROTECTED :: r_snow=1.E-3                     ! Ice crystals radius for POPRECIP [m]
     263  REAL, SAVE, PROTECTED :: r_snow=1.E-3                     ! Ice crystals radius (poprecip) [m]
    264264  !$OMP THREADPRIVATE(r_snow)
    265265
    266   REAL, SAVE, PROTECTED :: tau_auto_snow_min=100.           ! A COMMENTER TODO [s]
     266  REAL, SAVE, PROTECTED :: tau_auto_snow_min=100.           ! Snow autoconversion minimal timescale (when liquid) [s]
    267267  !$OMP THREADPRIVATE(tau_auto_snow_min)
    268268
    269   REAL, SAVE, PROTECTED :: tau_auto_snow_max=1000.          ! A COMMENTER TODO [s]
     269  REAL, SAVE, PROTECTED :: tau_auto_snow_max=1000.          ! Snow autoconversion minimal timescale (when only ice) [s]
    270270  !$OMP THREADPRIVATE(tau_auto_snow_max)
    271271
    272   REAL, SAVE, PROTECTED :: eps=1.E-10                       ! A COMMENTER TODO [-]
     272  REAL, SAVE, PROTECTED :: eps=1.E-10                       ! Treshold 0 [-]
    273273  !$OMP THREADPRIVATE(eps)
    274274
    275   REAL, SAVE, PROTECTED :: gamma_melt=1.                    ! A COMMENTER TODO [-]
    276   !$OMP THREADPRIVATE(gamma_melt)
    277 
    278   REAL, SAVE, PROTECTED :: alpha_freez=4.                   ! A COMMENTER TODO [-]
     275  REAL, SAVE, PROTECTED :: alpha_freez=4.                   ! Slope of exponential for immersion freezing timescale [-]
    279276  !$OMP THREADPRIVATE(alpha_freez)
    280277
    281   REAL, SAVE, PROTECTED :: beta_freez=0.1                   ! A COMMENTER TODO [m-3.s-1]
     278  REAL, SAVE, PROTECTED :: beta_freez=0.1                   ! Inv.time immersion freezing [s-1]
    282279  !$OMP THREADPRIVATE(beta_freez)
    283280
    284   REAL, SAVE, PROTECTED :: gamma_freez=1.                   ! A COMMENTER TODO [-]
    285   !$OMP THREADPRIVATE(gamma_freez)
    286 
    287   REAL, SAVE, PROTECTED :: rain_fallspeed=4.                ! A COMMENTER TODO [m/s]
     281  REAL, SAVE, PROTECTED :: rain_fallspeed=4.                ! Rain fall velocity [m/s]
    288282  !$OMP THREADPRIVATE(rain_fallspeed)
    289283
    290   REAL, SAVE, PROTECTED :: rain_fallspeed_clr                ! A COMMENTER TODO [m/s]
     284  REAL, SAVE, PROTECTED :: rain_fallspeed_clr               ! Rain fall velocity in clear sky [m/s]
    291285  !$OMP THREADPRIVATE(rain_fallspeed_clr)
    292286
    293   REAL, SAVE, PROTECTED :: rain_fallspeed_cld               ! A COMMENTER TODO [m/s]
     287  REAL, SAVE, PROTECTED :: rain_fallspeed_cld               ! Rain fall velocity in cloudy sky [m/s]
    294288  !$OMP THREADPRIVATE(rain_fallspeed_cld)
    295289
    296   REAL, SAVE, PROTECTED :: snow_fallspeed=1.               ! A COMMENTER TODO [m/s]
     290  REAL, SAVE, PROTECTED :: snow_fallspeed=1.                ! Snow fall velocity [m/s]
    297291  !$OMP THREADPRIVATE(snow_fallspeed)
    298292
    299   REAL, SAVE, PROTECTED :: snow_fallspeed_clr               ! A COMMENTER TODO [m/s]
     293  REAL, SAVE, PROTECTED :: snow_fallspeed_clr               ! Snow fall velocity in clear sky [m/s]
    300294  !$OMP THREADPRIVATE(snow_fallspeed_clr)
    301295
    302   REAL, SAVE, PROTECTED :: snow_fallspeed_cld               ! A COMMENTER TODO [m/s]
     296  REAL, SAVE, PROTECTED :: snow_fallspeed_cld               ! Snow fall velocity in cloudy sky [m/s]
    303297  !$OMP THREADPRIVATE(snow_fallspeed_cld)
    304298  !--End of the parameters for poprecip
     
    386380    CALL getin_p('dist_liq',dist_liq)
    387381    CALL getin_p('tresh_cl',tresh_cl)
    388     CALL getin_p('tau_mixenv',tau_mixenv)
    389382    CALL getin_p('capa_crystal',capa_crystal)
    390     CALL getin_p('lmix_mpc',lmix_mpc)
    391383    CALL getin_p('naero5',naero5)
    392384    CALL getin_p('gamma_snwretro',gamma_snwretro)
     
    403395    CALL getin_p('gamma_freez',gamma_freez)
    404396    CALL getin_p('gamma_melt',gamma_melt)
     397    CALL getin_p('tau_auto_snow_max',tau_auto_snow_max)
     398    CALL getin_p('tau_auto_snow_min',tau_auto_snow_min)
    405399    CALL getin_p('r_snow',r_snow)
    406400    CALL getin_p('rain_fallspeed',rain_fallspeed)
     
    471465    WRITE(lunout,*) 'lscp_ini, dist_liq', dist_liq
    472466    WRITE(lunout,*) 'lscp_ini, tresh_cl', tresh_cl
    473     WRITE(lunout,*) 'lscp_ini, tau_mixenv', tau_mixenv
    474467    WRITE(lunout,*) 'lscp_ini, capa_crystal', capa_crystal
    475     WRITE(lunout,*) 'lscp_ini, lmix_mpc', lmix_mpc
    476468    WRITE(lunout,*) 'lscp_ini, naero5', naero5
    477469    WRITE(lunout,*) 'lscp_ini, gamma_snwretro', gamma_snwretro
     
    489481    WRITE(lunout,*) 'lscp_ini, gamma_freez:', gamma_freez
    490482    WRITE(lunout,*) 'lscp_ini, gamma_melt:', gamma_melt
     483    WRITE(lunout,*) 'lscp_ini, tau_auto_snow_max:',tau_auto_snow_max
     484    WRITE(lunout,*) 'lscp_ini, tau_auto_snow_min:',tau_auto_snow_min
    491485    WRITE(lunout,*) 'lscp_ini, r_snow:', r_snow
    492486    WRITE(lunout,*) 'lscp_ini, rain_fallspeed_clr:', rain_fallspeed_clr
  • 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
  • LMDZ6/trunk/libf/phylmd/phys_output_ctrlout_mod.F90

    r5253 r5383  
    15401540  TYPE(ctrl_out), SAVE :: o_ocond = ctrl_out((/ 2, 3, 4, 10, 10, 10, 11, 11, 11, 11/), &
    15411541    'ocond', 'Condensed water', 'kg/kg', (/ ('', i=1, 10) /))
     1542  TYPE(ctrl_out), SAVE :: o_oice = ctrl_out((/ 2, 3, 4, 10, 10, 10, 11, 11, 11, 11/), &
     1543    'oice', 'Ice water', 'kg/kg', (/ ('', i=1, 10) /))
    15421544  TYPE(ctrl_out), SAVE :: o_qbs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
    15431545    'qbs', 'Specific content of blowing snow', 'kg/kg', (/ ('', i=1, 10) /))
  • LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90

    r5363 r5383  
    138138         o_cldicemxrat, o_cldwatmxrat, o_reffclwtop, o_ec550aer, &
    139139         o_lwcon, o_iwcon, o_temp, o_theta, &
    140          o_ovapinit, o_ovap, o_oliq, o_ocond, o_geop,o_qbs, &
     140         o_ovapinit, o_ovap, o_oliq, o_ocond, o_oice, o_geop,o_qbs, &
    141141         o_vitu, o_vitv, o_vitw, o_pres, o_paprs, &
    142142         o_zfull, o_zhalf, o_rneb, o_rnebjn, o_rnebcon, &
     
    19971997       IF (vars_defined) zx_tmp_fi3d = ql_seri+qs_seri
    19981998       CALL histwrite_phy(o_ocond, zx_tmp_fi3d)
     1999     
     2000       IF (vars_defined) zx_tmp_fi3d = qs_seri
     2001       CALL histwrite_phy(o_oice, zx_tmp_fi3d)
    19992002
    20002003       CALL histwrite_phy(o_geop, zphi)
  • LMDZ6/trunk/libf/phylmd/physiq_mod.F90

    r5345 r5383  
    12431243    !albedo SB <<<
    12441244
    1245     !--Lea Raillard qs_ini
    1246     REAL, dimension(klon,klev) :: qs_ini
    1247 
    12481245    !--OB variables for mass fixer (hard coded for now)
    12491246    REAL qql1(klon),qql2(klon),corrqql
     
    24342431       ENDDO
    24352432    ENDDO
    2436     ! Lea Raillard qs_ini for cloud phase param.
    2437     qs_ini(:,:)=qs_seri(:,:)
    24382433    !
    24392434    !--OB water mass fixer
     
    26542649            ratio_qi_qtot(i,k) = 0.
    26552650            rvc_seri(i,k) = 0.
     2651          ENDIF
     2652        ENDDO
     2653      ENDDO
     2654    ELSE
     2655      DO k = 1, klev
     2656        DO i = 1, klon
     2657          IF ( ( q_seri(i,k) + ql_seri(i,k) + qs_seri(i,k) ) .GT. 0. ) THEN
     2658            ratio_qi_qtot(i,k) = qs_seri(i,k) / ( q_seri(i,k) + ql_seri(i,k) + qs_seri(i,k) )
     2659          ELSE
     2660            ratio_qi_qtot(i,k) = 0.
    26562661          ENDIF
    26572662        ENDDO
     
    38323837    !ENDIF
    38333838
    3834     CALL lscp(klon,klev,phys_tstep,missing_val,paprs,pplay, &
    3835          t_seri, q_seri,qs_ini,ptconv,ratqs,sigma_qtherm, &
     3839    CALL lscp(klon,klev,phys_tstep,missing_val,paprs,pplay,omega, &
     3840         t_seri, q_seri, ptconv, ratqs, sigma_qtherm, &
    38363841         d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, &
    38373842         pfraclr, pfracld, cldfraliq, sigma2_icefracturb, mean_icefracturb,  &
  • LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90

    r5326 r5383  
    50655065    !ENDIF
    50665066
    5067     CALL lscp(klon,klev,phys_tstep,missing_val,paprs,pplay, &
    5068          t_seri, q_seri,qs_ini,ptconv,ratqs,sigma_qtherm, &
    5069          d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, & 
     5067    CALL lscp(klon,klev,phys_tstep,missing_val,paprs,pplay,omega, &
     5068         t_seri, q_seri, ptconv, ratqs, sigma_qtherm, &
     5069         d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, rneblsvol, &
    50705070         pfraclr, pfracld, cldfraliq, sigma2_icefracturb, mean_icefracturb,  &
    50715071         radocond, picefra, rain_lsc, snow_lsc, &
     
    50735073         prfl, psfl, rhcl,  &
    50745074         zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cld_th, &
    5075          iflag_ice_thermo, distcltop, temp_cltop,  &
     5075         iflag_ice_thermo, distcltop, temp_cltop,   &
    50765076         pbl_tke(:,:,is_ave), pbl_eps(:,:,is_ave), &
    50775077         cell_area, &
Note: See TracChangeset for help on using the changeset viewer.