Version: dev

BrownianCoagulationCoefficient

Brownian coagulation coefficient K_12 for two particles using the Fuchs interpolation formula (Seinfeld & Pandis 2006, Table 13.1). Valid across the continuum, transition, and free-molecular regimes. Computes Knudsen numbers, Cunningham slip corrections, Brownian diffusion coefficients, mean thermal velocities, particle mean free paths, and the Fuchs interpolation parameters g_1, g_2 as intermediate observed variables before assembling K_12. Migrated from Aerosol.jl src/dynamics.jl:75.

Domain
aerosol
Subdomain
dynamics
Type
model
.esm schema
1.0.0
Source
components/aerosol/dynamics/brownian_coag_coeff.esm
Tags
#aerosol #dynamics #model #coagulation #brownian #fuchs #seinfeld-pandis

Description

Brownian coagulation coefficient K_12 for two particles using the Fuchs interpolation formula (Seinfeld & Pandis 2006, Table 13.1). Valid across the continuum, transition, and free-molecular regimes. Computes Knudsen numbers, Cunningham slip corrections, Brownian diffusion coefficients, mean thermal velocities, particle mean free paths, and the Fuchs interpolation parameters g_1, g_2 as intermediate observed variables before assembling K_12. Migrated from Aerosol.jl src/dynamics.jl:75.

Reference

Seinfeld, J. H. and Pandis, S. N. (2006) Atmospheric Chemistry and Physics, 2nd Edition, Chapter 13, Table 13.1 and Eq. 13.47 — Brownian coagulation coefficient K_12 via the Fuchs interpolation formula. Migrated from Aerosol.jl src/dynamics.jl:75 @ commit c8c640bb636b22f2425460e9ed5cba50793bfee1 (esm-wlo).

_source_ref: Aerosol.jl@c8c640bb:src/dynamics.jl:75

Upstream BrownianCoagulationCoefficient is an MTK @component with 2 constants (k_B=1.380649e-23 J/K, π_val=3.14159265358979), 6 parameters (T, μ, ρ_p, λ_air, D_p1, D_p2), and 14 algebraic variables determined by explicit equations with no time derivative — all purely observed.

Constants k_B and π_val are folded as floating-point literals into the expression trees. π/6 = 0.5235987755982988 is folded into m_1 and m_2.

Equation chain (S&P 2006, Table 13.1 and Eq. 13.47): m_i = ρ_p · (π/6) · D_pi³ [particle mass] Kn_i = 2 λ_air / D_pi [Knudsen number] C_ci = 1 + Kn_i (1.257 + 0.4 exp(-1.1/Kn_i)) [Cunningham slip correction] D_i = k_B T C_ci / (3 π μ D_pi) [diffusion coefficient, Eq. 13.47] c_bar_i = √(8 k_B T / (π m_i)) [mean thermal velocity] l_i = 8 D_i / (π c_bar_i) [particle mean free path] g_i = [(D_pi + l_i)³ - (D_pi² + l_i²)^(3/2)] / (3 D_pi l_i) - D_pi [Fuchs parameter] K_12 = 2π(D_1+D_2)(D_p1+D_p2) / [den1 + den2] [coagulation coefficient] den1 = (D_p1+D_p2) / (D_p1+D_p2 + 2√(g_1²+g_2²)) den2 = 8(D_1+D_2) / (√(c_bar_1²+c_bar_2²) · (D_p1+D_p2))

All 14 variables are algebraic — the system has no state variables and no ODEs. The variable name l_1/l_2 corresponds to ℓ_1/ℓ_2 in the upstream Julia source (ASCII substitution to avoid Unicode in JSON keys).

Topological evaluation order: m_i → Kn_i → C_ci → D_i → c_bar_i → l_i → g_i → K_12. The dependency graph is acyclic.

Physics: The Fuchs formula interpolates between the continuum limit (Kn ≪ 1, K → 8kT/3μ for equal sizes, Eq. 13.52) and the free-molecular limit (Kn ≫ 1, K ∝ √T/m). The minimum of K_12 lies in the transition regime (~0.1–1 µm at standard conditions).

Tolerance rationale (model-level rel=1e-9): purely algebraic system. All expressions are finite compositions of *, /, ^, exp, sqrt in float64. Round-off is ~1e-15 relative. rel=1e-9 leaves six orders of magnitude of headroom above machine epsilon._

Parameters

NameUnitsDefaultDescription
TK298.0Temperature. Default 298 K (≈ 25 °C), standard atmospheric.
μPa*s1.83e-05Dynamic viscosity of air. Default 1.83×10⁻⁵ Pa·s at 298 K.
ρ_pkg/m^31000.0Particle density. Default 1000 kg/m³ (liquid water / ammonium sulfate).
λ_airm6.86e-08Mean free path of air molecules. Default 6.86×10⁻⁸ m at 298 K, 1 atm.
D_p1m1e-07Diameter of particle 1. Default 100 nm — transition-regime aerosol.
D_p2m1e-07Diameter of particle 2. Default 100 nm — transition-regime aerosol.

