[1305] | 1 | !****************************************************************************** |
---|
| 2 | !* venus_SAS_composition SUBROUTINE |
---|
| 3 | !* modified from |
---|
| 4 | !* PROGRAM PSC_MODEL_E |
---|
[1442] | 5 | !* by A. Määttänen |
---|
[1305] | 6 | !* subroutine for LMDZ+photochemistry VENUS |
---|
| 7 | !* by A. Stolzenbach |
---|
| 8 | !* |
---|
| 9 | !* Input/Output files: |
---|
| 10 | !* ------------------- |
---|
| 11 | !* |
---|
| 12 | !---------------------------------------------------------------------------- |
---|
[3323] | 13 | SUBROUTINE new_cloud_venus(nbr_mode, |
---|
[1442] | 14 | + nblev, nblon, |
---|
| 15 | + TT,PP, |
---|
[1305] | 16 | + mrt_wv,mrt_sa, |
---|
[1442] | 17 | + mr_wv,mr_sa) |
---|
[1305] | 18 | |
---|
| 19 | USE chemparam_mod |
---|
| 20 | IMPLICIT NONE |
---|
[1639] | 21 | |
---|
| 22 | #include "YOMCST.h" |
---|
| 23 | |
---|
[3323] | 24 | integer :: nbr_mode |
---|
[1442] | 25 | INTEGER, INTENT(IN) :: nblon ! nombre de points horizontaux |
---|
| 26 | INTEGER, INTENT(IN) :: nblev ! nombre de couches verticales |
---|
[1639] | 27 | |
---|
[1305] | 28 | !---------------------------------------------------------------------------- |
---|
| 29 | ! Ambient air state variables: |
---|
[1442] | 30 | REAL, INTENT(IN), DIMENSION(nblon,nblev) :: mrt_wv,mrt_sa, |
---|
| 31 | + TT,PP |
---|
| 32 | REAL, INTENT(INOUT), DIMENSION(nblon,nblev) :: mr_wv,mr_sa |
---|
[1305] | 33 | !---------------------------------------------------------------------------- |
---|
[1442] | 34 | INTEGER :: ilon, ilev, imode |
---|
| 35 | !---------------------------------------------------------------------------- |
---|
[1305] | 36 | ! Thermodynamic functions: |
---|
[1661] | 37 | REAL :: ROSAS |
---|
[1442] | 38 | !---------------------------------------------------------------------------- |
---|
| 39 | ! Auxilary variables: |
---|
| 40 | REAL :: NH2SO4,NH2O |
---|
| 41 | REAL :: H2SO4_liq,H2O_liq |
---|
| 42 | REAL :: CONCM |
---|
| 43 | REAL :: MCONDTOT |
---|
| 44 | REAL :: RMODE |
---|
| 45 | REAL :: WSAFLAG |
---|
| 46 | REAL :: K_SAV |
---|
| 47 | !---------------------------------------------------------------------------- |
---|
| 48 | ! Ridder's Method variables: |
---|
| 49 | REAL :: WVMIN, WVMAX, WVACC |
---|
[1639] | 50 | |
---|
[1442] | 51 | INTEGER :: NBROOT |
---|
[1639] | 52 | |
---|
[1442] | 53 | INTEGER :: MAXITE |
---|
| 54 | PARAMETER(MAXITE=20) |
---|
| 55 | |
---|
| 56 | INTEGER :: NBRAC |
---|
[1639] | 57 | PARAMETER(NBRAC=5) |
---|
| 58 | |
---|
[1442] | 59 | INTEGER :: FLAG |
---|
[3323] | 60 | |
---|
[1639] | 61 | REAL :: qmass |
---|
| 62 | c masse volumique du coeur (kg.m-3) |
---|
[1687] | 63 | c ATTENTION ! DOIT ETRE COHERENT AVEC new_cloud_sedim ! |
---|
[1639] | 64 | REAL, PARAMETER :: rho_core = 2500.0 |
---|
[1305] | 65 | !---------------------------------------------------------------------------- |
---|
[1442] | 66 | ! External functions needed: |
---|
| 67 | REAL :: IRFRMWV |
---|
[1639] | 68 | !---------------------------------------------------------------------------- |
---|
[1305] | 69 | |
---|
[1639] | 70 | |
---|
[1305] | 71 | ! >>> Program starts here: |
---|
| 72 | |
---|
| 73 | !AM Venus |
---|
[1442] | 74 | ! These aerosols will then be given an equilibrium composition for the given size distribution |
---|
[1305] | 75 | |
---|
[1639] | 76 | ! Hanna Vehkamäki and Markku Kulmala and Ismo Napari |
---|
[1305] | 77 | ! and Kari E. J. Lehtinen and Claudia Timmreck and Madis Noppel and Ari Laaksonen, 2002, |
---|
[1639] | 78 | ! An improved parameterization for sulfuric acid/water nucleation rates for tropospheric |
---|
[1442] | 79 | !and stratospheric conditions, () J. Geophys. Res., 107, PP. 4622-4631 |
---|
[1305] | 80 | |
---|
[1442] | 81 | !=========================================== |
---|
| 82 | ! Debut boucle sur niveau et lat,lon |
---|
| 83 | !=========================================== |
---|
| 84 | ! Init, tous les points=0, cela met les niveaux > cloudmax et < cloudmin a 0 |
---|
| 85 | NBRTOT(:,:,:)=0.0E+0 |
---|
| 86 | WH2SO4(:,:)=0.0E+0 |
---|
| 87 | rho_droplet(:,:)=0.0E+0 |
---|
[1639] | 88 | |
---|
[1442] | 89 | DO ilev=cloudmin, cloudmax |
---|
[1639] | 90 | DO ilon=1, nblon |
---|
| 91 | |
---|
[1442] | 92 | ! Boucle sur les modes |
---|
| 93 | RMODE=0.0E+0 |
---|
| 94 | K_SAV = 0.0 |
---|
[1639] | 95 | |
---|
[1442] | 96 | DO imode=1, nbr_mode |
---|
| 97 | IF (K_MASS(ilon,ilev,imode).GT.K_SAV) THEN |
---|
| 98 | ! RMODE est le rayon modal de la distribution en volume du mode le plus |
---|
| 99 | ! representatif pour la Mtot |
---|
| 100 | RMODE=R_MEDIAN(ilon,ilev,imode)* |
---|
| 101 | & EXP(2.*(DLOG(STDDEV(ilon,ilev,imode))**2.)) |
---|
| 102 | K_SAV=K_MASS(ilon,ilev,imode) |
---|
| 103 | ENDIF |
---|
| 104 | ENDDO ! FIN boucle imode |
---|
[1305] | 105 | |
---|
[1442] | 106 | ! Initialisation des bornes pour WV |
---|
| 107 | WVMIN=1.E-90 |
---|
| 108 | WVMAX=mrt_wv(ilon,ilev) |
---|
[1305] | 109 | |
---|
[1442] | 110 | ! Accuracy de WVeq |
---|
| 111 | WVACC=WVMAX*1.0E-3 |
---|
[1639] | 112 | |
---|
[1442] | 113 | ! BRACWV borne la fonction f(WV) - WV = 0 |
---|
| 114 | ! de WV=0 à WV=WVtot on cherche l'intervalle où f(WV) - WV = 0 |
---|
[1639] | 115 | ! avec précisément f(WVliq de WSA<=WVinput) + WVinput - WVtot = 0 |
---|
[1442] | 116 | ! Elle fait appel à la fct/ssrtine ITERWV() |
---|
[1639] | 117 | |
---|
[1667] | 118 | CALL BRACWV(TT(ilon,ilev),PP(ilon,ilev),WVMIN,WVMAX,NBRAC, |
---|
| 119 | & RMODE,mrt_wv(ilon,ilev),mrt_sa(ilon,ilev),FLAG,WSAFLAG,NBROOT) |
---|
[1639] | 120 | |
---|
[1442] | 121 | SELECT CASE(FLAG) |
---|
[1639] | 122 | |
---|
| 123 | CASE(1) |
---|
| 124 | ! Cas NROOT=1 ou NROOT>1 mais dans un intervalle restreint WVTOT (cas courant) |
---|
| 125 | ! IRFRMWV Ridder's method pour trouver, sur [WVmin,WVmax], WVo tel que f(WVo) - WVo = 0 |
---|
[1442] | 126 | ! Elle fait appel la fct/ssrtine ITERWV() |
---|
[1639] | 127 | |
---|
[1667] | 128 | WH2SO4(ilon,ilev)=IRFRMWV(TT(ilon,ilev),PP(ilon,ilev), |
---|
| 129 | & WVMIN,WVMAX,WVACC,MAXITE,RMODE, |
---|
[1639] | 130 | & mrt_wv(ilon,ilev),mrt_sa(ilon,ilev),NBROOT) |
---|
[1305] | 131 | |
---|
[1661] | 132 | rho_droplet(ilon,ilev)=ROSAS(TT(ilon,ilev),WH2SO4(ilon,ilev)) |
---|
[1305] | 133 | |
---|
[1442] | 134 | ! IF (rho_droplet(ilon,ilev).LT.1100.) THEN |
---|
| 135 | ! PRINT*,'PROBLEM RHO_DROPLET' |
---|
| 136 | ! PRINT*,'rho_droplet',rho_droplet(ilon,ilev) |
---|
| 137 | ! PRINT*,'T',TT(ilon,ilev),'WSA',WH2SO4(ilon,ilev) |
---|
[1661] | 138 | ! PRINT*,'RHODROPLET',ROSAS(TT(ilon,ilev),WH2SO4(ilon,ilev)) |
---|
[1442] | 139 | ! PRINT*,'FLAG',FLAG,'NROOT',NBROOT |
---|
| 140 | ! STOP |
---|
| 141 | ! ENDIF |
---|
[1639] | 142 | |
---|
[1442] | 143 | CONCM= PP(ilon,ilev)/(1.3806488E-23*TT(ilon,ilev)) !air number density, molec/m3 |
---|
[1305] | 144 | |
---|
[1639] | 145 | NH2SO4=mrt_sa(ilon,ilev)*CONCM |
---|
| 146 | NH2O=mrt_wv(ilon,ilev)*CONCM |
---|
[1305] | 147 | |
---|
[1442] | 148 | CALL CALCM_SAT(NH2SO4,NH2O,WH2SO4(ilon,ilev), |
---|
| 149 | & rho_droplet(ilon,ilev),TT(ilon,ilev), |
---|
| 150 | & H2SO4_liq,H2O_liq,MCONDTOT) |
---|
[1305] | 151 | |
---|
[1442] | 152 | ! Boucle sur les modes |
---|
[1639] | 153 | ! ********************************************* |
---|
| 154 | ! AVEC MODE 3 type J. Cimino 1982, Icarus |
---|
| 155 | ! ********************************************* |
---|
| 156 | ! Mode 1 et 2 avec les Kmass modifies |
---|
| 157 | DO imode=1, nbr_mode-1 |
---|
| 158 | ! calcul qmass |
---|
| 159 | qmass = (rho_core*qrad**3)/ |
---|
| 160 | & (rho_core*qrad**3 + rho_droplet(ilon,ilev)*(1.-qrad**3)) |
---|
| 161 | |
---|
| 162 | IF (K_MASS(ilon,ilev,imode).GT.0.) THEN |
---|
[1442] | 163 | NBRTOT(ilon,ilev,imode)= 1.E-6*3./(4.*RPI)* |
---|
[1639] | 164 | & K_MASS(ilon,ilev,imode)/(1.-qmass*K_MASS(ilon,ilev,3))* |
---|
| 165 | & MCONDTOT*EXP(-4.5*DLOG(STDDEV(ilon,ilev,imode))**2.)/ |
---|
[1442] | 166 | & (R_MEDIAN(ilon,ilev,imode)**3.) |
---|
| 167 | ELSE |
---|
| 168 | NBRTOT(ilon,ilev,imode)=0.0E+0 |
---|
[1639] | 169 | ENDIF |
---|
| 170 | ENDDO |
---|
| 171 | ! Mode 3 reste identique car on veut le N correspondant aux mesures de Knollenberg |
---|
| 172 | IF (K_MASS(ilon,ilev,3).GT.0.) THEN |
---|
| 173 | NBRTOT(ilon,ilev,3)= 1.E-6*3./(4.*RPI)* |
---|
| 174 | & K_MASS(ilon,ilev,3)*MCONDTOT* |
---|
| 175 | & EXP(-4.5*DLOG(STDDEV(ilon,ilev,3))**2.)/ |
---|
| 176 | & (R_MEDIAN(ilon,ilev,3)**3.) |
---|
| 177 | ELSE |
---|
| 178 | NBRTOT(ilon,ilev,3)=0.0E+0 |
---|
| 179 | ENDIF |
---|
[1305] | 180 | |
---|
[1442] | 181 | ! Passage de #/m3 en VMR |
---|
| 182 | H2O_liq=H2O_liq/CONCM |
---|
| 183 | H2SO4_liq=H2SO4_liq/CONCM |
---|
| 184 | |
---|
| 185 | mr_wv(ilon,ilev)=mrt_wv(ilon,ilev)-H2O_liq |
---|
| 186 | mr_sa(ilon,ilev)=mrt_sa(ilon,ilev)-H2SO4_liq |
---|
[1639] | 187 | |
---|
[1442] | 188 | ! Problemes quand on a condense tout, on peut obtenir des -1e-24 |
---|
| 189 | ! aprs la soustraction et conversion de ND VMR |
---|
[1639] | 190 | IF (mr_wv(ilon,ilev).LE.0.0) mr_wv(ilon,ilev)=1.0E-30 |
---|
[1442] | 191 | IF (mr_sa(ilon,ilev).LE.0.0) mr_sa(ilon,ilev)=1.0E-30 |
---|
| 192 | |
---|
| 193 | |
---|
| 194 | |
---|
| 195 | CASE(2) |
---|
[1639] | 196 | ! Cas NROOT=0 mais proche de 0 |
---|
[1442] | 197 | |
---|
| 198 | WH2SO4(ilon,ilev)=WSAFLAG |
---|
[1639] | 199 | |
---|
[1661] | 200 | rho_droplet(ilon,ilev)=ROSAS(TT(ilon,ilev),WH2SO4(ilon,ilev)) |
---|
[1442] | 201 | |
---|
| 202 | ! ATTENTION ce IF ne sert a rien en fait, juste a retenir une situation |
---|
| 203 | ! ubuesque dans mon code ou sans ce IF les valeurs de rho_droplets sont |
---|
[1639] | 204 | ! incoherentes avec TT et WH2SO4 (a priori lorsque NTOT=0) |
---|
[1442] | 205 | ! Juste le fait de METTRE un IF fait que rho_droplet a la bonne valeur |
---|
[1661] | 206 | ! donne par ROSAS (cf test externe en Python), sinon, la valeur est trop |
---|
[1639] | 207 | ! basse (de l'ordre de 1000 kg/m3) et correspond parfois a la valeur avec |
---|
| 208 | ! WSA=0.1 (pas totalement sur) |
---|
[1442] | 209 | ! En tous cas, incoherent avec ce qui est attendue pour le WSA et T donnee |
---|
[1639] | 210 | ! La version avec le IF (rho<1100 & WSA>0.1) est CORRECTE, rho_droplet a |
---|
[1442] | 211 | ! la bonne valeur (tests externes Python confirment) |
---|
[1639] | 212 | |
---|
[1442] | 213 | IF ((rho_droplet(ilon,ilev).LT.1100.).AND. |
---|
| 214 | & (WH2SO4(ilon,ilev).GT.0.1))THEN |
---|
| 215 | PRINT*,'PROBLEM RHO_DROPLET' |
---|
| 216 | PRINT*,'rho_droplet',rho_droplet(ilon,ilev) |
---|
| 217 | PRINT*,'T',TT(ilon,ilev),'WSA',WH2SO4(ilon,ilev) |
---|
[1661] | 218 | PRINT*,'RHODROPLET',ROSAS(TT(ilon,ilev),WH2SO4(ilon,ilev)) |
---|
[1442] | 219 | PRINT*,'FLAG',FLAG,'NROOT',NBROOT |
---|
| 220 | STOP |
---|
[1639] | 221 | ENDIF |
---|
| 222 | |
---|
| 223 | |
---|
[1442] | 224 | CONCM= PP(ilon,ilev)/(1.3806488E-23*TT(ilon,ilev)) !air number density, molec/m3 |
---|
| 225 | |
---|
| 226 | NH2SO4=mrt_sa(ilon,ilev)*CONCM |
---|
| 227 | NH2O=mrt_wv(ilon,ilev)*CONCM |
---|
| 228 | |
---|
| 229 | CALL CALCM_SAT(NH2SO4,NH2O,WH2SO4(ilon,ilev), |
---|
| 230 | & rho_droplet(ilon,ilev),TT(ilon,ilev), |
---|
| 231 | & H2SO4_liq,H2O_liq,MCONDTOT) |
---|
| 232 | |
---|
| 233 | ! Boucle sur les modes |
---|
[1639] | 234 | ! ********************************************* |
---|
| 235 | ! AVEC MODE 3 type J. Cimino 1982, Icarus |
---|
| 236 | ! ********************************************* |
---|
| 237 | ! Mode 1 et 2 avec alcul coeff*Kmass |
---|
| 238 | DO imode=1, nbr_mode-1 |
---|
| 239 | ! calcul qmass |
---|
| 240 | qmass = (rho_core*qrad**3)/ |
---|
| 241 | & (rho_core*qrad**3 + rho_droplet(ilon,ilev)*(1.-qrad**3)) |
---|
| 242 | |
---|
| 243 | IF (K_MASS(ilon,ilev,imode).GT.0.) THEN |
---|
[1442] | 244 | NBRTOT(ilon,ilev,imode)= 1.E-6*3./(4.*RPI)* |
---|
[1639] | 245 | & K_MASS(ilon,ilev,imode)/(1.-qmass*K_MASS(ilon,ilev,3))* |
---|
| 246 | & MCONDTOT*EXP(-4.5*DLOG(STDDEV(ilon,ilev,imode))**2.)/ |
---|
[1442] | 247 | & (R_MEDIAN(ilon,ilev,imode)**3.) |
---|
| 248 | ELSE |
---|
| 249 | NBRTOT(ilon,ilev,imode)=0.0E+0 |
---|
[1639] | 250 | ENDIF |
---|
| 251 | ENDDO |
---|
| 252 | ! Mode 3 reste identique car on veut le N correspondant aux mesures de Knollenberg |
---|
| 253 | IF (K_MASS(ilon,ilev,3).GT.0.) THEN |
---|
| 254 | NBRTOT(ilon,ilev,3)= 1.E-6*3./(4.*RPI)* |
---|
| 255 | & K_MASS(ilon,ilev,3)*MCONDTOT* |
---|
| 256 | & EXP(-4.5*DLOG(STDDEV(ilon,ilev,3))**2.)/ |
---|
| 257 | & (R_MEDIAN(ilon,ilev,3)**3.) |
---|
| 258 | ELSE |
---|
| 259 | NBRTOT(ilon,ilev,3)=0.0E+0 |
---|
| 260 | ENDIF |
---|
[1442] | 261 | |
---|
[1639] | 262 | |
---|
[1442] | 263 | ! Passage de #/m3 en VMR |
---|
| 264 | H2O_liq=H2O_liq/CONCM |
---|
| 265 | H2SO4_liq=H2SO4_liq/CONCM |
---|
| 266 | |
---|
| 267 | mr_wv(ilon,ilev)=mrt_wv(ilon,ilev)-H2O_liq |
---|
| 268 | mr_sa(ilon,ilev)=mrt_sa(ilon,ilev)-H2SO4_liq |
---|
[1639] | 269 | |
---|
[1442] | 270 | ! Problmes quand on a condense tout, on peut obtenir des -1e-24 |
---|
| 271 | ! aprs la soustraction et conversion de ND VMR |
---|
[1639] | 272 | IF (mr_wv(ilon,ilev).LE.0.0) mr_wv(ilon,ilev)=1.0E-30 |
---|
[1442] | 273 | IF (mr_sa(ilon,ilev).LE.0.0) mr_sa(ilon,ilev)=1.0E-30 |
---|
[1639] | 274 | |
---|
[1442] | 275 | CASE(3) |
---|
[1639] | 276 | ! Cas 0 NROOT |
---|
[1442] | 277 | mr_wv(ilon,ilev)=mrt_wv(ilon,ilev) |
---|
| 278 | mr_sa(ilon,ilev)=mrt_sa(ilon,ilev) |
---|
| 279 | rho_droplet(ilon,ilev)=0.0E+0 |
---|
| 280 | WH2SO4(ilon,ilev)=0.0E+0 |
---|
| 281 | DO imode=1, nbr_mode |
---|
[1639] | 282 | NBRTOT(ilon,ilev,imode)=0.0E+0 |
---|
| 283 | ENDDO |
---|
[1442] | 284 | |
---|
[1639] | 285 | END SELECT |
---|
| 286 | ENDDO !FIN boucle ilon |
---|
| 287 | ENDDO !FIN boucle ilev |
---|
| 288 | |
---|
[1442] | 289 | END SUBROUTINE new_cloud_venus |
---|
[1639] | 290 | |
---|
| 291 | |
---|
[1305] | 292 | !****************************************************************** |
---|
[1442] | 293 | SUBROUTINE CALCM_SAT(H2SO4,H2O,WSA,DENSO4, |
---|
| 294 | + T,H2SO4COND,H2OCOND,RMTOT) |
---|
[1305] | 295 | |
---|
[1639] | 296 | ! DERIVE NO (TOTAL NUMBER OF AEROSOL PARTICLES CONCENTRATION) |
---|
| 297 | ! FROM TOTAL H2SO4 AND RMOD/SIGMA OF AEROSOL LOG-NORMAL |
---|
[1305] | 298 | ! SIZE DISTRIBTUION |
---|
[1442] | 299 | ! ASSUMING ALL THE H2SO4 ABOVE MIXTURE SAT PRESSURE modified by H2SO4 activity IS CONDENSED |
---|
[1305] | 300 | ! --------------------------------------------------------------- |
---|
| 301 | ! INPUT: |
---|
[1442] | 302 | ! H2SO4: #/m3 of total H2SO4 |
---|
| 303 | ! H2O : #/m3 of total H2O |
---|
| 304 | ! WSA: aerosol H2SO4 weight fraction (fraction) |
---|
| 305 | ! DENSO4: aerosol volumic mass (kg/m3 = aerosol mass/aerosol volume) |
---|
| 306 | ! for total mass, almost same result with ro=1.67 gr/cm3 |
---|
[1305] | 307 | ! RSTDEV: standard deviation of aerosol distribution (no unit) |
---|
[1442] | 308 | ! RADIUS: MEDIAN radius (m) |
---|
[1305] | 309 | ! T: temperature (K) |
---|
| 310 | ! |
---|
[1639] | 311 | ! OUTPUT: |
---|
[1442] | 312 | ! RMTOT: Total condensed "Mass" (M_tot_distrib / rho_droplet), sans dimension |
---|
[1639] | 313 | ! mais rho_droplet et M_tot_distrib doivent etre de meme dimension |
---|
[1305] | 314 | ! H2OCOND |
---|
| 315 | ! H2SO4COND |
---|
| 316 | |
---|
[1442] | 317 | |
---|
[1639] | 318 | |
---|
[1305] | 319 | IMPLICIT NONE |
---|
| 320 | |
---|
[1442] | 321 | REAL, INTENT(IN) :: H2SO4, H2O, WSA |
---|
| 322 | REAL, INTENT(IN) :: DENSO4, T |
---|
| 323 | REAL, INTENT(OUT) :: H2OCOND, H2SO4COND, RMTOT |
---|
[1305] | 324 | ! working variables |
---|
[1442] | 325 | REAL :: RMH2S4 |
---|
| 326 | REAL :: DND2,pstand,lpar,acidps |
---|
| 327 | REAL :: x1, satpacid |
---|
[1305] | 328 | REAL , DIMENSION(2):: act |
---|
| 329 | ! |
---|
[1442] | 330 | ! masse of an H2SO4 molecule (kg) |
---|
| 331 | RMH2S4=98.078/(6.02214129E+26) |
---|
[1639] | 332 | |
---|
[1442] | 333 | pstand=1.01325E+5 !Pa 1 atm pressure |
---|
[1305] | 334 | |
---|
[1442] | 335 | x1=(WSA/98.08)/(WSA/98.08 + ((1.-WSA)/18.0153)) |
---|
[1305] | 336 | |
---|
| 337 | call zeleznik(x1,t,act) |
---|
| 338 | |
---|
| 339 | !pure acid satur vapor pressure |
---|
| 340 | lpar= -11.695+DLOG(pstand) ! Zeleznik |
---|
| 341 | acidps=1/360.15-1.0/t+0.38/545. |
---|
| 342 | + *(1.0+DLOG(360.15/t)-360.15/t) |
---|
| 343 | acidps = 10156.0*acidps +lpar |
---|
| 344 | acidps = DEXP(acidps) !Pa |
---|
| 345 | |
---|
[1442] | 346 | !acid sat.vap.PP over mixture (flat surface): |
---|
[1639] | 347 | satpacid=act(2)*acidps ! Pa |
---|
[1305] | 348 | |
---|
| 349 | ! Conversion from Pa to N.D #/m3 |
---|
[1442] | 350 | DND2=satpacid/(1.3806488E-23*T) |
---|
[1305] | 351 | ! Conversion from N.D #/m3 TO #/cm3 |
---|
[1442] | 352 | ! DND2=DND2*1.d-6 |
---|
[1639] | 353 | |
---|
[1442] | 354 | ! H2SO4COND N.D #/m3 condensee ssi H2SO4>H2SO4sat |
---|
[1305] | 355 | IF (H2SO4.GE.DND2) THEN |
---|
| 356 | H2SO4COND=H2SO4-DND2 |
---|
| 357 | ! calcul de H2O cond correspondant a H2SO4 cond |
---|
[1442] | 358 | H2OCOND=H2SO4COND*98.078*(1.0-WSA)/(18.0153*WSA) |
---|
[1305] | 359 | |
---|
[1639] | 360 | ! RMTOT: = Mass of H2SO4 satur per m3 of air/ Mass of sulfuric acid part of droplet solution per m3 |
---|
| 361 | ! RMTOT = Mtot/rho_droplet |
---|
[1305] | 362 | ! RMTOT=M_distrib/rho_droplet |
---|
[1639] | 363 | |
---|
[1442] | 364 | RMTOT=H2SO4COND*RMH2S4/(DENSO4*WSA) |
---|
[1305] | 365 | |
---|
| 366 | ! Si on a H2SO4<H2SO4sat on ne condense rien et NDTOT=0 |
---|
| 367 | ELSE |
---|
[1442] | 368 | H2SO4COND=0.0E+0 |
---|
| 369 | H2OCOND=0.0E+0 |
---|
| 370 | RMTOT=0.0E+0 |
---|
[1305] | 371 | END IF |
---|
[1639] | 372 | |
---|
[1305] | 373 | ! Test si H2O en defaut H2Ocond>H2O dispo |
---|
[1442] | 374 | IF ((H2OCOND.GT.H2O).AND.(H2SO4.GE.DND2)) THEN |
---|
| 375 | |
---|
| 376 | ! Si H2O en dfaut, on as pas le bon WSA! |
---|
| 377 | ! En effet, normalement, on a exactement le WSA correspondant a |
---|
| 378 | ! WVg + WVl = WVtot |
---|
| 379 | ! Dans les cas o WVtot, SAtot sont trs faibles (Upper Haze) ou |
---|
| 380 | ! quand T est grand (Lower Haze), le modle reprsente mal le WSA |
---|
| 381 | ! cf carte NCL, avec des max erreur absolue de 0.1 sur le WSA |
---|
| 382 | |
---|
| 383 | ! PRINT*,'PROBLEM H2O EN DEFAUT' |
---|
| 384 | ! PRINT*,'H2OCOND',H2OCOND,'H2O',H2O |
---|
| 385 | ! PRINT*,'WSA',WSA,'RHO',DENSO4 |
---|
| 386 | ! STOP |
---|
[1639] | 387 | |
---|
| 388 | |
---|
[1305] | 389 | ! On peut alors condenser tout le H2O dispo |
---|
| 390 | H2OCOND=H2O |
---|
| 391 | ! On met alors egalement a jour le H2SO4 cond correspondant au H2O cond |
---|
[1442] | 392 | H2SO4COND=H2OCOND*18.0153*WSA/(98.078*(1.0-WSA)) |
---|
[1639] | 393 | |
---|
| 394 | ! RMTOT: = Mass of H2SO4 satur per m3 of air/ Mass of sulfuric acid part of droplet solution per m3 |
---|
| 395 | ! RMTOT=Volume of aerosol m3 /m3 of air |
---|
| 396 | ! Volume of aerosol/m3 air |
---|
| 397 | |
---|
[1442] | 398 | RMTOT=H2SO4COND*RMH2S4/(DENSO4*WSA) |
---|
[1639] | 399 | |
---|
[1305] | 400 | END IF |
---|
[1639] | 401 | |
---|
[1442] | 402 | END SUBROUTINE CALCM_SAT |
---|
[1305] | 403 | |
---|