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