Changeset 4830
- Timestamp:
- Feb 22, 2024, 5:29:02 PM (2 months ago)
- Location:
- LMDZ6/trunk/libf
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/lmdz_lscp.F90
r4819 r4830 15 15 ztv, zpspsk, ztla, zthl, iflag_cld_th, & 16 16 iflag_ice_thermo, ok_ice_sursat, qsatl, qsats, & 17 distcltop,temp_cltop, 17 distcltop,temp_cltop, & 18 18 qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, & 19 19 Tcontr, qcontr, qcontr2, fcontrN, fcontrP, & 20 20 cloudth_sth,cloudth_senv,cloudth_sigmath,cloudth_sigmaenv, & 21 qrain , qsnow, dqreva, dqssub, dqrauto, dqrcol, &22 dqr melt, dqrfreez, dqsauto, dqsagg, dqsrim,&21 qraindiag, qsnowdiag, dqreva, dqssub, dqrauto, & 22 dqrcol, dqrmelt, dqrfreez, dqsauto, dqsagg, dqsrim,& 23 23 dqsmelt, dqsfreez) 24 24 … … 106 106 USE lmdz_lscp_ini, ONLY : iflag_mpc_bl, ok_radocond_snow, a_tr_sca, cld_expo_con, cld_expo_lsc 107 107 USE 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_con108 USE lmdz_lscp_ini, ONLY : coef_eva, coef_sub,cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con 109 109 USE lmdz_lscp_ini, ONLY : iflag_bergeron, iflag_fisrtilp_qsat, iflag_vice, cice_velo, dice_velo 110 110 USE lmdz_lscp_ini, ONLY : iflag_autoconversion, ffallv_con, ffallv_lsc … … 204 204 ! for POPRECIP 205 205 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] 208 208 REAL, DIMENSION(klon,klev), INTENT(OUT) :: dqreva !--rain tendendy due to evaporation [kg/kg/s] 209 209 REAL, DIMENSION(klon,klev), INTENT(OUT) :: dqssub !--snow tendency due to sublimation [kg/kg/s] … … 374 374 temp_cltop(:,:)=0. 375 375 !-- poprecip 376 qrain (:,:)= 0.377 qsnow (:,:)= 0.376 qraindiag(:,:)= 0. 377 qsnowdiag(:,:)= 0. 378 378 dqreva(:,:) = 0. 379 379 dqrauto(:,:) = 0. … … 547 547 ! sublimation of the solid precipitation coming from above 548 548 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)) & 550 550 *SQRT(zifl(i)/max(1.e-4,znebprecip(i))) & 551 551 *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG 552 552 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)) & 554 554 *SQRT(zifl(i)/max(1.e-8,znebprecipclr(i))) & 555 555 *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG 556 556 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)) & 558 558 *(paprs(i,k)-paprs(i,k+1))/pplay(i,k)*zt(i)*RD/RG 559 559 ENDIF … … 997 997 zrfl, zrflclr, zrflcld, & 998 998 zifl, ziflclr, ziflcld, & 999 qrain (:,k), qsnow(:,k), dqrauto(:,k), &999 qraindiag(:,k), qsnowdiag(:,k), dqrauto(:,k), & 1000 1000 dqrcol(:,k), dqrmelt(:,k), dqrfreez(:,k), & 1001 1001 dqsauto(:,k), dqsagg(:,k), dqsrim(:,k), & … … 1015 1015 radocond(i,k) = zoliq(i) 1016 1016 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) 1018 1018 ELSE 1019 1019 radocond(i,k) = zoliq(i) -
LMDZ6/trunk/libf/phylmd/lmdz_lscp_ini.F90
r4818 r4830 112 112 !$OMP THREADPRIVATE(coef_eva) 113 113 114 REAL, SAVE, PROTECTED :: coef_ eva_i! tuning coefficient ice precip sublimation115 !$OMP THREADPRIVATE(coef_ eva_i)114 REAL, SAVE, PROTECTED :: coef_sub ! tuning coefficient ice precip sublimation 115 !$OMP THREADPRIVATE(coef_sub) 116 116 117 117 REAL, SAVE, PROTECTED :: expo_eva=0.5 ! tuning coefficient liquid precip evaporation 118 118 !$OMP THREADPRIVATE(expo_eva) 119 119 120 REAL, SAVE, PROTECTED :: expo_ eva_i! tuning coefficient ice precip sublimation121 !$OMP THREADPRIVATE(expo_ eva_i)120 REAL, SAVE, PROTECTED :: expo_sub ! tuning coefficient ice precip sublimation 121 !$OMP THREADPRIVATE(expo_sub) 122 122 123 123 REAL, SAVE, PROTECTED :: cice_velo=1.645 ! factor in the ice fall velocity formulation … … 137 137 !$OMP THREADPRIVATE(ok_poprecip) 138 138 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 139 145 REAL, SAVE, PROTECTED :: rain_int_min=0.001 ! Minimum local rain intensity [mm/s] before the decrease in associated precipitation fraction 140 146 !$OMP THREADPRIVATE(rain_int_min) … … 155 161 !$OMP THREADPRIVATE(rho_rain) 156 162 157 REAL, SAVE, PROTECTED :: rho_snow =500.! A COMMENTER TODO [kg/m3]163 REAL, SAVE, PROTECTED :: rho_snow ! A COMMENTER TODO [kg/m3] 158 164 !$OMP THREADPRIVATE(rho_snow) 159 165 … … 164 170 !$OMP THREADPRIVATE(r_snow) 165 171 166 REAL, SAVE, PROTECTED :: tau_auto_snow_min=1 800. ! A COMMENTER TODO [s]172 REAL, SAVE, PROTECTED :: tau_auto_snow_min=100. ! A COMMENTER TODO [s] 167 173 !$OMP THREADPRIVATE(tau_auto_snow_min) 168 174 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] 170 176 !$OMP THREADPRIVATE(tau_auto_snow_max) 171 177 … … 182 188 !$OMP THREADPRIVATE(alpha_freez) 183 189 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 [-] 185 194 !$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) 186 213 !--End of the parameters for poprecip 187 214 … … 246 273 CALL getin_p('cld_lc_lsc',cld_lc_lsc) 247 274 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) 248 279 CALL getin_p('cld_tau_lsc',cld_tau_lsc) 249 280 CALL getin_p('cld_tau_con',cld_tau_con) … … 253 284 CALL getin_p('ffallv_lsc',ffallv_con) 254 285 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) 257 289 CALL getin_p('expo_eva',expo_eva) 258 expo_ eva_i=expo_eva259 CALL getin_p('expo_ eva_i',expo_eva_i)290 expo_sub=expo_eva 291 CALL getin_p('expo_sub',expo_sub) 260 292 CALL getin_p('iflag_autoconversion',iflag_autoconversion) 261 293 CALL getin_p('dist_liq',dist_liq) … … 267 299 CALL getin_p('gamma_col',gamma_col) 268 300 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) 269 313 270 314 … … 289 333 WRITE(lunout,*) 'lscp_ini, cld_lc_lsc', cld_lc_lsc 290 334 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 291 337 WRITE(lunout,*) 'lscp_ini, cld_tau_lsc', cld_tau_lsc 292 338 WRITE(lunout,*) 'lscp_ini, cld_tau_con', cld_tau_con … … 296 342 WRITE(lunout,*) 'lscp_ini, ffallv_con', ffallv_con 297 343 WRITE(lunout,*) 'lscp_ini, coef_eva', coef_eva 298 WRITE(lunout,*) 'lscp_ini, coef_ eva_i', coef_eva_i344 WRITE(lunout,*) 'lscp_ini, coef_sub', coef_sub 299 345 WRITE(lunout,*) 'lscp_ini, expo_eva', expo_eva 300 WRITE(lunout,*) 'lscp_ini, expo_ eva_i', expo_eva_i346 WRITE(lunout,*) 'lscp_ini, expo_sub', expo_sub 301 347 WRITE(lunout,*) 'lscp_ini, iflag_autoconversion', iflag_autoconversion 302 348 WRITE(lunout,*) 'lscp_ini, dist_liq', dist_liq … … 309 355 WRITE(lunout,*) 'lscp_ini, gamma_col:', gamma_col 310 356 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 311 363 312 364 … … 341 393 ENDIF 342 394 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 343 399 344 400 !AA Temporary initialisation -
LMDZ6/trunk/libf/phylmd/lmdz_lscp_old.F90
r4674 r4830 23 23 USE lmdz_lscp_ini, ONLY : seuil_neb, rain_int_min, iflag_evap_prec, iflag_oldbug_fisrtilp,a_tr_sca 24 24 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_con25 USE lmdz_lscp_ini, ONLY: coef_eva, ffallv_lsc, ffallv_con 26 26 USE lmdz_lscp_ini, ONLY: cld_tau_lsc, cld_tau_con, cld_lc_lsc, cld_lc_con 27 27 USE lmdz_lscp_ini, ONLY: reevap_ice, iflag_bergeron, iflag_fisrtilp_qsat, iflag_pdf -
LMDZ6/trunk/libf/phylmd/lmdz_lscp_poprecip.F90
r4823 r4830 23 23 24 24 USE 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_frac25 USE lmdz_lscp_ini, ONLY : coef_eva, coef_sub, expo_eva, expo_sub, thresh_precip_frac 26 26 USE lmdz_lscp_ini, ONLY : RCPD, RLSTT, RLVTT, RLMLT, RVTMP2, RTT, RD, RG 27 27 USE lmdz_lscp_tools, ONLY : calc_qsat_ecmwf … … 149 149 !--Sublimation of the solid precipitation coming from above 150 150 !--(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 & 153 153 * temp(i) * RD / pplay(i) & 154 154 * ( paprsdn(i) - paprsup(i) ) / RG … … 229 229 ! - aggregation (agg) 230 230 ! - riming (rim) 231 ! - collection (col l)231 ! - collection (col) 232 232 ! - melting (melt) 233 ! - freezing (free )233 ! - freezing (freez) 234 234 ! 235 235 SUBROUTINE poprecip_postcld( & … … 238 238 precipfracclr, precipfraccld, & 239 239 rain, rainclr, raincld, snow, snowclr, snowcld, & 240 qrain , qsnow, dqrauto, dqrcol, dqrmelt, dqrfreez, &240 qraindiag, qsnowdiag, dqrauto, dqrcol, dqrmelt, dqrfreez, & 241 241 dqsauto, dqsagg, dqsrim, dqsmelt, dqsfreez) 242 242 … … 251 251 tau_auto_snow_min, tau_auto_snow_max, & 252 252 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 255 258 256 259 … … 286 289 REAL, INTENT(INOUT), DIMENSION(klon) :: snowcld !--flux of snow gridbox-mean in cloudy air coming from the layer above [kg/s/m2] 287 290 288 REAL, INTENT(OUT), DIMENSION(klon) :: qrain !--specific rain content [kg/kg]289 REAL, INTENT(OUT), DIMENSION(klon) :: qsnow !--specific snow content [kg/kg]291 REAL, INTENT(OUT), DIMENSION(klon) :: qraindiag !--DIAGNOSTIC specific rain content [kg/kg] 292 REAL, INTENT(OUT), DIMENSION(klon) :: qsnowdiag !--DIAGNOSTIC specific snow content [kg/kg] 290 293 REAL, INTENT(OUT), DIMENSION(klon) :: dqrcol !--rain tendendy due to collection by rain of liquid cloud droplets [kg/kg/s] 291 294 REAL, INTENT(OUT), DIMENSION(klon) :: dqsagg !--snow tendency due to collection of lcoud ice by aggregation [kg/kg/s] … … 306 309 REAL, DIMENSION(klon) :: qtot !--includes vap, liq, ice and precip 307 310 308 ! partition of the fluxes311 !--Partition of the fluxes 309 312 REAL :: dcldfra 310 313 REAL :: precipfractot … … 313 316 REAL :: draincld, dsnowcld 314 317 315 ! collection, aggregation and riming318 !--Collection, aggregation and riming 316 319 REAL :: eff_cldfra 317 320 REAL :: coef_col, coef_agg, coef_rim, coef_tmp, qrain_tmp 318 321 REAL :: Eff_rain_liq, Eff_snow_ice, Eff_snow_liq 319 REAL :: dqlcol ! 320 REAL :: dqiagg ! 321 REAL :: dqlrim ! loss of liquid cloud content due to riming on snow[kg/kg/s]322 323 ! autoconversion322 REAL :: dqlcol !--loss of liquid cloud content due to collection by rain [kg/kg/s] 323 REAL :: dqiagg !--loss of ice cloud content due to collection by aggregation [kg/kg/s] 324 REAL :: dqlrim !--loss of liquid cloud content due to riming on snow [kg/kg/s] 325 326 !--Autoconversion 324 327 REAL :: qthresh_auto_rain, tau_auto_rain, expo_auto_rain 325 328 REAL :: qthresh_auto_snow, tau_auto_snow, expo_auto_snow 326 REAL :: dqlauto ! 327 REAL :: dqiauto ! 328 329 ! melting329 REAL :: dqlauto !--loss of liquid cloud content due to autoconversion to rain [kg/kg/s] 330 REAL :: dqiauto !--loss of ice cloud content due to autoconversion to snow [kg/kg/s] 331 332 !--Melting 330 333 REAL :: dqsmelt_max 331 REAL :: fallice_clr, fallice_cld332 334 REAL :: nb_snowflake_clr, nb_snowflake_cld 333 335 REAL :: capa_snowflake, temp_wetbulb … … 335 337 REAL, DIMENSION(klon) :: qzero, qsat, dqsat 336 338 337 ! freezing339 !--Freezing 338 340 REAL :: dqrfreez_max 339 341 REAL :: tau_freez 340 342 REAL :: dqrclrfreez, dqrcldfreez, dqrtotfreez 343 REAL :: coef_freez 344 REAL :: dqifreez !--loss of ice cloud content due to collection of ice from rain [kg/kg/s] 345 REAL :: Eff_rain_ice 341 346 342 347 … … 358 363 DO i = 1, klon 359 364 360 ! variables initialisation 361 dqlrim = 0. 365 !--Variables initialisation 362 366 dqlcol = 0. 363 367 dqiagg = 0. 364 368 dqiauto = 0. 365 369 dqlauto = 0. 370 dqlrim = 0. 371 dqifreez= 0. 366 372 367 373 !--hum_to_flux: coef to convert a specific quantity to a flux … … 401 407 !--Tendency of the clear-sky precipitation fraction. We add a MAX on the 402 408 !--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) 404 413 !--Tendency of the cloudy precipitation fraction. We add a MAX on the 405 414 !--calculation of the current CS precip. frac. 406 415 !dprecipfraccld = MAX( dcldfra , - precipfraccld(i) ) 407 !--We remove it, because cldfra is guaranteed to be > O(the MAX is activated416 !--We remove it, because cldfra is guaranteed to be > 0 (the MAX is activated 408 417 !--if cldfra < 0) 409 418 dprecipfraccld = dcldfra … … 448 457 449 458 450 ! if vertical heterogeneity is taken into account, we use451 ! 452 ! 453 ! 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). 454 463 IF ( ( iflag_cloudth_vert .GE. 3 ) .AND. ( iflag_rain_incloud_vol .EQ. 1 ) ) THEN 455 464 eff_cldfra = ctot_vol(i) … … 459 468 460 469 461 ! 470 !--Start precipitation growth processes 462 471 463 472 !--If the cloud is big enough, the precipitation processes activate … … 483 492 !--get in-cloud mean quantities. The two divisions by eff_cldfra are 484 493 !--then simplified. 494 495 !--The sticking efficacy is perfect. 485 496 Eff_rain_liq = 1. 486 497 coef_col = gamma_col * 3. / 4. / rho_rain / r_rain * Eff_rain_liq 487 498 IF ((raincld(i) .GT. 0.) .AND. (coef_col .GT. 0.)) THEN 488 499 !-- ATTENTION Double implicit version 500 !-- BEWARE the formule below is FALSE (because raincld is a flux, not a delta flux) 489 501 !qrain_tmp = raincld(i) / hum_to_flux(i) 490 502 !coef_tmp = coef_col * dtime * ( qrain_tmp / precipfraccld(i) + qliq(i) / eff_cldfra ) … … 495 507 !--available. 496 508 !dqlcol = MAX( - qliq(i), dqlcol ) 497 !--Exact version, which does not need a barrier because of509 !--Exact explicit version, which does not need a barrier because of 498 510 !--the exponential decrease 499 511 dqlcol = qliq(i) * ( EXP( - dtime * coef_col * raincld(i) / precipfraccld(i) ) - 1. ) … … 517 529 !--available. 518 530 !dqiagg = MAX( - qice(i), dqiagg ) 519 !--Exact version, which does not need a barrier because of531 !--Exact explicit version, which does not need a barrier because of 520 532 !--the exponential decrease 521 533 dqiagg = qice(i) * ( EXP( - dtime * coef_agg * snowcld(i) / precipfraccld(i) ) - 1. ) … … 536 548 !--rain drops/snowflakes. It relies on the formulations by 537 549 !--Sundqvist 1978. 538 ! TODO what else?539 550 540 551 !--If we are in a convective point, we have different parameters 541 552 !--for the autoconversion 542 553 IF ( ptconv(i) ) THEN 543 ! ATTENTION voir les constantes ici qui ne devraient pas etre identiques544 554 qthresh_auto_rain = cld_lc_con 545 qthresh_auto_snow = cld_lc_con 555 qthresh_auto_snow = cld_lc_con_snow 546 556 547 557 tau_auto_rain = cld_tau_con … … 553 563 expo_auto_snow = cld_expo_con 554 564 ELSE 555 ! ATTENTION voir les constantes ici qui ne devraient pas etre identiques556 565 qthresh_auto_rain = cld_lc_lsc 557 qthresh_auto_snow = cld_lc_lsc 566 qthresh_auto_snow = cld_lc_lsc_snow 558 567 559 568 tau_auto_rain = cld_tau_lsc … … 568 577 569 578 ! 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 574 585 575 586 dqlauto = - qliq(i) * ( 1. - exp( - dtime / tau_auto_rain * ( 1. - exp( & … … 602 613 !--snow (graupel in fact) because of the collision between 603 614 !--those and falling snowflakes. 604 !--The formula come from Muench and Lohmann 2020615 !--The formula comes from Muench and Lohmann 2020 605 616 !--NB.: this process needs a temperature adjustment 606 617 … … 631 642 ENDIF 632 643 633 ! ATTENTION veut on faire un processus similaire et symetrique qui634 ! convertirait la pluie en surfusion qui tombe sur des cristaux de glace635 ! en flux de neige ? (si la temperature est negative)636 637 644 ENDIF ! cldfra .GE. seuil_neb 638 645 … … 658 665 !-- the radius if the snowflake is a sphere [m] 659 666 !--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] 661 668 !--air_thermal_conduct: thermal conductivity of the air [J/m/K/s] 662 669 !--coef_ventil: ventilation coefficient [-] … … 682 689 !--In clear air 683 690 IF ( snowclr(i) .GT. 0. ) THEN 684 ! ATTENTION fallice a definir685 fallice_clr = 1.686 691 !--Calculated according to 687 692 !-- 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 & 689 694 / ( 4. / 3. * RPI * r_snow**3. * rho_snow ) 690 695 dqsclrmelt = - nb_snowflake_clr * 4. * RPI * air_thermal_conduct & 691 696 * capa_snowflake / RLMLT * coef_ventil & 692 697 * MAX(0., temp_wetbulb - RTT) * dtime 698 699 !--Barrier to limit the melting flux to the clr snow flux in the mesh 693 700 dqsclrmelt = MAX( dqsclrmelt , -snowclr(i) / hum_to_flux(i)) 694 ELSE695 dqsclrmelt = 0.696 701 ENDIF 697 702 698 703 !--In cloudy air 699 704 IF ( snowcld(i) .GT. 0. ) THEN 700 ! ATTENTION fallice a definir701 fallice_cld = 1.702 705 !--Calculated according to 703 706 !-- 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 & 705 708 / ( 4. / 3. * RPI * r_snow**3. * rho_snow ) 706 709 dqscldmelt = - nb_snowflake_cld * 4. * RPI * air_thermal_conduct & 707 710 * capa_snowflake / RLMLT * coef_ventil & 708 711 * MAX(0., temp_wetbulb - RTT) * dtime 712 713 !--Barrier to limit the melting flux to the cld snow flux in the mesh 709 714 dqscldmelt = MAX( dqscldmelt , -snowcld(i) / hum_to_flux(i)) 710 ELSE711 dqscldmelt = 0.712 715 ENDIF 713 716 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. 715 719 !--It is activated if the total is LOWER than the max 716 720 !--because everything is negative … … 769 773 * ( 1. + RVTMP2 * qtot(i) )) 770 774 771 tau_freez = 1. / ( gamma_freez &775 tau_freez = 1. / ( beta_freez & 772 776 * EXP( - alpha_freez * ( temp(i) - temp_nowater ) / ( RTT - temp_nowater ) ) ) 777 778 !--Initialisation 779 dqrclrfreez = 0. 780 dqrcldfreez = 0. 773 781 774 782 !--In clear air 775 783 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. ) 781 786 ENDIF 782 787 783 788 !--In cloudy air 784 789 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 790 812 ENDIF 791 813 … … 838 860 839 861 !--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 ) 843 872 844 873 ENDDO ! loop on klon -
LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90
r4819 r4830 539 539 540 540 !--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) 545 545 REAL, SAVE, ALLOCATABLE :: dqreva(:,:) 546 546 !$OMP THREADPRIVATE(dqreva) … … 962 962 963 963 !--POPRECIP variables 964 ALLOCATE(qrain _lsc(klon,klev), qsnow_lsc(klon,klev))964 ALLOCATE(qraindiag(klon,klev), qsnowdiag(klon,klev)) 965 965 ALLOCATE(dqreva(klon,klev), dqssub(klon,klev)) 966 966 ALLOCATE(dqrauto(klon,klev), dqrcol(klon,klev), dqrmelt(klon,klev), dqrfreez(klon,klev)) … … 1278 1278 1279 1279 !--POPRECIP variables 1280 DEALLOCATE(qrain _lsc, qsnow_lsc)1280 DEALLOCATE(qraindiag, qsnowdiag) 1281 1281 DEALLOCATE(dqreva, dqssub) 1282 1282 DEALLOCATE(dqrauto, dqrcol, dqrmelt, dqrfreez) -
LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90
r4819 r4830 363 363 rneb, rnebjn, rneblsvol, zx_rh, zx_rhl, zx_rhi, & 364 364 pfraclr, pfracld, & 365 qrain _lsc, qsnow_lsc, dqreva, dqssub, &365 qraindiag, qsnowdiag, dqreva, dqssub, & 366 366 dqrauto,dqrcol,dqrmelt,dqrfreez, & 367 367 dqsauto,dqsagg,dqsrim,dqsmelt,dqsfreez, & … … 1985 1985 CALL histwrite_phy(o_pfracld, pfracld) 1986 1986 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) 1989 1989 CALL histwrite_phy(o_dqreva, dqreva) 1990 1990 CALL histwrite_phy(o_dqrauto, dqrauto) -
LMDZ6/trunk/libf/phylmd/physiq_mod.F90
r4822 r4830 196 196 d_q_ch4, & 197 197 ! proprecip 198 qrain _lsc, qsnow_lsc, &198 qraindiag, qsnowdiag, & 199 199 dqreva, dqssub, & 200 200 dqrauto,dqrcol,dqrmelt,dqrfreez, & … … 3895 3895 Tcontr, qcontr, qcontr2, fcontrN, fcontrP , & 3896 3896 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, & 3898 3898 dqrfreez, dqsauto, dqsagg, dqsrim, dqsmelt, dqsfreez) 3899 3899 -
LMDZ6/trunk/libf/phylmdiso/phys_local_var_mod.F90
r4819 r4830 640 640 641 641 !--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) 646 646 REAL, SAVE, ALLOCATABLE :: dqreva(:,:) 647 647 !$OMP THREADPRIVATE(dqreva) … … 1120 1120 !--POPRECIP variables 1121 1121 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)) 1123 1123 ALLOCATE(dqrauto(klon,klev), dqrcol(klon,klev), dqrmelt(klon,klev), dqrfreez(klon,klev)) 1124 1124 ALLOCATE(dqsauto(klon,klev), dqsagg(klon,klev), dqsrim(klon,klev), dqsmelt(klon,klev), dqsfreez(klon,klev)) … … 1483 1483 1484 1484 !--POPRECIP variables 1485 DEALLOCATE(qrain _lsc, qsnow_lsc)1485 DEALLOCATE(qraindiag, qsnowdiag) 1486 1486 DEALLOCATE(dqreva,dqssub) 1487 1487 DEALLOCATE(dqrauto,dqrcol,dqrmelt,dqrfreez) -
LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90
r4821 r4830 230 230 d_q_ch4, & 231 231 ! proprecip 232 qrain _lsc, qsnow_lsc, &232 qraindiag, qsnowdiag, & 233 233 dqreva, dqssub, & 234 234 dqrauto,dqrcol,dqrmelt,dqrfreez, & … … 4890 4890 Tcontr, qcontr, qcontr2, fcontrN, fcontrP , & 4891 4891 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, & 4893 4893 dqrfreez, dqsauto, dqsagg, dqsrim, dqsmelt, dqsfreez) 4894 4894
Note: See TracChangeset
for help on using the changeset viewer.