Update version info for release v4.6.1 (#2122)
[WRF.git] / chem / module_data_mosaic_aero.F
blob41b7125ec6dec63b4dda6857b48584b6ffbb3e30
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 !-----------------------------------------------------------------------
10   
11   use module_data_mosaic_kind, only:  r8
12   
13   implicit none
14   
15   ! mosaic.21.0.h
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   !----------------------------------------------------------------------
28   
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
34   
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
56   
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
61   
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
72   
73   integer, parameter :: jsolid = 1
74   integer, parameter :: jliquid= 2
75   integer, parameter :: jtotal = 3
76   
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
80   
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
90   
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
102   
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
112   
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
120      integer :: it_host
121      integer :: it_mosaic
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
133      integer :: nmax_mesa
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
139      real(r8) :: swdown
140      real(r8), dimension(5,4) :: xnerr_astem_negative
141      integer, dimension(:), allocatable :: iter_mesa
142   end type mosaic_vars_aa_type
144   
145   
146   !----------------------------------------------------------------------
147   ! MOSAIC species indices
148   !
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
154   ! gas
155   integer, save ::   &
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
160   
161   ! aerosol generic
162   integer, save ::   &
163        iso4_a,     ino3_a,     icl_a,     inh4_a,     ico3_a,   &
164        imsa_a,     ina_a,      ica_a,     ioc_a,      ibc_a,   &
165        ioin_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
168   
169   ! aerosol elecctrolytes/compounds
170   integer, save ::   &
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
179   
180   ! aerosol ions
181   integer, save ::   &
182        jc_h,    jc_nh4, jc_na,  jc_ca,   &
183        ja_hso4, ja_so4, ja_no3, ja_cl, ja_msa     ! , ja_co3
184   
185   ! gas - soa vbs
186       integer, save ::                                        &
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, &
207       ismpa_g, ismpbb_g, &
208       iasoaX_g, iasoa1_g, iasoa2_g, iasoa3_g, iasoa4_g, &
209       ibsoaX_g, ibsoa1_g, ibsoa2_g, ibsoa3_g, ibsoa4_g, &
210       igly, iho
212   ! aerosol generic - soa vbs
213       integer, save ::   &
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, &
230       ismpa_a, ismpbb_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
240       integer, save ::   &
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, &
257       jsmpa, jsmpbb, &
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   !----------------------------------------------------------------------
267   ! MOSAIC variables
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
278   integer, save ::      &
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
298        ipmcmos_aero,                       &
299        maeroptic_aero,                     &
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
308   
309   !real(r8), save ::    &
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
340        !aH2O,   &
341        !aH2O_a(nbin_a_max),   &
342        !DpmV(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
347        !kelvin_nh4no3,   &
348        !kelvin_nh4cl!,   &
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)
353   
354   real(r8), save ::     &
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
361   
362   integer, save ::      &
363        method_atype_md1_init,              &  ! method for initializing "atype_md1"
364        method_atype_md2_init                  ! method for initializing "atype_md2"
365   
366   
367   !----------------------------------------------------------------------
368   ! ASTEM variables
369   integer, save ::         &
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
374   !jASTEM_call,   &
375   !jASTEM_fail,   &
376   !isteps_ASTEM,   &
377   !isteps_SOA,   &
378   !isteps_ASTEM_max,   &
379   nmax_ASTEM!,   &
380   !integrate(ngas_volatile,3,nbin_a_max)        ! mYES, mNO
381   
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
390   real(r8), save ::     &
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
406   !sumkg_msa,                        &  ! 1/s
407   !sumkg_nh3,                        &  ! 1/s
408   !sumkg_hno3,                       &  ! 1/s
409   !sumkg_hcl,                        &  ! 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
413   !Keq_nh4no3,                       &
414   !Keq_nh4cl,                        &
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,                &
431   !avg_steps_ASTEM
432   
433   !----------------------------------------------------------------------
434   ! MESA variables
435   integer, save ::      &
436        jsalt_index(nsalt),   &
437        jsulf_poor(jsulf_poor_NUM),   &
438        jsulf_rich(jsulf_rich_NUM),   &
439        !jsalt_present(nsalt),   &
440        Nmax_mesa!,   &
441        !jMESA_call,   &
442        !jMESA_fail,   &
443        !iter_MESA(nbin_a_max),   &
444        !niter_MESA_max
446   real(r8), save ::     &
447        !eleliquid(nelectrolyte),   &
448        !flux_sl(nsalt),   &
449        !phi_salt(nsalt),   &
450        !phi_salt_old(nsalt),   &
451        !phi_bar(nsalt),   &
452        !alpha_salt(nsalt),   &
453        !sat_ratio(nsalt),   &
454        !hsalt(nsalt),   &
455        !hsalt_max,   &
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
460        !MDRH(nbin_a_max),   &
461        !MDRH_T(MDRH_T_NUM),   & 
462        !molality0(nelectrolyte),   &
463        rtol_mesa!,   &
464        !niter_MESA,   &
465        !niter_MESA_avg,   &
466        !G_MX(nelectrolyte),   &
467        !K_MX(nelectrolyte)
468   
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
475   
476   real(r8), save ::      &
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
482        !conv1a,   &
483        !conv1b,   &
484        !conv2a,   &
485        !conv2b,   &
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
504        !Kp_nh3,                                    &  !
505        !Kp_nh4no3,                                 &  !
506        !Kp_nh4cl                                      !
507   
508   complex   &
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
513   
514   !----------------------------------------------------------------------
515   ! MOSAIC activity coefficient models variables
516   
517   real(r8), save ::     &
518        !mc(Ncation,nbin_a_max),              &  ! mol/kg(water)
519        !ma(Nanion,nbin_a_max),               &  ! mol/kg(water)
520        !mSULF,   &
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),  &
528        !xeq_a(nanion),   &
529        !xeq_c(ncation),   &
530        !na_Ma(nanion),   &
531        !nc_Mc(ncation),   &
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
536   
537   !----------------------------------------------------------------------
538   ! MOSAIC massbalance variables
539 ! real(r8), save ::   &
540 !      tot_so4_in,   &
541 !      tot_no3_in,   &
542 !      tot_cl_in,   &
543 !      tot_nh4_in,   &
544 !      tot_na_in,   &
545 !      tot_ca_in,   &
546 !      tot_so4_out,   &
547 !      tot_no3_out,   &
548 !      tot_cl_out,   &
549 !      tot_nh4_out,   &
550 !      tot_na_out,   &
551 !      tot_ca_out,   &
552 !      diff_so4,   &
553 !      diff_no3,   &
554 !      diff_cl,   &
555 !      diff_nh4,   &
556 !      diff_na,   &
557 !      diff_ca,   &
558 !      reldiff_so4,   &
559 !      reldiff_no3,   &
560 !      reldiff_cl,   &
561 !      reldiff_nh4,   &
562 !      reldiff_na,   &
563 !      reldiff_ca
564   
565   !----------------------------------------------------------------------
567 end module module_data_mosaic_aero