1 module module_data_mosaic_aero
2 !-----------------------------------------------------------------------
4 ! 2015-06-09 r.c.easter - changes to the MOSAIC box model version for use in WRF-Chem
6 ! nbin_a_max is a parameter
8 !-----------------------------------------------------------------------
11 use module_data_mosaic_kind, only: r8
16 ! 09-jan-07 raz - major clean up of variables
17 ! 31-jul-06 raz - implemented Li and Lu (2001) surface tension model
18 ! 19-apr-06 raz - updated max nh4 concentration constraints
19 ! 11-apr-05 raz - added SOA based on SORGAM mechanism
20 ! 07-jan-05 raz - updated and cleaned up variable lists
21 ! 08-jul-03 raz - updated many variables
22 ! 07-aug-02 rce - this is rahul's latest version from freshair
23 ! 19-aug-02 raz - declared mass_soluble_a and kg as real
24 ! 07-oct-02 raz - declared zc and za as integer
25 ! 09-oct-02 raz - explicitly declared all variables
26 ! 29-oct-02 raz - defined naercomp as the total number of aerosol compounds
27 !----------------------------------------------------------------------
29 ! number of aerosol bins
30 ! integer, save :: nbin_a_max = -999888777 ! maximum number of aerosol bins !BSINGH - 05/28/2013(RCE updates)
31 integer, parameter :: nbin_a_max = 8 ! maximum number of aerosol bins !BSINGH - 05/28/2013(RCE updates)
33 integer, save :: nbin_a = -999888777 ! in-use number of aerosol bins !BSINGH - namelist variable
35 ! mosaic-specific parameters
36 integer, parameter :: ngas_ioa = 4+1 ! inorganic volatile aerosol species that have a gaseous counterpart
38 ! SOA is treated using a simplified approach for anthropogenic and biomass burning species based on Hodzic and Jimenez, GMD, 2011
39 ! Alma added 2 smp species - just before the traditional ant1_c
40 ! also 10 new VBS species
41 integer, parameter :: ngas_soa = 68+2+16+10 ! volatile soa species that have a gaseous counterpart
43 integer, parameter :: ngas_het = 2+2
44 integer, parameter :: ngas_volatile = ngas_ioa + ngas_soa + 2 ! OH and glyoxal at the end
45 integer, parameter :: ngas_aerchtot = ngas_volatile + ngas_het ! total number of gases used in mosaic aerchemistry
47 integer, parameter :: naer = 11+68+2+16+5+10 ! num of chemical species per bin = 11*(inorg+oc+bc+oin) + (68+2+16)*soa + 5*glysoa + 10*VBS
49 integer, parameter :: naercomp = 26+68+2+16+5+10 ! 26*(electrolytes + oc,bc,oin) + (68+2+16)*soa + 5*glysoa + 10*VBS
51 integer, parameter :: nelectrolyte = 22+1 ! num of electrolytes
52 integer, parameter :: nsalt = 12+3 ! num of soluble salts
53 integer, parameter :: nsoluble= 16+4 ! num of soluble electrolytes
54 integer, parameter :: ncation = 4 ! num of cations
55 integer, parameter :: nanion = 4+1 ! num of anions
57 integer, parameter :: nrxn_aer_gl = 4 ! num of gas-liquid equilibria
58 integer, parameter :: nrxn_aer_ll = 3 ! num of liquid-liquid equilibria
59 integer, parameter :: nrxn_aer_sg = 2 ! num of solid-gas equilibria
60 integer, parameter :: nrxn_aer_sl = nsalt! num of solid-liquid equilibria
62 integer, parameter :: mASTEM = 1 ! Adaptive Step Time-Split Euler Method
63 integer, parameter :: mLSODE = 2 ! LSODES integrator
64 integer, parameter :: mMODAL = 1 ! Modal size distribution framework
65 integer, parameter :: mUNSTRUCTURED = 2 ! "unstructured" size distribution framework
66 ! (no special organization of bins; no transfer of particles between bins)
67 integer, parameter :: mSECTIONAL = 3 ! Sectional size distribution framework
68 integer, parameter :: mON = 1 ! flag: ON
69 integer, parameter :: mOFF = 0 ! flag:OFF
70 integer, parameter :: mYES = mON ! flag: yes or true
71 integer, parameter :: mNO = mOFF ! flag: no or false
73 integer, parameter :: jsolid = 1
74 integer, parameter :: jliquid= 2
75 integer, parameter :: jtotal = 3
77 integer, parameter :: jhyst_lo = 0 ! lower hysteresis leg
78 integer, parameter :: jhyst_up = 1 ! upper hysteresis leg
79 integer, parameter :: jhyst_undefined = -1 ! undefined
81 ! values for mhyst_method
82 integer, parameter :: mhyst_uporlo_jhyst = 1
83 ! select upper/lower using "box method" involving jhyst_leg
84 ! *** this should only be used for box model applications
85 ! *** do not use with for transport model applications (cam5, wrf-chem, etc)
86 integer, parameter :: mhyst_uporlo_waterhyst = 2
87 ! select upper/lower using "3-d method" involving water_a_hyst
88 integer, parameter :: mhyst_force_up = 3 ! force upper leg
89 integer, parameter :: mhyst_force_lo = 4 ! force lower leg
91 real(r8), parameter :: xhyst_up_crustal_thresh = 0.30_r8
92 ! when rh_crystal < rh < rh_deliquesce and bin mass fraction of crustal species (oin, caco3, and caso4)
93 ! exceeds xhyst_up_crustal_thresh, the bin is not allowed to be on the upper hysteresis curve.
94 ! mineral dust is mostly externally mixed, so a minor fraction of mineral dust species
95 ! will most likely reside in a minor fraction of the particles of the bin,
96 ! and should not control the bin aerosol water. (value = 0.0 in previous versions of mosaic)
98 integer, parameter :: no_aerosol = 0 ! flag
99 integer, parameter :: all_solid = 1 ! flag
100 integer, parameter :: all_liquid = 2 ! flag
101 integer, parameter :: mixed = 3 ! flag
103 integer, parameter :: soluble = 1 ! flag
104 integer, parameter :: insoluble = 2 ! flag
106 integer, parameter :: MDRH_T_NUM = 63 !BSINGH - Number of entities in MDRH_T array
107 integer, parameter :: jsulf_poor_NUM = 211 !BSINGH - Number of entities in jsulf_poor array
108 integer, parameter :: jsulf_rich_NUM = 71 !BSINGH - Number of entities in jsulf_rich array
109 integer, parameter :: d_mdrh_DIM2 = 4 !BSINGH - Number of entities in d_MDRH 2nd dimension
110 ! real(r8), parameter :: mass_cutoff = 1.e-3 ! ng/m^3
111 real(r8), parameter :: mass_cutoff = 1.e-6 ! new value on 02-mar-2010
113 real(r8), parameter :: density_min_allow = 1.0 ! minimum allowed density (g/cc)
114 real(r8), parameter :: density_max_allow = 3.0 ! maximum allowed density (g/cc)
115 real(r8), parameter :: ah2o_max = 0.99 ! maximum water activity allowed in aerosol water uptake calculations
117 ! note - purpose of this data structure is to simplify passing new variables
118 ! into and out of the many mosaic routines
119 type :: mosaic_vars_aa_type
122 integer, dimension(6) :: hostgridinfo(6)
123 integer :: idiagbb_host
124 integer :: f_mos_fail
125 integer :: isteps_astem
126 integer :: isteps_astem_max
127 integer :: jastem_call
128 integer :: jastem_fail
129 integer :: jmesa_call
130 integer :: jmesa_fail
131 integer :: niter_mesa_max
132 integer :: nmax_astem
134 integer :: fix_astem_negative
135 logical :: flag_itr_kel
136 logical :: zero_water_flag
137 real(r8) :: cumul_steps_astem
138 real(r8) :: niter_mesa
140 real(r8), dimension(5,4) :: xnerr_astem_negative
141 integer, dimension(:), allocatable :: iter_mesa
142 end type mosaic_vars_aa_type
146 !----------------------------------------------------------------------
147 ! MOSAIC species indices
149 ! position of first soa species in aer and gas arrays
150 integer, save :: isoa_first
151 ! position of first soa species in comp_a and electrolyte arrays
152 integer, save :: jsoa_first
156 ih2so4_g, ihno3_g, ihcl_g, inh3_g, &
157 imsa_g, in2o5_g, iclno2_g, &
158 iaro1_g, iaro2_g, ialk1_g, iole1_g, & ! not sure about these
159 iapi1_g, iapi2_g, ilim1_g, ilim2_g ! not sure about these
163 iso4_a, ino3_a, icl_a, inh4_a, ico3_a, &
164 imsa_a, ina_a, ica_a, ioc_a, ibc_a, &
166 iaro1_a, iaro2_a, ialk1_a, iole1_a, & ! not sure about these
167 iapi1_a, iapi2_a, ilim1_a, ilim2_a ! not sure about these
169 ! aerosol elecctrolytes/compounds
171 jnh4so4, jlvcite, jnh4hso4, jnh4no3, jnh4cl, &
172 jna2so4, jna3hso4, jnahso4, jnano3, jnacl, &
173 jcaso4, jcano3, jcacl2, jcaco3, jh2so4, &
174 jhno3, jhcl, jhhso4, &
175 jnh4msa, jnamsa, jcamsa2, jmsa, &
176 joc, jbc, join, jh2o, &
177 jaro1, jaro2, jalk1, jole1, & ! not sure about these
178 japi1, japi2, jlim1, jlim2 ! not sure about these
182 jc_h, jc_nh4, jc_na, jc_ca, &
183 ja_hso4, ja_so4, ja_no3, ja_cl, ja_msa ! , ja_co3
187 ipcg1_b_c_g, ipcg2_b_c_g, ipcg3_b_c_g, ipcg4_b_c_g, &
188 ipcg5_b_c_g, ipcg6_b_c_g, ipcg7_b_c_g, ipcg8_b_c_g, ipcg9_b_c_g, &
189 ipcg1_b_o_g, ipcg2_b_o_g, ipcg3_b_o_g, ipcg4_b_o_g, &
190 ipcg5_b_o_g, ipcg6_b_o_g, ipcg7_b_o_g, ipcg8_b_o_g, ipcg9_b_o_g, &
191 iopcg1_b_c_g, iopcg2_b_c_g, iopcg3_b_c_g, iopcg4_b_c_g, &
192 iopcg5_b_c_g, iopcg6_b_c_g, iopcg7_b_c_g, iopcg8_b_c_g, &
193 iopcg1_b_o_g, iopcg2_b_o_g, iopcg3_b_o_g, iopcg4_b_o_g, &
194 iopcg5_b_o_g, iopcg6_b_o_g, iopcg7_b_o_g, iopcg8_b_o_g, &
195 ipcg1_f_c_g, ipcg2_f_c_g, ipcg3_f_c_g, ipcg4_f_c_g, &
196 ipcg5_f_c_g, ipcg6_f_c_g, ipcg7_f_c_g, ipcg8_f_c_g, ipcg9_f_c_g, &
197 ipcg1_f_o_g, ipcg2_f_o_g, ipcg3_f_o_g, ipcg4_f_o_g, &
198 ipcg5_f_o_g, ipcg6_f_o_g, ipcg7_f_o_g, ipcg8_f_o_g, ipcg9_f_o_g, &
199 iopcg1_f_c_g, iopcg2_f_c_g, iopcg3_f_c_g, iopcg4_f_c_g, &
200 iopcg5_f_c_g, iopcg6_f_c_g, iopcg7_f_c_g, iopcg8_f_c_g, &
201 iopcg1_f_o_g, iopcg2_f_o_g, iopcg3_f_o_g, iopcg4_f_o_g, &
202 iopcg5_f_o_g, iopcg6_f_o_g, iopcg7_f_o_g, iopcg8_f_o_g, &
203 iant1_c_g, iant2_c_g, iant3_c_g, iant4_c_g, &
204 iant1_o_g, iant2_o_g, iant3_o_g, iant4_o_g, &
205 ibiog1_c_g, ibiog2_c_g, ibiog3_c_g, ibiog4_c_g, &
206 ibiog1_o_g, ibiog2_o_g, ibiog3_o_g, ibiog4_o_g, &
208 iasoaX_g, iasoa1_g, iasoa2_g, iasoa3_g, iasoa4_g, &
209 ibsoaX_g, ibsoa1_g, ibsoa2_g, ibsoa3_g, ibsoa4_g, &
212 ! aerosol generic - soa vbs
214 ipcg1_b_c_a, ipcg2_b_c_a, ipcg3_b_c_a, ipcg4_b_c_a, &
215 ipcg5_b_c_a, ipcg6_b_c_a, ipcg7_b_c_a, ipcg8_b_c_a, ipcg9_b_c_a, &
216 ipcg1_b_o_a, ipcg2_b_o_a, ipcg3_b_o_a, ipcg4_b_o_a, &
217 ipcg5_b_o_a, ipcg6_b_o_a, ipcg7_b_o_a, ipcg8_b_o_a, ipcg9_b_o_a, &
218 iopcg1_b_c_a, iopcg2_b_c_a, iopcg3_b_c_a, iopcg4_b_c_a, &
219 iopcg5_b_c_a, iopcg6_b_c_a, iopcg7_b_c_a, iopcg8_b_c_a, &
220 iopcg1_b_o_a, iopcg2_b_o_a, iopcg3_b_o_a, iopcg4_b_o_a, &
221 iopcg5_b_o_a, iopcg6_b_o_a, iopcg7_b_o_a, iopcg8_b_o_a,&
222 ipcg1_f_c_a, ipcg2_f_c_a, ipcg3_f_c_a, ipcg4_f_c_a, &
223 ipcg5_f_c_a, ipcg6_f_c_a, ipcg7_f_c_a, ipcg8_f_c_a, ipcg9_f_c_a, &
224 ipcg1_f_o_a, ipcg2_f_o_a, ipcg3_f_o_a, ipcg4_f_o_a, &
225 ipcg5_f_o_a, ipcg6_f_o_a, ipcg7_f_o_a, ipcg8_f_o_a, ipcg9_f_o_a, &
226 iopcg1_f_c_a, iopcg2_f_c_a, iopcg3_f_c_a, iopcg4_f_c_a, &
227 iopcg5_f_c_a, iopcg6_f_c_a, iopcg7_f_c_a, iopcg8_f_c_a, &
228 iopcg1_f_o_a, iopcg2_f_o_a, iopcg3_f_o_a, iopcg4_f_o_a, &
229 iopcg5_f_o_a, iopcg6_f_o_a, iopcg7_f_o_a, iopcg8_f_o_a, &
231 iglysoa_r1_a, iglysoa_r2_a, iglysoa_oh_a, iglysoa_sfc_a, iglysoa_nh4_a, &
232 iant1_c_a, iant2_c_a, iant3_c_a, iant4_c_a,&
233 iant1_o_a, iant2_o_a, iant3_o_a, iant4_o_a,&
234 ibiog1_c_a, ibiog2_c_a, ibiog3_c_a, ibiog4_c_a, &
235 ibiog1_o_a, ibiog2_o_a, ibiog3_o_a, ibiog4_o_a, &
236 iasoaX_a, iasoa1_a, iasoa2_a, iasoa3_a, iasoa4_a, &
237 ibsoaX_a, ibsoa1_a, ibsoa2_a, ibsoa3_a, ibsoa4_a
239 ! aerosol elecctrolytes/compounds - soa vbs
241 jpcg1_b_c, jpcg2_b_c, jpcg3_b_c, jpcg4_b_c, &
242 jpcg5_b_c, jpcg6_b_c, jpcg7_b_c, jpcg8_b_c, jpcg9_b_c, &
243 jpcg1_b_o, jpcg2_b_o, jpcg3_b_o, jpcg4_b_o, &
244 jpcg5_b_o, jpcg6_b_o, jpcg7_b_o, jpcg8_b_o, jpcg9_b_o, &
245 jopcg1_b_c, jopcg2_b_c, jopcg3_b_c, jopcg4_b_c, &
246 jopcg5_b_c, jopcg6_b_c, jopcg7_b_c, jopcg8_b_c, &
247 jopcg1_b_o, jopcg2_b_o, jopcg3_b_o, jopcg4_b_o, &
248 jopcg5_b_o, jopcg6_b_o, jopcg7_b_o, jopcg8_b_o, &
249 jpcg1_f_c, jpcg2_f_c, jpcg3_f_c, jpcg4_f_c, &
250 jpcg5_f_c, jpcg6_f_c, jpcg7_f_c, jpcg8_f_c, jpcg9_f_c, &
251 jpcg1_f_o, jpcg2_f_o, jpcg3_f_o, jpcg4_f_o, &
252 jpcg5_f_o, jpcg6_f_o, jpcg7_f_o, jpcg8_f_o, jpcg9_f_o, &
253 jopcg1_f_c, jopcg2_f_c, jopcg3_f_c, jopcg4_f_c, &
254 jopcg5_f_c, jopcg6_f_c, jopcg7_f_c, jopcg8_f_c, &
255 jopcg1_f_o, jopcg2_f_o, jopcg3_f_o, jopcg4_f_o, &
256 jopcg5_f_o, jopcg6_f_o, jopcg7_f_o, jopcg8_f_o, &
258 jglysoa_r1, jglysoa_r2, jglysoa_oh, jglysoa_sfc, jglysoa_nh4, &
259 jant1_c, jant2_c, jant3_c, jant4_c, &
260 jant1_o, jant2_o, jant3_o, jant4_o, &
261 jbiog1_c, jbiog2_c, jbiog3_c, jbiog4_c, &
262 jbiog1_o, jbiog2_o, jbiog3_o, jbiog4_o, &
263 jasoaX, jasoa1, jasoa2, jasoa3, jasoa4, &
264 jbsoaX, jbsoa1, jbsoa2, jbsoa3, jbsoa4
266 !----------------------------------------------------------------------
269 ! NOTES on use_cam5mam_soa_params and use_cam5mam_accom_coefs
270 ! pure MOSAIC box model runs - these should be 0
271 ! pure CAM5 runs - these can be 0 or 1 (usually 1)
272 ! their values are set in module_mosaic_cam_init.F90
273 ! MOSAIC box model runs that emulate CAM5 behavior (e.g. for debugging etc.) -
274 ! their values should match those in the CAM5 run (usually 1)
275 integer, save :: use_cam5mam_soa_params = 0 ! if >0, use cam5-mam soa/soag parameter values
276 integer, save :: use_cam5mam_accom_coefs = 0 ! if >0, use cam5-mam accomodation coefficient values
279 !it_mosaic, & ! time-step index
280 !irepeat_mosaic, & ! "repeat" index
281 !iclm_aer, & ! i-location
282 !jclm_aer, & ! j-location
283 !kclm_aer, & ! k-location
284 mclm_aer, & ! m-subarea
285 mGAS_AER_XFER, & ! flag: mON, mOFF
286 mDYNAMIC_SOLVER, & ! flag: mASTEM, mLSODE
287 mSIZE_FRAMEWORK, & ! flag: mMODAL, mSECTIONAL
288 mhyst_method, & ! flag: 0, 1, 2
289 maersize_init_flag1, & ! flag: 0, 1, 2
290 mcoag_flag1, & ! flag: 0, 1, 2, ...
291 mmovesect_flag1, & ! flag: 0, 1, 2, ...
292 mnewnuc_flag1, & ! flag: 0, 1, 2, ...
293 msectional_flag1, & ! flag: 0, 1, 2, ...
294 msectional_flag2, & ! flag: 0, 1, 2, ...
295 method_bcfrac, & ! flag: ...
296 method_kappa, & ! flag: ...
297 ifreq_coag, & ! frequency at which coagulation is done
300 msoa_flag1, & ! flag: 0/neg = no soa, 1 = default, 1000 = vbs
301 msoa_vbs_info(9) ! flags controlling vbs soa mechanism in wrfchem
303 !jaerosolstate(nbin_a_max), & ! flag: no_aerosol, all_solid, all_liquid, mixed
304 !jaerosolstate_bgn(nbin_a_max)!, & ! flag: no_aerosol, all_solid, all_liquid, mixed
305 !jphase(nbin_a_max), & ! phase index: jtotal, jsolid, jliquid
306 !jhyst_leg(nbin_a_max)!, & ! hysteresis leg: jhyst_up, jhyst_lo
307 !iprint_input ! flag: mON, mOFF
310 !num_a(nbin_a_max), & ! #/cc(air)
311 !Dpgn_a(nbin_a_max), & ! cm
312 !Dp_dry_a(nbin_a_max), & ! cm
313 !Dp_wet_a(nbin_a_max), & ! cm
314 !Dp_core_a(nbin_a_max), & ! diameter of "optical core" (cm)
315 !area_dry_a(nbin_a_max), & ! cm^2/cc(air)
316 !area_wet_a(nbin_a_max), & ! cm^2/cc(air)
317 !mass_dry_salt(nbin_a_max), & ! g/cc(air)
318 !mass_dry_a_bgn(nbin_a_max), & ! g/cc(air)
319 !mass_dry_a(nbin_a_max), & ! g/cc(air)
320 !mass_wet_a(nbin_a_max), & ! g/cc(air)
321 !mass_soluble_a(nbin_a_max), & ! ng/cc(air)
322 !vol_dry_a(nbin_a_max), & ! cc/cc(air)
323 !vol_wet_a(nbin_a_max), & ! cc/cc(air)
324 !dens_dry_a_bgn(nbin_a_max), & ! g/cc
325 !dens_dry_a(nbin_a_max), & ! g/cc
326 !dens_wet_a(nbin_a_max), & ! g/cc
327 !sigmag_a(nbin_a_max), & ! -
328 !water_a(nbin_a_max), & ! kg(water)/m^3(air)
329 !water_a_hyst(nbin_a_max), & ! kg(water)/m^3(air) hysteresis (at 60% RH)
330 !water_a_up(nbin_a_max), & ! kg(water)/m^3(air) at 60% RH
331 !pH(nbin_a_max), & ! pH
332 !aer(naer,3,nbin_a_max), & ! nmol/m^3
333 !aer_sum(3,nbin_a_max), & ! nmol/m^3
334 !aer_percent(naer,3,nbin_a_max), & ! %
335 !comp_a(naercomp), & ! g/cc(air)
336 !electrolyte(nelectrolyte,3,nbin_a_max), & ! nmol/m^3
337 !electrolyte_sum(3,nbin_a_max), & ! nmol/m^3
338 !epercent(nelectrolyte,3,nbin_a_max), & ! %
339 !gas(ngas_volatile), & ! nmol/m^3
341 !aH2O_a(nbin_a_max), &
343 !volume_a(nbin_a_max), &
344 !volume_bin(nbin_a_max), & ! dry volume of one particle
345 !kelvin(nbin_a_max), & ! kelvin factor for water content
346 !kel(ngas_volatile,nbin_a_max), & ! kelvin factor for condensing species
349 !total_species(ngas_volatile), &
350 !ext_cross(nbin_a_max), & ! extinction cross section of a particle (cm^-2)
351 !scat_cross(nbin_a_max), & ! scattering cross section of a particle (cm^-2)
352 !asym_particle(nbin_a_max) ! asymmetry parameter of a particle (dimensionless)
355 dlo_aersize_init, & ! lowermost dry Dp for aersize init (micron)
356 dhi_aersize_init, & ! uppermost dry Dp for aersize init (micron)
357 xcutlo_atype_md1_init, & ! lowermost & uppermost bc mass fractions for
358 xcuthi_atype_md1_init, & ! for initializing the "atype_md1" dimension
359 xcutlo_atype_md2_init, & ! lowermost & uppermost hygroscopicity (kappa) for
360 xcuthi_atype_md2_init ! for initializing the "atype_md2" dimension
363 method_atype_md1_init, & ! method for initializing "atype_md1"
364 method_atype_md2_init ! method for initializing "atype_md2"
367 !----------------------------------------------------------------------
370 !idry_case3a(nbin_a_max), & ! mYES, mNO
371 !ieqblm_bin(nbin_a_max), & ! mYES, mNO
372 !ieqblm_ASTEM, & ! mYES, mNO
373 !ieqblm_soa, & ! mYES, mNO
380 !integrate(ngas_volatile,3,nbin_a_max) ! mYES, mNO
382 integer, save :: m_gas2bin_uptk_flag = 1
383 ! m_gas2bin_uptk_flag = 1 if all gases can condense to all bins,
384 ! and = 0 otherwise, which currently only happens with cam5-mosaic
385 integer, save :: i_gas2bin_uptk_flag(ngas_aerchtot,nbin_a_max)
386 ! i_gas2bin_uptk_flag(iv,ibin) = 1 if gas iv can condense to bin ibin,
387 ! and = 0 if it cannot (i.e., is not allowed to)
388 ! mosaic box model, partmc-mosaic, and wrf-chem do not have to allocate it
391 !Po_soa(ngas_volatile), & ! Pascal
392 !sat_soa(ngas_volatile), & ! nmol/m^3(air)
393 !x_soa(naer), & ! soa mole fraction
394 !sfc_a(ngas_volatile), & ! nmol/m^3
395 !Heff(ngas_volatile,nbin_a_max), & !
396 !kg(ngas_volatile,nbin_a_max), & ! 1/s
397 !df_gas_s(ngas_volatile,nbin_a_max), & ! nmol/m^3 (G-G*) = driving force)
398 !df_gas_l(ngas_volatile,nbin_a_max), & ! nmol/m^3 (G-G*) = driving force)
399 !df_gas_o(ngas_volatile,nbin_a_max), & ! nmol/m^3 (G-G*) = driving force)
400 !df_gas(ngas_volatile,nbin_a_max), & ! nmol/m^3 (G-G*) = driving force)
401 !flux_s(ngas_volatile,nbin_a_max), & ! nmol/m^3/s
402 !flux_l(ngas_volatile,nbin_a_max), & ! nmol/m^3/s
403 !flux_o(ngas_volatile,nbin_a_max), & ! nmol/m^3/s
404 !flux(ngas_volatile,nbin_a_max), & ! nmol/m^3/s
405 !sumkg_h2so4, & ! 1/s
410 !delta_nh3_max(nbin_a_max), & ! nmol/m^3
411 !delta_hno3_max(nbin_a_max), & ! nmol/m^3
412 !delta_hcl_max(nbin_a_max), & ! nmol/m^3
415 !volatile_s(ngas_volatile,nbin_a_max), & ! nmol/m^3
416 !phi_volatile_s(ngas_volatile,nbin_a_max), & ! relative dr. force = (G-G*)/G
417 !phi_volatile_l(ngas_volatile,nbin_a_max), & ! relative dr. force = (G-G*)/G
418 !phi_volatile_o(ngas_volatile,nbin_a_max), & ! relative dr. force = (G-G*)/G
419 !phi_nh4no3_s, & ! relative dr. force: 0 to 1
420 !phi_nh4cl_s, & ! relative dr. force: 0 to 1
421 !sum_vdf_s(ngas_volatile), & ! (nmol/m^3)^2
422 !sum_vol_s(ngas_volatile), & ! nmol/m^3
423 !sum_bin_s(ngas_volatile), & ! number of bins that have flux_s(iv) < 0
424 !avg_df_gas_s(ngas_volatile), & !
425 !h_s_i_m(ngas_volatile,nbin_a_max), & ! s
426 !alpha_gas(ngas_volatile), & ! - adaptive
427 alpha_ASTEM, & ! 0.01 to 0.05
428 rtol_eqb_ASTEM, & ! 0.01 to 0.03
429 ptol_mol_ASTEM!, & ! 0.01 to 1.0
430 !cumul_steps_ASTEM, &
433 !----------------------------------------------------------------------
436 jsalt_index(nsalt), &
437 jsulf_poor(jsulf_poor_NUM), &
438 jsulf_rich(jsulf_rich_NUM), &
439 !jsalt_present(nsalt), &
443 !iter_MESA(nbin_a_max), &
447 !eleliquid(nelectrolyte), &
450 !phi_salt_old(nsalt), &
452 !alpha_salt(nsalt), &
456 !frac_salt_liq(nsalt), &
457 !frac_salt_solid(nsalt), &
458 !growth_factor(nbin_a_max), &
459 d_mdrh(MDRH_T_NUM,d_mdrh_DIM2), & ! mdrh(T) poly coeffs
461 !MDRH_T(MDRH_T_NUM), &
462 !molality0(nelectrolyte), &
466 !G_MX(nelectrolyte), &
469 !----------------------------------------------------------------------
470 ! MOSAIC physico-chemical constants
471 character(len= 6), save :: phasestate(0:4)
472 character(len=16), save :: ename(nelectrolyte) ! electrolyte names
473 character(len=16), save :: aer_name(naer) ! generic aerosol species name
474 character(len=16), save :: gas_name(ngas_aerchtot) ! gas species name
477 !T_K, & ! temperature (K)
478 !P_atm, & ! pressure (atm)
479 !RH_pc, & ! relative humidity (%)
480 !cair_mol_cc, & ! air conc in mol/cc
481 !cair_mol_m3, & ! air conc in mol/m^3
486 mw_electrolyte(nelectrolyte), & ! molecular wt of electrolytes
487 mw_aer_mac(naer), & ! molecular wt of generic species
488 mw_comp_a(naercomp), & ! molecular wt of compounds
489 mw_c(ncation), & ! molecular wt of cations
490 mw_a(nanion), & ! molecular wt of anions
491 mw_gas(ngas_aerchtot), & ! molecular wt of gases
492 dens_electrolyte(nelectrolyte), & ! g/cc
493 dens_aer_mac(naer), & ! g/cc
494 dens_comp_a(naercomp), & ! g/cc (density of compounds)
495 kappa_aer_mac(naer), & ! "kappa" value (= hygroscopicity)
496 partial_molar_vol(ngas_aerchtot), & ! cc/mol (used in aerosol_phase_state)
497 v_molar_gas(ngas_aerchtot) ! cc/mol (used in aerosolmtc)
498 !sigma_water, & ! water surface tension (N/m)
499 !sigma_soln(nbin_a_max), & ! solution surface tension (N/m)
500 !Keq_gl(nrxn_aer_gl), & ! gas-liq eqblm const
501 !Keq_ll(nrxn_aer_ll), & ! liq-liq eqblm const
502 !Keq_sg(nrxn_aer_sg), & ! solid-gas eqbln const
503 !Keq_sl(nrxn_aer_sl), & ! solid-liq eqblm const
509 ref_index_a(naercomp)!, & ! refractive index of compounds
510 ! ri_avg_a(nbin_a_max), & ! vol avg ref index of bin
511 ! ri_shell_a(nbin_a_max), & ! vol avg ref index of bin for shell
512 ! ri_core_a(nbin_a_max) ! vol avg ref index of bin for core
514 !----------------------------------------------------------------------
515 ! MOSAIC activity coefficient models variables
518 !mc(Ncation,nbin_a_max), & ! mol/kg(water)
519 !ma(Nanion,nbin_a_max), & ! mol/kg(water)
521 zc(Ncation), & ! real charge
522 za(Nanion), & ! real charge
523 !gam(nelectrolyte,nbin_a_max), &
524 !gam_ratio(nbin_a_max), &
525 !log_gamZ(nelectrolyte,nelectrolyte), &
526 !log_gam(nelectrolyte), &
527 !activity(nelectrolyte,nbin_a_max), &
532 a_zsr(6,nelectrolyte), & ! binary molality polynomial coeffs
533 b_zsr(nelectrolyte), & ! binary molality coeff
534 aw_min(nelectrolyte), & ! minimum frh at which molality polynomial can be used
535 b_mtem(6,nelectrolyte,nelectrolyte) ! MTEM poly coeffs
537 !----------------------------------------------------------------------
538 ! MOSAIC massbalance variables
539 ! real(r8), save :: &
565 !----------------------------------------------------------------------
567 end module module_data_mosaic_aero