Observed

NameUnitsDefaultDescription
m_1kgMass of particle 1: m_1 = ρ_p (π/6) D_p1³. Derived from diameter assuming a sphere.
m_2kgMass of particle 2: m_2 = ρ_p (π/6) D_p2³. Derived from diameter assuming a sphere.
Kn_11Knudsen number for particle 1: Kn_1 = 2λ_air/D_p1. Kn ≪ 1: continuum; Kn ≫ 1: free-molecular; Kn ~ 1: transition.
Kn_21Knudsen number for particle 2: Kn_2 = 2λ_air/D_p2.
C_c11Cunningham slip correction factor for particle 1: C_c1 = 1 + Kn_1(1.257 + 0.4 exp(−1.1/Kn_1)). Dimensionless correction for non-continuum effects; C_c1 → 1 for large particles (Kn → 0) and grows for small particles (Kn → ∞).
C_c21Cunningham slip correction factor for particle 2: C_c2 = 1 + Kn_2(1.257 + 0.4 exp(−1.1/Kn_2)).
D_1m^2/sBrownian diffusion coefficient of particle 1 (Eq. 13.47): D_1 = k_B T C_c1 / (3π μ D_p1). k_B = 1.380649×10⁻²³ J/K folded as literal.
D_2m^2/sBrownian diffusion coefficient of particle 2 (Eq. 13.47): D_2 = k_B T C_c2 / (3π μ D_p2).
c_bar_1m/sMean thermal velocity of particle 1 (Table 13.1): c_bar_1 = √(8 k_B T / (π m_1)). k_B = 1.380649×10⁻²³ J/K folded as literal.
c_bar_2m/sMean thermal velocity of particle 2 (Table 13.1): c_bar_2 = √(8 k_B T / (π m_2)).
l_1mParticle mean free path of particle 1 (Table 13.1, ℓ_1 in source): l_1 = 8 D_1 / (π c_bar_1).
l_2mParticle mean free path of particle 2 (Table 13.1, ℓ_2 in source): l_2 = 8 D_2 / (π c_bar_2).
g_1mFuchs interpolation parameter for particle 1 (Table 13.1): g_1 = [(D_p1+l_1)³ − (D_p1²+l_1²)^(3/2)] / (3 D_p1 l_1) − D_p1. Smoothly connects diffusive and kinetic regimes.
g_2mFuchs interpolation parameter for particle 2 (Table 13.1): g_2 = [(D_p2+l_2)³ − (D_p2²+l_2²)^(3/2)] / (3 D_p2 l_2) − D_p2.
K_12m^3/sBrownian coagulation coefficient (Table 13.1, Fuchs form): K_12 = 2π(D_1+D_2)(D_p1+D_p2) / [(D_p1+D_p2)/(D_p1+D_p2+2√(g_1²+g_2²)) + 8(D_1+D_2)/(√(c_bar_1²+c_bar_2²)(D_p1+D_p2))]. Units m³/s; rate of formation of doublets per collision pair concentration [m⁻⁶].

Observed expressions

$$ m_{1} = ρ_{p} \cdot 0.5235987755982988 \cdot D_{p1}^{3} $$

Mass of particle 1: m_1 = ρ_p (π/6) D_p1³. Derived from diameter assuming a sphere.

$$ m_{2} = ρ_{p} \cdot 0.5235987755982988 \cdot D_{p2}^{3} $$

Mass of particle 2: m_2 = ρ_p (π/6) D_p2³. Derived from diameter assuming a sphere.

$$ Kn_{1} = \frac{2 \cdot λ_{air}}{D_{p1}} $$

Knudsen number for particle 1: Kn_1 = 2λ_air/D_p1. Kn ≪ 1: continuum; Kn ≫ 1: free-molecular; Kn ~ 1: transition.

$$ Kn_{2} = \frac{2 \cdot λ_{air}}{D_{p2}} $$

Knudsen number for particle 2: Kn_2 = 2λ_air/D_p2.

$$ C_{c1} = 1 + Kn_{1} \cdot \left(1.257 + 0.4 \cdot e^{\frac{-1.1}{Kn_{1}}}\right) $$

Cunningham slip correction factor for particle 1: C_c1 = 1 + Kn_1(1.257 + 0.4 exp(−1.1/Kn_1)). Dimensionless correction for non-continuum effects; C_c1 → 1 for large particles (Kn → 0) and grows for small particles (Kn → ∞).

$$ C_{c2} = 1 + Kn_{2} \cdot \left(1.257 + 0.4 \cdot e^{\frac{-1.1}{Kn_{2}}}\right) $$

Cunningham slip correction factor for particle 2: C_c2 = 1 + Kn_2(1.257 + 0.4 exp(−1.1/Kn_2)).

$$ D_{1} = \frac{1.380649 \times 10^{-23} \cdot T \cdot C_{c1}}{3 \cdot 3.14159265358979 \cdot μ \cdot D_{p1}} $$

