Changeset 4704 for LMDZ6/trunk/libf
- Timestamp:
- Sep 21, 2023, 6:20:01 PM (16 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/lmdz_cloud_optics_prop.F90
r4692 r4704 4 4 CONTAINS 5 5 6 SUBROUTINE cloud_optics_prop(klon, klev, paprs, pplay, t , pqlwp, picefra, pclc, &7 pcltau, pclemi, pch, pcl, pcm, pct, pctlwp, xflwp, xfiwp, xflwc, xfiwc, &6 SUBROUTINE cloud_optics_prop(klon, klev, paprs, pplay, temp, radocond, picefra, pclc, & 7 pcltau, pclemi, pch, pcl, pcm, pct, radocondwp, xflwp, xfiwp, xflwc, xfiwc, & 8 8 mass_solu_aero, mass_solu_aero_pi, pcldtaupi, distcltop, temp_cltop, re, fl, reliq, reice, & 9 9 reliq_pi, reice_pi, scdnc, cldncl, reffclwtop, lcc, reffclws, & 10 10 reffclwc, cldnvi, lcc3d, lcc3dcon, lcc3dstra, icc3dcon, icc3dstra, & 11 zfice, dNovrN, ptconv,rnebcon, clwcon)11 icefrac_optics, dNovrN, ptconv,rnebcon, ccwcon) 12 12 13 13 USE lmdz_cloud_optics_prop_ini , ONLY : flag_aerosol, ok_cdnc … … 26 26 IMPLICIT NONE 27 27 ! ====================================================================== 28 ! Auteur(s): Z.X. Li (LMD/CNRS) date: 19930910 29 ! O. Boucher (LMD/CNRS) mise a jour en 201212 30 ! I. Musat (LMD/CNRS) : prise en compte de la meme hypothese de recouvrement 31 ! pour les nuages que pour le rayonnement rrtm via 32 ! le parametre novlp de radopt.h : 20160721 33 ! Objet: Calculer epaisseur optique et emmissivite des nuages 28 ! Authors: Z.X. Li (LMD/CNRS) date: 19930910 29 ! O.Boucher (LMD/CNRS) mise a jour en 201212 30 ! I. Musat (LMD/CNRS) : prise en compte de la meme hypothese 31 ! de recouvrement pour les nuages que pour 32 ! le rayonnement rrtm via le parametre 33 ! novlp de radopt.h : 20160721 34 ! L.Fairheard, E.Vignon, JB Madeleine, L. Raillard, A. Idelkadi 35 ! M. Coulon-Decorzens: replayisation of the routine + cleaning 36 ! and commentaries 37 ! 38 ! Aim: compute condensate optical properties, 39 ! cloud optical depth and emissivity 34 40 ! ====================================================================== 35 ! Arguments: 36 ! ok_cdnc-input-L-flag pour calculer les rayons a partir des aerosols 37 38 ! t-------input-R-temperature 39 ! pqlwp---input-R-eau liquide nuageuse dans l'atmosphere dans la maille (kg/kg) 40 ! picefra--input-R-fraction de glace dans les nuages 41 ! pclc----input-R-couverture nuageuse pour le rayonnement (0 a 1) 42 ! mass_solu_aero-----input-R-total mass concentration for all soluble 43 ! aerosols[ug/m^3] 44 ! mass_solu_aero_pi--input-R-ditto, pre-industrial value 45 46 ! bl95_b0-input-R-a PARAMETER, may be varied for tests (s-sea, l-land) 47 ! bl95_b1-input-R-a PARAMETER, may be varied for tests ( -"- ) 48 ! latitude_deg-input latitude in degrees 49 ! distcltop ---input- distance from cloud top 50 ! temp_cltop -input- temperature of cloud top 51 52 ! re------output-R-Cloud droplet effective radius multiplied by fl [um] 53 ! fl------output-R-Denominator to re, introduced to avoid problems in 54 ! the averaging of the output. fl is the fraction of liquid 55 ! water clouds within a grid cell 56 57 ! pcltau--output-R-epaisseur optique des nuages 58 ! pclemi--output-R-emissivite des nuages (0 a 1) 59 ! pcldtaupi-output-R-pre-industrial value of cloud optical thickness, 60 61 ! pcl-output-R-2D low-level cloud cover 62 ! pcm-output-R-2D mid-level cloud cover 63 ! pch-output-R-2D high-level cloud cover 64 ! pct-output-R-2D total cloud cover 65 ! ====================================================================== 66 67 41 68 42 include "YOMCST.h" 69 43 include "nuage.h" … … 72 46 include "clesphys.h" 73 47 74 75 ! choix de l'hypothese de recouvrement nuageuse via radopt.h (IM, 19.07.2016) 76 ! !novlp=1: max-random 77 ! !novlp=2: maximum 78 ! !novlp=3: random 79 ! LOGICAL random, maximum_random, maximum 80 ! PARAMETER (random=.FALSE., maximum_random=.TRUE., maximum=.FALSE.) 48 49 ! List of arguments 50 !------------------ 51 52 ! input: 53 INTEGER, INTENT(IN) :: klon, klev ! number of horizontal and vertical grid points 54 REAL, INTENT(IN) :: paprs(klon, klev+1)! pressure at bottom interfaces [Pa] 55 REAL, INTENT(IN) :: pplay(klon, klev) ! pressure at the middle of layers [Pa] 56 REAL, INTENT(IN) :: temp(klon, klev) ! temperature [K] 57 REAL, INTENT(IN) :: radocond(klon, klev) ! cloud condensed water seen by radiation [kg/kg] 58 REAL, INTENT(IN) :: picefra(klon,klev) ! ice fraction in clouds from large scale condensation scheme [-] 59 REAL, INTENT(IN) :: rnebcon(klon,klev) ! convection cloud fraction [-] 60 REAL, INTENT(IN) :: ccwcon(klon,klev) ! condensed water from deep convection [kg/kg] 61 ! jq for the aerosol indirect effect 62 ! jq introduced by Johannes Quaas (quaas@lmd.jussieu.fr), 27/11/2003 63 REAL, INTENT(IN) :: mass_solu_aero(klon, klev) ! total mass concentration for all soluble aerosols [ug m-3] 64 REAL, INTENT(IN) :: mass_solu_aero_pi(klon, klev) ! - (pre-industrial value) 65 REAL, INTENT(IN) :: dNovrN(klon) ! enhancement factor for cdnc 66 REAL, INTENT(OUT) :: distcltop(klon,klev) ! distance from large scale cloud top [m] 67 REAL, INTENT(OUT) :: temp_cltop(klon,klev)!temperature at large scale cloud top [K] 68 69 LOGICAL, INTENT(IN) :: ptconv(klon, klev) ! flag for grid points affected by deep convection 70 71 ! inout: 72 REAL, INTENT(INOUT) :: pclc(klon, klev) ! cloud fraction for radiation [-] 73 74 ! out: 75 REAL, INTENT(OUT) :: pct(klon) ! 2D total cloud cover [-] 76 REAL, INTENT(OUT) :: pcl(klon) ! 2D low cloud cover [-] 77 REAL, INTENT(OUT) :: pcm(klon) ! 2D mid cloud cover [-] 78 REAL, INTENT(OUT) :: pch(klon) ! 2D high cloud cover [-] 79 REAL, INTENT(OUT) :: radocondwp(klon) ! total condensed water path (seen by radiation) [kg/m2] 80 REAL, INTENT(OUT) :: xflwp(klon) ! liquid water path (seen by radiation) [kg/m2] 81 REAL, INTENT(OUT) :: xfiwp(klon) ! ice water path (seen by radiation) [kg/m2] 82 REAL, INTENT(OUT) :: xflwc(klon, klev) ! liquid water content seen by radiation [kg/kg] 83 REAL, INTENT(OUT) :: xfiwc(klon, klev) ! ice water content seen by radiation [kg/kg] 84 REAL, INTENT(OUT) :: re(klon, klev) ! cloud droplet effective radius multiplied by fl 85 REAL, INTENT(OUT) :: fl(klon, klev) ! xliq * rneb, denominator to re; fraction of liquid water clouds 86 ! introduced to avoid problems in the averaging of the output 87 ! water clouds within a grid cell 88 89 REAL, INTENT(OUT) :: pcltau(klon, klev) ! cloud optical depth [m] 90 REAL, INTENT(OUT) :: pclemi(klon, klev) ! cloud emissivity [-] 91 REAL, INTENT(OUT) :: pcldtaupi(klon, klev) ! pre-industrial value of cloud optical thickness, ie. 92 ! values of optical thickness that does not account 93 ! for aerosol effects on cloud droplet radius [m] 94 95 REAL, INTENT(OUT) :: reliq(klon, klev) ! liquid droplet effective radius [m] 96 REAL, INTENT(OUT) :: reice(klon, klev) ! ice effective radius [m] 97 REAL, INTENT(OUT) :: reliq_pi(klon, klev)! liquid droplet effective radius [m], pre-industrial 98 REAL, INTENT(OUT) :: reice_pi(klon, klev)! ice effective radius [m], pre-industrial 99 REAL, INTENT(OUT) :: scdnc(klon, klev) ! cloud droplet number concentration, mean over the whole mesh [m-3] 100 REAL, INTENT(OUT) :: cldncl(klon) ! cloud droplet number concentration at top of cloud [m-3] 101 REAL, INTENT(OUT) :: reffclwtop(klon) ! effective radius of cloud droplet at top of cloud [m] 102 REAL, INTENT(OUT) :: lcc(klon) ! liquid Cloud Content at top of cloud [kg/kg] 103 REAL, INTENT(OUT) :: reffclws(klon, klev)! stratiform cloud droplet effective radius 104 REAL, INTENT(OUT) :: reffclwc(klon, klev)! convective cloud droplet effective radius 105 REAL, INTENT(OUT) :: cldnvi(klon) ! column Integrated cloud droplet Number [/m2] 106 REAL, INTENT(OUT) :: lcc3d(klon, klev) ! cloud fraction for liquid part only [-] 107 REAL, INTENT(OUT) :: lcc3dcon(klon, klev)! cloud fraction for liquid part only, convective clouds [-] 108 REAL, INTENT(OUT) :: lcc3dstra(klon, klev)!cloud fraction for liquid part only, stratiform clouds [-] 109 REAL, INTENT(OUT) :: icc3dcon(klon, klev)! cloud fraction for liquid part only, convective clouds [-] 110 REAL, INTENT(OUT) :: icc3dstra(klon, klev)! cloud fraction for ice part only, stratiform clouds [-] 111 REAL, INTENT(OUT) :: icefrac_optics(klon, klev)! ice fraction in clouds seen by radiation [-] 112 113 ! Local variables 114 !---------------- 81 115 82 116 LOGICAL, SAVE :: first = .TRUE. … … 84 118 INTEGER flag_max 85 119 86 ! List of arguments:87 INTEGER, INTENT(IN) :: klon, klev88 REAL, INTENT(IN) :: paprs(klon, klev+1)89 REAL, INTENT(IN) :: pplay(klon, klev)90 REAL, INTENT(IN) :: t(klon, klev)91 REAL, INTENT(INOUT) :: pclc(klon, klev)92 REAL, INTENT(IN) :: pqlwp(klon, klev), picefra(klon,klev)93 REAL, INTENT(IN) :: rnebcon(klon,klev), clwcon(klon,klev)94 REAL, INTENT(OUT) :: pcltau(klon, klev)95 REAL, INTENT(OUT) :: pclemi(klon, klev)96 REAL, INTENT(OUT) :: pcldtaupi(klon, klev)97 98 REAL, INTENT(OUT) :: pct(klon)99 REAL, INTENT(OUT) :: pcl(klon)100 REAL, INTENT(OUT) :: pcm(klon)101 REAL, INTENT(OUT) :: pch(klon)102 REAL, INTENT(OUT) :: pctlwp(klon)103 104 REAL, INTENT(OUT) :: distcltop(klon,klev)105 REAL, INTENT(OUT) :: temp_cltop(klon,klev)106 REAL, INTENT(OUT) :: xflwp(klon), xfiwp(klon)107 REAL, INTENT(OUT) :: xflwc(klon, klev), xfiwc(klon, klev)108 ! jq for the aerosol indirect effect109 ! jq introduced by Johannes Quaas (quaas@lmd.jussieu.fr), 27/11/2003110 REAL, INTENT(IN) :: mass_solu_aero(klon, klev) ! total mass concentration for all soluble aerosols [ug m-3]111 REAL, INTENT(IN) :: mass_solu_aero_pi(klon, klev) ! - " - (pre-industrial value)112 REAL, INTENT(OUT) :: re(klon, klev) ! cloud droplet effective radius [um]113 REAL, INTENT(OUT) :: fl(klon, klev) ! xliq * rneb (denominator to re; fraction of liquid water clouds114 ! within the grid cell)115 ! Abderrahmane oct 2009116 REAL, INTENT(OUT) :: reliq(klon, klev), reice(klon, klev)117 REAL, INTENT(OUT) :: reliq_pi(klon, klev), reice_pi(klon, klev)118 !119 REAL, INTENT(OUT) :: scdnc(klon, klev), cldncl(klon), reffclwtop(klon)120 REAL, INTENT(OUT) :: lcc(klon), reffclws(klon, klev)121 REAL, INTENT(OUT) :: reffclwc(klon, klev), cldnvi(klon), lcc3d(klon, klev)122 REAL, INTENT(OUT) :: lcc3dcon(klon, klev), lcc3dstra(klon, klev), icc3dcon(klon, klev)123 REAL, INTENT(OUT) :: icc3dstra(klon, klev), zfice(klon, klev)124 REAL, INTENT(IN) :: dNovrN(klon)125 LOGICAL, INTENT(IN) :: ptconv(klon, klev)126 127 ! Local variables128 120 ! threshold PARAMETERs 129 121 REAL thres_tau, thres_neb 130 122 PARAMETER (thres_tau=0.3, thres_neb=0.001) 131 132 123 REAL phase3d(klon, klev) 133 124 REAL tcc(klon), ftmp(klon), lcc_integrat(klon), height(klon) 134 135 125 LOGICAL lo 136 137 ! !Abderr modif JL mail du 19.01.2011 18:31138 ! REAL cetahb, cetamb139 ! PARAMETER (cetahb = 0.45, cetamb = 0.80)140 ! Remplacer141 ! cetahb*paprs(i,1) par prmhc142 ! cetamb*paprs(i,1) par prlmc143 126 REAL prmhc ! Pressure between medium and high level cloud in Pa 144 127 REAL prlmc ! Pressure between low and medium level cloud in Pa 145 128 PARAMETER (prmhc=440.*100., prlmc=680.*100.) 146 147 129 INTEGER i, k 148 149 130 REAL radius 150 151 131 REAL coef_froi, coef_chau 152 132 PARAMETER (coef_chau=0.13, coef_froi=0.09) 153 154 133 REAL seuil_neb 155 134 PARAMETER (seuil_neb=0.001) 156 135 157 ! JBM (3/14) nexpo is replaced by exposant_glace 158 ! INTEGER nexpo ! exponentiel pour glace/eau 159 ! PARAMETER (nexpo=6) 160 ! PARAMETER (nexpo=1) 161 ! if iflag_t_glace=0, the old values are used: 136 ! if iflag_t_glace=0, old values are used for liquid/ice partitionning: 162 137 REAL, PARAMETER :: t_glace_min_old = 258. 163 138 REAL, PARAMETER :: t_glace_max_old = 273.13 … … 170 145 ! jq for the aerosol indirect effect 171 146 ! jq introduced by Johannes Quaas (quaas@lmd.jussieu.fr), 27/11/2003 172 ! jq173 147 REAL cdnc(klon, klev) ! cloud droplet number concentration [m-3] 174 148 REAL cdnc_pi(klon, klev) ! cloud droplet number concentration [m-3] (pi value) … … 191 165 192 166 193 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!194 167 ! FH : 2011/05/24 195 196 168 ! rei = ( rei_max - rei_min ) * T(°C) / 81.4 + rei_max 197 169 ! to be used for a temperature in celcius T(°C) < 0 198 170 ! rei=rei_min for T(°C) < -81.4 199 200 171 ! Calcul de la pente de la relation entre rayon effective des cristaux 201 ! et la température. 202 ! Pour retrouver les résultats numériques de la version d'origine, 172 ! et la température Pour retrouver les résultats numériques de la version d'origine, 203 173 ! on impose 0.71 quand on est proche de 0.71 204 205 206 174 d_rei_dt = (rei_max-rei_min)/81.4 207 175 IF (abs(d_rei_dt-0.71)<1.E-4) d_rei_dt = 0.71 208 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!209 176 210 177 ! Calculer l'epaisseur optique et l'emmissivite des nuages … … 226 193 ! -layer calculation 227 194 rhodz(i, k) = (paprs(i,k)-paprs(i,k+1))/rg ! kg/m2 228 zrho(i, k) = pplay(i, k)/t (i, k)/rd ! kg/m3195 zrho(i, k) = pplay(i, k)/temp(i, k)/rd ! kg/m3 229 196 dh(i, k) = rhodz(i, k)/zrho(i, k) ! m 230 197 ! -Fraction of ice in cloud using a linear transition 231 zfice(i, k) = 1.0 - (t(i,k)-t_glace_min_old)/(t_glace_max_old-t_glace_min_old)232 zfice(i, k) = min(max(zfice(i,k),0.0), 1.0)198 icefrac_optics(i, k) = 1.0 - (temp(i,k)-t_glace_min_old)/(t_glace_max_old-t_glace_min_old) 199 icefrac_optics(i, k) = min(max(icefrac_optics(i,k),0.0), 1.0) 233 200 ! -IM Total Liquid/Ice water content 234 xflwc(i, k) = (1.- zfice(i,k))*pqlwp(i, k)235 xfiwc(i, k) = zfice(i, k)*pqlwp(i, k)201 xflwc(i, k) = (1.-icefrac_optics(i,k))*radocond(i, k) 202 xfiwc(i, k) = icefrac_optics(i, k)*radocond(i, k) 236 203 ENDDO 237 204 ENDDO … … 239 206 DO k = 1, klev 240 207 241 ! JBM: icefrac_lsc is now contained icefrac_lsc_mod242 ! zfice(i, k) = icefrac_lsc(t(i,k), t_glace_min, &243 ! t_glace_max, exposant_glace)244 208 245 209 IF (ok_new_lscp) THEN 246 CALL icefrac_lscp(klon,t (:,k),iflag_ice_thermo,distcltop(:,k),temp_cltop(:,k),zfice(:,k),dzfice(:,k))210 CALL icefrac_lscp(klon,temp(:,k),iflag_ice_thermo,distcltop(:,k),temp_cltop(:,k),icefrac_optics(:,k),dzfice(:,k)) 247 211 ELSE 248 CALL icefrac_lsc(klon,t (:,k),pplay(:,k)/paprs(:,1),zfice(:,k))212 CALL icefrac_lsc(klon,temp(:,k),pplay(:,k)/paprs(:,1),icefrac_optics(:,k)) 249 213 ENDIF 250 214 … … 255 219 ! consistent only for non convective grid points 256 220 ! critical for mixed phase clouds 257 zfice(i,k)=picefra(i,k)221 icefrac_optics(i,k)=picefra(i,k) 258 222 ENDIF 259 223 260 224 ! -layer calculation 261 225 rhodz(i, k) = (paprs(i,k)-paprs(i,k+1))/rg ! kg/m2 262 zrho(i, k) = pplay(i, k)/t (i, k)/rd ! kg/m3226 zrho(i, k) = pplay(i, k)/temp(i, k)/rd ! kg/m3 263 227 dh(i, k) = rhodz(i, k)/zrho(i, k) ! m 264 228 ! -IM Total Liquid/Ice water content 265 xflwc(i, k) = (1.- zfice(i,k))*pqlwp(i, k)266 xfiwc(i, k) = zfice(i, k)*pqlwp(i, k)229 xflwc(i, k) = (1.-icefrac_optics(i,k))*radocond(i, k) 230 xfiwc(i, k) = icefrac_optics(i, k)*radocond(i, k) 267 231 ENDDO 268 232 ENDDO 269 233 ENDIF 234 235 236 237 238 270 239 271 240 IF (ok_cdnc) THEN … … 323 292 324 293 ! --present-day case 325 rad_chaud(i, k) = 1.1*(( pqlwp(i,k)*pplay(i, &326 k)/(rd*t (i,k)))/(4./3*rpi*1000.*cdnc(i,k)))**(1./3.)294 rad_chaud(i, k) = 1.1*((radocond(i,k)*pplay(i, & 295 k)/(rd*temp(i,k)))/(4./3*rpi*1000.*cdnc(i,k)))**(1./3.) 327 296 rad_chaud(i, k) = max(rad_chaud(i,k)*1.E6, 5.) 328 297 329 298 ! --pre-industrial case 330 rad_chaud_pi(i, k) = 1.1*(( pqlwp(i,k)*pplay(i, &331 k)/(rd*t (i,k)))/(4./3.*rpi*1000.*cdnc_pi(i,k)))**(1./3.)299 rad_chaud_pi(i, k) = 1.1*((radocond(i,k)*pplay(i, & 300 k)/(rd*temp(i,k)))/(4./3.*rpi*1000.*cdnc_pi(i,k)))**(1./3.) 332 301 rad_chaud_pi(i, k) = max(rad_chaud_pi(i,k)*1.E6, 5.) 333 302 … … 340 309 ELSE 341 310 342 zflwp_var = 1000.*(1.- zfice(i,k))*pqlwp(i, k)/pclc(i, k)* &311 zflwp_var = 1000.*(1.-icefrac_optics(i,k))*radocond(i, k)/pclc(i, k)* & 343 312 rhodz(i, k) 344 zfiwp_var = 1000.* zfice(i, k)*pqlwp(i, k)/pclc(i, k)*rhodz(i, k)313 zfiwp_var = 1000.*icefrac_optics(i, k)*radocond(i, k)/pclc(i, k)*rhodz(i, k) 345 314 ! Calculation of ice cloud effective radius in micron 346 315 IF (iflag_rei .EQ. 1) THEN … … 348 317 ! It is recommended to use the rei formula from Sun and Rikkus 1999 with a revision 349 318 ! from Sun 2001 (as in the IFS model) 350 iwc= zfice(i, k)*pqlwp(i, k)/pclc(i,k)*zrho(i,k)*1000. !in cloud ice water content in g/m3351 dei=(1.2351+0.0105*(t (i,k)-273.15))*(45.8966*(iwc**0.2214) + &352 & 0.7957*(iwc**0.2535)*(t (i,k)-83.15))319 iwc=icefrac_optics(i, k)*radocond(i, k)/pclc(i,k)*zrho(i,k)*1000. !in cloud ice water content in g/m3 320 dei=(1.2351+0.0105*(temp(i,k)-273.15))*(45.8966*(iwc**0.2214) + & 321 & 0.7957*(iwc**0.2535)*(temp(i,k)-83.15)) 353 322 !deimax=155.0 354 323 !deimin=20.+40*cos(abs(latitude_deg(i))/180.*RPI) … … 367 336 ! 2011/05/24 : rei_min = 3.5 becomes a free PARAMETER as well as 368 337 ! rei_max=61.29 369 tc = t (i, k) - 273.15338 tc = temp(i, k) - 273.15 370 339 rei = d_rei_dt*tc + rei_max 371 340 IF (tc<=-81.4) rei = rei_min … … 420 389 ! effective radius as re/fl 421 390 422 fl(i, k) = seuil_neb*(1.- zfice(i,k))391 fl(i, k) = seuil_neb*(1.-icefrac_optics(i,k)) 423 392 re(i, k) = rad_chaud(i, k)*fl(i, k) 424 393 rel = 0. … … 432 401 ! -- liquid/ice cloud water paths: 433 402 434 zflwp_var = 1000.*(1.- zfice(i,k))*pqlwp(i, k)/pclc(i, k)*rhodz(i, k)435 zfiwp_var = 1000.* zfice(i, k)*pqlwp(i, k)/pclc(i, k)*rhodz(i, k)403 zflwp_var = 1000.*(1.-icefrac_optics(i,k))*radocond(i, k)/pclc(i, k)*rhodz(i, k) 404 zfiwp_var = 1000.*icefrac_optics(i, k)*radocond(i, k)/pclc(i, k)*rhodz(i, k) 436 405 437 406 ! effective cloud droplet radius (microns) for liquid water clouds: 438 407 ! For output diagnostics cloud droplet effective radius [um] 439 ! we multiply here with f * xl (fraction of liquid water408 ! we multiply here with f Effective radius of cloud droplet at top of cloud (m)* xl (fraction of liquid water 440 409 ! clouds in the grid cell) to avoid problems in the averaging of the 441 410 ! output. … … 443 412 ! effective radius as re/fl 444 413 445 fl(i, k) = pclc(i, k)*(1.- zfice(i,k))414 fl(i, k) = pclc(i, k)*(1.-icefrac_optics(i,k)) 446 415 re(i, k) = rad_chaud(i, k)*fl(i, k) 447 416 … … 456 425 ! we use the rei formula from Sun and Rikkus 1999 with a revision 457 426 ! from Sun 2001 (as in the IFS model) 458 iwc= zfice(i, k)*pqlwp(i, k)/pclc(i,k)*zrho(i,k)*1000. !in cloud ice water content in g/m3459 dei=(1.2351+0.0105*(t (i,k)-273.15))*(45.8966*(iwc**0.2214) + &460 &0.7957*(iwc**0.2535)*(t (i,k)-83.15))427 iwc=icefrac_optics(i, k)*radocond(i, k)/pclc(i,k)*zrho(i,k)*1000. !in cloud ice water content in g/m3 428 dei=(1.2351+0.0105*(temp(i,k)-273.15))*(45.8966*(iwc**0.2214) + & 429 &0.7957*(iwc**0.2535)*(temp(i,k)-83.15)) 461 430 !deimax=155.0 462 431 !deimin=20.+40*cos(abs(latitude_deg(i))/180.*RPI) … … 476 445 ! 2011/05/24 : rei_min = 3.5 becomes a free PARAMETER as well as 477 446 ! rei_max=61.29 478 tc = t (i, k) - 273.15447 tc = temp(i, k) - 273.15 479 448 rei = d_rei_dt*tc + rei_max 480 449 IF (tc<=-81.4) rei = rei_min … … 540 509 pcm(i) = 1.0 541 510 pcl(i) = 1.0 542 pctlwp(i) = 0.0511 radocondwp(i) = 0.0 543 512 ENDDO 544 513 … … 547 516 DO k = klev, 1, -1 548 517 DO i = 1, klon 549 pctlwp(i) = pctlwp(i) + pqlwp(i, k)*rhodz(i, k)518 radocondwp(i) = radocondwp(i) + radocond(i, k)*rhodz(i, k) 550 519 ENDDO 551 520 ENDDO 552 521 553 522 ! --calculation of cloud properties with cloud overlap 523 ! choix de l'hypothese de recouvrement nuageuse via radopt.h (IM, 19.07.2016) 524 ! !novlp=1: max-random 525 ! !novlp=2: maximum 526 ! !novlp=3: random 527 554 528 555 529 IF (novlp==1) THEN … … 625 599 DO k = 1, klev 626 600 DO i = 1, klon 627 phase3d(i, k) = 1 - zfice(i, k)601 phase3d(i, k) = 1 - icefrac_optics(i, k) 628 602 IF (pclc(i,k)<=seuil_neb) THEN 629 603 lcc3d(i, k) = seuil_neb*phase3d(i, k) … … 703 677 DO k = 1, klev 704 678 ! Weight to be used for outputs: eau_liquide*couverture nuageuse 705 lcc3dcon(i, k) = rnebcon(i, k)*phase3d(i, k)*c lwcon(i, k) ! eau liquide convective706 lcc3dstra(i, k) = pclc(i, k)* pqlwp(i, k)*phase3d(i, k)679 lcc3dcon(i, k) = rnebcon(i, k)*phase3d(i, k)*ccwcon(i, k) ! eau liquide convective 680 lcc3dstra(i, k) = pclc(i, k)*radocond(i, k)*phase3d(i, k) 707 681 lcc3dstra(i, k) = lcc3dstra(i, k) - lcc3dcon(i, k) ! eau liquide stratiforme 708 682 lcc3dstra(i, k) = max(lcc3dstra(i,k), 0.0) 709 683 !FC pour la glace (CAUSES) 710 icc3dcon(i, k) = rnebcon(i, k)*(1-phase3d(i, k))*c lwcon(i, k) ! glace convective711 icc3dstra(i, k)= pclc(i, k)* pqlwp(i, k)*(1-phase3d(i, k))684 icc3dcon(i, k) = rnebcon(i, k)*(1-phase3d(i, k))*ccwcon(i, k) ! glace convective 685 icc3dstra(i, k)= pclc(i, k)*radocond(i, k)*(1-phase3d(i, k)) 712 686 icc3dstra(i, k) = icc3dstra(i, k) - icc3dcon(i, k) ! glace stratiforme 713 687 icc3dstra(i, k) = max( icc3dstra(i, k), 0.0) … … 715 689 716 690 ! Compute cloud droplet radius as above in meter 717 radius = 1.1*(( pqlwp(i,k)*pplay(i,k)/(rd*t(i,k)))/(4./3*rpi*1000.* &691 radius = 1.1*((radocond(i,k)*pplay(i,k)/(rd*temp(i,k)))/(4./3*rpi*1000.* & 718 692 cdnc(i,k)))**(1./3.) 719 693 radius = max(radius, 5.E-6)
Note: See TracChangeset
for help on using the changeset viewer.