CloudChemistry
Full cloud chemistry system with pH computed from the electroneutrality condition — Seinfeld & Pandis (2006), Ch. 7. The model composes AqueousEquilibria (quadratic charge-balance H⁺ from dissolved CO2, SO2, NH3, HNO3, H2O2, and O3 equilibria) with SulfateFormation (S(IV) oxidation kinetics via O3, H2O2, and Fe/Mn pathways). Unlike CloudChemistryFixedpH, which prescribes H⁺ from an external pH_input, this model self-consistently solves for the cloud-water pH from the trace-gas composition. Migrated from Aerosol.jl@c8c640bb src/cloud_chemistry.jl:73.
Description
Full cloud chemistry system with pH computed from the electroneutrality condition — Seinfeld & Pandis (2006), Ch. 7. The model composes AqueousEquilibria (quadratic charge-balance H⁺ from dissolved CO2, SO2, NH3, HNO3, H2O2, and O3 equilibria) with SulfateFormation (S(IV) oxidation kinetics via O3, H2O2, and Fe/Mn pathways). Unlike CloudChemistryFixedpH, which prescribes H⁺ from an external pH_input, this model self-consistently solves for the cloud-water pH from the trace-gas composition. Migrated from Aerosol.jl@c8c640bb src/cloud_chemistry.jl:73.
Reference
Seinfeld, J. H., and Pandis, S. N. (2006). Atmospheric Chemistry and Physics: From Air Pollution to Climate Change, 2nd Edition, John Wiley & Sons, Chapter 7.
_source_ref: Aerosol.jl@c8c640bb636b22f2425460e9ed5cba50793bfee1:src/cloud_chemistry.jl:73
Upstream CloudChemistry (default instance name :CloudChem) is the full charge-balance variant of cloud chemistry from Seinfeld & Pandis (2006), Ch. 7. It instantiates two high-level subsystems: aq_eq (AqueousEquilibria — the full aqueous equilibrium system including the quadratic charge-balance for H⁺) and sulfate (SulfateFormation — S(IV) oxidation kinetics via O3, H2O2, and Fe/Mn-synergism pathways).
Key difference from CloudChemistryFixedpH (src/cloud_chemistry.jl:269): instead of prescribing H⁺ from an external pH_input parameter, CloudChemistry computes H⁺ from the electroneutrality quadratic approximation within AqueousEquilibria: H⁺ = √((K_w + K_c1·[CO2] + K_s1·[SO2] + K_n1·[HNO3] + K_h1·[H2O2]) / (1 + K_a1·[NH3]/K_w)) This couples the sulfate formation rates back to the actual aqueous pH, enabling self-consistent simulation of pH-sensitive chemistry.
Re-typing: all input partial pressures and T are re-typed from parameter to state within the aq_eq subsystem because the parent coupling equations govern their values. L and xi_SO2 remain parameter type within the sulfate subsystem (consistent with CloudChemistryFixedpH precedent — they are calibration constants, not algebraic unknowns).
AqueousEquilibria (aq_eq): flat composition of all aqueous equilibria (water, CO2, SO2, NH3, HNO3, H2O2, O3) with the quadratic charge-balance H⁺ computation. 43 equations, no sub-subsystems.
SulfateFormation (sulfate): subsystem-composed model with 5 sub-subsystems (o3_ox, h2o2_ox, fe_ox, mn_ox, femn_ox) from sulfate/total.esm. R_total uses femn_ox.R_FeMn to avoid double-counting standalone fe_ox and mn_ox (upstream comment).
Tolerance rationale (rel=1e-6): purely algebraic, closed-form expressions including van’t Hoff exp/log factors and polynomial rate laws. Matches AqueousEquilibria and SulfateFormation precedent._
Parameters
| Name | Units | Default | Description |
|---|---|---|---|
T | K | 298.15 | Cloud/air temperature. Drives van’t Hoff corrections in the AqueousEquilibria subsystem and rate-conversion equations in SulfateFormation. Default 298.15 K (25°C). |
p_CO2 | Pa | 38.5 | Partial pressure of CO2. Default 38.5 Pa ≈ 380 ppm in 1 atm. Drives CO2 dissolution and carbonate equilibria in the aq_eq subsystem. |
p_SO2 | Pa | 0.000101325 | Partial pressure of SO2. Default 1.01325e-4 Pa = 1 ppb in 1 atm. Drives SO2/S(IV) equilibria; the S(IV) species (SO2_aq, HSO3_minus, SO3_2minus) are the primary substrates for sulfate formation. |
p_NH3 | Pa | 0.000101325 | Partial pressure of NH3. Default 1.01325e-4 Pa = 1 ppb. NH3 dissolves and forms NH4+, which is the main alkaline buffer in cloud water and raises pH relative to CO2-only conditions. |
p_HNO3 | Pa | 0.0 | Partial pressure of HNO3. Default 0 Pa (no HNO3). HNO3 is a very strong acid (Ka » 1) with a very large Henry’s constant — even ppb levels strongly acidify cloud water. Set to a non-zero value to model HNO3 contributions to cloud acidity. |
p_H2O2 | Pa | 0.000101325 | Partial pressure of H2O2. Default 1.01325e-4 Pa = 1 ppb. H2O2 is highly soluble (H_H2O2 ≈ 987 mol/m³/Pa) and is a major oxidant for the H2O2 sulfate-formation pathway. |
p_O3 | Pa | 0.005066 | Partial pressure of O3. Default 5.066e-3 Pa ≈ 50 ppb. O3 is sparingly soluble and drives the O3 sulfate-formation pathway, which becomes important at high pH where SO3²- is abundant. |
Fe_III | mol/m^3 | 0.001 | Fe(III) concentration in the cloud droplet. Default 1.0e-3 mol/m³ (1 µM). Catalyst for the Fe/Mn synergism S(IV) oxidation pathway (Eq. 7.102). |
Mn_II | mol/m^3 | 0.001 | Mn(II) concentration in the cloud droplet. Default 1.0e-3 mol/m³ (1 µM). Catalyst for the Fe/Mn synergism S(IV) oxidation pathway (Eq. 7.102). |
L | g/m^3 | 0.5 | Cloud liquid water content (g m⁻³). Default 0.5 g/m³, a representative stratocumulus value. Used in the SulfateFormation rate-conversion equations (Eqs. 7.75-7.78). |
xi_SO2 | 1 | 1e-09 | Gas-phase SO2 mixing ratio (dimensionless mole fraction). Default 1.0e-9 (1 ppb). Used in the SulfateFormation %/hr rate conversion (Eq. 7.76) and SO2 lifetime (Eq. 7.78). |
Observed
| Name | Units | Default | Description |
|---|---|---|---|
H_plus | mol/m^3 | Hydrogen ion concentration, computed from the electroneutrality quadratic charge-balance in AqueousEquilibria: H⁺ = √((K_w + K_c1·[CO2] + K_s1·[SO2] + K_n1·[HNO3] + K_h1·[H2O2]) / (1 + K_a1·[NH3]/K_w)). This is the key difference from CloudChemistryFixedpH, which prescribes H⁺ from an external pH_input. | |
OH_minus | mol/m^3 | Hydroxide concentration, aliased from aq_eq.OH_minus = K_w(T) / H_plus. | |
pH | 1 | pH value (dimensionless), aliased from aq_eq.pH = -log10(H_plus / C_ref). | |
SO2_aq | mol/m^3 | Aqueous SO2 ([SO2·H2O]) concentration, aliased from aq_eq.SO2_aq = H_SO2(T) × p_SO2. Couples into the SulfateFormation subsystem for the O3 oxidation pathway. | |
HSO3_minus | mol/m^3 | Bisulfite [HSO3⁻] concentration, aliased from aq_eq.HSO3_minus. Dominates the S(IV) system at typical cloud pH (3–5). Couples into both O3 and H2O2 oxidation pathways. | |
SO3_2minus | mol/m^3 | Sulfite [SO3²⁻] concentration, aliased from aq_eq.SO3_2minus. Important for the O3 oxidation pathway due to the large k2 rate constant. Couples into the O3 oxidation pathway. | |
H2O2_aq | mol/m^3 | Aqueous H2O2 concentration, aliased from aq_eq.H2O2_aq = H_H2O2(T) × p_H2O2. H2O2 is highly soluble. Couples into the H2O2 oxidation pathway. | |
O3_aq | mol/m^3 | Aqueous O3 concentration, aliased from aq_eq.O3_aq = H_O3(T) × p_O3. O3 is sparingly soluble. Couples into the O3 oxidation pathway. | |
S_IV_total | mol/m^3 | Total S(IV) concentration (SO2_aq + HSO3_minus + SO3_2minus), aliased from aq_eq.S_IV_total. Used in the Fe/Mn synergism pathway. | |
R_total | mol/m^3/s | Total S(IV) oxidation rate, aliased from sulfate.R_total = o3_ox.R_O3 + h2o2_ox.R_H2O2 + femn_ox.R_FeMn. The sum uses femn_ox (Eq. 7.102, includes Fe-only and Mn-only contributions) to avoid double-counting standalone fe_ox and mn_ox. | |
R_O3 | mol/m^3/s | S(IV) oxidation rate by O3, aliased from sulfate.o3_ox.R_O3. Eq. 7.79: R_O3 = (k0·[SO2·H2O] + k1·[HSO3⁻] + k2·[SO3²⁻])·[O3(aq)]. Increases strongly with pH. | |
R_H2O2 | mol/m^3/s | S(IV) oxidation rate by H2O2, aliased from sulfate.h2o2_ox.R_H2O2. Eq. 7.84: R_H2O2 = k·[H⁺]·[H2O2]·[HSO3⁻]/(1+K·[H⁺]). Often the dominant pathway in polluted cloud water. | |
R_FeMn | mol/m^3/s | S(IV) oxidation rate via Fe/Mn synergism, aliased from sulfate.femn_ox.R_FeMn. Eq. 7.102: includes Fe-only, Mn-only, and synergistic (k_FeMn = 1e10 M⁻²s⁻¹) terms. |
Observed expressions
$$ H_{plus} = CloudChemistry.aq_{eq.H\,plus} $$Hydrogen ion concentration, computed from the electroneutrality quadratic charge-balance in AqueousEquilibria: H⁺ = √((K_w + K_c1·[CO2] + K_s1·[SO2] + K_n1·[HNO3] + K_h1·[H2O2]) / (1 + K_a1·[NH3]/K_w)). This is the key difference from CloudChemistryFixedpH, which prescribes H⁺ from an external pH_input.
$$ OH_{minus} = CloudChemistry.aq_{eq.OH\,minus} $$Hydroxide concentration, aliased from aq_eq.OH_minus = K_w(T) / H_plus.
$$ pH = CloudChemistry.aq_{eq.pH} $$pH value (dimensionless), aliased from aq_eq.pH = -log10(H_plus / C_ref).
$$ SO2_{aq} = CloudChemistry.aq_{eq.SO2\,aq} $$Aqueous SO2 ([SO2·H2O]) concentration, aliased from aq_eq.SO2_aq = H_SO2(T) × p_SO2. Couples into the SulfateFormation subsystem for the O3 oxidation pathway.
$$ HSO3_{minus} = CloudChemistry.aq_{eq.HSO3\,minus} $$Bisulfite [HSO3⁻] concentration, aliased from aq_eq.HSO3_minus. Dominates the S(IV) system at typical cloud pH (3–5). Couples into both O3 and H2O2 oxidation pathways.
$$ SO3_{2minus} = CloudChemistry.aq_{eq.SO3\,2minus} $$Sulfite [SO3²⁻] concentration, aliased from aq_eq.SO3_2minus. Important for the O3 oxidation pathway due to the large k2 rate constant. Couples into the O3 oxidation pathway.
$$ H2O2_{aq} = CloudChemistry.aq_{eq.H2O2\,aq} $$Aqueous H2O2 concentration, aliased from aq_eq.H2O2_aq = H_H2O2(T) × p_H2O2. H2O2 is highly soluble. Couples into the H2O2 oxidation pathway.
$$ O3_{aq} = CloudChemistry.aq_{eq.O3\,aq} $$Aqueous O3 concentration, aliased from aq_eq.O3_aq = H_O3(T) × p_O3. O3 is sparingly soluble. Couples into the O3 oxidation pathway.
$$ S_{IV\,total} = CloudChemistry.aq_{eq.S\,IV\,total} $$Total S(IV) concentration (SO2_aq + HSO3_minus + SO3_2minus), aliased from aq_eq.S_IV_total. Used in the Fe/Mn synergism pathway.
$$ R_{total} = CloudChemistry.sulfate.R_{total} $$Total S(IV) oxidation rate, aliased from sulfate.R_total = o3_ox.R_O3 + h2o2_ox.R_H2O2 + femn_ox.R_FeMn. The sum uses femn_ox (Eq. 7.102, includes Fe-only and Mn-only contributions) to avoid double-counting standalone fe_ox and mn_ox.
$$ R_{O3} = CloudChemistry.sulfate.o3_{ox.R\,O3} $$S(IV) oxidation rate by O3, aliased from sulfate.o3_ox.R_O3. Eq. 7.79: R_O3 = (k0·[SO2·H2O] + k1·[HSO3⁻] + k2·[SO3²⁻])·[O3(aq)]. Increases strongly with pH.
$$ R_{H2O2} = CloudChemistry.sulfate.h2o2_{ox.R\,H2O2} $$S(IV) oxidation rate by H2O2, aliased from sulfate.h2o2_ox.R_H2O2. Eq. 7.84: R_H2O2 = k·[H⁺]·[H2O2]·[HSO3⁻]/(1+K·[H⁺]). Often the dominant pathway in polluted cloud water.
$$ R_{FeMn} = CloudChemistry.sulfate.femn_{ox.R\,FeMn} $$S(IV) oxidation rate via Fe/Mn synergism, aliased from sulfate.femn_ox.R_FeMn. Eq. 7.102: includes Fe-only, Mn-only, and synergistic (k_FeMn = 1e10 M⁻²s⁻¹) terms.
Equations
$$ CloudChemistry.aq_{eq.T} = T $$ $$ CloudChemistry.aq_{eq.p\,CO2} = p_{CO2} $$ $$ CloudChemistry.aq_{eq.p\,SO2} = p_{SO2} $$ $$ CloudChemistry.aq_{eq.p\,NH3} = p_{NH3} $$ $$ CloudChemistry.aq_{eq.p\,HNO3} = p_{HNO3} $$ $$ CloudChemistry.aq_{eq.p\,H2O2} = p_{H2O2} $$ $$ CloudChemistry.aq_{eq.p\,O3} = p_{O3} $$ $$ CloudChemistry.sulfate.T = T $$ $$ CloudChemistry.sulfate.H_{plus} = H_{plus} $$ $$ CloudChemistry.sulfate.SO2_{aq} = SO2_{aq} $$ $$ CloudChemistry.sulfate.HSO3_{minus} = HSO3_{minus} $$ $$ CloudChemistry.sulfate.SO3_{2minus} = SO3_{2minus} $$ $$ CloudChemistry.sulfate.S_{IV\,total} = S_{IV\,total} $$ $$ CloudChemistry.sulfate.O3_{aq} = O3_{aq} $$ $$ CloudChemistry.sulfate.H2O2_{aq} = H2O2_{aq} $$ $$ CloudChemistry.sulfate.Fe_{III} = Fe_{III} $$ $$ CloudChemistry.sulfate.Mn_{II} = Mn_{II} $$ $$ CloudChemistry.sulfate.L = L $$ $$ CloudChemistry.sulfate.xi_{SO2} = xi_{SO2} $$Raw .esm
Raw .esm JSON (this component)
{
"reference": {
"citation": "Seinfeld, J. H., and Pandis, S. N. (2006). Atmospheric Chemistry and Physics: From Air Pollution to Climate Change, 2nd Edition, John Wiley & Sons, Chapter 7.",
"notes": "source_ref: Aerosol.jl@c8c640bb636b22f2425460e9ed5cba50793bfee1:src/cloud_chemistry.jl:73\n\nUpstream `CloudChemistry` (default instance name `:CloudChem`) is the full charge-balance variant of cloud chemistry from Seinfeld & Pandis (2006), Ch. 7. It instantiates two high-level subsystems: aq_eq (AqueousEquilibria — the full aqueous equilibrium system including the quadratic charge-balance for H⁺) and sulfate (SulfateFormation — S(IV) oxidation kinetics via O3, H2O2, and Fe/Mn-synergism pathways).\n\nKey difference from CloudChemistryFixedpH (src/cloud_chemistry.jl:269): instead of prescribing H⁺ from an external pH_input parameter, CloudChemistry computes H⁺ from the electroneutrality quadratic approximation within AqueousEquilibria:\n H⁺ = √((K_w + K_c1·[CO2] + K_s1·[SO2] + K_n1·[HNO3] + K_h1·[H2O2]) / (1 + K_a1·[NH3]/K_w))\nThis couples the sulfate formation rates back to the actual aqueous pH, enabling self-consistent simulation of pH-sensitive chemistry.\n\nRe-typing: all input partial pressures and T are re-typed from parameter to state within the aq_eq subsystem because the parent coupling equations govern their values. L and xi_SO2 remain parameter type within the sulfate subsystem (consistent with CloudChemistryFixedpH precedent — they are calibration constants, not algebraic unknowns).\n\nAqueousEquilibria (aq_eq): flat composition of all aqueous equilibria (water, CO2, SO2, NH3, HNO3, H2O2, O3) with the quadratic charge-balance H⁺ computation. 43 equations, no sub-subsystems.\n\nSulfateFormation (sulfate): subsystem-composed model with 5 sub-subsystems (o3_ox, h2o2_ox, fe_ox, mn_ox, femn_ox) from sulfate/total.esm. R_total uses femn_ox.R_FeMn to avoid double-counting standalone fe_ox and mn_ox (upstream comment).\n\nTolerance rationale (rel=1e-6): purely algebraic, closed-form expressions including van't Hoff exp/log factors and polynomial rate laws. Matches AqueousEquilibria and SulfateFormation precedent."
},
"tolerance": {
"rel": 1e-06
},
"variables": {
"T": {
"type": "parameter",
"units": "K",
"default": 298.15,
"description": "Cloud/air temperature. Drives van't Hoff corrections in the AqueousEquilibria subsystem and rate-conversion equations in SulfateFormation. Default 298.15 K (25°C)."
},
"p_CO2": {
"type": "parameter",
"units": "Pa",
"default": 38.5,
"description": "Partial pressure of CO2. Default 38.5 Pa ≈ 380 ppm in 1 atm. Drives CO2 dissolution and carbonate equilibria in the aq_eq subsystem."
},
"p_SO2": {
"type": "parameter",
"units": "Pa",
"default": 0.000101325,
"description": "Partial pressure of SO2. Default 1.01325e-4 Pa = 1 ppb in 1 atm. Drives SO2/S(IV) equilibria; the S(IV) species (SO2_aq, HSO3_minus, SO3_2minus) are the primary substrates for sulfate formation."
},
"p_NH3": {
"type": "parameter",
"units": "Pa",
"default": 0.000101325,
"description": "Partial pressure of NH3. Default 1.01325e-4 Pa = 1 ppb. NH3 dissolves and forms NH4+, which is the main alkaline buffer in cloud water and raises pH relative to CO2-only conditions."
},
"p_HNO3": {
"type": "parameter",
"units": "Pa",
"default": 0.0,
"description": "Partial pressure of HNO3. Default 0 Pa (no HNO3). HNO3 is a very strong acid (Ka >> 1) with a very large Henry's constant — even ppb levels strongly acidify cloud water. Set to a non-zero value to model HNO3 contributions to cloud acidity."
},
"p_H2O2": {
"type": "parameter",
"units": "Pa",
"default": 0.000101325,
"description": "Partial pressure of H2O2. Default 1.01325e-4 Pa = 1 ppb. H2O2 is highly soluble (H_H2O2 ≈ 987 mol/m³/Pa) and is a major oxidant for the H2O2 sulfate-formation pathway."
},
"p_O3": {
"type": "parameter",
"units": "Pa",
"default": 0.005066,
"description": "Partial pressure of O3. Default 5.066e-3 Pa ≈ 50 ppb. O3 is sparingly soluble and drives the O3 sulfate-formation pathway, which becomes important at high pH where SO3²- is abundant."
},
"Fe_III": {
"type": "parameter",
"units": "mol/m^3",
"default": 0.001,
"description": "Fe(III) concentration in the cloud droplet. Default 1.0e-3 mol/m³ (1 µM). Catalyst for the Fe/Mn synergism S(IV) oxidation pathway (Eq. 7.102)."
},
"Mn_II": {
"type": "parameter",
"units": "mol/m^3",
"default": 0.001,
"description": "Mn(II) concentration in the cloud droplet. Default 1.0e-3 mol/m³ (1 µM). Catalyst for the Fe/Mn synergism S(IV) oxidation pathway (Eq. 7.102)."
},
"L": {
"type": "parameter",
"units": "g/m^3",
"default": 0.5,
"description": "Cloud liquid water content (g m⁻³). Default 0.5 g/m³, a representative stratocumulus value. Used in the SulfateFormation rate-conversion equations (Eqs. 7.75-7.78)."
},
"xi_SO2": {
"type": "parameter",
"units": "1",
"default": 1e-09,
"description": "Gas-phase SO2 mixing ratio (dimensionless mole fraction). Default 1.0e-9 (1 ppb). Used in the SulfateFormation %/hr rate conversion (Eq. 7.76) and SO2 lifetime (Eq. 7.78)."
},
"H_plus": {
"type": "unknown",
"units": "mol/m^3",
"description": "Hydrogen ion concentration, computed from the electroneutrality quadratic charge-balance in AqueousEquilibria: H⁺ = √((K_w + K_c1·[CO2] + K_s1·[SO2] + K_n1·[HNO3] + K_h1·[H2O2]) / (1 + K_a1·[NH3]/K_w)). This is the key difference from CloudChemistryFixedpH, which prescribes H⁺ from an external pH_input."
},
"OH_minus": {
"type": "unknown",
"units": "mol/m^3",
"description": "Hydroxide concentration, aliased from aq_eq.OH_minus = K_w(T) / H_plus."
},
"pH": {
"type": "unknown",
"units": "1",
"description": "pH value (dimensionless), aliased from aq_eq.pH = -log10(H_plus / C_ref)."
},
"SO2_aq": {
"type": "unknown",
"units": "mol/m^3",
"description": "Aqueous SO2 ([SO2·H2O]) concentration, aliased from aq_eq.SO2_aq = H_SO2(T) × p_SO2. Couples into the SulfateFormation subsystem for the O3 oxidation pathway."
},
"HSO3_minus": {
"type": "unknown",
"units": "mol/m^3",
"description": "Bisulfite [HSO3⁻] concentration, aliased from aq_eq.HSO3_minus. Dominates the S(IV) system at typical cloud pH (3–5). Couples into both O3 and H2O2 oxidation pathways."
},
"SO3_2minus": {
"type": "unknown",
"units": "mol/m^3",
"description": "Sulfite [SO3²⁻] concentration, aliased from aq_eq.SO3_2minus. Important for the O3 oxidation pathway due to the large k2 rate constant. Couples into the O3 oxidation pathway."
},
"H2O2_aq": {
"type": "unknown",
"units": "mol/m^3",
"description": "Aqueous H2O2 concentration, aliased from aq_eq.H2O2_aq = H_H2O2(T) × p_H2O2. H2O2 is highly soluble. Couples into the H2O2 oxidation pathway."
},
"O3_aq": {
"type": "unknown",
"units": "mol/m^3",
"description": "Aqueous O3 concentration, aliased from aq_eq.O3_aq = H_O3(T) × p_O3. O3 is sparingly soluble. Couples into the O3 oxidation pathway."
},
"S_IV_total": {
"type": "unknown",
"units": "mol/m^3",
"description": "Total S(IV) concentration (SO2_aq + HSO3_minus + SO3_2minus), aliased from aq_eq.S_IV_total. Used in the Fe/Mn synergism pathway."
},
"R_total": {
"type": "unknown",
"units": "mol/m^3/s",
"description": "Total S(IV) oxidation rate, aliased from sulfate.R_total = o3_ox.R_O3 + h2o2_ox.R_H2O2 + femn_ox.R_FeMn. The sum uses femn_ox (Eq. 7.102, includes Fe-only and Mn-only contributions) to avoid double-counting standalone fe_ox and mn_ox."
},
"R_O3": {
"type": "unknown",
"units": "mol/m^3/s",
"description": "S(IV) oxidation rate by O3, aliased from sulfate.o3_ox.R_O3. Eq. 7.79: R_O3 = (k0·[SO2·H2O] + k1·[HSO3⁻] + k2·[SO3²⁻])·[O3(aq)]. Increases strongly with pH."
},
"R_H2O2": {
"type": "unknown",
"units": "mol/m^3/s",
"description": "S(IV) oxidation rate by H2O2, aliased from sulfate.h2o2_ox.R_H2O2. Eq. 7.84: R_H2O2 = k·[H⁺]·[H2O2]·[HSO3⁻]/(1+K·[H⁺]). Often the dominant pathway in polluted cloud water."
},
"R_FeMn": {
"type": "unknown",
"units": "mol/m^3/s",
"description": "S(IV) oxidation rate via Fe/Mn synergism, aliased from sulfate.femn_ox.R_FeMn. Eq. 7.102: includes Fe-only, Mn-only, and synergistic (k_FeMn = 1e10 M⁻²s⁻¹) terms."
}
},
"subsystems": {
"aq_eq": {
"variables": {
"T": {
"type": "unknown",
"units": "K",
"default": 298.15,
"description": "Temperature."
},
"p_CO2": {
"type": "unknown",
"units": "Pa",
"default": 40.0,
"description": "Partial pressure of CO2 (≈ 400 ppm at 1 atm ≈ 40 Pa)."
},
"p_SO2": {
"type": "unknown",
"units": "Pa",
"default": 0.0,
"description": "Partial pressure of SO2."
},
"p_NH3": {
"type": "unknown",
"units": "Pa",
"default": 0.0,
"description": "Partial pressure of NH3."
},
"p_HNO3": {
"type": "unknown",
"units": "Pa",
"default": 0.0,
"description": "Partial pressure of HNO3."
},
"p_H2O2": {
"type": "unknown",
"units": "Pa",
"default": 0.0,
"description": "Partial pressure of H2O2."
},
"p_O3": {
"type": "unknown",
"units": "Pa",
"default": 0.0,
"description": "Partial pressure of O3."
},
"R_gas": {
"type": "parameter",
"units": "J/mol/K",
"default": 8.314,
"description": "Gas constant."
},
"T_ref": {
"type": "parameter",
"units": "K",
"default": 298.0,
"description": "Reference temperature."
},
"C_ref": {
"type": "parameter",
"units": "mol/m^3",
"default": 1000.0,
"description": "Reference concentration for pH (1 mol/L = 1000 mol/m³)."
},
"K_w_298": {
"type": "parameter",
"units": "mol^2/m^6",
"default": 1e-08,
"description": "Water dissociation constant at 298 K (1e-14 M² → mol²/m⁶)."
},
"dH_Kw": {
"type": "parameter",
"units": "J/mol",
"default": 55856.4,
"description": "Enthalpy for K_w (13.35 kcal/mol; Seinfeld & Pandis Table 7.4)."
},
"H_CO2_298": {
"type": "parameter",
"units": "mol/m^3/Pa",
"default": 0.0003355539106834444,
"description": "Henry constant for CO2 at 298 K (3.4e-2 M/atm → mol/m³/Pa)."
},
"dH_H_CO2": {
"type": "parameter",
"units": "J/mol",
"default": -20292.4,
"description": "Heat of dissolution for CO2 (-4.85 kcal/mol; Seinfeld & Pandis Table 7.4)."
},
"K_c1_298": {
"type": "parameter",
"units": "mol/m^3",
"default": 0.00043,
"description": "K_c1 at 298 K (4.3e-7 M → mol/m³)."
},
"K_c2_298": {
"type": "parameter",
"units": "mol/m^3",
"default": 4.7e-08,
"description": "K_c2 at 298 K (4.7e-11 M → mol/m³)."
},
"dH_Kc1": {
"type": "parameter",
"units": "J/mol",
"default": 7657.12,
"description": "Enthalpy for K_c1 (upstream literal verbatim)."
},
"dH_Kc2": {
"type": "parameter",
"units": "J/mol",
"default": 14853.2,
"description": "Enthalpy for K_c2 (3.55 kcal/mol)."
},
"H_SO2_298": {
"type": "parameter",
"units": "mol/m^3/Pa",
"default": 0.012139156180606956,
"description": "Henry constant for SO2 at 298 K."
},
"dH_H_SO2": {
"type": "parameter",
"units": "J/mol",
"default": -26150.0,
"description": "Heat of dissolution for SO2 (-6.25 kcal/mol; Seinfeld & Pandis Table 7.4)."
},
"K_s1_298": {
"type": "parameter",
"units": "mol/m^3",
"default": 13.0,
"description": "K_s1 at 298 K (0.013 M → mol/m³)."
},
"K_s2_298": {
"type": "parameter",
"units": "mol/m^3",
"default": 6.6e-05,
"description": "K_s2 at 298 K (6.6e-8 M → mol/m³)."
},
"dH_Ks1": {
"type": "parameter",
"units": "J/mol",
"default": -17405.44,
"description": "Enthalpy for K_s1 (-4.16 kcal/mol; Seinfeld & Pandis Table 7.4)."
},
"dH_Ks2": {
"type": "parameter",
"units": "J/mol",
"default": -9330.32,
"description": "Enthalpy for K_s2 (-2.23 kcal/mol; Seinfeld & Pandis Table 7.4)."
},
"H_NH3_298": {
"type": "parameter",
"units": "mol/m^3/Pa",
"default": 0.611892425363928,
"description": "Henry constant for NH3 at 298 K (62.0 M/atm → mol/m³/Pa)."
},
"dH_H_NH3": {
"type": "parameter",
"units": "J/mol",
"default": -34183.28,
"description": "Heat of dissolution for NH3 (-8.17 kcal/mol; Seinfeld & Pandis Table 7.4)."
},
"K_a1_298": {
"type": "parameter",
"units": "mol/m^3",
"default": 0.017,
"description": "NH3·H2O dissociation constant at 298 K (1.7e-5 M → mol/m³)."
},
"dH_Ka1": {
"type": "parameter",
"units": "J/mol",
"default": 36191.6,
"description": "Enthalpy for K_a1 (8.65 kcal/mol; Seinfeld & Pandis Table 7.4)."
},
"H_HNO3_298": {
"type": "parameter",
"units": "mol/m^3/Pa",
"default": 2072.53886010363,
"description": "Henry constant for HNO3 at 298 K (2.1e5 M/atm → mol/m³/Pa)."
},
"dH_H_HNO3": {
"type": "parameter",
"units": "J/mol",
"default": 0.0,
"description": "Heat of dissolution for HNO3 (temperature-independent; Seinfeld & Pandis Table 7.4)."
},
"K_n1_298": {
"type": "parameter",
"units": "mol/m^3",
"default": 15400.0,
"description": "HNO3 dissociation constant (15.4 M → mol/m³; strong acid, temperature-independent)."
},
"H_H2O2_298": {
"type": "parameter",
"units": "mol/m^3/Pa",
"default": 986.9232667160128,
"description": "Henry constant for H2O2 at 298 K (1.0e5 M/atm → mol/m³/Pa)."
},
"dH_H_H2O2": {
"type": "parameter",
"units": "J/mol",
"default": -60668.0,
"description": "Heat of dissolution for H2O2 (-14.5 kcal/mol; Seinfeld & Pandis Table 7.4)."
},
"K_h1_298": {
"type": "parameter",
"units": "mol/m^3",
"default": 2.2e-09,
"description": "H2O2 dissociation constant at 298 K (2.2e-12 M → mol/m³; temperature-independent)."
},
"H_O3_298": {
"type": "parameter",
"units": "mol/m^3/Pa",
"default": 0.0001085615593387614,
"description": "Henry constant for O3 at 298 K (1.1e-2 M/atm → mol/m³/Pa)."
},
"dH_H_O3": {
"type": "parameter",
"units": "J/mol",
"default": -21087.36,
"description": "Heat of dissolution for O3 (-5.04 kcal/mol; Seinfeld & Pandis Table 7.4)."
},
"K_w": {
"type": "unknown",
"units": "mol^2/m^6",
"description": "Water dissociation constant K_w(T) via van't Hoff (Seinfeld & Pandis Eq 7.10)."
},
"H_CO2": {
"type": "unknown",
"units": "mol/m^3/Pa",
"description": "Henry's law constant for CO2 at temperature T."
},
"K_c1": {
"type": "unknown",
"units": "mol/m^3",
"description": "CO2 first dissociation constant K_c1(T)."
},
"K_c2": {
"type": "unknown",
"units": "mol/m^3",
"description": "CO2 second dissociation constant K_c2(T)."
},
"CO2_aq": {
"type": "unknown",
"units": "mol/m^3",
"description": "Aqueous CO2 concentration [CO2·H2O]."
},
"H_SO2": {
"type": "unknown",
"units": "mol/m^3/Pa",
"description": "Henry's law constant for SO2 at temperature T."
},
"K_s1": {
"type": "unknown",
"units": "mol/m^3",
"description": "SO2 first dissociation constant K_s1(T)."
},
"K_s2": {
"type": "unknown",
"units": "mol/m^3",
"description": "SO2 second dissociation constant K_s2(T)."
},
"SO2_aq": {
"type": "unknown",
"units": "mol/m^3",
"description": "Aqueous SO2 concentration [SO2·H2O]."
},
"H_NH3": {
"type": "unknown",
"units": "mol/m^3/Pa",
"description": "Henry's law constant for NH3 at temperature T."
},
"K_a1": {
"type": "unknown",
"units": "mol/m^3",
"description": "NH3·H2O dissociation constant K_a1(T)."
},
"NH3_aq": {
"type": "unknown",
"units": "mol/m^3",
"description": "Aqueous NH3 concentration [NH3·H2O]."
},
"H_HNO3": {
"type": "unknown",
"units": "mol/m^3/Pa",
"description": "Henry's law constant for HNO3 (≈ H_HNO3_298, dH≈0)."
},
"K_n1": {
"type": "unknown",
"units": "mol/m^3",
"description": "HNO3 dissociation constant (= K_n1_298; strong acid, temperature-independent)."
},
"HNO3_aq": {
"type": "unknown",
"units": "mol/m^3",
"description": "Undissociated HNO3 concentration [HNO3(aq)]."
},
"H_H2O2": {
"type": "unknown",
"units": "mol/m^3/Pa",
"description": "Henry's law constant for H2O2 at temperature T."
},
"K_h1": {
"type": "unknown",
"units": "mol/m^3",
"description": "H2O2 dissociation constant (= K_h1_298; temperature-independent)."
},
"H2O2_aq": {
"type": "unknown",
"units": "mol/m^3",
"description": "Aqueous H2O2 concentration."
},
"H_O3": {
"type": "unknown",
"units": "mol/m^3/Pa",
"description": "Henry's law constant for O3 at temperature T."
},
"O3_aq": {
"type": "unknown",
"units": "mol/m^3",
"description": "Aqueous O3 concentration."
},
"H_plus": {
"type": "unknown",
"units": "mol/m^3",
"description": "Hydrogen ion concentration solved by the quadratic charge-balance approximation. See reference notes for the accuracy bounds."
},
"OH_minus": {
"type": "unknown",
"units": "mol/m^3",
"description": "Hydroxide ion concentration [OH-]."
},
"pH": {
"type": "unknown",
"units": "1",
"description": "pH = -log10([H+] / C_ref)."
},
"HCO3_minus": {
"type": "unknown",
"units": "mol/m^3",
"description": "Bicarbonate concentration [HCO3-]."
},
"CO3_2minus": {
"type": "unknown",
"units": "mol/m^3",
"description": "Carbonate concentration [CO3²-]."
},
"C_total": {
"type": "unknown",
"units": "mol/m^3",
"description": "Total dissolved inorganic carbon (CO2_aq + HCO3- + CO3²-)."
},
"H_CO2_eff": {
"type": "unknown",
"units": "mol/m^3/Pa",
"description": "Effective Henry constant for CO2 (S&P Eq 7.24)."
},
"HSO3_minus": {
"type": "unknown",
"units": "mol/m^3",
"description": "Bisulfite concentration [HSO3-]."
},
"SO3_2minus": {
"type": "unknown",
"units": "mol/m^3",
"description": "Sulfite concentration [SO3²-]."
},
"S_IV_total": {
"type": "unknown",
"units": "mol/m^3",
"description": "Total S(IV) concentration (SO2_aq + HSO3- + SO3²-)."
},
"H_SO2_eff": {
"type": "unknown",
"units": "mol/m^3/Pa",
"description": "Effective Henry constant for SO2."
},
"alpha_0": {
"type": "unknown",
"units": "1",
"description": "Fraction of S(IV) as SO2(aq)."
},
"alpha_1": {
"type": "unknown",
"units": "1",
"description": "Fraction of S(IV) as HSO3-."
},
"alpha_2": {
"type": "unknown",
"units": "1",
"description": "Fraction of S(IV) as SO3²-."
},
"NH4_plus": {
"type": "unknown",
"units": "mol/m^3",
"description": "Ammonium concentration [NH4+]."
},
"NH3_total": {
"type": "unknown",
"units": "mol/m^3",
"description": "Total dissolved ammonia (NH3_aq + NH4+)."
},
"H_NH3_eff": {
"type": "unknown",
"units": "mol/m^3/Pa",
"description": "Effective Henry constant for NH3."
},
"NO3_minus": {
"type": "unknown",
"units": "mol/m^3",
"description": "Nitrate concentration [NO3-]."
},
"HNO3_total": {
"type": "unknown",
"units": "mol/m^3",
"description": "Total dissolved nitric acid."
},
"H_HNO3_eff": {
"type": "unknown",
"units": "mol/m^3/Pa",
"description": "Effective Henry constant for HNO3."
},
"HO2_minus": {
"type": "unknown",
"units": "mol/m^3",
"description": "Peroxide anion concentration [HO2-]."
},
"H2O2_total": {
"type": "unknown",
"units": "mol/m^3",
"description": "Total dissolved H2O2."
},
"H_H2O2_eff": {
"type": "unknown",
"units": "mol/m^3/Pa",
"description": "Effective Henry constant for H2O2."
}
},
"equations": [
{
"lhs": "K_w",
"rhs": {
"op": "*",
"args": [
"K_w_298",
{
"op": "exp",
"args": [
{
"op": "*",
"args": [
-1,
{
"op": "/",
"args": [
"dH_Kw",
"R_gas"
]
},
{
"op": "+",
"args": [
{
"op": "/",
"args": [
1,
"T"
]
},
{
"op": "/",
"args": [
-1,
"T_ref"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "H_CO2",
"rhs": {
"op": "*",
"args": [
"H_CO2_298",
{
"op": "exp",
"args": [
{
"op": "*",
"args": [
{
"op": "/",
"args": [
"dH_H_CO2",
"R_gas"
]
},
{
"op": "+",
"args": [
{
"op": "/",
"args": [
1,
"T_ref"
]
},
{
"op": "/",
"args": [
-1,
"T"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "K_c1",
"rhs": {
"op": "*",
"args": [
"K_c1_298",
{
"op": "exp",
"args": [
{
"op": "*",
"args": [
-1,
{
"op": "/",
"args": [
"dH_Kc1",
"R_gas"
]
},
{
"op": "+",
"args": [
{
"op": "/",
"args": [
1,
"T"
]
},
{
"op": "/",
"args": [
-1,
"T_ref"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "K_c2",
"rhs": {
"op": "*",
"args": [
"K_c2_298",
{
"op": "exp",
"args": [
{
"op": "*",
"args": [
-1,
{
"op": "/",
"args": [
"dH_Kc2",
"R_gas"
]
},
{
"op": "+",
"args": [
{
"op": "/",
"args": [
1,
"T"
]
},
{
"op": "/",
"args": [
-1,
"T_ref"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "CO2_aq",
"rhs": {
"op": "*",
"args": [
"H_CO2",
"p_CO2"
]
}
},
{
"lhs": "H_SO2",
"rhs": {
"op": "*",
"args": [
"H_SO2_298",
{
"op": "exp",
"args": [
{
"op": "*",
"args": [
{
"op": "/",
"args": [
"dH_H_SO2",
"R_gas"
]
},
{
"op": "+",
"args": [
{
"op": "/",
"args": [
1,
"T_ref"
]
},
{
"op": "/",
"args": [
-1,
"T"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "K_s1",
"rhs": {
"op": "*",
"args": [
"K_s1_298",
{
"op": "exp",
"args": [
{
"op": "*",
"args": [
-1,
{
"op": "/",
"args": [
"dH_Ks1",
"R_gas"
]
},
{
"op": "+",
"args": [
{
"op": "/",
"args": [
1,
"T"
]
},
{
"op": "/",
"args": [
-1,
"T_ref"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "K_s2",
"rhs": {
"op": "*",
"args": [
"K_s2_298",
{
"op": "exp",
"args": [
{
"op": "*",
"args": [
-1,
{
"op": "/",
"args": [
"dH_Ks2",
"R_gas"
]
},
{
"op": "+",
"args": [
{
"op": "/",
"args": [
1,
"T"
]
},
{
"op": "/",
"args": [
-1,
"T_ref"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "SO2_aq",
"rhs": {
"op": "*",
"args": [
"H_SO2",
"p_SO2"
]
}
},
{
"lhs": "H_NH3",
"rhs": {
"op": "*",
"args": [
"H_NH3_298",
{
"op": "exp",
"args": [
{
"op": "*",
"args": [
{
"op": "/",
"args": [
"dH_H_NH3",
"R_gas"
]
},
{
"op": "+",
"args": [
{
"op": "/",
"args": [
1,
"T_ref"
]
},
{
"op": "/",
"args": [
-1,
"T"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "K_a1",
"rhs": {
"op": "*",
"args": [
"K_a1_298",
{
"op": "exp",
"args": [
{
"op": "*",
"args": [
-1,
{
"op": "/",
"args": [
"dH_Ka1",
"R_gas"
]
},
{
"op": "+",
"args": [
{
"op": "/",
"args": [
1,
"T"
]
},
{
"op": "/",
"args": [
-1,
"T_ref"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "NH3_aq",
"rhs": {
"op": "*",
"args": [
"H_NH3",
"p_NH3"
]
}
},
{
"lhs": "H_HNO3",
"rhs": {
"op": "*",
"args": [
"H_HNO3_298",
{
"op": "exp",
"args": [
{
"op": "*",
"args": [
{
"op": "/",
"args": [
"dH_H_HNO3",
"R_gas"
]
},
{
"op": "+",
"args": [
{
"op": "/",
"args": [
1,
"T_ref"
]
},
{
"op": "/",
"args": [
-1,
"T"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "K_n1",
"rhs": "K_n1_298"
},
{
"lhs": "HNO3_aq",
"rhs": {
"op": "*",
"args": [
"H_HNO3",
"p_HNO3"
]
}
},
{
"lhs": "H_H2O2",
"rhs": {
"op": "*",
"args": [
"H_H2O2_298",
{
"op": "exp",
"args": [
{
"op": "*",
"args": [
{
"op": "/",
"args": [
"dH_H_H2O2",
"R_gas"
]
},
{
"op": "+",
"args": [
{
"op": "/",
"args": [
1,
"T_ref"
]
},
{
"op": "/",
"args": [
-1,
"T"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "K_h1",
"rhs": "K_h1_298"
},
{
"lhs": "H2O2_aq",
"rhs": {
"op": "*",
"args": [
"H_H2O2",
"p_H2O2"
]
}
},
{
"lhs": "H_O3",
"rhs": {
"op": "*",
"args": [
"H_O3_298",
{
"op": "exp",
"args": [
{
"op": "/",
"args": [
{
"op": "*",
"args": [
"dH_H_O3",
{
"op": "+",
"args": [
{
"op": "/",
"args": [
1,
"T_ref"
]
},
{
"op": "/",
"args": [
-1,
"T"
]
}
]
}
]
},
"R_gas"
]
}
]
}
]
}
},
{
"lhs": "O3_aq",
"rhs": {
"op": "*",
"args": [
"H_O3",
"p_O3"
]
}
},
{
"lhs": "H_plus",
"rhs": {
"op": "^",
"args": [
{
"op": "/",
"args": [
{
"op": "+",
"args": [
"K_w",
{
"op": "*",
"args": [
"K_c1",
"CO2_aq"
]
},
{
"op": "*",
"args": [
"K_s1",
"SO2_aq"
]
},
{
"op": "*",
"args": [
"K_n1",
"HNO3_aq"
]
},
{
"op": "*",
"args": [
"K_h1",
"H2O2_aq"
]
}
]
},
{
"op": "+",
"args": [
1,
{
"op": "/",
"args": [
{
"op": "*",
"args": [
"K_a1",
"NH3_aq"
]
},
"K_w"
]
}
]
}
]
},
0.5
]
}
},
{
"lhs": "OH_minus",
"rhs": {
"op": "/",
"args": [
"K_w",
"H_plus"
]
}
},
{
"lhs": "pH",
"rhs": {
"op": "*",
"args": [
-1,
{
"op": "log10",
"args": [
{
"op": "/",
"args": [
"H_plus",
"C_ref"
]
}
]
}
]
}
},
{
"lhs": "HCO3_minus",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"K_c1",
"CO2_aq"
]
},
"H_plus"
]
}
},
{
"lhs": "CO3_2minus",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"K_c2",
"HCO3_minus"
]
},
"H_plus"
]
}
},
{
"lhs": "C_total",
"rhs": {
"op": "+",
"args": [
"CO2_aq",
"HCO3_minus",
"CO3_2minus"
]
}
},
{
"lhs": "H_CO2_eff",
"rhs": {
"op": "*",
"args": [
"H_CO2",
{
"op": "+",
"args": [
1,
{
"op": "/",
"args": [
"K_c1",
"H_plus"
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
"K_c1",
"K_c2"
]
},
{
"op": "^",
"args": [
"H_plus",
2
]
}
]
}
]
}
]
}
},
{
"lhs": "HSO3_minus",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"K_s1",
"SO2_aq"
]
},
"H_plus"
]
}
},
{
"lhs": "SO3_2minus",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"K_s2",
"HSO3_minus"
]
},
"H_plus"
]
}
},
{
"lhs": "S_IV_total",
"rhs": {
"op": "+",
"args": [
"SO2_aq",
"HSO3_minus",
"SO3_2minus"
]
}
},
{
"lhs": "H_SO2_eff",
"rhs": {
"op": "*",
"args": [
"H_SO2",
{
"op": "+",
"args": [
1,
{
"op": "/",
"args": [
"K_s1",
"H_plus"
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
"K_s1",
"K_s2"
]
},
{
"op": "^",
"args": [
"H_plus",
2
]
}
]
}
]
}
]
}
},
{
"lhs": "alpha_0",
"rhs": {
"op": "/",
"args": [
{
"op": "^",
"args": [
"H_plus",
2
]
},
{
"op": "+",
"args": [
{
"op": "^",
"args": [
"H_plus",
2
]
},
{
"op": "*",
"args": [
"K_s1",
"H_plus"
]
},
{
"op": "*",
"args": [
"K_s1",
"K_s2"
]
}
]
}
]
}
},
{
"lhs": "alpha_1",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"K_s1",
"H_plus"
]
},
{
"op": "+",
"args": [
{
"op": "^",
"args": [
"H_plus",
2
]
},
{
"op": "*",
"args": [
"K_s1",
"H_plus"
]
},
{
"op": "*",
"args": [
"K_s1",
"K_s2"
]
}
]
}
]
}
},
{
"lhs": "alpha_2",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"K_s1",
"K_s2"
]
},
{
"op": "+",
"args": [
{
"op": "^",
"args": [
"H_plus",
2
]
},
{
"op": "*",
"args": [
"K_s1",
"H_plus"
]
},
{
"op": "*",
"args": [
"K_s1",
"K_s2"
]
}
]
}
]
}
},
{
"lhs": "NH4_plus",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"K_a1",
"NH3_aq"
]
},
"OH_minus"
]
}
},
{
"lhs": "NH3_total",
"rhs": {
"op": "+",
"args": [
"NH3_aq",
"NH4_plus"
]
}
},
{
"lhs": "H_NH3_eff",
"rhs": {
"op": "*",
"args": [
"H_NH3",
{
"op": "+",
"args": [
1,
{
"op": "/",
"args": [
{
"op": "*",
"args": [
"K_a1",
"H_plus"
]
},
"K_w"
]
}
]
}
]
}
},
{
"lhs": "NO3_minus",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"K_n1",
"HNO3_aq"
]
},
"H_plus"
]
}
},
{
"lhs": "HNO3_total",
"rhs": {
"op": "+",
"args": [
"HNO3_aq",
"NO3_minus"
]
}
},
{
"lhs": "H_HNO3_eff",
"rhs": {
"op": "*",
"args": [
"H_HNO3",
{
"op": "+",
"args": [
1,
{
"op": "/",
"args": [
"K_n1",
"H_plus"
]
}
]
}
]
}
},
{
"lhs": "HO2_minus",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"K_h1",
"H2O2_aq"
]
},
"H_plus"
]
}
},
{
"lhs": "H2O2_total",
"rhs": {
"op": "+",
"args": [
"H2O2_aq",
"HO2_minus"
]
}
},
{
"lhs": "H_H2O2_eff",
"rhs": {
"op": "*",
"args": [
"H_H2O2",
{
"op": "+",
"args": [
1,
{
"op": "/",
"args": [
"K_h1",
"H_plus"
]
}
]
}
]
}
}
]
},
"sulfate": {
"variables": {
"R_gas": {
"type": "parameter",
"units": "J/mol/K",
"default": 8.31446,
"description": "Universal gas constant — used in the Section 7.4 rate-conversion equations (Eqs. 7.75-7.78). Upstream MTK `@constants` value 8.31446 J/mol/K."
},
"p_total": {
"type": "parameter",
"units": "Pa",
"default": 101325.0,
"description": "Total (standard atmospheric) pressure used in the rate-conversion equations. Upstream MTK `@constants` value 101325.0 Pa = 1 atm."
},
"rho_w_inv": {
"type": "parameter",
"units": "m^3/g",
"default": 1e-06,
"description": "Inverse density of liquid water — converts liquid water content L (g/m^3) to the dimensionless liquid water volume ratio w_L. Upstream MTK `@constants` value 1.0e-6 m^3/g (= 1/(1e6 g/m^3))."
},
"s_per_hr": {
"type": "parameter",
"units": "s",
"default": 3600.0,
"description": "Seconds-per-hour conversion factor for expressing the oxidation rate per hour (Eqs. 7.75-7.76). Upstream MTK `@constants` value 3600.0 s."
},
"ppb_factor": {
"type": "parameter",
"units": "1",
"default": 1000000000.0,
"description": "Parts-per-billion scaling factor for the ppb/hr rate conversion (Eq. 7.75). Dimensionless. Upstream MTK `@constants` value 1.0e9."
},
"pct_factor": {
"type": "parameter",
"units": "1",
"default": 100.0,
"description": "Percent scaling factor for the %/hr rate conversion (Eq. 7.76). Dimensionless. Upstream MTK `@constants` value 100.0."
},
"L": {
"type": "unknown",
"units": "g/m^3",
"default": 0.5,
"description": "Cloud/fog liquid water content — mass of liquid water per unit volume of air. Default 0.5 g/m^3, a representative cloud value (clouds span ~0.1-1 g/m^3). Sets the liquid water volume ratio w_L = rho_w_inv*L. Upstream `@parameters` (no upstream default; authored here)."
},
"xi_SO2": {
"type": "unknown",
"units": "1",
"default": 1e-09,
"description": "Gas-phase SO2 mixing ratio (dimensionless mole fraction). Default 1.0e-9 (1 ppb). Appears in the %/hr conversion (Eq. 7.76) and the SO2 lifetime (Eq. 7.78). Upstream `@parameters` (no upstream default; authored here)."
},
"T": {
"type": "unknown",
"units": "K",
"default": 298.15,
"description": "Air/cloud temperature — feeds the Section 7.4 rate-conversion equations (Eqs. 7.75-7.78). Default 298.15 K. A pure model input (an upstream `@variable` with no defining equation); migrated as a parameter."
},
"H_plus": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.1,
"description": "Hydrogen-ion concentration [H+] of the cloud droplet, setting its pH. Default 0.1 mol/m^3 (1e-4 M, pH 4). Coupled into the h2o2_ox and fe_ox subsystems. A pure model input; migrated as a parameter."
},
"SO2_aq": {
"type": "unknown",
"units": "mol/m^3",
"default": 1e-05,
"description": "Aqueous un-ionized sulfur-dioxide concentration [SO2.H2O]. Default 1.0e-5 mol/m^3. Coupled into the o3_ox subsystem. A pure model input; migrated as a parameter."
},
"HSO3_minus": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.001,
"description": "Bisulfite-ion concentration [HSO3-] — the dominant dissolved-S(IV) species at cloud pH. Default 1.0e-3 mol/m^3. Coupled into BOTH the o3_ox and h2o2_ox subsystems. A pure model input; migrated as a parameter."
},
"SO3_2minus": {
"type": "unknown",
"units": "mol/m^3",
"default": 1e-06,
"description": "Sulfite-ion concentration [SO3^2-] — a trace species, most reactive toward ozone. Default 1.0e-6 mol/m^3. Coupled into the o3_ox subsystem. A pure model input; migrated as a parameter."
},
"S_IV_total": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.001,
"description": "Total dissolved S(IV) concentration ([SO2.H2O] + [HSO3-] + [SO3^2-]) — the substrate for the metal-catalyzed pathways. Default 1.0e-3 mol/m^3. Coupled into the fe_ox, mn_ox and femn_ox subsystems. A pure model input; migrated as a parameter."
},
"O3_aq": {
"type": "unknown",
"units": "mol/m^3",
"default": 1e-06,
"description": "Dissolved (aqueous-phase) ozone concentration [O3(aq)] — the oxidant of the O3 pathway. Default 1.0e-6 mol/m^3. Coupled into the o3_ox subsystem. A pure model input; migrated as a parameter."
},
"H2O2_aq": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.0001,
"description": "Aqueous-phase hydrogen-peroxide concentration [H2O2(aq)] — the oxidant of the H2O2 pathway. Default 1.0e-4 mol/m^3. Coupled into the h2o2_ox subsystem. A pure model input; migrated as a parameter."
},
"Fe_III": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.001,
"description": "Dissolved Fe(III) concentration — the catalyst of the Fe pathway. Default 1.0e-3 mol/m^3. Coupled into the fe_ox and femn_ox subsystems. A pure model input; migrated as a parameter."
},
"Mn_II": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.001,
"description": "Dissolved Mn(II) concentration — the catalyst of the Mn pathway. Default 1.0e-3 mol/m^3. Coupled into the mn_ox and femn_ox subsystems. A pure model input; migrated as a parameter."
},
"R_total": {
"type": "unknown",
"units": "mol/m^3/s",
"description": "Total aqueous S(IV)->S(VI) oxidation rate — the sum of the O3, H2O2 and Fe/Mn-synergism pathway rates: R_total = o3_ox.R_O3 + h2o2_ox.R_H2O2 + femn_ox.R_FeMn. The Fe/Mn synergism subsystem (femn_ox) already carries the Fe-only and Mn-only terms, so the standalone fe_ox.R_Fe and mn_ox.R_Mn rates are deliberately EXCLUDED from the sum to avoid double-counting (upstream comment at sulfate_formation.jl)."
},
"S_VI_production": {
"type": "unknown",
"units": "mol/m^3/s",
"description": "Sulfate (S(VI)) production rate — equal to the total S(IV) oxidation rate R_total (every S(IV) oxidized becomes S(VI))."
},
"w_L": {
"type": "unknown",
"units": "1",
"description": "Liquid water volume ratio (dimensionless) — volume of cloud liquid water per unit volume of air, w_L = rho_w_inv*L."
},
"R_ppb_hr": {
"type": "unknown",
"units": "1",
"description": "Total oxidation rate expressed as an SO2 mixing-ratio loss rate in ppb per hour (Eq. 7.75): R_ppb_hr = 1e9 * 3600 * w_L * R_gas * T * R_total / p_total."
},
"R_percent_hr": {
"type": "unknown",
"units": "1",
"description": "Total oxidation rate expressed as the percentage of the SO2 burden converted per hour (Eq. 7.76): R_percent_hr = 100 * 3600 * R_total * w_L * R_gas * T / (p_total * xi_SO2)."
},
"tau_SO2": {
"type": "unknown",
"units": "s",
"description": "SO2 lifetime against aqueous-phase oxidation (Eq. 7.78) — the e-folding time for gas-phase SO2 removal by in-cloud S(IV) oxidation: tau_SO2 = xi_SO2 * p_total / (w_L * R_gas * T * R_total)."
}
},
"subsystems": {
"o3_ox": {
"variables": {
"k0": {
"type": "parameter",
"units": "m^3/mol/s",
"default": 24.0,
"description": "Rate constant for the SO2.H2O + O3 oxidation channel (Eq. 7.79). Upstream MTK `@constants` value 2.4e4/1000.0 = 24.0 — the literature rate constant 2.4e4 M^-1 s^-1 (module constant K0_O3) converted to SI (1 M^-1 = 1e-3 m^3/mol). Mirrors o3.esm."
},
"k1": {
"type": "parameter",
"units": "m^3/mol/s",
"default": 370.0,
"description": "Rate constant for the HSO3- + O3 oxidation channel (Eq. 7.79). Upstream MTK `@constants` value 3.7e5/1000.0 = 370.0 — the literature rate constant 3.7e5 M^-1 s^-1 (K1_O3) converted to SI. Mirrors o3.esm."
},
"k2": {
"type": "parameter",
"units": "m^3/mol/s",
"default": 1500000.0,
"description": "Rate constant for the SO3^2- + O3 oxidation channel (Eq. 7.79). Upstream MTK `@constants` value 1.5e9/1000.0 = 1500000.0 — the literature rate constant 1.5e9 M^-1 s^-1 (K2_O3) converted to SI; by far the largest of the three, so the O3 channel accelerates sharply as rising droplet pH shifts S(IV) speciation toward sulfite. Mirrors o3.esm."
},
"SO2_aq": {
"type": "unknown",
"units": "mol/m^3",
"default": 1e-05,
"description": "Aqueous un-ionized sulfur-dioxide concentration [SO2.H2O] in the cloud droplet. In the composed model this subsystem input is driven by the coupling equation SulfateFormation.o3_ox.SO2_aq ~ SO2_aq; re-typed parameter -> state (a parameter cannot be an equation LHS). Default 1.0e-5 mol/m^3 seeds the algebraic solve."
},
"HSO3_minus": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.001,
"description": "Bisulfite-ion concentration [HSO3-] in the cloud droplet — the dominant dissolved-S(IV) species at cloud pH ~4-5. Driven by SulfateFormation.o3_ox.HSO3_minus ~ HSO3_minus; re-typed parameter -> state. Default 1.0e-3 mol/m^3."
},
"SO3_2minus": {
"type": "unknown",
"units": "mol/m^3",
"default": 1e-06,
"description": "Sulfite-ion concentration [SO3^2-] in the cloud droplet — a trace species at cloud pH but the most reactive toward ozone. Driven by SulfateFormation.o3_ox.SO3_2minus ~ SO3_2minus; re-typed parameter -> state. Default 1.0e-6 mol/m^3."
},
"O3_aq": {
"type": "unknown",
"units": "mol/m^3",
"default": 1e-06,
"description": "Dissolved (aqueous-phase) ozone concentration [O3(aq)] — the oxidant. Driven by SulfateFormation.o3_ox.O3_aq ~ O3_aq; re-typed parameter -> state. Default 1.0e-6 mol/m^3."
},
"R_O3": {
"type": "unknown",
"units": "mol/m^3/s",
"description": "S(IV)->S(VI) oxidation rate by the O3 pathway (Eqs. 7.79-7.80): R_O3 = (k0*[SO2.H2O] + k1*[HSO3-] + k2*[SO3^2-])*[O3(aq)]. One of the principal in-cloud sulfate-formation routes, dominant at elevated droplet pH."
}
},
"equations": [
{
"_comment": "Eqs. 7.79-7.80 — total aqueous S(IV)+O3 oxidation rate summed over the three dissolved-S(IV) species. Inlined from o3.esm (SulfateFormationO3).",
"lhs": "R_O3",
"rhs": {
"op": "*",
"args": [
{
"op": "+",
"args": [
{
"op": "*",
"args": [
"k0",
"SO2_aq"
]
},
{
"op": "*",
"args": [
"k1",
"HSO3_minus"
]
},
{
"op": "*",
"args": [
"k2",
"SO3_2minus"
]
}
]
},
"O3_aq"
]
}
}
]
},
"h2o2_ox": {
"variables": {
"k": {
"type": "parameter",
"units": "m^6/mol^2/s",
"default": 75.0,
"description": "Rate constant for the S(IV)+H2O2 oxidation pathway (Eq. 7.84). Upstream MTK `@constants` value 7.5e7/1.0e6 = 75.0 — the literature rate constant 7.5e7 M^-2 s^-1 converted to SI (1 M^-2 = 1e-6 (mol/m^3)^-2). Mirrors h2o2.esm."
},
"K_eq": {
"type": "parameter",
"units": "m^3/mol",
"default": 0.013,
"description": "Equilibrium constant in the Eq. 7.84 rate-law denominator — the term 1 + K_eq*[H+] saturates the acid-catalysed rate at high acidity. Upstream MTK `@constants` value 13.0/1000.0 = 0.013 — the literature constant 13 M^-1 converted to SI. Mirrors h2o2.esm."
},
"H_plus": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.1,
"description": "Hydrogen-ion concentration [H+] of the cloud droplet. Driven by SulfateFormation.h2o2_ox.H_plus ~ H_plus; re-typed parameter -> state. Default 0.1 mol/m^3 (1e-4 M, pH 4)."
},
"H2O2_aq": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.0001,
"description": "Aqueous-phase hydrogen-peroxide concentration [H2O2(aq)] in the cloud droplet. Driven by SulfateFormation.h2o2_ox.H2O2_aq ~ H2O2_aq; re-typed parameter -> state. Default 1.0e-4 mol/m^3."
},
"HSO3_minus": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.001,
"description": "Bisulfite-ion concentration [HSO3-] — the limiting reactant for this pathway. Driven by SulfateFormation.h2o2_ox.HSO3_minus ~ HSO3_minus; re-typed parameter -> state. Default 1.0e-3 mol/m^3. Shares the top-level HSO3_minus input with the o3_ox subsystem."
},
"R_H2O2": {
"type": "unknown",
"units": "mol/m^3/s",
"description": "S(IV)->S(VI) oxidation rate by the H2O2 pathway (Eq. 7.84): R_H2O2 = k*[H+]*[H2O2]*[HSO3-]/(1+K_eq*[H+]). The dominant aqueous sulfate-formation pathway at low pH, where the competing O3 pathway is slow."
}
},
"equations": [
{
"_comment": "Eq. 7.84 — aqueous S(IV)+H2O2 oxidation rate. Inlined from h2o2.esm (SulfateFormationH2O2).",
"lhs": "R_H2O2",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"k",
"H_plus",
"H2O2_aq",
"HSO3_minus"
]
},
{
"op": "+",
"args": [
1,
{
"op": "*",
"args": [
"K_eq",
"H_plus"
]
}
]
}
]
}
}
]
},
"fe_ox": {
"variables": {
"k_low_pH": {
"type": "parameter",
"units": "s^-1",
"default": 6.0,
"description": "Rate constant for the Fe(III)-catalyzed S(IV) oxidation in the low-pH regime (pH 0-3.6), Eq. 7.92. Upstream MTK `@constants` value 6.0 s^-1. Mirrors fe.esm."
},
"H_plus": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.1,
"description": "Hydrogen-ion concentration [H+] of the cloud droplet. Driven by SulfateFormation.fe_ox.H_plus ~ H_plus; re-typed parameter -> state. Default 0.1 mol/m^3."
},
"Fe_III": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.001,
"description": "Dissolved Fe(III) concentration — the catalyst of this oxidation pathway. Driven by SulfateFormation.fe_ox.Fe_III ~ Fe_III; re-typed parameter -> state. Default 1.0e-3 mol/m^3."
},
"S_IV_total": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.001,
"description": "Total dissolved S(IV) concentration — the substrate oxidized to S(VI). Driven by SulfateFormation.fe_ox.S_IV_total ~ S_IV_total; re-typed parameter -> state. Default 1.0e-3 mol/m^3."
},
"R_Fe": {
"type": "unknown",
"units": "mol/m^3/s",
"description": "S(IV)->S(VI) oxidation rate by Fe(III)-catalyzed dissolved O2 (Eq. 7.92, low-pH regime): R_Fe = k_low_pH*[Fe(III)]*[S(IV)]/[H+]. NOTE: this standalone Fe-only rate is NOT summed into the model's R_total — the femn_ox subsystem already carries an Fe-only term, and using femn_ox avoids double-counting. fe_ox is retained for diagnostic comparison. Migrated equations-form (type: state + equation), not the observed-form used by the standalone fe.esm, because a composed model carries its relations as equations."
}
},
"equations": [
{
"_comment": "Eq. 7.92 — Fe(III)-catalyzed S(IV) oxidation rate (low-pH regime). Inlined from fe.esm (SulfateFormationFe), with the output re-expressed in equations-form.",
"lhs": "R_Fe",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"k_low_pH",
"Fe_III",
"S_IV_total"
]
},
"H_plus"
]
}
}
]
},
"mn_ox": {
"variables": {
"k0": {
"type": "parameter",
"units": "m^3/mol/s",
"default": 1.0,
"description": "Rate constant for the low-S(IV)-regime Mn(II)-catalyzed S(IV) oxidation (Eq. 7.101). Upstream MTK `@constants` value 1000.0/1000.0 = 1.0 — the literature value 1000 M^-1 s^-1 converted to SI. Mirrors mn.esm."
},
"Mn_II": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.001,
"description": "Dissolved Mn(II) concentration — the transition-metal catalyst. Driven by SulfateFormation.mn_ox.Mn_II ~ Mn_II; re-typed parameter -> state. Default 1.0e-3 mol/m^3."
},
"S_IV_total": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.001,
"description": "Total dissolved S(IV) concentration. Driven by SulfateFormation.mn_ox.S_IV_total ~ S_IV_total; re-typed parameter -> state. Default 1.0e-3 mol/m^3."
},
"R_Mn": {
"type": "unknown",
"units": "mol/m^3/s",
"description": "S(IV)->S(VI) oxidation rate by the Mn(II)-catalyzed O2 pathway (Eq. 7.101): R_Mn = k0*[Mn(II)]*[S(IV)]. NOTE: this standalone Mn-only rate is NOT summed into R_total — femn_ox already carries an Mn-only term. mn_ox is retained for diagnostic comparison. Migrated equations-form (type: state + equation), not the observed-form used by the standalone mn.esm."
}
},
"equations": [
{
"_comment": "Eq. 7.101 — Mn(II)-catalyzed S(IV) oxidation rate (low-S(IV) regime). Inlined from mn.esm (SulfateFormationMn), with the output re-expressed in equations-form.",
"lhs": "R_Mn",
"rhs": {
"op": "*",
"args": [
"k0",
"Mn_II",
"S_IV_total"
]
}
}
]
},
"femn_ox": {
"variables": {
"k_Mn": {
"type": "parameter",
"units": "m^3/mol/s",
"default": 0.75,
"description": "Rate constant for the Mn-only term of the Fe/Mn synergism rate law (Eq. 7.102). Upstream MTK `@constants` value 750.0/1000.0 = 0.75 — the literature value 750 M^-1 s^-1 converted to SI."
},
"k_Fe": {
"type": "parameter",
"units": "m^3/mol/s",
"default": 2.6,
"description": "Rate constant for the Fe-only term of the Fe/Mn synergism rate law (Eq. 7.102). Upstream MTK `@constants` value 2600.0/1000.0 = 2.6 — the literature value 2600 M^-1 s^-1 converted to SI."
},
"k_FeMn": {
"type": "parameter",
"units": "m^6/mol^2/s",
"default": 10000.0,
"description": "Rate constant for the synergistic Fe.Mn term of the Fe/Mn synergism rate law (Eq. 7.102). Upstream MTK `@constants` value 1.0e10/1.0e6 = 10000.0 — the literature value 1.0e10 M^-2 s^-1 converted to SI (1 M^-2 = 1e-6 (mol/m^3)^-2). The large coefficient represents the greatly enhanced oxidation when both Fe(III) and Mn(II) are present."
},
"Mn_II": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.001,
"description": "Dissolved Mn(II) concentration. Driven by SulfateFormation.femn_ox.Mn_II ~ Mn_II; re-typed parameter -> state. Default 1.0e-3 mol/m^3."
},
"Fe_III": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.001,
"description": "Dissolved Fe(III) concentration. Driven by SulfateFormation.femn_ox.Fe_III ~ Fe_III; re-typed parameter -> state. Default 1.0e-3 mol/m^3."
},
"S_IV_total": {
"type": "unknown",
"units": "mol/m^3",
"default": 0.001,
"description": "Total dissolved S(IV) concentration. Driven by SulfateFormation.femn_ox.S_IV_total ~ S_IV_total; re-typed parameter -> state. Default 1.0e-3 mol/m^3."
},
"R_Mn_term": {
"type": "unknown",
"units": "mol/m^3/s",
"description": "Mn-only contribution to the Fe/Mn synergism rate (Eq. 7.102): k_Mn*[Mn(II)]*[S(IV)]."
},
"R_Fe_term": {
"type": "unknown",
"units": "mol/m^3/s",
"description": "Fe-only contribution to the Fe/Mn synergism rate (Eq. 7.102): k_Fe*[Fe(III)]*[S(IV)]."
},
"R_synergy_term": {
"type": "unknown",
"units": "mol/m^3/s",
"description": "Synergistic contribution to the Fe/Mn rate (Eq. 7.102): k_FeMn*[Mn(II)]*[Fe(III)]*[S(IV)]. The greatly enhanced channel that operates only when both transition metals are present; typically the largest of the three terms."
},
"R_FeMn": {
"type": "unknown",
"units": "mol/m^3/s",
"description": "Total S(IV)->S(VI) oxidation rate with Fe/Mn synergism (Eq. 7.102): the sum of the Mn-only, Fe-only and synergistic terms. This is the Fe/Mn term used in the model's R_total (replacing the standalone fe_ox/mn_ox rates to avoid double-counting)."
}
},
"equations": [
{
"_comment": "Eq. 7.102 — Mn-only term of the Fe/Mn synergism rate law.",
"lhs": "R_Mn_term",
"rhs": {
"op": "*",
"args": [
"k_Mn",
"Mn_II",
"S_IV_total"
]
}
},
{
"_comment": "Eq. 7.102 — Fe-only term of the Fe/Mn synergism rate law.",
"lhs": "R_Fe_term",
"rhs": {
"op": "*",
"args": [
"k_Fe",
"Fe_III",
"S_IV_total"
]
}
},
{
"_comment": "Eq. 7.102 — synergistic Fe.Mn term of the Fe/Mn synergism rate law.",
"lhs": "R_synergy_term",
"rhs": {
"op": "*",
"args": [
"k_FeMn",
"Mn_II",
"Fe_III",
"S_IV_total"
]
}
},
{
"_comment": "Eq. 7.102 — total Fe/Mn-synergism oxidation rate (sum of the three terms).",
"lhs": "R_FeMn",
"rhs": {
"op": "+",
"args": [
"R_Mn_term",
"R_Fe_term",
"R_synergy_term"
]
}
}
]
}
},
"equations": [
{
"_comment": "Coupling equation — feed the top-level input SO2_aq into the o3_ox subsystem.",
"lhs": "CloudChemistry.sulfate.o3_ox.SO2_aq",
"rhs": "SO2_aq"
},
{
"_comment": "Coupling equation — feed the top-level input HSO3_minus into the o3_ox subsystem.",
"lhs": "CloudChemistry.sulfate.o3_ox.HSO3_minus",
"rhs": "HSO3_minus"
},
{
"_comment": "Coupling equation — feed the top-level input SO3_2minus into the o3_ox subsystem.",
"lhs": "CloudChemistry.sulfate.o3_ox.SO3_2minus",
"rhs": "SO3_2minus"
},
{
"_comment": "Coupling equation — feed the top-level input O3_aq into the o3_ox subsystem.",
"lhs": "CloudChemistry.sulfate.o3_ox.O3_aq",
"rhs": "O3_aq"
},
{
"_comment": "Coupling equation — feed the top-level input H_plus into the h2o2_ox subsystem.",
"lhs": "CloudChemistry.sulfate.h2o2_ox.H_plus",
"rhs": "H_plus"
},
{
"_comment": "Coupling equation — feed the top-level input H2O2_aq into the h2o2_ox subsystem.",
"lhs": "CloudChemistry.sulfate.h2o2_ox.H2O2_aq",
"rhs": "H2O2_aq"
},
{
"_comment": "Coupling equation — feed the top-level input HSO3_minus into the h2o2_ox subsystem.",
"lhs": "CloudChemistry.sulfate.h2o2_ox.HSO3_minus",
"rhs": "HSO3_minus"
},
{
"_comment": "Coupling equation — feed the top-level input H_plus into the fe_ox subsystem.",
"lhs": "CloudChemistry.sulfate.fe_ox.H_plus",
"rhs": "H_plus"
},
{
"_comment": "Coupling equation — feed the top-level input Fe_III into the fe_ox subsystem.",
"lhs": "CloudChemistry.sulfate.fe_ox.Fe_III",
"rhs": "Fe_III"
},
{
"_comment": "Coupling equation — feed the top-level input S_IV_total into the fe_ox subsystem.",
"lhs": "CloudChemistry.sulfate.fe_ox.S_IV_total",
"rhs": "S_IV_total"
},
{
"_comment": "Coupling equation — feed the top-level input Mn_II into the mn_ox subsystem.",
"lhs": "CloudChemistry.sulfate.mn_ox.Mn_II",
"rhs": "Mn_II"
},
{
"_comment": "Coupling equation — feed the top-level input S_IV_total into the mn_ox subsystem.",
"lhs": "CloudChemistry.sulfate.mn_ox.S_IV_total",
"rhs": "S_IV_total"
},
{
"_comment": "Coupling equation — feed the top-level input Mn_II into the femn_ox subsystem.",
"lhs": "CloudChemistry.sulfate.femn_ox.Mn_II",
"rhs": "Mn_II"
},
{
"_comment": "Coupling equation — feed the top-level input Fe_III into the femn_ox subsystem.",
"lhs": "CloudChemistry.sulfate.femn_ox.Fe_III",
"rhs": "Fe_III"
},
{
"_comment": "Coupling equation — feed the top-level input S_IV_total into the femn_ox subsystem.",
"lhs": "CloudChemistry.sulfate.femn_ox.S_IV_total",
"rhs": "S_IV_total"
},
{
"_comment": "Total S(IV) oxidation rate — sum of the O3, H2O2 and Fe/Mn-synergism pathway rates. The fe_ox and mn_ox standalone rates are excluded: femn_ox already includes Fe-only and Mn-only terms, so using it avoids double-counting (upstream comment).",
"lhs": "R_total",
"rhs": {
"op": "+",
"args": [
"CloudChemistry.sulfate.o3_ox.R_O3",
"CloudChemistry.sulfate.h2o2_ox.R_H2O2",
"CloudChemistry.sulfate.femn_ox.R_FeMn"
]
}
},
{
"_comment": "Sulfate production equals the S(IV) oxidation rate.",
"lhs": "S_VI_production",
"rhs": "R_total"
},
{
"_comment": "Liquid water volume ratio (dimensionless): w_L = rho_w_inv * L.",
"lhs": "w_L",
"rhs": {
"op": "*",
"args": [
"rho_w_inv",
"L"
]
}
},
{
"_comment": "Eq. 7.75 — rate conversion to ppb/hr: R_ppb_hr = ppb_factor * s_per_hr * w_L * R_gas * T * R_total / p_total.",
"lhs": "R_ppb_hr",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"ppb_factor",
"s_per_hr",
"w_L",
"R_gas",
"T",
"R_total"
]
},
"p_total"
]
}
},
{
"_comment": "Eq. 7.76 — rate conversion to %/hr: R_percent_hr = pct_factor * s_per_hr * R_total * w_L * R_gas * T / (p_total * xi_SO2).",
"lhs": "R_percent_hr",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"pct_factor",
"s_per_hr",
"R_total",
"w_L",
"R_gas",
"T"
]
},
{
"op": "*",
"args": [
"p_total",
"xi_SO2"
]
}
]
}
},
{
"_comment": "Eq. 7.78 — SO2 lifetime: tau_SO2 = xi_SO2 * p_total / (w_L * R_gas * T * R_total).",
"lhs": "tau_SO2",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"xi_SO2",
"p_total"
]
},
{
"op": "*",
"args": [
"w_L",
"R_gas",
"T",
"R_total"
]
}
]
}
}
]
}
},
"equations": [
{
"_comment": "Temperature couples into the AqueousEquilibria subsystem for van't Hoff corrections.",
"lhs": "CloudChemistry.aq_eq.T",
"rhs": "T"
},
{
"_comment": "CO2 partial pressure drives CO2 dissolution and CO2/carbonate equilibria.",
"lhs": "CloudChemistry.aq_eq.p_CO2",
"rhs": "p_CO2"
},
{
"_comment": "SO2 partial pressure drives SO2 dissolution and S(IV) speciation.",
"lhs": "CloudChemistry.aq_eq.p_SO2",
"rhs": "p_SO2"
},
{
"_comment": "NH3 partial pressure drives NH3 dissolution and NH4+ formation (pH buffer).",
"lhs": "CloudChemistry.aq_eq.p_NH3",
"rhs": "p_NH3"
},
{
"_comment": "HNO3 partial pressure drives HNO3 dissolution and NO3- formation (acidifying).",
"lhs": "CloudChemistry.aq_eq.p_HNO3",
"rhs": "p_HNO3"
},
{
"_comment": "H2O2 partial pressure drives H2O2 dissolution (oxidant and HO2- contributor).",
"lhs": "CloudChemistry.aq_eq.p_H2O2",
"rhs": "p_H2O2"
},
{
"_comment": "O3 partial pressure drives O3 dissolution (sparingly soluble oxidant).",
"lhs": "CloudChemistry.aq_eq.p_O3",
"rhs": "p_O3"
},
{
"_comment": "H+ concentration aliased from aq_eq — computed by the quadratic charge-balance from all dissolved ions.",
"lhs": "H_plus",
"rhs": "CloudChemistry.aq_eq.H_plus"
},
{
"_comment": "OH- aliased from aq_eq.OH_minus = K_w(T) / H_plus.",
"lhs": "OH_minus",
"rhs": "CloudChemistry.aq_eq.OH_minus"
},
{
"_comment": "pH aliased from aq_eq.pH = -log10(H_plus / C_ref).",
"lhs": "pH",
"rhs": "CloudChemistry.aq_eq.pH"
},
{
"_comment": "Aqueous SO2 ([SO2·H2O]) aliased from aq_eq.SO2_aq = H_SO2(T) × p_SO2.",
"lhs": "SO2_aq",
"rhs": "CloudChemistry.aq_eq.SO2_aq"
},
{
"_comment": "Bisulfite [HSO3-] aliased from aq_eq.HSO3_minus.",
"lhs": "HSO3_minus",
"rhs": "CloudChemistry.aq_eq.HSO3_minus"
},
{
"_comment": "Sulfite [SO3²-] aliased from aq_eq.SO3_2minus.",
"lhs": "SO3_2minus",
"rhs": "CloudChemistry.aq_eq.SO3_2minus"
},
{
"_comment": "Aqueous H2O2 aliased from aq_eq.H2O2_aq = H_H2O2(T) × p_H2O2.",
"lhs": "H2O2_aq",
"rhs": "CloudChemistry.aq_eq.H2O2_aq"
},
{
"_comment": "Aqueous O3 aliased from aq_eq.O3_aq = H_O3(T) × p_O3.",
"lhs": "O3_aq",
"rhs": "CloudChemistry.aq_eq.O3_aq"
},
{
"_comment": "Total S(IV) (SO2_aq + HSO3_minus + SO3_2minus) aliased from aq_eq.S_IV_total.",
"lhs": "S_IV_total",
"rhs": "CloudChemistry.aq_eq.S_IV_total"
},
{
"_comment": "Temperature couples into SulfateFormation for the rate conversion equations.",
"lhs": "CloudChemistry.sulfate.T",
"rhs": "T"
},
{
"_comment": "H+ from charge-balance couples into SulfateFormation (drives H2O2 pathway rate).",
"lhs": "CloudChemistry.sulfate.H_plus",
"rhs": "H_plus"
},
{
"_comment": "Aqueous SO2 couples into SulfateFormation's O3 oxidation pathway.",
"lhs": "CloudChemistry.sulfate.SO2_aq",
"rhs": "SO2_aq"
},
{
"_comment": "Bisulfite couples into SulfateFormation (O3 and H2O2 pathway reactant).",
"lhs": "CloudChemistry.sulfate.HSO3_minus",
"rhs": "HSO3_minus"
},
{
"_comment": "Sulfite couples into SulfateFormation (O3 pathway reactant, large k2).",
"lhs": "CloudChemistry.sulfate.SO3_2minus",
"rhs": "SO3_2minus"
},
{
"_comment": "Total S(IV) couples into SulfateFormation (Fe/Mn pathway reactant).",
"lhs": "CloudChemistry.sulfate.S_IV_total",
"rhs": "S_IV_total"
},
{
"_comment": "Aqueous O3 couples into SulfateFormation's O3 oxidation pathway.",
"lhs": "CloudChemistry.sulfate.O3_aq",
"rhs": "O3_aq"
},
{
"_comment": "Aqueous H2O2 couples into SulfateFormation's H2O2 oxidation pathway.",
"lhs": "CloudChemistry.sulfate.H2O2_aq",
"rhs": "H2O2_aq"
},
{
"_comment": "Fe(III) catalyst couples into SulfateFormation for the Fe/Mn synergism pathway.",
"lhs": "CloudChemistry.sulfate.Fe_III",
"rhs": "Fe_III"
},
{
"_comment": "Mn(II) catalyst couples into SulfateFormation for the Fe/Mn synergism pathway.",
"lhs": "CloudChemistry.sulfate.Mn_II",
"rhs": "Mn_II"
},
{
"_comment": "Cloud LWC couples into SulfateFormation for rate conversion (Eq. 7.75-7.78).",
"lhs": "CloudChemistry.sulfate.L",
"rhs": "L"
},
{
"_comment": "SO2 mixing ratio couples into SulfateFormation for %/hr rate and SO2 lifetime.",
"lhs": "CloudChemistry.sulfate.xi_SO2",
"rhs": "xi_SO2"
},
{
"_comment": "Total S(IV) oxidation rate aliased from sulfate.R_total = O3 + H2O2 + FeMn pathways.",
"lhs": "R_total",
"rhs": "CloudChemistry.sulfate.R_total"
},
{
"_comment": "O3 pathway rate aliased from sulfate.o3_ox.R_O3 (Eq. 7.79).",
"lhs": "R_O3",
"rhs": "CloudChemistry.sulfate.o3_ox.R_O3"
},
{
"_comment": "H2O2 pathway rate aliased from sulfate.h2o2_ox.R_H2O2 (Eq. 7.84).",
"lhs": "R_H2O2",
"rhs": "CloudChemistry.sulfate.h2o2_ox.R_H2O2"
},
{
"_comment": "Fe/Mn synergism rate aliased from sulfate.femn_ox.R_FeMn (Eq. 7.102).",
"lhs": "R_FeMn",
"rhs": "CloudChemistry.sulfate.femn_ox.R_FeMn"
}
],
"tests": [
{
"id": "charge_balance_co2_so2_298K",
"description": "CO2+SO2 charge balance at 298 K. With p_CO2=40 Pa (≈400 ppm) and p_SO2=0.001 Pa, the AqueousEquilibria quadratic charge-balance gives H⁺ = √((K_w + K_s1·SO2_aq)/1) ≈ 0.01279 mol/m³ (pH≈4.89), NOT the 0.1 mol/m³ (pH 4) that CloudChemistryFixedpH would use with pH_input=4.0. The higher pH gives larger HSO3⁻ and S_IV_total concentrations. Fe_III and Mn_II active; R_total = R_FeMn (no H2O2 or O3 oxidants present).",
"parameter_overrides": {
"T": 298.0,
"p_CO2": 40.0,
"p_SO2": 0.001,
"p_NH3": 0.0,
"p_HNO3": 0.0,
"p_H2O2": 0.0,
"p_O3": 0.0,
"Fe_III": 0.001,
"Mn_II": 0.001
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "CloudChemistry.H_plus",
"time": 0.0,
"expected": 0.012790252,
"tolerance": {
"rel": 0.0001
}
},
{
"variable": "CloudChemistry.pH",
"time": 0.0,
"expected": 4.8931209,
"tolerance": {
"rel": 0.0001
}
},
{
"variable": "CloudChemistry.SO2_aq",
"time": 0.0,
"expected": 1.2139156e-05,
"tolerance": {
"rel": 0.0001
}
},
{
"variable": "CloudChemistry.HSO3_minus",
"time": 0.0,
"expected": 0.012338226,
"tolerance": {
"rel": 0.0001
}
},
{
"variable": "CloudChemistry.SO3_2minus",
"time": 0.0,
"expected": 6.3667464e-05,
"tolerance": {
"rel": 0.0001
}
},
{
"variable": "CloudChemistry.S_IV_total",
"time": 0.0,
"expected": 0.012414033,
"tolerance": {
"rel": 0.0001
}
},
{
"variable": "CloudChemistry.R_FeMn",
"time": 0.0,
"expected": 0.00016572734,
"tolerance": {
"rel": 0.001
}
},
{
"variable": "CloudChemistry.R_total",
"time": 0.0,
"expected": 0.00016572734,
"tolerance": {
"rel": 0.001
}
}
]
},
{
"id": "nh3_buffers_acidity_298K",
"description": "NH3 buffering at 298 K (p_CO2=40 Pa, p_SO2=0.001 Pa, p_NH3=0.001 Pa). NH3 dissolves and forms NH4⁺ (a base), raising pH from ~4.89 (CO2+SO2 only) to 6.40. At the higher pH, SO2 speciation shifts dramatically: HSO3⁻ rises from 0.012 to 0.398 mol/m³ and SO3²⁻ from 6.4e-5 to 0.066 mol/m³. The Fe/Mn oxidation rate also increases due to the larger S_IV_total (0.464 mol/m³).",
"parameter_overrides": {
"T": 298.0,
"p_CO2": 40.0,
"p_SO2": 0.001,
"p_NH3": 0.001,
"p_HNO3": 0.0,
"p_H2O2": 0.0,
"p_O3": 0.0,
"Fe_III": 0.001,
"Mn_II": 0.001
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "CloudChemistry.H_plus",
"time": 0.0,
"expected": 0.00039637702,
"tolerance": {
"rel": 0.001
}
},
{
"variable": "CloudChemistry.pH",
"time": 0.0,
"expected": 6.4018915,
"tolerance": {
"rel": 0.0001
}
},
{
"variable": "CloudChemistry.HSO3_minus",
"time": 0.0,
"expected": 0.39812861,
"tolerance": {
"rel": 0.001
}
},
{
"variable": "CloudChemistry.S_IV_total",
"time": 0.0,
"expected": 0.4644324,
"tolerance": {
"rel": 0.001
}
},
{
"variable": "CloudChemistry.R_total",
"time": 0.0,
"expected": 0.0062001726,
"tolerance": {
"rel": 0.001
}
}
]
},
{
"id": "h2o2_pathway_isolated_298K",
"description": "H2O2 pathway in isolation at 298 K (p_CO2=40 Pa, p_SO2=0.001 Pa, p_H2O2=1.01325e-4 Pa, Fe_III=Mn_II=0, p_O3=0). R_O3 and R_FeMn are zero; R_total = R_H2O2 only. H2O2 is highly soluble (H_H2O2≈987 mol/m³/Pa) giving H2O2_aq≈0.1 mol/m³. The H⁺ from charge balance (0.01279 mol/m³, pH≈4.89) enters the H2O2 rate law Eq. 7.84: R_H2O2 = k·[H⁺]·[H2O2]·[HSO3⁻]/(1+K·[H⁺]).",
"parameter_overrides": {
"T": 298.0,
"p_CO2": 40.0,
"p_SO2": 0.001,
"p_NH3": 0.0,
"p_HNO3": 0.0,
"p_H2O2": 0.000101325,
"p_O3": 0.0,
"Fe_III": 0.0,
"Mn_II": 0.0
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "CloudChemistry.H_plus",
"time": 0.0,
"expected": 0.012790261,
"tolerance": {
"rel": 0.0001
}
},
{
"variable": "CloudChemistry.H2O2_aq",
"time": 0.0,
"expected": 0.1,
"tolerance": {
"rel": 0.001
}
},
{
"variable": "CloudChemistry.R_H2O2",
"time": 0.0,
"expected": 0.001183371,
"tolerance": {
"rel": 0.001
}
},
{
"variable": "CloudChemistry.R_O3",
"time": 0.0,
"expected": 0.0,
"tolerance": {
"abs": 1e-15
}
},
{
"variable": "CloudChemistry.R_FeMn",
"time": 0.0,
"expected": 0.0,
"tolerance": {
"abs": 1e-15
}
},
{
"variable": "CloudChemistry.R_total",
"time": 0.0,
"expected": 0.001183371,
"tolerance": {
"rel": 0.001
}
}
]
},
{
"id": "o3_pathway_high_ph_298K",
"description": "O3 pathway at high pH at 298 K (p_CO2=40 Pa, p_SO2=0.001 Pa, p_NH3=0.001 Pa, p_O3=5.066e-3 Pa ≈50 ppb, Fe_III=Mn_II=0, p_H2O2=0). NH3 raises pH to 6.40, increasing SO3²⁻ (which has the largest k2 rate constant in Eq. 7.79). R_total = R_O3 alone; both R_H2O2 and R_FeMn vanish.",
"parameter_overrides": {
"T": 298.0,
"p_CO2": 40.0,
"p_SO2": 0.001,
"p_NH3": 0.001,
"p_HNO3": 0.0,
"p_H2O2": 0.0,
"p_O3": 0.005066,
"Fe_III": 0.0,
"Mn_II": 0.0
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "CloudChemistry.pH",
"time": 0.0,
"expected": 6.4018915,
"tolerance": {
"rel": 0.0001
}
},
{
"variable": "CloudChemistry.O3_aq",
"time": 0.0,
"expected": 5.4997286e-07,
"tolerance": {
"rel": 0.001
}
},
{
"variable": "CloudChemistry.R_O3",
"time": 0.0,
"expected": 0.054768931,
"tolerance": {
"rel": 0.001
}
},
{
"variable": "CloudChemistry.R_H2O2",
"time": 0.0,
"expected": 0.0,
"tolerance": {
"abs": 1e-15
}
},
{
"variable": "CloudChemistry.R_FeMn",
"time": 0.0,
"expected": 0.0,
"tolerance": {
"abs": 1e-15
}
},
{
"variable": "CloudChemistry.R_total",
"time": 0.0,
"expected": 0.054768931,
"tolerance": {
"rel": 0.001
}
}
]
},
{
"id": "full_system_default",
"description": "Full CloudChemistry system at default parameters (T=298.15 K, p_CO2=38.5 Pa, p_SO2=1 ppb, p_NH3=1 ppb, p_HNO3=0, p_H2O2=1 ppb, p_O3=50 ppb, Fe_III=Mn_II=1e-3 mol/m³). All three oxidation pathways (O3, H2O2, FeMn) are active. NH3 buffers the SO2 acidity, giving pH≈6.35. The O3 pathway dominates at this pH.",
"parameter_overrides": {
"T": 298.15
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "CloudChemistry.H_plus",
"time": 0.0,
"expected": 0.00045091223,
"tolerance": {
"rel": 0.001
}
},
{
"variable": "CloudChemistry.pH",
"time": 0.0,
"expected": 6.345908,
"tolerance": {
"rel": 0.001
}
},
{
"variable": "CloudChemistry.HSO3_minus",
"time": 0.0,
"expected": 0.035149191,
"tolerance": {
"rel": 0.001
}
},
{
"variable": "CloudChemistry.R_O3",
"time": 0.0,
"expected": 0.0042252258,
"tolerance": {
"rel": 0.001
}
},
{
"variable": "CloudChemistry.R_H2O2",
"time": 0.0,
"expected": 0.0001174129,
"tolerance": {
"rel": 0.001
}
},
{
"variable": "CloudChemistry.R_FeMn",
"time": 0.0,
"expected": 0.00053781091,
"tolerance": {
"rel": 0.001
}
},
{
"variable": "CloudChemistry.R_total",
"time": 0.0,
"expected": 0.0048804496,
"tolerance": {
"rel": 0.001
}
}
]
},
{
"id": "subsystem_path_access",
"description": "Verifies that the aq_eq subsystem's internal variables are accessible via dotted paths (e.g. CloudChemistry.aq_eq.K_w, CloudChemistry.aq_eq.H_plus). Also verifies that the sulfate sub-subsystem paths work (CloudChemistry.sulfate.o3_ox.R_O3 equals the top-level R_O3 alias). Uses the o3_pathway_high_pH scenario.",
"parameter_overrides": {
"T": 298.0,
"p_CO2": 40.0,
"p_SO2": 0.001,
"p_NH3": 0.001,
"p_HNO3": 0.0,
"p_H2O2": 0.0,
"p_O3": 0.005066,
"Fe_III": 0.0,
"Mn_II": 0.0
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "CloudChemistry.aq_eq.H_plus",
"time": 0.0,
"expected": 0.00039637702,
"tolerance": {
"rel": 0.001
}
},
{
"variable": "CloudChemistry.aq_eq.K_w",
"time": 0.0,
"expected": 1e-08,
"tolerance": {
"rel": 0.0001
}
},
{
"variable": "CloudChemistry.sulfate.o3_ox.R_O3",
"time": 0.0,
"expected": 0.054768931,
"tolerance": {
"rel": 0.001
}
}
]
}
]
}