Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / chem / module_data_mosaic_therm.F
blobab99fc0460b3563ef1848a98ebad817630aae1c4
1 !************************************************************************
2 ! This computer software was prepared by Battelle Memorial Institute,
3 ! hereinafter the Contractor, under Contract No. DE-AC05-76RL0 1830 with
4 ! the Department of Energy (DOE). NEITHER THE GOVERNMENT NOR THE
5 ! CONTRACTOR MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY
6 ! LIABILITY FOR THE USE OF THIS SOFTWARE.
8 ! MOSAIC module: see module_mosaic_driver.F for references and terms of
9 ! use
10 !************************************************************************
12 ! 2017-10-07 r.c.easter changes for new (openmp) mosaic version
14 ! nbin_a is now in module_data_mosaic_aero
15 ! nbin_a_maxd is set to nbin_a_max of module_data_mosaic_aero
17 !-----------------------------------------------------------------------
19       module module_data_mosaic_therm
22       use module_data_mosaic_aero, only:  nbin_a_max, nbin_a
25       implicit none
28 ! mosaic.h (mosaic.22.0)
29 !   30-apr-07 raz - deleted alpha_gas
30 !   05-feb-07 wig - converted reals to double
31 !   10-jan-07 raz - compatible with mosaic.21.0
32 !   19-dec-05 raz - compatible with mosaic.16.4
33 !   27-apr-05 raz - compatible with mosaic.14.3
34 !   07-jan-05 raz - updated and cleaned up variable lists
35 !   08-jul-03 raz - updated many variables
36 !   07-aug-02 rce - this is rahul's latest version from freshair
37 !   19-aug-02 raz - declared mass_soluble_a and kg as real
38 !   07-oct-02 raz - declared zc and za as integer
39 !   09-oct-02 raz - explicitly declared all variables
40 !   29-oct-02 raz - defined naercomp as the total number of aerosol compounds
41 !----------------------------------------------------------------------
43 ! nbin_a_maxd = maximum num of aerosol bins and is used to dimension arrays
44 !     integer, parameter :: nbin_a_maxd = 8
45       integer, parameter :: nbin_a_maxd = nbin_a_max
46 ! nbin_a = number of bins that are used in a run
47 ! (nbin_a is set at run time, and must be <= nbin_a_maxd)
48 !     integer, save :: nbin_a = 999888777
50 ! mosaic-specific parameters
51 ! Alma added 2 smp species - just before the traditional ant1_c 
52 ! SOA is treated using a simplified approach for anthropogenic and biomass burning species based on Hodzic and Jimenez, GMD, 2011
53       integer ngas_ioa, ngas_soa, ngas_volatile, ngas_het,      &
54               naer, naercomp, nelectrolyte, nsalt,      &
55               nsoluble, ncation, nanion
56       parameter(ngas_ioa = 5)   ! inorganic volatile aerosol species that have a gaseous counterpart
57 !      parameter(ngas_soa = 68+2+16)    ! volatile soa species that have a gaseous counterpart
58 !      parameter(ngas_volatile = ngas_ioa + ngas_soa)
59 !      parameter(ngas_het = 2)   ! gas species only involved in heterogeneous reactions ! DL - 9/9/2011
60 !      parameter(naer = 11+68+2+16)     ! num of chemical species per bin (inorg + oc + bc + oin + soa)
61 !      parameter(naercomp = 26+68+2+16) ! num of electrolytes + oc, bc, oin, & soa
62 ! 10 new VBS species
63       parameter(ngas_soa = 68+2+16+10)  ! volatile soa species that have a gaseous counterpart
64 ! OH and glyoxal at the end
65       parameter(ngas_volatile = ngas_ioa + ngas_soa + 1 + 1)
66       parameter(ngas_het = 2)   ! gas species only involved in heterogeneous reactions ! DL - 9/9/2011
67 ! 5 glyoxal SOA species, 10 VBS species
68       parameter(naer = 11+68+2+16+5+10) ! num of chemical species per bin (inorg + oc + bc + oin + soa) + 5*glysoa + 10*VBS
69       parameter(naercomp = 26+68+2+16+5+10)     ! num of electrolytes + oc, bc, oin, & soa + 5*glysoa + 10*VBS
70       parameter(nelectrolyte = 22) ! num of electrolytes
71       parameter(nsalt    = 15)  ! num of soluble salts
72       parameter(nsoluble = 20)  ! num of soluble electrolytes
73       parameter(ncation = 4)    ! num of cations
74       parameter(nanion  = 5)    ! num of anions
76       integer nrxn_aer_gl, nrxn_aer_ll, nrxn_aer_sg, nrxn_aer_sl
77       parameter(nrxn_aer_gl = 4) ! num of gas-liquid equilibria
78       parameter(nrxn_aer_ll = 3) ! num of liquid-liquid equilibria
79       parameter(nrxn_aer_sg = 2) ! num of solid-gas equilibria
80       parameter(nrxn_aer_sl = nsalt)! num of solid-liquid equilibria
82       integer mmodal, msection,   &
83               mon, moff, myes, mno
84       parameter(mmodal  = 1)    ! modal size distribution framework
85       parameter(msection= 2)    ! sectional size distribution framework
86       parameter(mon     = 1)    ! flag: on
87       parameter(moff    = 0)    ! flag:off
88       parameter(myes    = mon)  ! flag: yes or true
89       parameter(mno     = moff) ! flag: no or false
92       integer jtotal, jsolid, jliquid
93       parameter(jsolid = 1)
94       parameter(jliquid= 2)
95       parameter(jtotal = 3)
97       integer jhyst_lo, jhyst_up
98       parameter(jhyst_lo = 0)   ! lower hysteresis leg
99       parameter(jhyst_up = 1)   ! upper hysteresis leg
101   
102       ! allowable values for mhyst_method
103       integer, parameter :: mhyst_uporlo_waterhyst = 2  ! select upper/lower using "3-d method" involving water_a_hyst
104       integer, parameter :: mhyst_force_up = 3          ! force upper water hysteresis leg
105       integer, parameter :: mhyst_force_lo = 4          ! force lower water hysteresis leg
106       integer, parameter :: mhyst_method = mhyst_uporlo_waterhyst
107   
108       real(kind=8), parameter :: xhyst_up_crustal_thresh = 0.30
109       ! when rh_crystal < rh < rh_deliquesce and bin mass fraction of crustal species (oin, caco3, and caso4) 
110       !    exceeds xhyst_up_crustal_thresh, the bin is not allowed to be on the upper hysteresis curve.
111       ! mineral dust is mostly externally mixed, so a minor fraction of mineral dust species 
112       !   will most likely reside in a minor fraction of the particles of the bin, 
113       !   and should not control the bin aerosol water.  (value = 0.0 in previous versions of mosaic)
114   
115       integer, parameter :: mwater_kappa_nonelectro = 1  ! when > 0, use kappa_nonelectro for oin, oc, soa aerosol water
116   
117       integer no_aerosol, all_solid, all_liquid, mixed
118       parameter(no_aerosol = 0) ! flag
119       parameter(all_solid  = 1) ! flag
120       parameter(all_liquid = 2) ! flag
121       parameter(mixed      = 3) ! flag
123       integer soluble, insoluble
124       parameter(soluble   = 1)  ! flag
125       parameter(insoluble = 2)  ! flag
127       real(kind=8) mass_cutoff
128       parameter(mass_cutoff = 1.d-15)   ! ng/m^3
131 !----------------------------------------------------------------------
132 ! mosaic species indices
134 ! gas
135       integer, save ::   &
136        ih2so4_g,     ihno3_g,      ihcl_g,      inh3_g,   &
137        imsa_g, in2o5_g, iclno2_g
139       integer, save ::   &
140       ipcg1_b_c_g,ipcg2_b_c_g,ipcg3_b_c_g,ipcg4_b_c_g, &
141       ipcg5_b_c_g,ipcg6_b_c_g,ipcg7_b_c_g,ipcg8_b_c_g, &
142       ipcg9_b_c_g,ipcg1_b_o_g,ipcg2_b_o_g,ipcg3_b_o_g, &
143       ipcg4_b_o_g,ipcg5_b_o_g,ipcg6_b_o_g,ipcg7_b_o_g, &
144       ipcg8_b_o_g,ipcg9_b_o_g,iopcg1_b_c_g,iopcg2_b_c_g,&
145       iopcg3_b_c_g, iopcg4_b_c_g,iopcg5_b_c_g,iopcg6_b_c_g,&
146       iopcg7_b_c_g,iopcg8_b_c_g,iopcg1_b_o_g,iopcg2_b_o_g,&
147       iopcg3_b_o_g,iopcg4_b_o_g,iopcg5_b_o_g,iopcg6_b_o_g,&
148       iopcg7_b_o_g,iopcg8_b_o_g,&
149       ipcg1_f_c_g,ipcg2_f_c_g,ipcg3_f_c_g,ipcg4_f_c_g, &
150       ipcg5_f_c_g,ipcg6_f_c_g,ipcg7_f_c_g,ipcg8_f_c_g, &
151       ipcg9_f_c_g,ipcg1_f_o_g,ipcg2_f_o_g,ipcg3_f_o_g, &
152       ipcg4_f_o_g,ipcg5_f_o_g,ipcg6_f_o_g,ipcg7_f_o_g, &
153       ipcg8_f_o_g,ipcg9_f_o_g,iopcg1_f_c_g,iopcg2_f_c_g,&
154       iopcg3_f_c_g, iopcg4_f_c_g,iopcg5_f_c_g,iopcg6_f_c_g,&
155       iopcg7_f_c_g,iopcg8_f_c_g,iopcg1_f_o_g,iopcg2_f_o_g,&
156       iopcg3_f_o_g,iopcg4_f_o_g,iopcg5_f_o_g,iopcg6_f_o_g,&
157       iopcg7_f_o_g,iopcg8_f_o_g,iant1_c_g,iant2_c_g,iant3_c_g, &
158       iant4_c_g,ibiog1_c_g,ibiog2_c_g,ibiog3_c_g,ibiog4_c_g, &
159       iant1_o_g,iant2_o_g,iant3_o_g, &
160       iant4_o_g,ibiog1_o_g,ibiog2_o_g,ibiog3_o_g,ibiog4_o_g, &
161       ismpa_g,ismpbb_g, &
162       iasoaX_g, iasoa1_g, iasoa2_g, iasoa3_g, iasoa4_g, &
163       ibsoaX_g, ibsoa1_g, ibsoa2_g, ibsoa3_g, ibsoa4_g, &
164       igly, iho
167 ! aerosol generic
168       integer, save ::   &
169        iso4_a,     ino3_a,     icl_a,     inh4_a,     ico3_a,  &
170        imsa_a,     ina_a,      ica_a,     ioc_a,      ibc_a,   &
171        ioin_a
173       integer, save ::   &
174       ipcg1_b_c_a,ipcg2_b_c_a,ipcg3_b_c_a,ipcg4_b_c_a, &
175       ipcg5_b_c_a,ipcg6_b_c_a,ipcg7_b_c_a,ipcg8_b_c_a, &
176       ipcg9_b_c_a,ipcg1_b_o_a,ipcg2_b_o_a,ipcg3_b_o_a, &
177       ipcg4_b_o_a,ipcg5_b_o_a,ipcg6_b_o_a,ipcg7_b_o_a, &
178       ipcg8_b_o_a,ipcg9_b_o_a,iopcg1_b_c_a,iopcg2_b_c_a,&
179       iopcg3_b_c_a, iopcg4_b_c_a,iopcg5_b_c_a,iopcg6_b_c_a,&
180       iopcg7_b_c_a,iopcg8_b_c_a,iopcg1_b_o_a,iopcg2_b_o_a,&
181       iopcg3_b_o_a,iopcg4_b_o_a,iopcg5_b_o_a,iopcg6_b_o_a,&
182       iopcg7_b_o_a,iopcg8_b_o_a,&
183       ipcg1_f_c_a,ipcg2_f_c_a,ipcg3_f_c_a,ipcg4_f_c_a, &
184       ipcg5_f_c_a,ipcg6_f_c_a,ipcg7_f_c_a,ipcg8_f_c_a, &
185       ipcg9_f_c_a,ipcg1_f_o_a,ipcg2_f_o_a,ipcg3_f_o_a, &
186       ipcg4_f_o_a,ipcg5_f_o_a,ipcg6_f_o_a,ipcg7_f_o_a, &
187       ipcg8_f_o_a,ipcg9_f_o_a,iopcg1_f_c_a,iopcg2_f_c_a,&
188       iopcg3_f_c_a, iopcg4_f_c_a,iopcg5_f_c_a,iopcg6_f_c_a,&
189       iopcg7_f_c_a,iopcg8_f_c_a,iopcg1_f_o_a,iopcg2_f_o_a,&
190       iopcg3_f_o_a,iopcg4_f_o_a,iopcg5_f_o_a,iopcg6_f_o_a,&
191       iopcg7_f_o_a,iopcg8_f_o_a, &
192       ismpa_a,ismpbb_a, &
193       iglysoa_r1_a, iglysoa_r2_a, iglysoa_oh_a, iglysoa_sfc_a, iglysoa_nh4_a, &
194       iant1_c_a,iant2_c_a,iant3_c_a, &
195       iant4_c_a,ibiog1_c_a,ibiog2_c_a,ibiog3_c_a,ibiog4_c_a, &
196       iant1_o_a,iant2_o_a,iant3_o_a, &
197       iant4_o_a,ibiog1_o_a,ibiog2_o_a,ibiog3_o_a,ibiog4_o_a, &
198       iasoaX_a, iasoa1_a,iasoa2_a,iasoa3_a,iasoa4_a,&
199       ibsoaX_a, ibsoa1_a,ibsoa2_a,ibsoa3_a,ibsoa4_a
202 ! aerosol elecctrolytes/compounds
203       integer, save ::   &
204        jnh4so4,    jlvcite,    jnh4hso4,   jnh4no3,    jnh4cl,  &
205        jna2so4,    jna3hso4,   jnahso4,    jnano3,     jnacl,   &
206        jcaso4,     jcano3,     jcacl2,     jcaco3,     jh2so4,  &
207        jhno3,      jhcl,       jhhso4,                          &
208        jnh4msa,    jnamsa,     jcamsa2,    jmsa,                &
209        joc,        jbc,        join,       jh2o
211       integer, save ::   &
212       jpcg1_b_c,jpcg2_b_c,jpcg3_b_c,jpcg4_b_c, &
213       jpcg5_b_c,jpcg6_b_c,jpcg7_b_c,jpcg8_b_c, &
214       jpcg9_b_c,jpcg1_b_o,jpcg2_b_o,jpcg3_b_o, &
215       jpcg4_b_o,jpcg5_b_o,jpcg6_b_o,jpcg7_b_o, &
216       jpcg8_b_o,jpcg9_b_o,jopcg1_b_c,jopcg2_b_c,&
217       jopcg3_b_c, jopcg4_b_c,jopcg5_b_c,jopcg6_b_c,&
218       jopcg7_b_c,jopcg8_b_c,jopcg1_b_o,jopcg2_b_o,&
219       jopcg3_b_o,jopcg4_b_o,jopcg5_b_o,jopcg6_b_o,&
220       jopcg7_b_o,jopcg8_b_o,&
221       jpcg1_f_c,jpcg2_f_c,jpcg3_f_c,jpcg4_f_c, &
222       jpcg5_f_c,jpcg6_f_c,jpcg7_f_c,jpcg8_f_c, &
223       jpcg9_f_c,jpcg1_f_o,jpcg2_f_o,jpcg3_f_o, &
224       jpcg4_f_o,jpcg5_f_o,jpcg6_f_o,jpcg7_f_o, &
225       jpcg8_f_o,jpcg9_f_o,jopcg1_f_c,jopcg2_f_c,&
226       jopcg3_f_c, jopcg4_f_c,jopcg5_f_c,jopcg6_f_c,&
227       jopcg7_f_c,jopcg8_f_c,jopcg1_f_o,jopcg2_f_o,&
228       jopcg3_f_o,jopcg4_f_o,jopcg5_f_o,jopcg6_f_o,&
229       jopcg7_f_o,jopcg8_f_o, &
230       jsmpa,jsmpbb, &
231       jglysoa_r1, jglysoa_r2, jglysoa_oh, jglysoa_sfc, jglysoa_nh4, &
232       jant1_c,jant2_c,jant3_c, &
233       jant4_c,jbiog1_c,jbiog2_c,jbiog3_c,jbiog4_c, &
234       jant1_o,jant2_o,jant3_o, &
235       jant4_o,jbiog1_o,jbiog2_o,jbiog3_o,jbiog4_o, &
236       jasoaX,jasoa1,jasoa2,jasoa3,jasoa4,&
237       jbsoaX,jbsoa1,jbsoa2,jbsoa3,jbsoa4
240 ! aerosol ions
241       integer, save ::                          &
242        jc_h,    jc_nh4, jc_na,  jc_ca,          &
243        ja_hso4, ja_so4, ja_no3, ja_cl, ja_msa     ! , ja_co3
246 !----------------------------------------------------------------------
247 ! mosaic variables
248       integer, save ::                  &
249         iclm_aer,                       &  ! i-location
250         jclm_aer,                       &  ! j-location
251         kclm_aer,                       &  ! k-location
252         kclm_aer_calcbgn,               &  ! k-loc for calc. to begin
253         kclm_aer_calcend,               &  ! k-loc for calc. to end
254         mclm_aer,                       &  ! m-subarea
255         mgas_aer_xfer,                  &  ! flag: mon, moff
256         mdynamic_solver,                &  ! flag: masteem, masceem
257         msize_framework,                &  ! flag: mmodal, msectional
258         jaerosolstate(nbin_a_maxd),     &  ! flag: no_aerosol, all_solid, all_liquid, mixed
259         jphase(nbin_a_maxd),            &  ! phase index: jtotal, jsolid, jliquid
260         jhyst_leg(nbin_a_maxd),         &  ! hysteresis leg: jhyst_up, jhyst_lo
261         iprint_input,                   &  ! flag: mon, moff
262         lunerr_aer,                     &  ! 
263         ncorecnt_aer,       &  !
264         n2o5_flag                               ! flag to control N2O5 het chem (0=off, 1=no Cl pathway, 2=full)
266 ! NOTE: Some of the following informational output defaults are overridden in 
267 !       module_mosaic_driver.F based on the internal MOSAIC debug_level setting.
268       integer, save :: istat_mosaic_fe1       
269                        ! "fatal error status" for current problem (grid cell)
270                        ! negative value means a fatal error has occured
271       integer, save :: nfe1_mosaic_cur = 0
272                        ! fatal error count for current host-code time step
273       integer, save :: nfe1_mosaic_tot = 0
274                        ! fatal error count for all time steps
275       integer, save :: iprint_mosaic_fe1 = 1
276                        ! turns on/off output of fatal error diagnostics & counts
277                        !    if iprint_mosaic_fe1 >= 10, mosaic_aerchem_error_dump
278                        !    is called for each fatal error
279       integer, save :: iprint_mosaic_perform_stats = 1 
280                        ! turns on/off output of mosaic performance statistics
281       integer, save :: iprint_mosaic_diag1 = 1 
282                        ! turns on/off output of other warnings & diagnostics
283       integer, save :: iprint_mosaic_input_ok = 1 
284                        ! turns on/off output of mosaic initial values
285                        ! when a serious error occurs
288       real(kind=8), save ::             &
289         num_a(nbin_a_maxd),             &  ! #/cc(air)
290         dpgn_a(nbin_a_maxd),            &  ! cm
291         dp_dry_a(nbin_a_maxd),          &  ! cm
292         dp_wet_a(nbin_a_maxd),          &  ! cm
293         area_dry_a(nbin_a_maxd),        &  ! cm^2/cc(air)
294         area_wet_a(nbin_a_maxd),        &  ! cm^2/cc(air)
295         mass_dry_salt(nbin_a_maxd),     &  ! g/cc(air)
296         mass_dry_a(nbin_a_maxd),        &  ! g/cc(air)
297         mass_wet_a(nbin_a_maxd),        &  ! g/cc(air)
298         mass_soluble_a(nbin_a_maxd),    &  ! ng/cc(air)
299         vol_dry_a(nbin_a_maxd),         &  ! cc/cc(air)
300         vol_wet_a(nbin_a_maxd),         &  ! cc/cc(air)
301         dens_dry_a(nbin_a_maxd),        &  ! g/cc
302         dens_wet_a(nbin_a_maxd),        &  ! g/cc
303         sigmag_a(nbin_a_maxd),          &  ! -
304         water_a(nbin_a_maxd),           &  ! kg(water)/m^3(air)
305         water_a_hyst(nbin_a_maxd),      &  ! kg(water)/m^3(air) hysteresis (at 60% rh)
306         water_a_up(nbin_a_maxd),        &  ! kg(water)/m^3(air) at 60% rh
307         ph(nbin_a_maxd),                &  ! ph
308         c_as(nbin_a_maxd),          & ! ammonium sulfate concentration (mol/kg water)
309         c_an(nbin_a_maxd),          & ! ammonium nitrate concentration (mol/kg water)
310         a_nh4(nbin_a_maxd),         & ! ammonium sulfate activity (mol/kg water)
311         aer(naer,3,nbin_a_maxd),        &  ! nmol/m^3
312         aer_sum(3,nbin_a_maxd),         &  ! nmol/m^3
313         aer_percent(naer,3,nbin_a_maxd), &  ! %
314         comp_a(naercomp),               &  ! g/cc(air)
315         electrolyte(nelectrolyte,3,nbin_a_maxd),   &  ! nmol/m^3
316         electrolyte_sum(nelectrolyte,nbin_a_maxd), &  ! nmol/m^3
317         epercent(nelectrolyte,3,nbin_a_maxd),      &  ! %
318         gas(ngas_volatile+ngas_het),            &  ! nmol/m^3
319         ah2o,                           &  ! -
320         ah2o_a(nbin_a_maxd),            &  ! -
321         dpmv(nbin_a_maxd),              &  ! 
322         volume_a(nbin_a_maxd),          &  ! 
323         volume_bin(nbin_a_maxd),        &  ! dry volume of one particle
324         kelvin(nbin_a_maxd),            &  ! kelvin factor
325         kel(ngas_volatile+ngas_het,nbin_a_maxd),        &  ! kelvin factor for condensing species
326         kelvin_nh4no3,                  &  ! -
327         kelvin_nh4cl,                   &  ! - 
328         total_species(ngas_volatile)       ! 
331 !----------------------------------------------------------------------
332 ! astem variables
333       integer, save ::                  &
334         idry_case3a(nbin_a_maxd),       &  ! mYES, mNO
335         ieqblm_bin(nbin_a_maxd),        &  ! myes, mno
336         ieqblm_astem,                   &  ! myes, mno
337         ieqblm_soa,                     &  ! mYES, mNO
338         nastem_call,                    &  !
339         nastem_fail,                    &  !
340         isteps_astem,                   &  !
341         nsteps_astem,                   &  !
342         isteps_SOA,                     &
343         nsteps_astem_max,               &  !
344         nmax_ASTEM,                     &  !
345         flagsoap(ngas_soa),             &       ! Added by Manish Shrivastav on 01/11/10
346         integrate(ngas_volatile,3,nbin_a_maxd)  ! mYES, mNO
349       real(kind=8), save ::                     &
350         po_soa(ngas_volatile),                  &  ! pascal
351         sat_soa(ngas_volatile),                 &  ! nmol/m^3(air)
352         x_soa(naer),                            &  ! soa mole fraction
353         sfc_a(ngas_volatile),                   &  ! nmol/m^3
354         Heff(ngas_volatile,nbin_a_maxd),        &  ! 
355         kg(ngas_volatile+ngas_het,nbin_a_maxd),         &  ! 1/s
356         fraceq(ngas_volatile,nbin_a_maxd),      &  ! 1/s
357         df_gas_s(ngas_volatile,nbin_a_maxd),    &  ! nmol/m^3 (g-g*) = driving force)
358         df_gas_l(ngas_volatile,nbin_a_maxd),    &  ! nmol/m^3 (g-g*) = driving force)
359         df_gas_o(ngas_volatile,nbin_a_maxd),     &  ! nmol/m^3 (G-G*) = driving force)
360         flux_s(ngas_volatile,nbin_a_maxd),      &  ! nmol/m^3/s
361         flux_l(ngas_volatile,nbin_a_maxd),      &  ! nmol/m^3/s
362         flux_o(ngas_volatile,nbin_a_maxd),      &  ! nmol/m^3/s
363         sumkg_h2so4,                            &  ! 1/s
364         sumkg_msa,                              &  ! 1/s
365         sumkg_nh3,                              &  ! 1/s
366         sumkg_hno3,                             &  ! 1/s
367         sumkg_hcl,                              &  ! 1/s
368         sumkg_n2o5,                             &  ! 1/s
369         delta_nh3_max(nbin_a_maxd),             &  ! nmol/m^3
370         delta_hno3_max(nbin_a_maxd),            &  ! nmol/m^3
371         delta_hcl_max(nbin_a_maxd),             &  ! nmol/m^3
372         keq_nh4no3,                             &  ! -
373         keq_nh4cl,                              &  ! -
374         Keq_nh4no3_0,                           &  ! -
375         Keq_nh4cl_0,                            &  ! -
376         volatile_s(ngas_volatile,nbin_a_maxd),  &  ! nmol/m^3
377         phi_volatile_s(ngas_volatile,nbin_a_maxd),      &  ! relative dr. force = (g-g*)/g
378         phi_volatile_l(ngas_volatile,nbin_a_maxd),      &  ! relative dr. force = (g-g*)/g
379         phi_volatile_o(ngas_volatile,nbin_a_maxd),      &  ! relative dr. force = (g-g*)/g
380         phi_nh4no3_s,                           &  ! relative dr. force: 0 to 1
381         phi_nh4cl_s,                            &  ! relative dr. force: 0 to 1
382         sum_vdf_s(ngas_volatile),               &  ! (nmol/m^3)^2
383         sum_vol_s(ngas_volatile),               &  ! nmol/m^3
384         sum_bin_s(ngas_volatile),               &  ! number of bins that have flux_s(iv) < 0
385         avg_df_gas_s(ngas_volatile),            &  ! nmol/m^3
386         h_s_i_m(ngas_volatile,nbin_a_maxd),     &  ! s
387         alpha_astem,                            &  ! 0.01 to 0.05
388         rtol_eqb_astem,                         &  ! 0.01 to 0.03
389         ptol_mol_astem,                         &  ! 0.01 to 1.0
390         nsteps_astem_avg                           !
392       integer, parameter :: glysoa_param_off     = 0, &
393                             glysoa_param_simple  = 1, &
394                             glysoa_param_complex = 2
395       integer, save      :: glysoa_param
397 !----------------------------------------------------------------------
398 ! mesa variables
399       integer, save ::                  &
400         jsalt_index(nsalt),             &
401         jsulf_poor(211),                &
402         jsulf_rich(71),                 &
403         jsalt_present(nsalt),           &
404         nmax_mesa,                      &
405         nmesa_call,                     &
406         nmesa_fail,                     &
407         iter_mesa(nbin_a_maxd),         &
408         niter_mesa,                     &
409         niter_mesa_max
412       real(kind=8), save ::             &
413         eleliquid(nelectrolyte),        &
414         flux_sl(nsalt),                 &
415         phi_salt(nsalt),                &
416         phi_salt_old(nsalt),            &
417         phi_bar(nsalt),                 &
418         alpha_salt(nsalt),              &
419         sat_ratio(nsalt),               &
420         hsalt(nsalt),                   &
421         hsalt_max,                      &
422         frac_salt_liq(nsalt),           &
423         frac_salt_solid(nsalt),         &
424         growth_factor(nbin_a_maxd),     &
425         d_mdrh(63,4),                   &  ! mdrh(t) poly coeffs
426         mdrh(nbin_a_maxd),              &
427         mdrh_t(63),                     &
428         molality0(nelectrolyte),        &
429         rtol_mesa,                      &
430         niter_mesa_avg
433 !----------------------------------------------------------------------
434 ! mosaic physico-chemical constants
435       character(len=8), save ::         &
436         ename(nelectrolyte),            &  ! electrolyte names
437         aer_name(naer),                 &  ! generic aerosol species name
438         gas_name(ngas_volatile+ngas_het)                   ! gas species name
440       character(len=6), save ::         &
441         phasestate(4)
444       real(kind=8), save ::                     &
445         t_k,                            &  ! temperature (k)
446         p_atm,                          &  ! pressure (atm)
447         rh_pc,                          &  ! relative humidity (%)
448         cair_mol_cc,                    &  ! air conc in mol/cc
449         cair_mol_m3,                    &  ! air conc in mol/m^3
450         conv1a,                         &
451         conv1b,                         &
452         conv2a,                         &
453         conv2b,                         &
454         mw_electrolyte(nelectrolyte),   &  ! molecular wt of electrolytes
455         mw_aer_mac(naer),               &  ! molecular wt of generic species
456         mw_comp_a(naercomp),            &  ! molecular wt of compounds
457         mw_c(ncation),                  &  ! molecular wt of cations
458         mw_a(nanion),                   &  ! molecular wt of anions
459         dens_electrolyte(nelectrolyte), &  ! g/cc
460         dens_aer_mac(naer),             &  ! g/cc
461         dens_comp_a(naercomp),          &  ! g/cc (density of compounds)
462         kappa_nonelectro(naer),         &  ! 
463         partial_molar_vol(ngas_volatile+ngas_het), & ! cc/mol
464         sigma_water,                    &  ! water surface tension (n/m)
465         sigma_soln(nbin_a_maxd),        &  ! solution surface tension (n/m)
466         keq_gl(nrxn_aer_gl),            &  ! gas-liq eqblm const
467         keq_ll(nrxn_aer_ll),            &  ! liq-liq eqblm const
468         keq_sg(nrxn_aer_sg),            &  ! solid-gas eqbln const
469         keq_sl(nrxn_aer_sl),            &  ! solid-liq eqblm const
470         kp_nh3,                         &  !
471         kp_nh4no3,                      &  !
472         kp_nh4no3_0,                    &  !
473         kp_nh4cl,                       &  !
474         kp_nh4cl_0,                     &   !
475         frac_n2o5_h2o(nbin_a_maxd)      ! fraction of N2O5 which reacts with H2O after heterogeneous uptake
477       complex, save ::                  &
478                 ref_index_a(naercomp),  &  ! refractive index of compounds
479                 ri_avg_a(nbin_a_maxd)      ! vol avg ref index of bin
482 !----------------------------------------------------------------------
483 ! mosaic activity coefficient models parameters
485       real(kind=8), save ::                     &
486         mc(ncation,nbin_a_maxd),                &  ! mol/kg(water)
487         ma(nanion,nbin_a_maxd),                 &  ! mol/kg(water)
488         msulf,                                  &  ! 
489         zc(ncation),                            &  ! real charge
490         za(nanion),                             &  ! real charge
491         gam(nelectrolyte,nbin_a_maxd),          &
492         gam_ratio(nbin_a_maxd),                 &
493         log_gamz(nelectrolyte,nelectrolyte),    &
494         log_gam(nelectrolyte),                  &
495         activity(nelectrolyte,nbin_a_maxd),     &
496         xeq_a(nanion),                          &
497         xeq_c(ncation),                         &
498         na_ma(nanion),                          &
499         nc_mc(ncation),                         &
500         a_zsr(6,nelectrolyte),                  &  ! binary molality polynomial coeffs
501         b_zsr(nelectrolyte),                    &  ! binary molality coeff
502         aw_min(nelectrolyte),                   &  ! minimum frh at which molality polynomial can be used
503         b_mtem(6,nelectrolyte,nelectrolyte)        ! mtem poly coeffs
506 !----------------------------------------------------------------------
507 ! mosaic massbalance variables
508       real(kind=8), save ::     &
509         tot_so4_in,     &
510         tot_no3_in,     &
511         tot_cl_in,      &
512         tot_nh4_in,     &
513         tot_na_in,      &
514         tot_ca_in,      &
515         tot_so4_out,    &
516         tot_no3_out,    &
517         tot_cl_out,     &
518         tot_nh4_out,    &
519         tot_na_out,     &
520         tot_ca_out,     &
521         diff_so4,       &
522         diff_no3,       &
523         diff_cl,        &
524         diff_nh4,       &
525         diff_na,        &
526         diff_ca,        &
527         reldiff_so4,    &
528         reldiff_no3,    &
529         reldiff_cl,     &
530         reldiff_nh4,    &
531         reldiff_na,     &
532         reldiff_ca
533 !----------------------------------------------------------------------
537       end module module_data_mosaic_therm