Brownian diffusion coefficient of particle 1 (Eq. 13.47): D_1 = k_B T C_c1 / (3π μ D_p1). k_B = 1.380649×10⁻²³ J/K folded as literal.

$$ D_{2} = \frac{1.380649 \times 10^{-23} \cdot T \cdot C_{c2}}{3 \cdot 3.14159265358979 \cdot μ \cdot D_{p2}} $$

Brownian diffusion coefficient of particle 2 (Eq. 13.47): D_2 = k_B T C_c2 / (3π μ D_p2).

$$ c_{bar\,1} = \sqrt{\frac{8 \cdot 1.380649 \times 10^{-23} \cdot T}{3.14159265358979 \cdot m_{1}}} $$

Mean thermal velocity of particle 1 (Table 13.1): c_bar_1 = √(8 k_B T / (π m_1)). k_B = 1.380649×10⁻²³ J/K folded as literal.

$$ c_{bar\,2} = \sqrt{\frac{8 \cdot 1.380649 \times 10^{-23} \cdot T}{3.14159265358979 \cdot m_{2}}} $$

Mean thermal velocity of particle 2 (Table 13.1): c_bar_2 = √(8 k_B T / (π m_2)).

$$ l_{1} = \frac{8 \cdot D_{1}}{3.14159265358979 \cdot c_{bar\,1}} $$

Particle mean free path of particle 1 (Table 13.1, ℓ_1 in source): l_1 = 8 D_1 / (π c_bar_1).

$$ l_{2} = \frac{8 \cdot D_{2}}{3.14159265358979 \cdot c_{bar\,2}} $$

Particle mean free path of particle 2 (Table 13.1, ℓ_2 in source): l_2 = 8 D_2 / (π c_bar_2).

$$ g_{1} = \frac{1}{3 \cdot D_{p1} \cdot l_{1}} \cdot \left(\left(D_{p1} + l_{1}\right)^{3} - \left(D_{p1}^{2} + l_{1}^{2}\right)^{1.5}\right) - D_{p1} $$

Fuchs interpolation parameter for particle 1 (Table 13.1): g_1 = [(D_p1+l_1)³ − (D_p1²+l_1²)^(3/2)] / (3 D_p1 l_1) − D_p1. Smoothly connects diffusive and kinetic regimes.

$$ g_{2} = \frac{1}{3 \cdot D_{p2} \cdot l_{2}} \cdot \left(\left(D_{p2} + l_{2}\right)^{3} - \left(D_{p2}^{2} + l_{2}^{2}\right)^{1.5}\right) - D_{p2} $$

Fuchs interpolation parameter for particle 2 (Table 13.1): g_2 = [(D_p2+l_2)³ − (D_p2²+l_2²)^(3/2)] / (3 D_p2 l_2) − D_p2.

$$ K_{12} = \frac{2 \cdot 3.14159265358979 \cdot \left(D_{1} + D_{2}\right) \cdot \left(D_{p1} + D_{p2}\right)}{\frac{D_{p1} + D_{p2}}{D_{p1} + D_{p2} + 2 \cdot \sqrt{g_{1}^{2} + g_{2}^{2}}} + \frac{8 \cdot \left(D_{1} + D_{2}\right)}{\sqrt{c_{bar\,1}^{2} + c_{bar\,2}^{2}} \cdot \left(D_{p1} + D_{p2}\right)}} $$

Brownian coagulation coefficient (Table 13.1, Fuchs form): K_12 = 2π(D_1+D_2)(D_p1+D_p2) / [(D_p1+D_p2)/(D_p1+D_p2+2√(g_1²+g_2²)) + 8(D_1+D_2)/(√(c_bar_1²+c_bar_2²)(D_p1+D_p2))]. Units m³/s; rate of formation of doublets per collision pair concentration [m⁻⁶].

Analyses

K12_vs_particle_diameter

K_12 as a function of particle 1 diameter D_p1 (log sweep 1 nm to 100 µm) with D_p2 fixed at 100 nm. Shows the three transport regimes: free-molecular (D_p1 ≪ λ_air, K_12 large), transition, and continuum (D_p1 ≫ λ_air, K_12 approaches a plateau). The enhancement of K_12 for very small or very large D_p1 relative to D_p2=100 nm demonstrates the size-differential coagulation effect of Table 13.1.

Time span: 0.0 → 1.0

Swept over: D_p1

Brownian coagulation coefficient K_12 vs particle diameter D_p1 (D_p2 = 100 nm fixed). Illustrates the regime dependence: enhancement at small D_p1 (free-molecular, high D_1) and the approach to the continuum plateau at large D_p1.

K12_vs_temperature

K_12 as a function of temperature T from 200 K to 350 K (linear sweep) for equal 100 nm particles. K_12 increases approximately linearly with T because D_i ∝ T (Eq. 13.47) dominates the weak √T dependence of c_bar. Relevant to cloud-resolving models where particle dynamics vary across the tropospheric temperature range.

