Adjusting include paths for removal of redundant code
[WRF.git] / chem / module_sorgam_aqchem.F
blob4622842d58fc578c38d2ea88a7aff8728196c451
1 module module_sorgam_aqchem
2   
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.
5   !
6   ! jan.kazil@noaa.gov 2011-08-14 17:15:39 -06:00
7   
8   REAL, PARAMETER :: epsilc = 1.0E-16
9   
10   REAL, PARAMETER :: qcldwtr_cutoff = 1.0e-6 ! Cloud threshold (kg/kg)
11   
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)
18   
19   ! AQCHEM parameters
20   
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
24   
25   ! Indices for the AQCHEM array GAS
26   
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
39   
40   ! Indices for the AQCHEM array AEROSOL
41   
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)
78         
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
122   
123   contains
124   
125 !-------------------------------------------------------------------------------
126   
127         subroutine sorgam_aqchem_driver(   &
128             id, ktau, ktauc, dtstepc, config_flags,   &
129             p_phy, t_phy, rho_phy, alt, dz8w,  &
130             moist, chem,   &
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 )
135     
136     use module_ctrans_aqchem, only: aqchem
137         
138         use module_configure, only: grid_config_rec_type
139     
140     use module_state_description, only: &
141       num_chem, &
142                 num_moist, &
143 !      p_co2, &
144       p_so2, &
145       p_sulf, &
146       p_nh3, &
147       p_h2o2, &
148       p_o3, &
149       p_op1, &
150       p_ora1, &
151       p_paa, &
152       p_hno3, &
153       p_n2o5, &
154       p_so4cwi, &
155       p_nh4cwi, &
156       p_no3cwi, &
157       p_so4cwj, &
158       p_nh4cwj, &
159       p_no3cwj, &
160       p_nacwi, &
161       p_nacwj, &
162       p_clcwi, &
163       p_clcwj, &
164 !      p_so4cwk, &
165 !      p_no3cwk, &
166       p_qv, &
167       p_qc, &
168        p_facd, &
169        p_mepx, &
170        p_pacd, &
171        CB05_SORG_AQ_KPP
173 !!! TUCCELLA    
174     !use module_data_sorgam, only: cw_phase, nphase_aer
176     implicit none
177     
178     !
179     ! Arguments
180     !
181     
182         ! id - domain index
183     ! ktau - time step number
184     ! ktauc - gas and aerosol chemistry time step number
185     ! numgas_aqfrac - last dimension of gas_aqfrac
186     
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.
194     
195         integer, intent(in) ::   &
196                 id, ktau, ktauc,   &
197                 numgas_aqfrac,   &
198                 ids, ide, jds, jde, kds, kde,   &
199                 ims, ime, jms, jme, kms, kme,   &
200                 its, ite, jts, jte, kts, kte
201     
202     ! Configuration and control parameters:
203     type(grid_config_rec_type), intent(in) :: config_flags
204     
205     ! Time step for gas and aerosol chemistry(s):
206     real, intent(in) :: dtstepc
207     
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)
213     
214     real, intent(in), dimension( ims:ime, kms:kme, jms:jme ) :: &
215       p_phy, t_phy, rho_phy, alt, dz8w
216     
217     ! Mixing ratios of moisture species (water vapor,
218     ! cloud water, ...) (kg/kg for mass species, #/kg for number species):
219     
220     real, intent(in), dimension( ims:ime, kms:kme, jms:jme, 1:num_moist ) :: moist
221     
222     ! Mixing ratios of trace gas and aerosol species (ppm for gases, 
223     !   ug/kg for aerosol mass species, #/kg for aerosol number species):
224     
225     real, intent(inout), dimension( ims:ime, kms:kme, jms:jme, 1:num_chem ) :: chem
226     
227     ! Fraction (0-1) of gas that is dissolved in cloud water:
228     
229     real, intent(inout), dimension( ims:ime, kms:kme, jms:jme, numgas_aqfrac ) :: gas_aqfrac
230     
231     !
232     ! I/O for AQCHEM
233     !
234     
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
238     
239     real, dimension (ngas) :: gaswdep ! mm mol/liter
240     real, dimension (naer) :: aerwdep ! mm mol/liter
241     real                   :: hpwdep  ! mm mol/liter
242     
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)
248     
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
253     !!!! TUCCELLA 
254     ! For cw phase
255     integer :: cw_phase, nphase_aer
256     !
257     ! Other local variables
258     !
259     
260     integer :: it, jt, kt
261     
262     real :: conv_factor
263    
264 !!! TUCCELLA 
265     ! Check that cw_phase is active
266     
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)
270     ELSE
271        CALL get_cwphase_sorgam(config_flags,cw_phase,nphase_aer)
272     END IF
274     if ((cw_phase .le. 0) .or. (cw_phase .gt. nphase_aer)) then
275       write(*,*) '*** module_sorgam_aqchem - cw_phase not active'
276       return
277     endif
278     
279 !       write(*,'(a,8(1x,i6))') 'entering module_sorgam_aqchem - ktau =', ktau
280     
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):
283     
284     precip = 0.0 ! mm/hr
285     
286     alfa0 = 0.0
287     alfa2 = 0.0
288     alfa3 = 0.0
289     
290     ! Wet scavenging arrays
291     
292     gaswdep(:) = 0.0
293     aerwdep(:) = 0.0
294     hpwdep  = 0.0
295     
296     ! Loop over tile
297     
298     do jt = jts, jte
299         do it = its, ite
300         do kt = kts, kte
301     
302       if (moist(it,kt,jt,p_qc).gt.qcldwtr_cutoff) then
303         
304         ! Column air number density in layer:
305         airm = 1000.0*rho_phy(it,kt,jt)*dz8w(it,kt,jt)/mwdry ! mol/m2
306         
307         ! Dry air mass density
308         rho_dry = 1.0/alt(it,kt,jt) ! kg/m3
309         
310         ! Liquid water content:
311         h2o_aq = moist(it,kt,jt,p_qc)*rho_dry ! (kg/m3)
312         
313         ! Total water content:
314         h2o_total = (moist(it,kt,jt,p_qc)+moist(it,kt,jt,p_qv))*rho_dry ! (kg/m3)
315         
316         ! Gas phase concentrations before aqueous phase chemistry
317         ! (with units conversion ppm -> mol/mol)
318         
319         gas(:) = 0.0
320         
321 !        if (p_co2 .gt. 1)  then
322 !          gas(lco2) = chem(it,kt,jt,p_co2)*1.0e-6
323 !        else 
324 !              gas(lco2) = 380.0
325            gas(lco2) = 380.0e-6
326 !        endif
327         
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
340         else
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
344         end if
345         
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.
351         
352         aerosol(:) = 0.0
353         
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
359         
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
365         
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
371         
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
377         
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
389         
390         liquid(:) = 0.0
391         
392         call aqchem( &
393           t_phy(it,kt,jt), &
394           p_phy(it,kt,jt), &
395           dtstepc, &
396           precip, &
397           h2o_aq, &
398           h2o_total, &
399           airm, &
400           alfa0, &
401           alfa2, &
402           alfa3, &
403           gas, &
404           aerosol, &
405           liquid, &
406           gaswdep, &
407           aerwdep, &
408           hpwdep)
409         
410         ! Gas phase concentrations after aqueous phase chemistry
411         ! (with units conversion mol/mol -> ppm)
412         
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
426         else
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
430         end if
431     
432         ! Aerosol mass concentrations after aqueous phase chemistry
433         ! (with units conversion mol/mol -> ug/kg)
434         
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
440         
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
446         
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
452         
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
458                                   
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
464         
465         ! Fraction of gas phase species dissolved in liquid water:
466         
467         gas_aqfrac(it,kt,jt,:) = 0.0
468         
469         conv_factor = 1.0E-3*moist(it,kt,jt,p_qc)*mwdry ! mol/liter -> mol/mol
470         
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)
482         else
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)
486         end if
487         
488       endif
489     
490     enddo
491     enddo
492     enddo
493     
494         end subroutine sorgam_aqchem_driver
496 !!! TUCCELLA
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
502         implicit none
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
509         cw = cw_phase
510         nphase = nphase_aer
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
520         implicit none
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
527         cw = cw_phase
528         nphase = nphase_aer
530         end subroutine get_cwphase_soa_vbs  
531 end module module_sorgam_aqchem