Changeset 4830


Ignore:
Timestamp:
Feb 22, 2024, 5:29:02 PM (2 months ago)
Author:
evignon
Message:

changements suite à l'atelier nuage d'aujourd'hui.

Location:
LMDZ6/trunk/libf
Files:
9 edited

Legend:

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

    r4819 r4830  
    1515     ztv, zpspsk, ztla, zthl, iflag_cld_th,             &
    1616     iflag_ice_thermo, ok_ice_sursat, qsatl, qsats,     &
    17      distcltop,temp_cltop,                               &
     17     distcltop,temp_cltop,                              &
    1818     qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss,   &
    1919     Tcontr, qcontr, qcontr2, fcontrN, fcontrP,         &
    2020     cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv, &
    21      qrain, qsnow, dqreva, dqssub, dqrauto, dqrcol,     &
    22      dqrmelt, dqrfreez, dqsauto, dqsagg, dqsrim,        &
     21     qraindiag, qsnowdiag, dqreva, dqssub, dqrauto,     &
     22     dqrcol, dqrmelt, dqrfreez, dqsauto, dqsagg, dqsrim,&
    2323     dqsmelt, dqsfreez)
    2424
     
    106106USE lmdz_lscp_ini, ONLY : iflag_mpc_bl, ok_radocond_snow, a_tr_sca, cld_expo_con, cld_expo_lsc
    107107USE lmdz_lscp_ini, ONLY : iflag_cloudth_vert, iflag_rain_incloud_vol, iflag_t_glace, t_glace_min
    108 USE lmdz_lscp_ini, ONLY : coef_eva, coef_eva_i,cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con
     108USE lmdz_lscp_ini, ONLY : coef_eva, coef_sub,cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con
    109109USE lmdz_lscp_ini, ONLY : iflag_bergeron, iflag_fisrtilp_qsat, iflag_vice, cice_velo, dice_velo
    110110USE lmdz_lscp_ini, ONLY : iflag_autoconversion, ffallv_con, ffallv_lsc
     
    204204  ! for POPRECIP
    205205
    206   REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: qrain          !--specific rain content [kg/kg]
    207   REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: qsnow          !--specific snow content [kg/kg]
     206  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: qraindiag      !--DIAGNOSTIC specific rain content [kg/kg]
     207  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: qsnowdiag      !--DIAGNOSTIC specific snow content [kg/kg]
    208208  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: dqreva         !--rain tendendy due to evaporation [kg/kg/s]
    209209  REAL, DIMENSION(klon,klev),      INTENT(OUT)  :: dqssub         !--snow tendency due to sublimation [kg/kg/s]
     
    374374temp_cltop(:,:)=0.
    375375!-- poprecip
    376 qrain(:,:)    = 0.
    377 qsnow(:,:)    = 0.
     376qraindiag(:,:)= 0.
     377qsnowdiag(:,:)= 0.
    378378dqreva(:,:)   = 0.
    379379dqrauto(:,:)  = 0.
     
    547547                ! sublimation of the solid precipitation coming from above
    548548                IF (iflag_evap_prec.EQ.3) THEN
    549                     zqevti = znebprecip(i)*coef_eva_i*(1.0-zq(i)/qsi(i)) &
     549                    zqevti = znebprecip(i)*coef_sub*(1.0-zq(i)/qsi(i)) &
    550550                    *SQRT(zifl(i)/max(1.e-4,znebprecip(i))) &
    551551                    *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG
    552552                ELSE IF (iflag_evap_prec.GE.4) THEN
    553                      zqevti = znebprecipclr(i)*coef_eva_i*(1.0-zq(i)/qsi(i)) &
     553                     zqevti = znebprecipclr(i)*coef_sub*(1.0-zq(i)/qsi(i)) &
    554554                    *SQRT(zifl(i)/max(1.e-8,znebprecipclr(i))) &
    555555                    *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG
    556556                ELSE
    557                     zqevti = 1.*coef_eva_i*(1.0-zq(i)/qsi(i))*SQRT(zifl(i)) &
     557                    zqevti = 1.*coef_sub*(1.0-zq(i)/qsi(i))*SQRT(zifl(i)) &
    558558                    *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG
    559559                ENDIF
     
    997997                            zrfl, zrflclr, zrflcld, &
    998998                            zifl, ziflclr, ziflcld, &
    999                             qrain(:,k), qsnow(:,k), dqrauto(:,k), &
     999                            qraindiag(:,k), qsnowdiag(:,k), dqrauto(:,k), &
    10001000                            dqrcol(:,k), dqrmelt(:,k), dqrfreez(:,k), &
    10011001                            dqsauto(:,k), dqsagg(:,k), dqsrim(:,k), &
     
    10151015           radocond(i,k) = zoliq(i)
    10161016           radocondl(i,k)= radocond(i,k)*(1.-zfice(i))
    1017            radocondi(i,k)= radocond(i,k)*zfice(i)+qsnow(i,k)
     1017           radocondi(i,k)= radocond(i,k)*zfice(i)+qsnowdiag(i,k)
    10181018        ELSE
    10191019           radocond(i,k) = zoliq(i)
  • LMDZ6/trunk/libf/phylmd/lmdz_lscp_ini.F90

    r4818 r4830  
    112112  !$OMP THREADPRIVATE(coef_eva)
    113113
    114   REAL, SAVE, PROTECTED :: coef_eva_i                       ! tuning coefficient ice precip sublimation
    115   !$OMP THREADPRIVATE(coef_eva_i)
     114  REAL, SAVE, PROTECTED :: coef_sub                        ! tuning coefficient ice precip sublimation
     115  !$OMP THREADPRIVATE(coef_sub)
    116116
    117117  REAL, SAVE, PROTECTED :: expo_eva=0.5                     ! tuning coefficient liquid precip evaporation
    118118  !$OMP THREADPRIVATE(expo_eva)
    119119
    120   REAL, SAVE, PROTECTED :: expo_eva_i                       ! tuning coefficient ice precip sublimation
    121   !$OMP THREADPRIVATE(expo_eva_i)
     120  REAL, SAVE, PROTECTED :: expo_sub                       ! tuning coefficient ice precip sublimation
     121  !$OMP THREADPRIVATE(expo_sub)
    122122
    123123  REAL, SAVE, PROTECTED :: cice_velo=1.645                  ! factor in the ice fall velocity formulation
     
    137137  !$OMP THREADPRIVATE(ok_poprecip)
    138138
     139  REAL, SAVE, PROTECTED :: cld_lc_lsc_snow               ! snow autoconversion coefficient, stratiform rain
     140  !$OMP THREADPRIVATE(cld_lc_lsc_snow)
     141
     142  REAL, SAVE, PROTECTED :: cld_lc_con_snow                ! snow autoconversion coefficient, convective rain
     143  !$OMP THREADPRIVATE(cld_lc_con_snow)
     144
    139145  REAL, SAVE, PROTECTED :: rain_int_min=0.001               ! Minimum local rain intensity [mm/s] before the decrease in associated precipitation fraction
    140146  !$OMP THREADPRIVATE(rain_int_min)
     
    155161  !$OMP THREADPRIVATE(rho_rain)
    156162
    157   REAL, SAVE, PROTECTED :: rho_snow=500.                   ! A COMMENTER TODO [kg/m3]
     163  REAL, SAVE, PROTECTED :: rho_snow                        ! A COMMENTER TODO [kg/m3]
    158164  !$OMP THREADPRIVATE(rho_snow)
    159165
     
    164170  !$OMP THREADPRIVATE(r_snow)
    165171
    166   REAL, SAVE, PROTECTED :: tau_auto_snow_min=1800.          ! A COMMENTER TODO [s]
     172  REAL, SAVE, PROTECTED :: tau_auto_snow_min=100.          ! A COMMENTER TODO [s]
    167173  !$OMP THREADPRIVATE(tau_auto_snow_min)
    168174
    169   REAL, SAVE, PROTECTED :: tau_auto_snow_max=7200.          ! A COMMENTER TODO [s]
     175  REAL, SAVE, PROTECTED :: tau_auto_snow_max=1000.          ! A COMMENTER TODO [s]
    170176  !$OMP THREADPRIVATE(tau_auto_snow_max)
    171177
     
    182188  !$OMP THREADPRIVATE(alpha_freez)
    183189
    184   REAL, SAVE, PROTECTED :: gamma_freez=0.1               ! A COMMENTER TODO [m-3.s-1]
     190  REAL, SAVE, PROTECTED :: beta_freez=0.1                 ! A COMMENTER TODO [m-3.s-1]
     191  !$OMP THREADPRIVATE(beta_freez)
     192
     193  REAL, SAVE, PROTECTED :: gamma_freez=1.                 ! A COMMENTER TODO [-]
    185194  !$OMP THREADPRIVATE(gamma_freez)
     195
     196  REAL, SAVE, PROTECTED :: rain_fallspeed=4.              ! A COMMENTER TODO [m/s]
     197  !$OMP THREADPRIVATE(rain_fallspeed)
     198
     199  REAL, SAVE, PROTECTED :: rain_fallspeed_clr              ! A COMMENTER TODO [m/s]
     200  !$OMP THREADPRIVATE(rain_fallspeed_clr)
     201
     202  REAL, SAVE, PROTECTED :: rain_fallspeed_cld             ! A COMMENTER TODO [m/s]
     203  !$OMP THREADPRIVATE(rain_fallspeed_cld)
     204
     205  REAL, SAVE, PROTECTED :: snow_fallspeed=1.             ! A COMMENTER TODO [m/s]
     206  !$OMP THREADPRIVATE(snow_fallspeed)
     207
     208  REAL, SAVE, PROTECTED :: snow_fallspeed_clr             ! A COMMENTER TODO [m/s]
     209  !$OMP THREADPRIVATE(snow_fallspeed_clr)
     210
     211  REAL, SAVE, PROTECTED :: snow_fallspeed_cld             ! A COMMENTER TODO [m/s]
     212  !$OMP THREADPRIVATE(snow_fallspeed_cld)
    186213  !--End of the parameters for poprecip
    187214
     
    246273    CALL getin_p('cld_lc_lsc',cld_lc_lsc)
    247274    CALL getin_p('cld_lc_con',cld_lc_con)
     275    cld_lc_lsc_snow=cld_lc_lsc
     276    cld_lc_con_snow=cld_lc_con
     277    CALL getin_p('cld_lc_lsc_snow',cld_lc_lsc_snow)
     278    CALL getin_p('cld_lc_con_snow',cld_lc_con_snow)
    248279    CALL getin_p('cld_tau_lsc',cld_tau_lsc)
    249280    CALL getin_p('cld_tau_con',cld_tau_con)
     
    253284    CALL getin_p('ffallv_lsc',ffallv_con)
    254285    CALL getin_p('coef_eva',coef_eva)
    255     coef_eva_i=coef_eva
    256     CALL getin_p('coef_eva_i',coef_eva_i)
     286    coef_sub=coef_eva
     287    CALL getin_p('coef_eva_i',coef_sub)
     288    CALL getin_p('coef_sub',coef_sub)
    257289    CALL getin_p('expo_eva',expo_eva)
    258     expo_eva_i=expo_eva
    259     CALL getin_p('expo_eva_i',expo_eva_i)
     290    expo_sub=expo_eva
     291    CALL getin_p('expo_sub',expo_sub)
    260292    CALL getin_p('iflag_autoconversion',iflag_autoconversion)
    261293    CALL getin_p('dist_liq',dist_liq)
     
    267299    CALL getin_p('gamma_col',gamma_col)
    268300    CALL getin_p('gamma_rim',gamma_rim)
     301    CALL getin_p('gamma_freez',gamma_freez)
     302    CALL getin_p('r_snow',r_snow)
     303    CALL getin_p('rain_fallspeed',rain_fallspeed)
     304    rain_fallspeed_clr=rain_fallspeed
     305    rain_fallspeed_cld=rain_fallspeed
     306    CALL getin_p('rain_fallspeed_clr',rain_fallspeed_clr)
     307    CALL getin_p('rain_fallspeed_cld',rain_fallspeed_cld)
     308    CALL getin_p('snow_fallspeed',snow_fallspeed)
     309    snow_fallspeed_clr=snow_fallspeed
     310    snow_fallspeed_cld=snow_fallspeed
     311    CALL getin_p('snow_fallspeed_clr',snow_fallspeed_clr)
     312    CALL getin_p('snow_fallspeed_cld',snow_fallspeed_cld)
    269313
    270314
     
    289333    WRITE(lunout,*) 'lscp_ini, cld_lc_lsc', cld_lc_lsc
    290334    WRITE(lunout,*) 'lscp_ini, cld_lc_con', cld_lc_con
     335    WRITE(lunout,*) 'lscp_ini, cld_lc_lsc_snow', cld_lc_lsc_snow
     336    WRITE(lunout,*) 'lscp_ini, cld_lc_con_snow', cld_lc_con_snow
    291337    WRITE(lunout,*) 'lscp_ini, cld_tau_lsc', cld_tau_lsc
    292338    WRITE(lunout,*) 'lscp_ini, cld_tau_con', cld_tau_con
     
    296342    WRITE(lunout,*) 'lscp_ini, ffallv_con', ffallv_con
    297343    WRITE(lunout,*) 'lscp_ini, coef_eva', coef_eva
    298     WRITE(lunout,*) 'lscp_ini, coef_eva_i', coef_eva_i
     344    WRITE(lunout,*) 'lscp_ini, coef_sub', coef_sub
    299345    WRITE(lunout,*) 'lscp_ini, expo_eva', expo_eva
    300     WRITE(lunout,*) 'lscp_ini, expo_eva_i', expo_eva_i
     346    WRITE(lunout,*) 'lscp_ini, expo_sub', expo_sub
    301347    WRITE(lunout,*) 'lscp_ini, iflag_autoconversion', iflag_autoconversion
    302348    WRITE(lunout,*) 'lscp_ini, dist_liq', dist_liq
     
    309355    WRITE(lunout,*) 'lscp_ini, gamma_col:', gamma_col
    310356    WRITE(lunout,*) 'lscp_ini, gamma_rim:', gamma_rim
     357    WRITE(lunout,*) 'lscp_ini, gamma_freez:', gamma_freez
     358    WRITE(lunout,*) 'lscp_ini, r_snow:', r_snow
     359    WRITE(lunout,*) 'lscp_ini, rain_fallspeed_clr:', rain_fallspeed_clr
     360    WRITE(lunout,*) 'lscp_ini, rain_fallspeed_cld:', rain_fallspeed_cld
     361    WRITE(lunout,*) 'lscp_ini, snow_fallspeed_clr:', snow_fallspeed_clr
     362    WRITE(lunout,*) 'lscp_ini, snow_fallspeed_cld:', snow_fallspeed_cld
    311363
    312364
     
    341393    ENDIF
    342394
     395    !--Initialisations of constants depending on other constants
     396    !--rho_snow formula from r_snow (Brandes et al. 2007 - JAMC)
     397    rho_snow = 1.e3 * 0.178 * (r_snow * 2. * 1000.)**(-0.922)
     398
    343399
    344400    !AA Temporary initialisation
  • LMDZ6/trunk/libf/phylmd/lmdz_lscp_old.F90

    r4674 r4830  
    2323  USE lmdz_lscp_ini, ONLY : seuil_neb, rain_int_min, iflag_evap_prec, iflag_oldbug_fisrtilp,a_tr_sca
    2424  USE lmdz_lscp_ini, ONLY: iflag_cloudth_vert, iflag_rain_incloud_vol
    25   USE lmdz_lscp_ini, ONLY: coef_eva, coef_eva_i, ffallv_lsc, ffallv_con
     25  USE lmdz_lscp_ini, ONLY: coef_eva, ffallv_lsc, ffallv_con
    2626  USE lmdz_lscp_ini, ONLY: cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con
    2727  USE lmdz_lscp_ini, ONLY: reevap_ice, iflag_bergeron, iflag_fisrtilp_qsat, iflag_pdf
  • LMDZ6/trunk/libf/phylmd/lmdz_lscp_poprecip.F90

    r4823 r4830  
    2323
    2424USE lmdz_lscp_ini, ONLY : prt_level, lunout
    25 USE lmdz_lscp_ini, ONLY : coef_eva, coef_eva_i, expo_eva, expo_eva_i, thresh_precip_frac
     25USE lmdz_lscp_ini, ONLY : coef_eva, coef_sub, expo_eva, expo_sub, thresh_precip_frac
    2626USE lmdz_lscp_ini, ONLY : RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG
    2727USE lmdz_lscp_tools, ONLY : calc_qsat_ecmwf
     
    149149    !--Sublimation of the solid precipitation coming from above
    150150    !--(same formula as for liquid precip)
    151     dsnowsub = - precipfracclr(i) * coef_eva_i * (1. - qvap(i) / qsati(i)) &
    152              * ( snowclr(i) / MAX(thresh_precip_frac, precipfracclr(i)) ) ** expo_eva_i &
     151    dsnowsub = - precipfracclr(i) * coef_sub * (1. - qvap(i) / qsati(i)) &
     152             * ( snowclr(i) / MAX(thresh_precip_frac, precipfracclr(i)) ) ** expo_sub &
    153153             * temp(i) * RD / pplay(i) &
    154154             * ( paprsdn(i) - paprsup(i) ) / RG
     
    229229! - aggregation (agg)
    230230! - riming (rim)
    231 ! - collection (coll)
     231! - collection (col)
    232232! - melting (melt)
    233 ! - freezing (free)
     233! - freezing (freez)
    234234!
    235235SUBROUTINE poprecip_postcld( &
     
    238238           precipfracclr, precipfraccld, &
    239239           rain, rainclr, raincld, snow, snowclr, snowcld, &
    240            qrain, qsnow, dqrauto, dqrcol, dqrmelt, dqrfreez, &
     240           qraindiag, qsnowdiag, dqrauto, dqrcol, dqrmelt, dqrfreez, &
    241241           dqsauto, dqsagg, dqsrim, dqsmelt, dqsfreez)
    242242
     
    251251                          tau_auto_snow_min, tau_auto_snow_max,                &
    252252                          thresh_precip_frac, eps, air_thermal_conduct,        &
    253                           coef_ventil, alpha_freez, gamma_freez, temp_nowater, &
    254                           iflag_cloudth_vert, iflag_rain_incloud_vol
     253                          coef_ventil, alpha_freez, beta_freez, temp_nowater,  &
     254                          iflag_cloudth_vert, iflag_rain_incloud_vol,          &
     255                          cld_lc_lsc_snow, cld_lc_con_snow, gamma_freez,       &
     256                          rain_fallspeed_clr, rain_fallspeed_cld,              &
     257                          snow_fallspeed_clr, snow_fallspeed_cld
    255258
    256259
     
    286289REAL,    INTENT(INOUT), DIMENSION(klon) :: snowcld        !--flux of snow gridbox-mean in cloudy air coming from the layer above [kg/s/m2]
    287290
    288 REAL,    INTENT(OUT),   DIMENSION(klon) :: qrain          !--specific rain content [kg/kg]
    289 REAL,    INTENT(OUT),   DIMENSION(klon) :: qsnow          !--specific snow content [kg/kg]
     291REAL,    INTENT(OUT),   DIMENSION(klon) :: qraindiag      !--DIAGNOSTIC specific rain content [kg/kg]
     292REAL,    INTENT(OUT),   DIMENSION(klon) :: qsnowdiag      !--DIAGNOSTIC specific snow content [kg/kg]
    290293REAL,    INTENT(OUT),   DIMENSION(klon) :: dqrcol         !--rain tendendy due to collection by rain of liquid cloud droplets [kg/kg/s]
    291294REAL,    INTENT(OUT),   DIMENSION(klon) :: dqsagg         !--snow tendency due to collection of lcoud ice by aggregation [kg/kg/s]
     
    306309REAL, DIMENSION(klon) :: qtot !--includes vap, liq, ice and precip
    307310
    308 ! partition of the fluxes
     311!--Partition of the fluxes
    309312REAL :: dcldfra
    310313REAL :: precipfractot
     
    313316REAL :: draincld, dsnowcld
    314317
    315 ! collection, aggregation and riming
     318!--Collection, aggregation and riming
    316319REAL :: eff_cldfra
    317320REAL :: coef_col, coef_agg, coef_rim, coef_tmp, qrain_tmp
    318321REAL :: Eff_rain_liq, Eff_snow_ice, Eff_snow_liq
    319 REAL :: dqlcol           ! loss of liquid cloud content due to collection by rain [kg/kg/s]
    320 REAL :: dqiagg           ! loss of ice cloud content due to collection by aggregation [kg/kg/s]
    321 REAL :: dqlrim           ! loss of liquid cloud content due to riming on snow[kg/kg/s]
    322 
    323 ! autoconversion
     322REAL :: dqlcol           !--loss of liquid cloud content due to collection by rain [kg/kg/s]
     323REAL :: dqiagg           !--loss of ice cloud content due to collection by aggregation [kg/kg/s]
     324REAL :: dqlrim           !--loss of liquid cloud content due to riming on snow [kg/kg/s]
     325
     326!--Autoconversion
    324327REAL :: qthresh_auto_rain, tau_auto_rain, expo_auto_rain
    325328REAL :: qthresh_auto_snow, tau_auto_snow, expo_auto_snow
    326 REAL :: dqlauto          ! loss of liquid cloud content due to autoconversion to rain [kg/kg/s]
    327 REAL :: dqiauto          ! loss of ice cloud content due to autoconversion to snow [kg/kg/s]
    328 
    329 ! melting
     329REAL :: dqlauto          !--loss of liquid cloud content due to autoconversion to rain [kg/kg/s]
     330REAL :: dqiauto          !--loss of ice cloud content due to autoconversion to snow [kg/kg/s]
     331
     332!--Melting
    330333REAL :: dqsmelt_max
    331 REAL :: fallice_clr, fallice_cld
    332334REAL :: nb_snowflake_clr, nb_snowflake_cld
    333335REAL :: capa_snowflake, temp_wetbulb
     
    335337REAL, DIMENSION(klon) :: qzero, qsat, dqsat
    336338
    337 ! freezing
     339!--Freezing
    338340REAL :: dqrfreez_max
    339341REAL :: tau_freez
    340342REAL :: dqrclrfreez, dqrcldfreez, dqrtotfreez
     343REAL :: coef_freez
     344REAL :: dqifreez        !--loss of ice cloud content due to collection of ice from rain [kg/kg/s]
     345REAL :: Eff_rain_ice
    341346
    342347
     
    358363DO i = 1, klon
    359364
    360   ! variables initialisation
    361   dqlrim  = 0.
     365  !--Variables initialisation
    362366  dqlcol  = 0.
    363367  dqiagg  = 0.
    364368  dqiauto = 0.
    365369  dqlauto = 0.
     370  dqlrim  = 0.
     371  dqifreez= 0.
    366372
    367373  !--hum_to_flux: coef to convert a specific quantity to a flux
     
    401407  !--Tendency of the clear-sky precipitation fraction. We add a MAX on the
    402408  !--calculation of the current CS precip. frac.
    403   dprecipfracclr = MAX( 0., ( precipfractot - cldfra(i) ) ) - precipfracclr(i)
     409  !dprecipfracclr = MAX( 0., ( precipfractot - cldfra(i) ) ) - precipfracclr(i)
     410  !--We remove it, because precipfractot is guaranteed to be > cldfra (the MAX is activated
     411  !--if precipfractot < cldfra)
     412  dprecipfracclr = ( precipfractot - cldfra(i) ) - precipfracclr(i)
    404413  !--Tendency of the cloudy precipitation fraction. We add a MAX on the
    405414  !--calculation of the current CS precip. frac.
    406415  !dprecipfraccld = MAX( dcldfra , - precipfraccld(i) )
    407   !--We remove it, because cldfra is guaranteed to be > O (the MAX is activated
     416  !--We remove it, because cldfra is guaranteed to be > 0 (the MAX is activated
    408417  !--if cldfra < 0)
    409418  dprecipfraccld = dcldfra
     
    448457 
    449458
    450   ! if vertical heterogeneity is taken into account, we use
    451   ! the "true" volume fraction instead of a modified
    452   ! surface fraction (which is larger and artificially
    453   ! reduces the in-cloud water).
     459  !--If vertical heterogeneity is taken into account, we use
     460  !--the "true" volume fraction instead of a modified
     461  !--surface fraction (which is larger and artificially
     462  !--reduces the in-cloud water).
    454463  IF ( ( iflag_cloudth_vert .GE. 3 ) .AND. ( iflag_rain_incloud_vol .EQ. 1 ) ) THEN
    455464    eff_cldfra = ctot_vol(i)
     
    459468
    460469
    461   ! Start precipitation growth processes
     470  !--Start precipitation growth processes
    462471
    463472  !--If the cloud is big enough, the precipitation processes activate
     
    483492    !--get in-cloud mean quantities. The two divisions by eff_cldfra are
    484493    !--then simplified.
     494
     495    !--The sticking efficacy is perfect.
    485496    Eff_rain_liq = 1.
    486497    coef_col = gamma_col * 3. / 4. / rho_rain / r_rain * Eff_rain_liq
    487498    IF ((raincld(i) .GT. 0.) .AND. (coef_col .GT. 0.)) THEN
    488499      !-- ATTENTION Double implicit version
     500      !-- BEWARE the formule below is FALSE (because raincld is a flux, not a delta flux)
    489501      !qrain_tmp = raincld(i) / hum_to_flux(i)
    490502      !coef_tmp = coef_col * dtime * ( qrain_tmp / precipfraccld(i) + qliq(i) / eff_cldfra )
     
    495507      !--available.
    496508      !dqlcol = MAX( - qliq(i), dqlcol )
    497       !--Exact version, which does not need a barrier because of
     509      !--Exact explicit version, which does not need a barrier because of
    498510      !--the exponential decrease
    499511      dqlcol = qliq(i) * ( EXP( - dtime * coef_col * raincld(i) / precipfraccld(i) ) - 1. )
     
    517529      !--available.
    518530      !dqiagg = MAX( - qice(i), dqiagg )
    519       !--Exact version, which does not need a barrier because of
     531      !--Exact explicit version, which does not need a barrier because of
    520532      !--the exponential decrease
    521533      dqiagg = qice(i) * ( EXP( - dtime * coef_agg * snowcld(i) / precipfraccld(i) ) - 1. )
     
    536548    !--rain drops/snowflakes. It relies on the formulations by
    537549    !--Sundqvist 1978.
    538     ! TODO what else?
    539550
    540551    !--If we are in a convective point, we have different parameters
    541552    !--for the autoconversion
    542553    IF ( ptconv(i) ) THEN
    543         ! ATTENTION voir les constantes ici qui ne devraient pas etre identiques
    544554        qthresh_auto_rain = cld_lc_con
    545         qthresh_auto_snow = cld_lc_con
     555        qthresh_auto_snow = cld_lc_con_snow
    546556
    547557        tau_auto_rain = cld_tau_con
     
    553563        expo_auto_snow = cld_expo_con
    554564    ELSE
    555         ! ATTENTION voir les constantes ici qui ne devraient pas etre identiques
    556565        qthresh_auto_rain = cld_lc_lsc
    557         qthresh_auto_snow = cld_lc_lsc
     566        qthresh_auto_snow = cld_lc_lsc_snow
    558567
    559568        tau_auto_rain = cld_tau_lsc
     
    568577
    569578    ! Liquid water quantity to remove according to (Sundqvist, 1978)
    570     ! dqliq/dt = -qliq/tau * ( 1-exp(-(qcin/clw)**2) )
    571     !.........................................................
    572     ! we first treat the second term (with exponential) in an explicit way
    573     ! and then treat the first term (-q/tau) in an exact way
     579    ! dqliq/dt = -qliq/tau * ( 1-exp(-(qliqincld/qthresh)**2) )
     580    !
     581    !--And same formula for ice
     582    !
     583    !--We first treat the second term (with exponential) in an explicit way
     584    !--and then treat the first term (-q/tau) in an exact way
    574585
    575586    dqlauto = - qliq(i) * ( 1. - exp( - dtime / tau_auto_rain * ( 1. - exp( &
     
    602613    !--snow (graupel in fact) because of the collision between
    603614    !--those and falling snowflakes.
    604     !--The formula come from Muench and Lohmann 2020
     615    !--The formula comes from Muench and Lohmann 2020
    605616    !--NB.: this process needs a temperature adjustment
    606617
     
    631642    ENDIF
    632643
    633   ! ATTENTION veut on faire un processus similaire et symetrique qui
    634   ! convertirait la pluie en surfusion qui tombe sur des cristaux de glace
    635   ! en flux de neige ? (si la temperature est negative)
    636 
    637644  ENDIF ! cldfra .GE. seuil_neb
    638645
     
    658665  !--                the radius if the snowflake is a sphere [m]
    659666  !--temp_wetbulb: wet-bulb temperature [K]
    660   !--fallice: snow fall velocity (in clear/cloudy sky) [m/s]
     667  !--snow_fallspeed: snow fall velocity (in clear/cloudy sky) [m/s]
    661668  !--air_thermal_conduct: thermal conductivity of the air [J/m/K/s]
    662669  !--coef_ventil: ventilation coefficient [-]
     
    682689    !--In clear air
    683690    IF ( snowclr(i) .GT. 0. ) THEN
    684       ! ATTENTION fallice a definir
    685       fallice_clr = 1.
    686691      !--Calculated according to
    687692      !-- flux = velocity_snowflakes * nb_snowflakes * volume_snowflakes * rho_snow
    688       nb_snowflake_clr = snowclr(i) / precipfracclr(i) / fallice_clr &
     693      nb_snowflake_clr = snowclr(i) / precipfracclr(i) / snow_fallspeed_clr &
    689694                       / ( 4. / 3. * RPI * r_snow**3. * rho_snow )
    690695      dqsclrmelt = - nb_snowflake_clr * 4. * RPI * air_thermal_conduct &
    691696                   * capa_snowflake / RLMLT * coef_ventil &
    692697                   * MAX(0., temp_wetbulb - RTT) * dtime
     698
     699      !--Barrier to limit the melting flux to the clr snow flux in the mesh
    693700      dqsclrmelt = MAX( dqsclrmelt , -snowclr(i) / hum_to_flux(i))
    694       ELSE
    695       dqsclrmelt = 0.
    696701   ENDIF
    697702
    698703    !--In cloudy air
    699704    IF ( snowcld(i) .GT. 0. ) THEN
    700       ! ATTENTION fallice a definir
    701       fallice_cld = 1.
    702705      !--Calculated according to
    703706      !-- flux = velocity_snowflakes * nb_snowflakes * volume_snowflakes * rho_snow
    704       nb_snowflake_cld = snowcld(i) / precipfraccld(i) / fallice_cld &
     707      nb_snowflake_cld = snowcld(i) / precipfraccld(i) / snow_fallspeed_cld &
    705708                       / ( 4. / 3. * RPI * r_snow**3. * rho_snow )
    706709      dqscldmelt = - nb_snowflake_cld * 4. * RPI * air_thermal_conduct &
    707710                   * capa_snowflake / RLMLT * coef_ventil &
    708711                   * MAX(0., temp_wetbulb - RTT) * dtime
     712
     713      !--Barrier to limit the melting flux to the cld snow flux in the mesh
    709714      dqscldmelt = MAX( dqscldmelt , -snowcld(i) / hum_to_flux(i))
    710     ELSE
    711       dqscldmelt = 0.
    712715    ENDIF
    713716   
    714     !--Barriers
     717    !--Barrier on temperature. If the total melting flux leads to a
     718    !--positive temperature, it is limited to keep temperature above 0 degC.
    715719    !--It is activated if the total is LOWER than the max
    716720    !--because everything is negative
     
    769773                         * ( 1. + RVTMP2 * qtot(i) ))
    770774 
    771     tau_freez = 1. / ( gamma_freez &
     775    tau_freez = 1. / ( beta_freez &
    772776              * EXP( - alpha_freez * ( temp(i) - temp_nowater ) / ( RTT - temp_nowater ) ) )
     777
     778    !--Initialisation
     779    dqrclrfreez = 0.
     780    dqrcldfreez = 0.
    773781
    774782    !--In clear air
    775783    IF ( rainclr(i) .GT. 0. ) THEN
    776        !--Exact solution of dqrain/dt = -qrain/tau_freez
    777        dqrclrfreez = rainclr(i) / hum_to_flux(i) * ( EXP( - dtime / tau_freez ) - 1. )
    778        dqrclrfreez = MAX(dqrclrfreez, -rainclr(i) / hum_to_flux(i))
    779     ELSE
    780        dqrclrfreez = 0.
     784      !--Exact solution of dqrain/dt = -qrain/tau_freez
     785      dqrclrfreez = rainclr(i) / hum_to_flux(i) * ( EXP( - dtime / tau_freez ) - 1. )
    781786    ENDIF
    782787
    783788    !--In cloudy air
    784789    IF ( raincld(i) .GT. 0. ) THEN
    785        !--Exact solution of dqrain/dt = -qrain/tau_freez
    786        dqrcldfreez = raincld(i) / hum_to_flux(i) * ( EXP( - dtime / tau_freez ) - 1. )
    787        dqrcldfreez = MAX(dqrcldfreez, -raincld(i) / hum_to_flux(i))
    788     ELSE
    789        dqrcldfreez = 0.
     790      !--Exact solution of dqrain/dt = -qrain/tau_freez
     791      dqrcldfreez = raincld(i) / hum_to_flux(i) * ( EXP( - dtime / tau_freez ) - 1. )
     792
     793      !---------------------------------------------------------
     794      !--    FREEZING OF RAIN WITH CONTACT OF ICE CRYSTALS
     795      !---------------------------------------------------------
     796      !--Sub-process of freezing which quantifies the collision between
     797      !--ice crystals in suspension and falling rain droplets.
     798      !--The rain droplets freeze, becoming graupel, and carrying
     799      !--the ice crystal (which acted as an ice nucleating particle).
     800      !--The formula is adapted from the riming formula.
     801
     802      !--The sticking efficacy is perfect.
     803      Eff_rain_ice = 1.
     804      coef_freez = gamma_freez * 3. / 4. / rho_rain / r_rain * Eff_rain_ice
     805      !-- ATTENTION Double implicit version? + barriers if needed
     806      !--Exact version, which does not need a barrier because of
     807      !--the exponential decrease
     808      dqifreez = qice(i) * ( EXP( - dtime * coef_freez * raincld(i) / precipfraccld(i) ) - 1. )
     809
     810      !--We add the two freezing processes in cloud
     811      dqrcldfreez = dqrcldfreez - dqifreez
    790812    ENDIF
    791813
     
    838860
    839861  !--Diagnostics
    840   ! ATTENTION A REPRENDRE
    841   qrain(i) = rain(i) / hum_to_flux(i)
    842   qsnow(i) = snow(i) / hum_to_flux(i)
     862  !--BEWARE this is indeed a diagnostic: this is an estimation from
     863  !--the value of the flux at the bottom interface of the mesh and
     864  !--and assuming an upstream numerical calculation
     865  !--If ok_radocond_snow is TRUE, then the diagnostic qsnowdiag is
     866  !--used for computing the total ice water content in the mesh
     867  !--for radiation only
     868  qraindiag(i) = ( rainclr(i) / ( pplay(i) / RD / temp(i) ) / rain_fallspeed_clr &
     869                 + raincld(i) / ( pplay(i) / RD / temp(i) ) / rain_fallspeed_cld )
     870  qsnowdiag(i) = ( snowclr(i) / ( pplay(i) / RD / temp(i) ) / snow_fallspeed_clr &
     871                 + snowcld(i) / ( pplay(i) / RD / temp(i) ) / snow_fallspeed_cld )
    843872
    844873ENDDO ! loop on klon
  • LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90

    r4819 r4830  
    539539
    540540!--POPRECIP variables
    541       REAL, SAVE, ALLOCATABLE :: qrain_lsc(:,:)
    542       !$OMP THREADPRIVATE(qrain_lsc)
    543       REAL, SAVE, ALLOCATABLE :: qsnow_lsc(:,:)
    544       !$OMP THREADPRIVATE(qsnow_lsc)
     541      REAL, SAVE, ALLOCATABLE :: qraindiag(:,:)
     542      !$OMP THREADPRIVATE(qraindiag)
     543      REAL, SAVE, ALLOCATABLE :: qsnowdiag(:,:)
     544      !$OMP THREADPRIVATE(qsnowdiag)
    545545      REAL, SAVE, ALLOCATABLE :: dqreva(:,:)
    546546      !$OMP THREADPRIVATE(dqreva)
     
    962962
    963963!--POPRECIP variables
    964       ALLOCATE(qrain_lsc(klon,klev), qsnow_lsc(klon,klev))
     964      ALLOCATE(qraindiag(klon,klev), qsnowdiag(klon,klev))
    965965      ALLOCATE(dqreva(klon,klev), dqssub(klon,klev))
    966966      ALLOCATE(dqrauto(klon,klev), dqrcol(klon,klev), dqrmelt(klon,klev), dqrfreez(klon,klev))
     
    12781278
    12791279!--POPRECIP variables
    1280       DEALLOCATE(qrain_lsc, qsnow_lsc)
     1280      DEALLOCATE(qraindiag, qsnowdiag)
    12811281      DEALLOCATE(dqreva, dqssub)
    12821282      DEALLOCATE(dqrauto, dqrcol, dqrmelt, dqrfreez)
  • LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90

    r4819 r4830  
    363363         rneb, rnebjn, rneblsvol, zx_rh, zx_rhl, zx_rhi, &
    364364         pfraclr, pfracld,  &
    365          qrain_lsc, qsnow_lsc, dqreva, dqssub, &
     365         qraindiag, qsnowdiag, dqreva, dqssub, &
    366366         dqrauto,dqrcol,dqrmelt,dqrfreez, &
    367367         dqsauto,dqsagg,dqsrim,dqsmelt,dqsfreez, &
     
    19851985           CALL histwrite_phy(o_pfracld, pfracld)
    19861986           IF (ok_poprecip) THEN
    1987            CALL histwrite_phy(o_qrainlsc, qrain_lsc)
    1988            CALL histwrite_phy(o_qsnowlsc, qsnow_lsc)
     1987           CALL histwrite_phy(o_qrainlsc, qraindiag)
     1988           CALL histwrite_phy(o_qsnowlsc, qsnowdiag)
    19891989           CALL histwrite_phy(o_dqreva, dqreva)
    19901990           CALL histwrite_phy(o_dqrauto, dqrauto)
  • LMDZ6/trunk/libf/phylmd/physiq_mod.F90

    r4822 r4830  
    196196       d_q_ch4, &
    197197       ! proprecip
    198        qrain_lsc, qsnow_lsc, &
     198       qraindiag, qsnowdiag, &
    199199       dqreva, dqssub, &
    200200       dqrauto,dqrcol,dqrmelt,dqrfreez, &
     
    38953895         Tcontr, qcontr, qcontr2, fcontrN, fcontrP , &
    38963896         cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv, &
    3897          qrain_lsc, qsnow_lsc, dqreva, dqssub, dqrauto, dqrcol, dqrmelt, &
     3897         qraindiag, qsnowdiag, dqreva, dqssub, dqrauto, dqrcol, dqrmelt, &
    38983898         dqrfreez, dqsauto, dqsagg, dqsrim, dqsmelt, dqsfreez)
    38993899
  • LMDZ6/trunk/libf/phylmdiso/phys_local_var_mod.F90

    r4819 r4830  
    640640
    641641!--POPRECIP variables
    642       REAL, SAVE, ALLOCATABLE :: qrain_lsc(:,:)
    643       !$OMP THREADPRIVATE(qrain_lsc)
    644       REAL, SAVE, ALLOCATABLE :: qsnow_lsc(:,:)
    645       !$OMP THREADPRIVATE(qsnow_lsc)
     642      REAL, SAVE, ALLOCATABLE :: qraindiag(:,:)
     643      !$OMP THREADPRIVATE(qraindiag)
     644      REAL, SAVE, ALLOCATABLE :: qsnowdiag(:,:)
     645      !$OMP THREADPRIVATE(qsnowdiag)
    646646      REAL, SAVE, ALLOCATABLE :: dqreva(:,:)
    647647      !$OMP THREADPRIVATE(dqreva)
     
    11201120!--POPRECIP variables
    11211121      ALLOCATE(dqreva(klon,klev),dqssub(klon,klev))
    1122       ALLOCATE(qrain_lsc(klon,klev), qsnow_lsc(klon,klev))
     1122      ALLOCATE(qraindiag(klon,klev), qsnowdiag(klon,klev))
    11231123      ALLOCATE(dqrauto(klon,klev), dqrcol(klon,klev), dqrmelt(klon,klev), dqrfreez(klon,klev))
    11241124      ALLOCATE(dqsauto(klon,klev), dqsagg(klon,klev), dqsrim(klon,klev), dqsmelt(klon,klev), dqsfreez(klon,klev))
     
    14831483
    14841484!--POPRECIP variables
    1485       DEALLOCATE(qrain_lsc, qsnow_lsc)
     1485      DEALLOCATE(qraindiag, qsnowdiag)
    14861486      DEALLOCATE(dqreva,dqssub)
    14871487      DEALLOCATE(dqrauto,dqrcol,dqrmelt,dqrfreez)
  • LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90

    r4821 r4830  
    230230       d_q_ch4, &
    231231       ! proprecip
    232        qrain_lsc, qsnow_lsc, &
     232       qraindiag, qsnowdiag, &
    233233       dqreva, dqssub, &
    234234       dqrauto,dqrcol,dqrmelt,dqrfreez, &
     
    48904890         Tcontr, qcontr, qcontr2, fcontrN, fcontrP , &
    48914891         cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv, &
    4892          qrain_lsc, qsnow_lsc, dqreva, dqssub, dqrauto, dqrcol, dqrmelt, &
     4892         qraindiag, qsnowdiag, dqreva, dqssub, dqrauto, dqrcol, dqrmelt, &
    48934893         dqrfreez, dqsauto, dqsagg, dqsrim, dqsmelt, dqsfreez)
    48944894
Note: See TracChangeset for help on using the changeset viewer.