Time span: 0.0 → 1.0

Swept over: T

K_12 vs temperature T for equal D_p=100 nm particles. Shows the near-linear temperature dependence of the Brownian coagulation coefficient.

Raw .esm

Raw .esm JSON (this component)
{
  "reference": {
    "citation": "Seinfeld, J. H. and Pandis, S. N. (2006) Atmospheric Chemistry and Physics, 2nd Edition, Chapter 13, Table 13.1 and Eq. 13.47 — Brownian coagulation coefficient K_12 via the Fuchs interpolation formula. Migrated from Aerosol.jl src/dynamics.jl:75 @ commit c8c640bb636b22f2425460e9ed5cba50793bfee1 (esm-wlo).",
    "notes": "source_ref: Aerosol.jl@c8c640bb:src/dynamics.jl:75\n\nUpstream BrownianCoagulationCoefficient is an MTK @component with 2 constants (k_B=1.380649e-23 J/K, π_val=3.14159265358979), 6 parameters (T, μ, ρ_p, λ_air, D_p1, D_p2), and 14 algebraic variables determined by explicit equations with no time derivative — all purely observed.\n\nConstants k_B and π_val are folded as floating-point literals into the expression trees. π/6 = 0.5235987755982988 is folded into m_1 and m_2.\n\nEquation chain (S&P 2006, Table 13.1 and Eq. 13.47):\n  m_i     = ρ_p · (π/6) · D_pi³                                    [particle mass]\n  Kn_i    = 2 λ_air / D_pi                                          [Knudsen number]\n  C_ci    = 1 + Kn_i (1.257 + 0.4 exp(-1.1/Kn_i))                  [Cunningham slip correction]\n  D_i     = k_B T C_ci / (3 π μ D_pi)                               [diffusion coefficient, Eq. 13.47]\n  c_bar_i = √(8 k_B T / (π m_i))                                    [mean thermal velocity]\n  l_i     = 8 D_i / (π c_bar_i)                                     [particle mean free path]\n  g_i     = [(D_pi + l_i)³ - (D_pi² + l_i²)^(3/2)] / (3 D_pi l_i) - D_pi  [Fuchs parameter]\n  K_12    = 2π(D_1+D_2)(D_p1+D_p2) / [den1 + den2]                 [coagulation coefficient]\n    den1  = (D_p1+D_p2) / (D_p1+D_p2 + 2√(g_1²+g_2²))\n    den2  = 8(D_1+D_2) / (√(c_bar_1²+c_bar_2²) · (D_p1+D_p2))\n\nAll 14 variables are algebraic — the system has no state variables and no ODEs. The variable name l_1/l_2 corresponds to ℓ_1/ℓ_2 in the upstream Julia source (ASCII substitution to avoid Unicode in JSON keys).\n\nTopological evaluation order: m_i → Kn_i → C_ci → D_i → c_bar_i → l_i → g_i → K_12. The dependency graph is acyclic.\n\nPhysics: The Fuchs formula interpolates between the continuum limit (Kn ≪ 1, K → 8kT/3μ for equal sizes, Eq. 13.52) and the free-molecular limit (Kn ≫ 1, K ∝ √T/m). The minimum of K_12 lies in the transition regime (~0.1–1 µm at standard conditions).\n\nTolerance rationale (model-level rel=1e-9): purely algebraic system. All expressions are finite compositions of *, /, ^, exp, sqrt in float64. Round-off is ~1e-15 relative. rel=1e-9 leaves six orders of magnitude of headroom above machine epsilon."
  },
  "tolerance": {
    "rel": 1e-09
  },
  "variables": {
    "T": {
      "type": "parameter",
      "units": "K",
      "default": 298.0,
      "description": "Temperature. Default 298 K (≈ 25 °C), standard atmospheric."
    },
    "μ": {
      "type": "parameter",
      "units": "Pa*s",
      "default": 1.83e-05,
      "description": "Dynamic viscosity of air. Default 1.83×10⁻⁵ Pa·s at 298 K."
    },
    "ρ_p": {
      "type": "parameter",
      "units": "kg/m^3",
      "default": 1000.0,
      "description": "Particle density. Default 1000 kg/m³ (liquid water / ammonium sulfate)."
    },
    "λ_air": {
      "type": "parameter",
      "units": "m",
      "default": 6.86e-08,
      "description": "Mean free path of air molecules. Default 6.86×10⁻⁸ m at 298 K, 1 atm."
    },
    "D_p1": {
      "type": "parameter",
      "units": "m",
      "default": 1e-07,
      "description": "Diameter of particle 1. Default 100 nm — transition-regime aerosol."
    },
    "D_p2": {
      "type": "parameter",
      "units": "m",
      "default": 1e-07,
      "description": "Diameter of particle 2. Default 100 nm — transition-regime aerosol."
    },
    "m_1": {
      "type": "unknown",
      "units": "kg",
      "description": "Mass of particle 1: m_1 = ρ_p (π/6) D_p1³. Derived from diameter assuming a sphere."
    },
    "m_2": {
      "type": "unknown",
      "units": "kg",
      "description": "Mass of particle 2: m_2 = ρ_p (π/6) D_p2³. Derived from diameter assuming a sphere."
    },
    "Kn_1": {
      "type": "unknown",
      "units": "1",
      "description": "Knudsen number for particle 1: Kn_1 = 2λ_air/D_p1. Kn ≪ 1: continuum; Kn ≫ 1: free-molecular; Kn ~ 1: transition."
    },
    "Kn_2": {
      "type": "unknown",
      "units": "1",
      "description": "Knudsen number for particle 2: Kn_2 = 2λ_air/D_p2."
    },
    "C_c1": {
      "type": "unknown",
      "units": "1",
      "description": "Cunningham slip correction factor for particle 1: C_c1 = 1 + Kn_1(1.257 + 0.4 exp(−1.1/Kn_1)). Dimensionless correction for non-continuum effects; C_c1 → 1 for large particles (Kn → 0) and grows for small particles (Kn → ∞)."
    },
    "C_c2": {
      "type": "unknown",
      "units": "1",
      "description": "Cunningham slip correction factor for particle 2: C_c2 = 1 + Kn_2(1.257 + 0.4 exp(−1.1/Kn_2))."
    },
    "D_1": {
      "type": "unknown",
      "units": "m^2/s",
      "description": "Brownian diffusion coefficient of particle 1 (Eq. 13.47): D_1 = k_B T C_c1 / (3π μ D_p1). k_B = 1.380649×10⁻²³ J/K folded as literal."
    },
    "D_2": {
      "type": "unknown",
      "units": "m^2/s",
      "description": "Brownian diffusion coefficient of particle 2 (Eq. 13.47): D_2 = k_B T C_c2 / (3π μ D_p2)."
    },
    "c_bar_1": {
      "type": "unknown",
      "units": "m/s",
      "description": "Mean thermal velocity of particle 1 (Table 13.1): c_bar_1 = √(8 k_B T / (π m_1)). k_B = 1.380649×10⁻²³ J/K folded as literal."
    },
    "c_bar_2": {
      "type": "unknown",
      "units": "m/s",
      "description": "Mean thermal velocity of particle 2 (Table 13.1): c_bar_2 = √(8 k_B T / (π m_2))."
    },
    "l_1": {
      "type": "unknown",
      "units": "m",
      "description": "Particle mean free path of particle 1 (Table 13.1, ℓ_1 in source): l_1 = 8 D_1 / (π c_bar_1)."
    },
    "l_2": {
      "type": "unknown",
      "units": "m",
      "description": "Particle mean free path of particle 2 (Table 13.1, ℓ_2 in source): l_2 = 8 D_2 / (π c_bar_2)."
    },
    "g_1": {
      "type": "unknown",
      "units": "m",
      "description": "Fuchs interpolation parameter for particle 1 (Table 13.1): g_1 = [(D_p1+l_1)³ − (D_p1²+l_1²)^(3/2)] / (3 D_p1 l_1) − D_p1. Smoothly connects diffusive and kinetic regimes."
    },
    "g_2": {
      "type": "unknown",
      "units": "m",
      "description": "Fuchs interpolation parameter for particle 2 (Table 13.1): g_2 = [(D_p2+l_2)³ − (D_p2²+l_2²)^(3/2)] / (3 D_p2 l_2) − D_p2."
    },
    "K_12": {
      "type": "unknown",
      "units": "m^3/s",
      "description": "Brownian coagulation coefficient (Table 13.1, Fuchs form): K_12 = 2π(D_1+D_2)(D_p1+D_p2) / [(D_p1+D_p2)/(D_p1+D_p2+2√(g_1²+g_2²)) + 8(D_1+D_2)/(√(c_bar_1²+c_bar_2²)(D_p1+D_p2))]. Units m³/s; rate of formation of doublets per collision pair concentration [m⁻⁶]."
    }
  },
  "equations": [
    {
      "lhs": "m_1",
      "rhs": {
        "op": "*",
        "args": [
          "ρ_p",
          0.5235987755982988,
          {
            "op": "^",
            "args": [
              "D_p1",
              3
            ]
          }
        ]
      }
    },
    {
      "lhs": "m_2",
      "rhs": {
        "op": "*",
        "args": [
          "ρ_p",
          0.5235987755982988,
          {
            "op": "^",
            "args": [
              "D_p2",
              3
            ]
          }
        ]
      }
    },
    {
      "lhs": "Kn_1",
      "rhs": {
        "op": "/",
        "args": [
          {
            "op": "*",
            "args": [
              2,
              "λ_air"
            ]
          },
          "D_p1"
        ]
      }
    },
    {
      "lhs": "Kn_2",
      "rhs": {
        "op": "/",
        "args": [
          {
            "op": "*",
            "args": [
              2,
              "λ_air"
            ]
          },
          "D_p2"
        ]
      }
    },
    {
      "lhs": "C_c1",
      "rhs": {
        "op": "+",
        "args": [
          1,
          {
            "op": "*",
            "args": [
              "Kn_1",
              {
                "op": "+",
                "args": [
                  1.257,
                  {
                    "op": "*",
                    "args": [
                      0.4,
                      {
                        "op": "exp",
                        "args": [
                          {
                            "op": "/",
                            "args": [
                              -1.1,
                              "Kn_1"
                            ]
                          }
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    },
    {
      "lhs": "C_c2",
      "rhs": {
        "op": "+",
        "args": [
          1,
          {
            "op": "*",
            "args": [
              "Kn_2",
              {
                "op": "+",
                "args": [
                  1.257,
                  {
                    "op": "*",
                    "args": [
                      0.4,
                      {
                        "op": "exp",
                        "args": [
                          {
                            "op": "/",
                            "args": [
                              -1.1,
                              "Kn_2"
                            ]
                          }
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    },
    {
      "lhs": "D_1",
      "rhs": {
        "op": "/",
        "args": [
          {
            "op": "*",
            "args": [
              1.380649e-23,
              "T",
              "C_c1"
            ]
          },
          {
            "op": "*",
            "args": [
              3,
              3.14159265358979,
              "μ",
              "D_p1"
            ]
          }
        ]
      }
    },
    {
      "lhs": "D_2",
      "rhs": {
        "op": "/",
        "args": [
          {
            "op": "*",
            "args": [
              1.380649e-23,
              "T",
              "C_c2"
            ]
          },
          {
            "op": "*",
            "args": [
              3,
              3.14159265358979,
              "μ",
              "D_p2"
            ]
          }
        ]
      }
    },
    {
      "lhs": "c_bar_1",
      "rhs": {
        "op": "sqrt",
        "args": [
          {
            "op": "/",
            "args": [
              {
                "op": "*",
                "args": [
                  8,
                  1.380649e-23,
                  "T"
                ]
              },
              {
                "op": "*",
                "args": [
                  3.14159265358979,
                  "m_1"
                ]
              }
            ]
          }
        ]
      }
    },
    {
      "lhs": "c_bar_2",
      "rhs": {
        "op": "sqrt",
        "args": [
          {
            "op": "/",
            "args": [
              {
                "op": "*",
                "args": [
                  8,
                  1.380649e-23,
                  "T"
                ]
              },
              {
                "op": "*",
                "args": [
                  3.14159265358979,
                  "m_2"
                ]
              }
            ]
          }
        ]
      }
    },
    {
      "lhs": "l_1",
      "rhs": {
        "op": "/",
        "args": [
          {
            "op": "*",
            "args": [
              8,
              "D_1"
            ]
          },
          {
            "op": "*",
            "args": [
              3.14159265358979,
              "c_bar_1"
            ]
          }
        ]
      }
    },
    {
      "lhs": "l_2",
      "rhs": {
        "op": "/",
        "args": [
          {
            "op": "*",
            "args": [
              8,
              "D_2"
            ]
          },
          {
            "op": "*",
            "args": [
              3.14159265358979,
              "c_bar_2"
            ]
          }
        ]
      }
    },
    {
      "lhs": "g_1",
      "rhs": {
        "op": "-",
        "args": [
          {
            "op": "*",
            "args": [
              {
                "op": "/",
                "args": [
                  1,
                  {
                    "op": "*",
                    "args": [
                      3,
                      "D_p1",
                      "l_1"
                    ]
                  }
                ]
              },
              {
                "op": "-",
                "args": [
                  {
                    "op": "^",
                    "args": [
                      {
                        "op": "+",
                        "args": [
                          "D_p1",
                          "l_1"
                        ]
                      },
                      3
                    ]
                  },
                  {
                    "op": "^",
                    "args": [
                      {
                        "op": "+",
                        "args": [
                          {
                            "op": "^",
                            "args": [
                              "D_p1",
                              2
                            ]
                          },
                          {
                            "op": "^",
                            "args": [
                              "l_1",
                              2
                            ]
                          }
                        ]
                      },
                      1.5
                    ]
                  }
                ]
              }
            ]
          },
          "D_p1"
        ]
      }
    },
    {
      "lhs": "g_2",
      "rhs": {
        "op": "-",
        "args": [
          {
            "op": "*",
            "args": [
              {
                "op": "/",
                "args": [
                  1,
                  {
                    "op": "*",
                    "args": [
                      3,
                      "D_p2",
                      "l_2"
                    ]
                  }
                ]
              },
              {
                "op": "-",
                "args": [
                  {
                    "op": "^",
                    "args": [
                      {
                        "op": "+",
                        "args": [
                          "D_p2",
                          "l_2"
                        ]
                      },
                      3
                    ]
                  },
                  {
                    "op": "^",
                    "args": [
                      {
                        "op": "+",
                        "args": [
                          {
                            "op": "^",
                            "args": [
                              "D_p2",
                              2
                            ]
                          },
                          {
                            "op": "^",
                            "args": [
                              "l_2",
                              2
                            ]
                          }
                        ]
                      },
                      1.5
                    ]
                  }
                ]
              }
            ]
          },
          "D_p2"
        ]
      }
    },
    {
      "lhs": "K_12",
      "rhs": {
        "op": "/",
        "args": [
          {
            "op": "*",
            "args": [
              2,
              3.14159265358979,
              {
                "op": "+",
                "args": [
                  "D_1",
                  "D_2"
                ]
              },
              {
                "op": "+",
                "args": [
                  "D_p1",
                  "D_p2"
                ]
              }
            ]
          },
          {
            "op": "+",
            "args": [
              {
                "op": "/",
                "args": [
                  {
                    "op": "+",
                    "args": [
                      "D_p1",
                      "D_p2"
                    ]
                  },
                  {
                    "op": "+",
                    "args": [
                      {
                        "op": "+",
                        "args": [
                          "D_p1",
                          "D_p2"
                        ]
                      },
                      {
                        "op": "*",
                        "args": [
                          2,
                          {
                            "op": "sqrt",
                            "args": [
                              {
                                "op": "+",
                                "args": [
                                  {
                                    "op": "^",
                                    "args": [
                                      "g_1",
                                      2
                                    ]
                                  },
                                  {
                                    "op": "^",
                                    "args": [
                                      "g_2",
                                      2
                                    ]
                                  }
                                ]
                              }
                            ]
                          }
                        ]
                      }
                    ]
                  }
                ]
              },
              {
                "op": "/",
                "args": [
                  {
                    "op": "*",
                    "args": [
                      8,
                      {
                        "op": "+",
                        "args": [
                          "D_1",
                          "D_2"
                        ]
                      }
                    ]
                  },
                  {
                    "op": "*",
                    "args": [
                      {
                        "op": "sqrt",
                        "args": [
                          {
                            "op": "+",
                            "args": [
                              {
                                "op": "^",
                                "args": [
                                  "c_bar_1",
                                  2
                                ]
                              },
                              {
                                "op": "^",
                                "args": [
                                  "c_bar_2",
                                  2
                                ]
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "op": "+",
                        "args": [
                          "D_p1",
                          "D_p2"
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    }
  ],
  "tests": [
    {
      "id": "default_conditions",
      "description": "Default parameters: T=298 K, μ=1.83×10⁻⁵ Pa·s, ρ_p=1000 kg/m³, λ_air=6.86×10⁻⁸ m, D_p1=D_p2=100 nm. Both particles are identical in the transition regime (Kn=1.372). Checks the full chain: Kn, C_c, D, c_bar, l, g, K_12. K_12 = 1.491×10⁻¹⁵ m³/s (Table 13.1 benchmark).",
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "Kn_1",
          "time": 0.0,
          "expected": 1.372,
          "tolerance": {
            "rel": 1e-12
          }
        },
        {
          "variable": "Kn_2",
          "time": 0.0,
          "expected": 1.372,
          "tolerance": {
            "rel": 1e-12
          }
        },
        {
          "variable": "C_c1",
          "time": 0.0,
          "expected": 2.970764756761217,
          "tolerance": {
            "rel": 1e-09
          }
        },
        {
          "variable": "C_c2",
          "time": 0.0,
          "expected": 2.970764756761217,
          "tolerance": {
            "rel": 1e-09
          }
        },
        {
          "variable": "m_1",
          "time": 0.0,
          "expected": 5.235987755982983e-19,
          "tolerance": {
            "rel": 1e-09
          }
        },
        {
          "variable": "D_1",
          "time": 0.0,
          "expected": 7.08672520203204e-10,
          "tolerance": {
            "rel": 1e-09
          }
        },
        {
          "variable": "c_bar_1",
          "time": 0.0,
          "expected": 0.1414557218874665,
          "tolerance": {
            "rel": 1e-09
          }
        },
        {
          "variable": "l_1",
          "time": 0.0,
          "expected": 1.275748856179422e-08,
          "tolerance": {
            "rel": 1e-09
          }
        },
        {
          "variable": "g_1",
          "time": 0.0,
          "expected": 6.895371895082644e-09,
          "tolerance": {
            "rel": 1e-09
          }
        },
        {
          "variable": "K_12",
          "time": 0.0,
          "expected": 1.491012954151819e-15,
          "tolerance": {
            "rel": 1e-09
          }
        }
      ]
    },
    {
      "id": "continuum_limit",
      "description": "Large particles D_p1=D_p2=10 µm: Kn = 2×6.86e-8/10e-6 = 0.01372 ≪ 1, firmly in the continuum regime. K_12 should approach the continuum limit 8kT/(3μ) = 5.995×10⁻¹⁶ m³/s (Eq. 13.52) to within ~2% (slip-correction deviation at Kn=0.014). K_12 = 6.059×10⁻¹⁶; ratio to K_continuum = 1.011.",
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_overrides": {
        "D_p1": 1e-05,
        "D_p2": 1e-05
      },
      "assertions": [
        {
          "variable": "K_12",
          "time": 0.0,
          "expected": 6.058699993308035e-16,
          "tolerance": {
            "rel": 1e-09
          }
        }
      ]
    },
    {
      "id": "equal_size_1um",
      "description": "Equal particles D_p1=D_p2=1 µm: transition-to-continuum regime (Kn = 0.137). K_12 = 6.864×10⁻¹⁶ m³/s. This is the benchmark for the size-dependence test: K_12 at unequal sizes must exceed this value.",
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_overrides": {
        "D_p1": 1e-06,
        "D_p2": 1e-06
      },
      "assertions": [
        {
          "variable": "K_12",
          "time": 0.0,
          "expected": 6.863899942138817e-16,
          "tolerance": {
            "rel": 1e-09
          }
        }
      ]
    },
    {
      "id": "unequal_sizes_coag_enhancement",
      "description": "Unequal particles D_p1=0.1 µm, D_p2=1 µm: K_12 = 4.997×10⁻¹⁵ m³/s — 7.3× larger than the equal-1-µm case. Physically, the small particle has a much larger D_i and c_bar_i, so it collides far more often with the large particle than two 1-µm particles collide with each other. Confirms the size-dependence physics of Table 13.1.",
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_overrides": {
        "D_p1": 1e-07,
        "D_p2": 1e-06
      },
      "assertions": [
        {
          "variable": "K_12",
          "time": 0.0,
          "expected": 4.996599756674888e-15,
          "tolerance": {
            "rel": 1e-09
          }
        }
      ]
    },
    {
      "id": "temperature_sensitivity",
      "description": "Elevated temperature T=350 K with default D_p=100 nm: K_12 = 1.727×10⁻¹⁵ m³/s — 15.8% higher than the 298 K default. K_12 ∝ T (D_i ∝ T, c_bar ∝ √T, the T dominates the denominator Fuchs correction). Exercises the T wiring across the full chain.",
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_overrides": {
        "T": 350.0
      },
      "assertions": [
        {
          "variable": "D_1",
          "time": 0.0,
          "expected": 8.323334968829579e-10,
          "tolerance": {
            "rel": 1e-09
          }
        },
        {
          "variable": "K_12",
          "time": 0.0,
          "expected": 1.727344394759691e-15,
          "tolerance": {
            "rel": 1e-09
          }
        }
      ]
    }
  ],
  "analyses": [
    {
      "id": "K12_vs_particle_diameter",
      "description": "K_12 as a function of particle 1 diameter D_p1 (log sweep 1 nm to 100 µm) with D_p2 fixed at 100 nm. Shows the three transport regimes: free-molecular (D_p1 ≪ λ_air, K_12 large), transition, and continuum (D_p1 ≫ λ_air, K_12 approaches a plateau). The enhancement of K_12 for very small or very large D_p1 relative to D_p2=100 nm demonstrates the size-differential coagulation effect of Table 13.1.",
      "initial_state": {},
      "parameters": {},
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_sweep": {
        "type": "cartesian",
        "dimensions": [
          {
            "parameter": "D_p1",
            "range": {
              "start": 1e-09,
              "stop": 0.0001,
              "count": 61,
              "scale": "log"
            }
          }
        ]
      },
      "plots": [
        {
          "id": "K12_vs_Dp1",
          "type": "line",
          "description": "Brownian coagulation coefficient K_12 vs particle diameter D_p1 (D_p2 = 100 nm fixed). Illustrates the regime dependence: enhancement at small D_p1 (free-molecular, high D_1) and the approach to the continuum plateau at large D_p1.",
          "x": {
            "variable": "D_p1",
            "label": "Particle 1 diameter D_p1 (m)"
          },
          "y": {
            "variable": "K_12",
            "label": "K_12 (m³/s)"
          }
        }
      ]
    },
    {
      "id": "K12_vs_temperature",
      "description": "K_12 as a function of temperature T from 200 K to 350 K (linear sweep) for equal 100 nm particles. K_12 increases approximately linearly with T because D_i ∝ T (Eq. 13.47) dominates the weak √T dependence of c_bar. Relevant to cloud-resolving models where particle dynamics vary across the tropospheric temperature range.",
      "initial_state": {},
      "parameters": {},
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_sweep": {
        "type": "cartesian",
        "dimensions": [
          {
            "parameter": "T",
            "range": {
              "start": 200.0,
              "stop": 350.0,
              "count": 31,
              "scale": "linear"
            }
          }
        ]
      },
      "plots": [
        {
          "id": "K12_vs_T",
          "type": "line",
          "description": "K_12 vs temperature T for equal D_p=100 nm particles. Shows the near-linear temperature dependence of the Brownian coagulation coefficient.",
          "x": {
            "variable": "T",
            "label": "Temperature T (K)"
          },
          "y": {
            "variable": "K_12",
            "label": "K_12 (m³/s)"
          }
        }
      ]
    }
  ]
}