Version: dev

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.

Domain
aerosol
Subdomain
cloud_chemistry
Type
model
.esm schema
1.0.0
Source
components/aerosol/cloud_chemistry/cloud_chemistry.esm
Tags
#aerosol #cloud_chemistry #model #aqueous_phase #seinfeld_pandis_ch7 #charge_balance #electroneutrality #sulfate_formation #composed

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

NameUnitsDefaultDescription
TK298.15Cloud/air temperature. Drives van’t Hoff corrections in the AqueousEquilibria subsystem and rate-conversion equations in SulfateFormation. Default 298.15 K (25°C).
p_CO2Pa38.5Partial pressure of CO2. Default 38.5 Pa ≈ 380 ppm in 1 atm. Drives CO2 dissolution and carbonate equilibria in the aq_eq subsystem.
p_SO2Pa0.000101325Partial 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_NH3Pa0.000101325Partial 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_HNO3Pa0.0Partial 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_H2O2Pa0.000101325Partial 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_O3Pa0.005066Partial 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_IIImol/m^30.001Fe(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_IImol/m^30.001Mn(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).
Lg/m^30.5Cloud 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_SO211e-09Gas-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

NameUnitsDefaultDescription
H_plusmol/m^3Hydrogen 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_minusmol/m^3Hydroxide concentration, aliased from aq_eq.OH_minus = K_w(T) / H_plus.
pH1pH value (dimensionless), aliased from aq_eq.pH = -log10(H_plus / C_ref).
SO2_aqmol/m^3Aqueous 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_minusmol/m^3Bisulfite [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_2minusmol/m^3Sulfite [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_aqmol/m^3Aqueous H2O2 concentration, aliased from aq_eq.H2O2_aq = H_H2O2(T) × p_H2O2. H2O2 is highly soluble. Couples into the H2O2 oxidation pathway.
O3_aqmol/m^3Aqueous 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_totalmol/m^3Total S(IV) concentration (SO2_aq + HSO3_minus + SO3_2minus), aliased from aq_eq.S_IV_total. Used in the Fe/Mn synergism pathway.
R_totalmol/m^3/sTotal 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_O3mol/m^3/sS(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_H2O2mol/m^3/sS(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_FeMnmol/m^3/sS(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
          }
        }
      ]
    }
  ]
}