1 module module_sorgam_aqchem
3 ! NOTE: This is an initial attempt at the implementation of AQCHEM with
4 ! the MADE/SORGAM aerosol scheme. It needs to be checked and tested.
6 ! jan.kazil@noaa.gov 2011-08-14 17:15:39 -06:00
8 REAL, PARAMETER :: epsilc = 1.0E-16
10 REAL, PARAMETER :: qcldwtr_cutoff = 1.0e-6 ! Cloud threshold (kg/kg)
12 REAL, PARAMETER :: mwdry = 28.966 ! Molecular mass of dry air (g/mol)
13 REAL, PARAMETER :: mwso4 = 96.00 ! Molecular mass of SO4-- (g/mol)
14 REAL, PARAMETER :: mwno3 = 62.0 ! Molecular mass of NO3- (g/mol)
15 REAL, PARAMETER :: mwnh4 = 18.0985 ! Molecular mass of NH4+ (g/mol)
16 REAL, PARAMETER :: mwna = 22.990 ! Molecular mass of NH4+ (g/mol)
17 REAL, PARAMETER :: mwcl = 35.453 ! Molecular mass of NH4+ (g/mol)
21 INTEGER, PARAMETER :: NGAS = 12 ! number of gas-phase species for AQCHEM
22 INTEGER, PARAMETER :: NAER = 36 ! number of aerosol species for AQCHEM
23 INTEGER, PARAMETER :: NLIQS = 41 ! number of liquid-phase species in AQCHEM
25 ! Indices for the AQCHEM array GAS
27 INTEGER, PARAMETER :: LSO2 = 1 ! Sulfur Dioxide
28 INTEGER, PARAMETER :: LHNO3 = 2 ! Nitric Acid
29 INTEGER, PARAMETER :: LN2O5 = 3 ! Dinitrogen Pentoxide
30 INTEGER, PARAMETER :: LCO2 = 4 ! Carbon Dioxide
31 INTEGER, PARAMETER :: LNH3 = 5 ! Ammonia
32 INTEGER, PARAMETER :: LH2O2 = 6 ! Hydrogen Perioxide
33 INTEGER, PARAMETER :: LO3 = 7 ! Ozone
34 INTEGER, PARAMETER :: LFOA = 8 ! Formic Acid
35 INTEGER, PARAMETER :: LMHP = 9 ! Methyl Hydrogen Peroxide
36 INTEGER, PARAMETER :: LPAA = 10 ! Peroxyacidic Acid
37 INTEGER, PARAMETER :: LH2SO4 = 11 ! Sulfuric Acid
38 INTEGER, PARAMETER :: LHCL = 12 ! Hydrogen Chloride
40 ! Indices for the AQCHEM array AEROSOL
42 INTEGER, PARAMETER :: LSO4AKN = 1 ! Aitken mode Sulfate
43 INTEGER, PARAMETER :: LSO4ACC = 2 ! Accumulation mode Sulfate
44 INTEGER, PARAMETER :: LSO4COR = 3 ! Coarse mode Sulfate
45 INTEGER, PARAMETER :: LNH4AKN = 4 ! Aitken mode Ammonium
46 INTEGER, PARAMETER :: LNH4ACC = 5 ! Accumulation mode Ammonium
47 INTEGER, PARAMETER :: LNO3AKN = 6 ! Aitken mode Nitrate
48 INTEGER, PARAMETER :: LNO3ACC = 7 ! Accumulation mode Nitrate
49 INTEGER, PARAMETER :: LNO3COR = 8 ! Coarse mode Nitrate
50 INTEGER, PARAMETER :: LORGAAKN = 9 ! Aitken mode anthropogenic SOA
51 INTEGER, PARAMETER :: LORGAACC = 10 ! Accumulation mode anthropogenic SOA
52 INTEGER, PARAMETER :: LORGPAKN = 11 ! Aitken mode primary organic aerosol
53 INTEGER, PARAMETER :: LORGPACC = 12 ! Accumulation mode primary organic aerosol
54 INTEGER, PARAMETER :: LORGBAKN = 13 ! Aitken mode biogenic SOA
55 INTEGER, PARAMETER :: LORGBACC = 14 ! Accumulation mode biogenic SOA
56 INTEGER, PARAMETER :: LECAKN = 15 ! Aitken mode elemental carbon
57 INTEGER, PARAMETER :: LECACC = 16 ! Accumulation mode elemental carbon
58 INTEGER, PARAMETER :: LPRIAKN = 17 ! Aitken mode primary aerosol
59 INTEGER, PARAMETER :: LPRIACC = 18 ! Accumulation mode primary aerosol
60 INTEGER, PARAMETER :: LPRICOR = 19 ! Coarse mode primary aerosol
61 INTEGER, PARAMETER :: LNAAKN = 20 ! Aitken mode Sodium
62 INTEGER, PARAMETER :: LNAACC = 21 ! Accumulation mode Sodium
63 INTEGER, PARAMETER :: LNACOR = 22 ! Coarse mode Sodium
64 INTEGER, PARAMETER :: LCLAKN = 23 ! Aitken mode Chloride ion
65 INTEGER, PARAMETER :: LCLACC = 24 ! Accumulation mode Chloride ion
66 INTEGER, PARAMETER :: LCLCOR = 25 ! Coarse mode Chloride ion
67 INTEGER, PARAMETER :: LNUMAKN = 26 ! Aitken mode number
68 INTEGER, PARAMETER :: LNUMACC = 27 ! Accumulation mode number
69 INTEGER, PARAMETER :: LNUMCOR = 28 ! Coarse mode number
70 INTEGER, PARAMETER :: LSRFAKN = 29 ! Aitken mode surface area
71 INTEGER, PARAMETER :: LSRFACC = 30 ! Accumulation mode surface area
72 INTEGER, PARAMETER :: LNACL = 31 ! Sodium Chloride aerosol for AE3 only {depreciated in AE4}
73 INTEGER, PARAMETER :: LCACO3 = 32 ! Calcium Carbonate aerosol (place holder)
74 INTEGER, PARAMETER :: LMGCO3 = 33 ! Magnesium Carbonate aerosol (place holder)
75 INTEGER, PARAMETER :: LA3FE = 34 ! Iron aerosol (place holder)
76 INTEGER, PARAMETER :: LB2MN = 35 ! Manganese aerosol (place holder)
77 INTEGER, PARAMETER :: LK = 36 ! Potassium aerosol (Cl- tracked separately) (place holder)
79 ! Indices for the AQCHEM arrays LIQUID and WETDEP
81 INTEGER, PARAMETER :: LACL = 1 ! Hydrogen ion
82 INTEGER, PARAMETER :: LNH4L = 2 ! Ammonium
83 INTEGER, PARAMETER :: LCAL = 3 ! Calcium
84 INTEGER, PARAMETER :: LNAACCL = 4 ! Sodium
85 INTEGER, PARAMETER :: LOHL = 5 ! Hydroxyl radical ion
86 INTEGER, PARAMETER :: LSO4ACCL = 6 ! Sulfate (attributed to accumulation mode)
87 INTEGER, PARAMETER :: LHSO4ACCL = 7 ! bisulfate (attributed to accumulation mode)
88 INTEGER, PARAMETER :: LSO3L = 8 ! sulfite
89 INTEGER, PARAMETER :: LHSO3L = 9 ! bisulfite
90 INTEGER, PARAMETER :: LSO2L = 10 ! sulfur dioxide
91 INTEGER, PARAMETER :: LCO3L = 11 ! carbonate
92 INTEGER, PARAMETER :: LHCO3L = 12 ! bicarbonate
93 INTEGER, PARAMETER :: LCO2L = 13 ! carbon dioxide
94 INTEGER, PARAMETER :: LNO3ACCL = 14 ! nitrate(attributed to accumulation mode)
95 INTEGER, PARAMETER :: LNH3L = 15 ! ammonia
96 INTEGER, PARAMETER :: LCLACCL = 16 ! chloride ion (attributed to accumulation mode)
97 INTEGER, PARAMETER :: LH2O2L = 17 ! hydrogen peroxide
98 INTEGER, PARAMETER :: LO3L = 18 ! ozone
99 INTEGER, PARAMETER :: LFEL = 19 ! iron
100 INTEGER, PARAMETER :: LMNL = 20 ! Manganese
101 INTEGER, PARAMETER :: LAL = 21 ! generalized anion associated with iron
102 INTEGER, PARAMETER :: LFOAL = 22 ! Formic acid
103 INTEGER, PARAMETER :: LHCO2L = 23 ! HCOO- ion
104 INTEGER, PARAMETER :: LMHPL = 24 ! Methyl hydrogen peroxide
105 INTEGER, PARAMETER :: LPAAL = 25 ! Peroxyacidic acid
106 INTEGER, PARAMETER :: LHCLL = 26 ! Hydrogen chloride
107 INTEGER, PARAMETER :: LPRIML = 27 ! primary aerosol
108 INTEGER, PARAMETER :: LMGL = 28 ! Magnesium
109 INTEGER, PARAMETER :: LKL = 29 ! potassium
110 INTEGER, PARAMETER :: LBL = 30 ! generalized anion associated with manganese
111 INTEGER, PARAMETER :: LHNO3L = 31 ! nitric acid
112 INTEGER, PARAMETER :: LPRIMCORL = 32 ! coarse-mode primary aerosol
113 INTEGER, PARAMETER :: LNUMCORL = 33 ! coarse-mode number
114 INTEGER, PARAMETER :: LTS6CORL = 34 ! sulfate (attributed to coarse mode)
115 INTEGER, PARAMETER :: LNACORL = 35 ! sodium (attributed to coarse mode)
116 INTEGER, PARAMETER :: LCLCORL = 36 ! chloride ion (attributed to coarse mode)
117 INTEGER, PARAMETER :: LNO3CORL = 37 ! nitrate (attributed to coarse mode)
118 INTEGER, PARAMETER :: LORGAL = 38 ! anthropogenic SOA
119 INTEGER, PARAMETER :: LORGPL = 39 ! primary organic aerosols
120 INTEGER, PARAMETER :: LORGBL = 40 ! biogenic SOA
121 INTEGER, PARAMETER :: LECL = 41 ! elemental carbon
125 !-------------------------------------------------------------------------------
127 subroutine sorgam_aqchem_driver( &
128 id, ktau, ktauc, dtstepc, config_flags, &
129 p_phy, t_phy, rho_phy, alt, dz8w, &
131 gas_aqfrac, numgas_aqfrac, &
132 ids,ide, jds,jde, kds,kde, &
133 ims,ime, jms,jme, kms,kme, &
134 its,ite, jts,jte, kts,kte )
136 use module_ctrans_aqchem, only: aqchem
138 use module_configure, only: grid_config_rec_type
140 use module_state_description, only: &
174 !use module_data_sorgam, only: cw_phase, nphase_aer
183 ! ktau - time step number
184 ! ktauc - gas and aerosol chemistry time step number
185 ! numgas_aqfrac - last dimension of gas_aqfrac
187 ! [ids:ide, kds:kde, jds:jde] - spatial (x,z,y) indices for 'domain'
188 ! [ims:ime, kms:kme, jms:jme] - spatial (x,z,y) indices for 'memory'
189 ! Most arrays that are arguments to chem_driver
190 ! are dimensioned with these spatial indices.
191 ! [its:ite, kts:kte, jts:jte] - spatial (x,z,y) indices for 'tile'
192 ! chem_driver and routines under it do calculations
193 ! over these spatial indices.
195 integer, intent(in) :: &
198 ids, ide, jds, jde, kds, kde, &
199 ims, ime, jms, jme, kms, kme, &
200 its, ite, jts, jte, kts, kte
202 ! Configuration and control parameters:
203 type(grid_config_rec_type), intent(in) :: config_flags
205 ! Time step for gas and aerosol chemistry(s):
206 real, intent(in) :: dtstepc
208 ! p_phy - air pressure (Pa)
209 ! t_phy - temperature (K)
210 ! rho_phy - moist air density (kg/m^3)
211 ! alt - dry air specific volume (m^3/kg)
212 ! dz8w - level height (m)
214 real, intent(in), dimension( ims:ime, kms:kme, jms:jme ) :: &
215 p_phy, t_phy, rho_phy, alt, dz8w
217 ! Mixing ratios of moisture species (water vapor,
218 ! cloud water, ...) (kg/kg for mass species, #/kg for number species):
220 real, intent(in), dimension( ims:ime, kms:kme, jms:jme, 1:num_moist ) :: moist
222 ! Mixing ratios of trace gas and aerosol species (ppm for gases,
223 ! ug/kg for aerosol mass species, #/kg for aerosol number species):
225 real, intent(inout), dimension( ims:ime, kms:kme, jms:jme, 1:num_chem ) :: chem
227 ! Fraction (0-1) of gas that is dissolved in cloud water:
229 real, intent(inout), dimension( ims:ime, kms:kme, jms:jme, numgas_aqfrac ) :: gas_aqfrac
235 real, dimension (ngas) :: gas ! Mixing ratio of gas phase species (in gas + liquid phase) (mol/mol)
236 real, dimension (naer) :: aerosol ! Mixing ratio of aerosol species (mass/number/surface area in liquid phase) (mol/mol, #/mol)
237 real, dimension (nliqs) :: liquid ! mol/liter
239 real, dimension (ngas) :: gaswdep ! mm mol/liter
240 real, dimension (naer) :: aerwdep ! mm mol/liter
241 real :: hpwdep ! mm mol/liter
243 real :: precip ! Precipitation rate (mm/h)
244 real :: airm ! Column air number density (mol/m2)
245 real :: rho_dry ! Dry air mass density (kg/m3)
246 real :: h2o_aq ! Liquid water content ! (kg/m3)
247 real :: h2o_total ! Total water content ! (kg/m3)
249 real :: alfa0 ! Scavenging coeffficient for Aitken aerosol number
250 real :: alfa2 ! Scavenging coeffficient for Aitken aerosol surface area
251 real :: alfa3 ! Scavenging coeffficient for Aitken aerosol mass
255 integer :: cw_phase, nphase_aer
257 ! Other local variables
260 integer :: it, jt, kt
265 ! Check that cw_phase is active
267 !!! Get cw_phase and nphase_aer
268 IF (config_flags%chem_opt==109) THEN
269 CALL get_cwphase_soa_vbs(config_flags,cw_phase,nphase_aer)
271 CALL get_cwphase_sorgam(config_flags,cw_phase,nphase_aer)
274 if ((cw_phase .le. 0) .or. (cw_phase .gt. nphase_aer)) then
275 write(*,*) '*** module_sorgam_aqchem - cw_phase not active'
279 ! write(*,'(a,8(1x,i6))') 'entering module_sorgam_aqchem - ktau =', ktau
281 ! We set the precipitation rate and aerosol scavenging rates to zero,
282 ! in order to prevent wet scavenging in AQCHEM (it is treated elswhere):
290 ! Wet scavenging arrays
302 if (moist(it,kt,jt,p_qc).gt.qcldwtr_cutoff) then
304 ! Column air number density in layer:
305 airm = 1000.0*rho_phy(it,kt,jt)*dz8w(it,kt,jt)/mwdry ! mol/m2
307 ! Dry air mass density
308 rho_dry = 1.0/alt(it,kt,jt) ! kg/m3
310 ! Liquid water content:
311 h2o_aq = moist(it,kt,jt,p_qc)*rho_dry ! (kg/m3)
313 ! Total water content:
314 h2o_total = (moist(it,kt,jt,p_qc)+moist(it,kt,jt,p_qv))*rho_dry ! (kg/m3)
316 ! Gas phase concentrations before aqueous phase chemistry
317 ! (with units conversion ppm -> mol/mol)
321 ! if (p_co2 .gt. 1) then
322 ! gas(lco2) = chem(it,kt,jt,p_co2)*1.0e-6
328 if (p_so2 .gt. 1) gas(lso2) = chem(it,kt,jt,p_so2)*1.0e-6
329 if (p_hno3 .gt. 1) gas(lhno3) = chem(it,kt,jt,p_hno3)*1.0e-6
330 if (p_n2o5 .gt. 1) gas(ln2o5) = chem(it,kt,jt,p_n2o5)*1.0e-6
331 if (p_nh3 .gt. 1) gas(lnh3) = chem(it,kt,jt,p_nh3)*1.0e-6
332 if (p_h2o2 .gt. 1) gas(lh2o2) = chem(it,kt,jt,p_h2o2)*1.0e-6
333 if (p_o3 .gt. 1) gas(lo3) = chem(it,kt,jt,p_o3)*1.0e-6
334 if (p_sulf .gt. 1) gas(lh2so4) = chem(it,kt,jt,p_sulf)*1.0e-6
336 if (config_flags%chem_opt==CB05_SORG_AQ_KPP) then
337 if (p_facd .gt. 1) gas(lfoa) = chem(it,kt,jt,p_facd)*1.0e-6
338 if (p_mepx .gt. 1) gas(lmhp) = chem(it,kt,jt,p_mepx)*1.0e-6
339 if (p_pacd .gt. 1) gas(lpaa) = chem(it,kt,jt,p_pacd)*1.0e-6
341 if (p_ora1 .gt. 1) gas(lfoa) = chem(it,kt,jt,p_ora1)*1.0e-6
342 if (p_op1 .gt. 1) gas(lmhp) = chem(it,kt,jt,p_op1)*1.0e-6
343 if (p_paa .gt. 1) gas(lpaa) = chem(it,kt,jt,p_paa)*1.0e-6
346 ! Aerosol mass concentrations before aqueous phase chemistry
347 ! (with units conversion ug/kg -> mol/mol). Although AQCHEM
348 ! accounts for much of the aerosol compounds in MADE, they are
349 ! not treated at the moment by AQCHEM, as the mapping between
350 ! the organic compound groups in MADE and AQCHEM is not obvious.
354 aerosol(lso4akn) = chem(it,kt,jt,p_so4cwi)*1.0e-9*mwdry/mwso4 ! Aitken mode sulfate
355 aerosol(lnh4akn) = chem(it,kt,jt,p_nh4cwi)*1.0e-9*mwdry/mwnh4 ! Aitken mode ammonium
356 aerosol(lno3akn) = chem(it,kt,jt,p_no3cwi)*1.0e-9*mwdry/mwno3 ! Aitken mode nitrate
357 ! aerosol(lnaakn) = chem(it,kt,jt,p_nacwi)*1.0e-9*mwdry/mwna ! Aitken mode Na
358 ! aerosol(lclakn) = chem(it,kt,jt,p_clcwi)*1.0e-9*mwdry/mwcl ! Aitken mode Cl
360 aerosol(lorgaakn) = 0.0 ! Aitken mode anthropogenic SOA
361 aerosol(lorgpakn) = 0.0 ! Aitken mode primary organic aerosol
362 aerosol(lorgbakn) = 0.0 ! Aitken mode biogenic SOA
363 aerosol(lecakn) = 0.0 ! Aitken mode elemental carbon
364 aerosol(lpriakn) = 0.0 ! Aitken mode primary aerosol
366 aerosol(lso4acc) = chem(it,kt,jt,p_so4cwj)*1.0e-9*mwdry/mwso4 ! Accumulation mode sulfate
367 aerosol(lnh4acc) = chem(it,kt,jt,p_nh4cwj)*1.0e-9*mwdry/mwnh4 ! Accumulation mode ammonium
368 aerosol(lno3acc) = chem(it,kt,jt,p_no3cwj)*1.0e-9*mwdry/mwno3 ! Accumulation mode nitrate
369 aerosol(lnaacc) = chem(it,kt,jt,p_nacwj)*1.0e-9*mwdry/mwna ! Accumulation mode Na
370 aerosol(lclacc) = chem(it,kt,jt,p_clcwj)*1.0e-9*mwdry/mwcl ! Accumulation mode Cl
372 aerosol(lorgaacc) = 0.0 ! Accumulation mode anthropogenic SOA
373 aerosol(lorgpacc) = 0.0 ! Accumulation mode primary organic aerosol
374 aerosol(lorgbacc) = 0.0 ! Accumulation mode biogenic SOA
375 aerosol(lecacc) = 0.0 ! Accumulation mode elemental carbon
376 aerosol(lpriacc) = 0.0 ! Accumulation mode primary aerosol
378 ! aerosol(lso4cor) = chem(it,kt,jt,p_so4cwk)*1.0e-9*mwdry/mwso4 ! Coarse mode sulfate
379 ! aerosol(lno3cor) = chem(it,kt,jt,p_no3cwk)*1.0e-9*mwdry/mwno3 ! Coarse mode nitrate
380 aerosol(lnacor) = 0.0 ! Coarse mode Na
381 aerosol(lclcor) = 0.0 ! Coarse mode Cl
382 aerosol(lpricor) = 0.0 ! Coarse mode primary aerosol
384 !based on CMAQ prescribed Fe/Mn
385 aerosol(LA3FE) = 0.01*alt(it,kt,jt)*1.0e-9*mwdry/55.8
386 aerosol(LB2MN) = 0.005*alt(it,kt,jt)*1.0e-9*mwdry/54.9
388 ! Liquid phase concentrations
410 ! Gas phase concentrations after aqueous phase chemistry
411 ! (with units conversion mol/mol -> ppm)
413 ! if (p_co2 .gt. 1) chem(it,kt,jt,p_co2) = gas(lco2)*1.0e6
414 if (p_so2 .gt. 1) chem(it,kt,jt,p_so2) = gas(lso2)*1.0e6
415 if (p_hno3 .gt. 1) chem(it,kt,jt,p_hno3) = gas(lhno3)*1.0e6
416 if (p_n2o5 .gt. 1) chem(it,kt,jt,p_n2o5) = gas(ln2o5)*1.0e6
417 if (p_nh3 .gt. 1) chem(it,kt,jt,p_nh3) = gas(lnh3)*1.0e6
418 if (p_h2o2 .gt. 1) chem(it,kt,jt,p_h2o2) = gas(lh2o2)*1.0e6
419 if (p_o3 .gt. 1) chem(it,kt,jt,p_o3) = gas(lo3)*1.0e6
420 if (p_sulf .gt. 1) chem(it,kt,jt,p_sulf) = gas(lh2so4)*1.0e6
422 if (config_flags%chem_opt==CB05_SORG_AQ_KPP) then
423 if (p_facd .gt. 1) chem(it,kt,jt,p_facd) = gas(lfoa)*1.0e6
424 if (p_mepx .gt. 1) chem(it,kt,jt,p_mepx) = gas(lmhp)*1.0e6
425 if (p_pacd .gt. 1) chem(it,kt,jt,p_pacd) = gas(lpaa)*1.0e6
427 if (p_ora1 .gt. 1) chem(it,kt,jt,p_ora1) = gas(lfoa)*1.0e6
428 if (p_op1 .gt. 1) chem(it,kt,jt,p_op1) = gas(lmhp)*1.0e6
429 if (p_paa .gt. 1) chem(it,kt,jt,p_paa) = gas(lpaa)*1.0e6
432 ! Aerosol mass concentrations after aqueous phase chemistry
433 ! (with units conversion mol/mol -> ug/kg)
435 chem(it,kt,jt,p_so4cwi) = aerosol(lso4akn) *1.0e9/mwdry*mwso4 ! Aitken mode sulfate
436 chem(it,kt,jt,p_nh4cwi) = aerosol(lnh4akn) *1.0e9/mwdry*mwnh4 ! Aitken mode ammonium
437 chem(it,kt,jt,p_no3cwi) = aerosol(lno3akn) *1.0e9/mwdry*mwno3 ! Aitken mode nitrate
438 chem(it,kt,jt,p_nacwi) = aerosol(lnaakn) *1.0e9/mwdry*mwna ! Aitken mode Na
439 chem(it,kt,jt,p_clcwi) = aerosol(lclakn) *1.0e9/mwdry*mwcl ! Aitken mode Cl
441 ! chem(it,kt,jt,........) = aerosol(lorgaakn)*1.0e9/mwdry*..... ! Aitken mode anthropogenic SOA
442 ! chem(it,kt,jt,........) = aerosol(lorgpakn)*1.0e9/mwdry*..... ! Aitken mode primary organic aerosol
443 ! chem(it,kt,jt,........) = aerosol(lorgbakn)*1.0e9/mwdry*..... ! Aitken mode biogenic SOA
444 ! chem(it,kt,jt,........) = aerosol(lecakn) *1.0e9/mwdry*..... ! Aitken mode elemental carbon
445 ! chem(it,kt,jt,........) = aerosol(lpriakn) *1.0e9/mwdry*..... ! Aitken mode primary aerosol
447 chem(it,kt,jt,p_so4cwj) = aerosol(lso4acc) *1.0e9/mwdry*mwso4 ! Accumulation mode sulfate
448 chem(it,kt,jt,p_nh4cwj) = aerosol(lnh4acc) *1.0e9/mwdry*mwnh4 ! Accumulation mode ammonium
449 chem(it,kt,jt,p_no3cwj) = aerosol(lno3acc) *1.0e9/mwdry*mwno3 ! Accumulation mode nitrate
450 chem(it,kt,jt,p_nacwj) = aerosol(lnaacc) *1.0e9/mwdry*mwna ! Accumulation mode Na
451 chem(it,kt,jt,p_clcwj) = aerosol(lclacc) *1.0e9/mwdry*mwcl ! Accumulation mode Cl
453 ! chem(it,kt,jt,........) = aerosol(lorgaacc)*1.0e9/mwdry*..... ! Accumulation mode anthropogenic SOA
454 ! chem(it,kt,jt,........) = aerosol(lorgpacc)*1.0e9/mwdry*..... ! Accumulation mode primary organic aerosol
455 ! chem(it,kt,jt,........) = aerosol(lorgbacc)*1.0e9/mwdry*..... ! Accumulation mode biogenic SOA
456 ! chem(it,kt,jt,........) = aerosol(lecacc) *1.0e9/mwdry*..... ! Accumulation mode elemental carbon
457 ! chem(it,kt,jt,........) = aerosol(lpriacc) *1.0e9/mwdry*..... ! Accumulation mode primary aerosol
459 ! chem(it,kt,jt,p_so4cwk) = aerosol(lso4cor) *1.0e9/mwdry*mwso4 ! Coarse mode sulfate
460 ! chem(it,kt,jt,p_no3cwk) = aerosol(lno3cor) *1.0e9/mwdry*mwno3 ! Coarse mode nitrate
461 ! chem(it,kt,jt,........) = aerosol(lnacor) *1.0e9/mwdry*..... ! Coarse mode Na
462 ! chem(it,kt,jt,........) = aerosol(lclcor) *1.0e9/mwdry*..... ! Coarse mode Cl
463 ! chem(it,kt,jt,........) = aerosol(lpricor) *1.0e9/mwdry*..... ! Coarse mode primary aerosol
465 ! Fraction of gas phase species dissolved in liquid water:
467 gas_aqfrac(it,kt,jt,:) = 0.0
469 conv_factor = 1.0E-3*moist(it,kt,jt,p_qc)*mwdry ! mol/liter -> mol/mol
471 ! if (p_co2 .gt. 1 .and. gas(lco2) .gt. epsilc) gas_aqfrac(it,kt,jt,p_co2) = conv_factor*liquid(lco2l)/gas(lco2)
472 if (p_so2 .gt. 1 .and. gas(lso2) .gt. epsilc) gas_aqfrac(it,kt,jt,p_so2) = conv_factor*liquid(lso2l)/gas(lso2)
473 if (p_nh3 .gt. 1 .and. gas(lnh3) .gt. epsilc) gas_aqfrac(it,kt,jt,p_nh3) = conv_factor*liquid(lnh3l)/gas(lnh3)
474 if (p_hno3 .gt. 1 .and. gas(lhno3) .gt. epsilc) gas_aqfrac(it,kt,jt,p_hno3) = conv_factor*liquid(lhno3l)/gas(lhno3)
475 if (p_h2o2 .gt. 1 .and. gas(lh2o2) .gt. epsilc) gas_aqfrac(it,kt,jt,p_h2o2) = conv_factor*liquid(lh2o2l)/gas(lh2o2)
476 if (p_o3 .gt. 1 .and. gas(lo3) .gt. epsilc) gas_aqfrac(it,kt,jt,p_o3) = conv_factor*liquid(lo3l)/gas(lo3)
478 if (config_flags%chem_opt==CB05_SORG_AQ_KPP) then
479 if (p_facd .gt. 1 .and. gas(lfoa) .gt. epsilc) gas_aqfrac(it,kt,jt,p_facd) = conv_factor*liquid(lfoal)/gas(lfoa)
480 if (p_mepx .gt. 1 .and. gas(lmhp) .gt. epsilc) gas_aqfrac(it,kt,jt,p_mepx) = conv_factor*liquid(lmhpl)/gas(lmhp)
481 if (p_pacd .gt. 1 .and. gas(lpaa) .gt. epsilc) gas_aqfrac(it,kt,jt,p_pacd) = conv_factor*liquid(lpaal)/gas(lpaa)
483 if (p_ora1 .gt. 1 .and. gas(lfoa) .gt. epsilc) gas_aqfrac(it,kt,jt,p_ora1) = conv_factor*liquid(lfoal)/gas(lfoa)
484 if (p_op1 .gt. 1 .and. gas(lmhp) .gt. epsilc) gas_aqfrac(it,kt,jt,p_op1) = conv_factor*liquid(lmhpl)/gas(lmhp)
485 if (p_paa .gt. 1 .and. gas(lpaa) .gt. epsilc) gas_aqfrac(it,kt,jt,p_paa) = conv_factor*liquid(lpaal)/gas(lpaa)
494 end subroutine sorgam_aqchem_driver
497 subroutine get_cwphase_sorgam(config_flags,cw,nphase)
499 use module_data_sorgam, only: cw_phase, nphase_aer
500 use module_configure, only: grid_config_rec_type
504 ! Configuration and control parameters:
505 type(grid_config_rec_type), intent(in) :: config_flags
506 ! Out paramaeters for cw_phase
507 integer, intent(out) :: cw,nphase
512 end subroutine get_cwphase_sorgam
515 subroutine get_cwphase_soa_vbs(config_flags,cw,nphase)
517 use module_data_soa_vbs, only: cw_phase, nphase_aer
518 use module_configure, only: grid_config_rec_type
522 ! Configuration and control parameters:
523 type(grid_config_rec_type), intent(in) :: config_flags
524 ! Out paramaeters for cw_phase
525 integer, intent(out) :: cw,nphase
530 end subroutine get_cwphase_soa_vbs
531 end module module_sorgam_aqchem