RainFormation
Rain formation by collision and coalescence (Seinfeld & Pandis 2006, Eqs. 17.104-17.108). Computes collection efficiency, continuous accretion rate, and raindrop size distributions (Best CDF and Marshall-Palmer number density).
Description
Rain formation by collision and coalescence (Seinfeld & Pandis 2006, Eqs. 17.104-17.108). Computes collection efficiency, continuous accretion rate, and raindrop size distributions (Best CDF and Marshall-Palmer number density).
Reference
_source_ref: Aerosol.jl@c8c640bb:src/cloud_physics.jl:604 Seinfeld, J. H. and Pandis, S. N. (2006), Atmospheric Chemistry and Physics: From Air Pollution to Climate Change, 2nd Edition, Wiley, Ch. 17. Key equations: 17.104 (collision efficiency), 17.105 (coalescence efficiency), 17.106 (continuous accretion, dm/dt), 17.107 (Best raindrop CDF F(D_p)), 17.108 (Marshall-Palmer raindrop size distribution n(D_p)).
Tolerance rationale (model-level rel=1e-8 / abs=1e-12): time-independent algebraic system (zero ODE states after MTK structural_simplify; RHS depends only on parameters). rel=1e-8 captures float64 roundoff in the exponential functions and power-law expressions. abs=1e-12 provides a floor for near-zero CDF values at very small D_p / very low p_0 where rel comparison is undefined.
Constants (π_val, F_diam_ref, F_exp, one, p0_unit) follow the upstream @constants block convention: they are dimensioned parameters with fixed defaults that should not be overridden in normal use. The one parameter makes the F_dist expression one - exp(...) compatible with the ESM numeric-literal requirement (unit subtrahend cannot be a bare 1). p0_unit nondimensionalizes p_0 in the power-law base so the exponent 0.232 is applied to a dimensionless quantity._
Parameters
| Name | Units | Default | Description |
|---|---|---|---|
π_val | 1 | 3.141592653589793 | Pi (dimensionless) |
F_diam_ref | m | 0.0013 | Best distribution diameter scale (Eq. 17.107: 1.3 mm) |
F_exp | 1 | 2.25 | Best distribution exponent (Eq. 17.107, dimensionless) |
one | 1 | 1.0 | Unity (dimensionless) |
p0_unit | mm/hr | 1.0 | Unit rainfall intensity for nondimensionalization |
D_p | m | 0.001 | Collector drop diameter |
d_p | m | 1e-05 | Collected droplet diameter |
E_coll | 1 | 0.5 | Collision efficiency (Eq. 17.104, dimensionless) |
E_coal | 1 | 1.0 | Coalescence efficiency (Eq. 17.105, dimensionless) |
w_L | 1 | 0.001 | Liquid water mass mixing ratio (kg water / kg air) (dimensionless) |
v_D | m/s | 5.0 | Fall velocity of collector drop |
v_d | m/s | 0.01 | Fall velocity of collected droplet |
ρ_a | kg/m^3 | 1.225 | Air density |
p_0 | mm/hr | 1.0 | Rainfall intensity (Eq. 17.107) |
n_0 | 1/m^4 | 8000000.0 | Marshall-Palmer intercept parameter (Eq. 17.108: 8000 m^-3 mm^-1) |
ψ | 1/m | 4100.0 | Marshall-Palmer slope parameter (Eq. 17.108) |
Observed
| Name | Units | Default | Description |
|---|---|---|---|
E_t | 1 | Collection efficiency (Eq. 17.106, dimensionless) | |
dm_dt | kg/s | Mass accretion rate (Eq. 17.106) | |
F_dist | 1 | Best raindrop CDF (Eq. 17.107, dimensionless) | |
n_MP | 1/m^4 | Marshall-Palmer number density (Eq. 17.108) |
Observed expressions
$$ E_{t} = E_{coll} \cdot E_{coal} $$Collection efficiency (Eq. 17.106, dimensionless)
$$ dm_{dt} = \frac{π_{val}}{4} \cdot E_{t} \cdot \left(D_{p} + d_{p}\right)^{2} \cdot w_{L} \cdot ρ_{a} \cdot \left|v_{D} + \left(-1\right) \cdot v_{d}\right| $$Mass accretion rate (Eq. 17.106)
$$ F_{dist} = one + \left(-1\right) \cdot e^{\left(-1\right) \cdot \frac{D_{p}}{F_{diam\,ref} \cdot \frac{p_{0}}{p0_{unit}}^{0.232}}^{F_{exp}}} $$Best raindrop CDF (Eq. 17.107, dimensionless)
$$ n_{MP} = n_{0} \cdot e^{\left(-1\right) \cdot ψ \cdot D_{p}} $$Marshall-Palmer number density (Eq. 17.108)
Analyses
defaults_trajectory
Reference-run trajectories of E_t, dm_dt, F_dist, and n_MP at upstream Aerosol.jl defaults over a 1-hour window. All four states are time-independent (algebraic constraints), so line plots are horizontal — makes the algebraic structure visually obvious.
Time span: 0.0 → 3600.0
marshall_palmer_distribution
Marshall-Palmer raindrop number density n(D_p) as a function of collector drop diameter. Classic exponential decay (S&P Eq. 17.108): n = n_0 * exp(-ψ*D_p). On a log-linear axis this is a straight line — the canonical representation of continental vs maritime raindrop spectra.
Time span: 0.0 → 60.0
Swept over: D_p

best_cdf_vs_rainfall_intensity
Best raindrop CDF F(D_p) as a function of rainfall intensity p_0 at fixed D_p=1 mm. Higher rainfall shifts the distribution to larger drops so the CDF at 1 mm decreases. Covers the range from light rain (0.1 mm/hr) to heavy rain (100 mm/hr).
Time span: 0.0 → 60.0
Swept over: p_0

accretion_rate_heatmap
Two-dimensional sweep of dm_dt over collector drop diameter (D_p) and liquid water mixing ratio (w_L). Spans from cloud-water (w_L=1e-4) to heavy convective (w_L=5e-3) conditions, and from small collector drops (0.2 mm) to large raindrops (3 mm). The (D_p+d_p)^2 area factor and the default exponential fall-speed scaling make dm_dt grow rapidly with D_p — useful for identifying where accretion rate becomes dynamically significant.
Time span: 0.0 → 60.0
Swept over: D_p, w_L

Raw .esm
Raw .esm JSON (this component)
{
"variables": {
"π_val": {
"default": 3.141592653589793,
"type": "parameter",
"units": "1",
"description": "Pi (dimensionless)"
},
"F_diam_ref": {
"default": 0.0013,
"type": "parameter",
"units": "m",
"description": "Best distribution diameter scale (Eq. 17.107: 1.3 mm)"
},
"F_exp": {
"default": 2.25,
"type": "parameter",
"units": "1",
"description": "Best distribution exponent (Eq. 17.107, dimensionless)"
},
"one": {
"default": 1.0,
"type": "parameter",
"units": "1",
"description": "Unity (dimensionless)"
},
"p0_unit": {
"default": 1.0,
"type": "parameter",
"units": "mm/hr",
"description": "Unit rainfall intensity for nondimensionalization"
},
"D_p": {
"default": 0.001,
"type": "parameter",
"units": "m",
"description": "Collector drop diameter"
},
"d_p": {
"default": 1e-05,
"type": "parameter",
"units": "m",
"description": "Collected droplet diameter"
},
"E_coll": {
"default": 0.5,
"type": "parameter",
"units": "1",
"description": "Collision efficiency (Eq. 17.104, dimensionless)"
},
"E_coal": {
"default": 1.0,
"type": "parameter",
"units": "1",
"description": "Coalescence efficiency (Eq. 17.105, dimensionless)"
},
"w_L": {
"default": 0.001,
"type": "parameter",
"units": "1",
"description": "Liquid water mass mixing ratio (kg water / kg air) (dimensionless)"
},
"v_D": {
"default": 5.0,
"type": "parameter",
"units": "m/s",
"description": "Fall velocity of collector drop"
},
"v_d": {
"default": 0.01,
"type": "parameter",
"units": "m/s",
"description": "Fall velocity of collected droplet"
},
"ρ_a": {
"default": 1.225,
"type": "parameter",
"units": "kg/m^3",
"description": "Air density"
},
"p_0": {
"default": 1.0,
"type": "parameter",
"units": "mm/hr",
"description": "Rainfall intensity (Eq. 17.107)"
},
"n_0": {
"default": 8000000.0,
"type": "parameter",
"units": "1/m^4",
"description": "Marshall-Palmer intercept parameter (Eq. 17.108: 8000 m^-3 mm^-1)"
},
"ψ": {
"default": 4100.0,
"type": "parameter",
"units": "1/m",
"description": "Marshall-Palmer slope parameter (Eq. 17.108)"
},
"E_t": {
"type": "unknown",
"units": "1",
"description": "Collection efficiency (Eq. 17.106, dimensionless)"
},
"dm_dt": {
"type": "unknown",
"units": "kg/s",
"description": "Mass accretion rate (Eq. 17.106)"
},
"F_dist": {
"type": "unknown",
"units": "1",
"description": "Best raindrop CDF (Eq. 17.107, dimensionless)"
},
"n_MP": {
"type": "unknown",
"units": "1/m^4",
"description": "Marshall-Palmer number density (Eq. 17.108)"
}
},
"equations": [
{
"lhs": "E_t",
"rhs": {
"op": "*",
"args": [
"E_coll",
"E_coal"
]
}
},
{
"lhs": "dm_dt",
"rhs": {
"op": "*",
"args": [
{
"op": "/",
"args": [
"π_val",
4
]
},
"E_t",
{
"op": "^",
"args": [
{
"op": "+",
"args": [
"D_p",
"d_p"
]
},
2
]
},
"w_L",
"ρ_a",
{
"op": "abs",
"args": [
{
"op": "+",
"args": [
"v_D",
{
"op": "*",
"args": [
-1,
"v_d"
]
}
]
}
]
}
]
}
},
{
"lhs": "F_dist",
"rhs": {
"op": "+",
"args": [
"one",
{
"op": "*",
"args": [
-1,
{
"op": "exp",
"args": [
{
"op": "*",
"args": [
-1,
{
"op": "^",
"args": [
{
"op": "/",
"args": [
"D_p",
{
"op": "*",
"args": [
"F_diam_ref",
{
"op": "^",
"args": [
{
"op": "/",
"args": [
"p_0",
"p0_unit"
]
},
0.232
]
}
]
}
]
},
"F_exp"
]
}
]
}
]
}
]
}
]
}
},
{
"lhs": "n_MP",
"rhs": {
"op": "*",
"args": [
"n_0",
{
"op": "exp",
"args": [
{
"op": "*",
"args": [
-1,
"ψ",
"D_p"
]
}
]
}
]
}
}
],
"reference": {
"notes": "source_ref: Aerosol.jl@c8c640bb:src/cloud_physics.jl:604\nSeinfeld, J. H. and Pandis, S. N. (2006), Atmospheric Chemistry and Physics: From Air Pollution to Climate Change, 2nd Edition, Wiley, Ch. 17. Key equations: 17.104 (collision efficiency), 17.105 (coalescence efficiency), 17.106 (continuous accretion, dm/dt), 17.107 (Best raindrop CDF F(D_p)), 17.108 (Marshall-Palmer raindrop size distribution n(D_p)).\n\nTolerance rationale (model-level rel=1e-8 / abs=1e-12): time-independent algebraic system (zero ODE states after MTK structural_simplify; RHS depends only on parameters). rel=1e-8 captures float64 roundoff in the exponential functions and power-law expressions. abs=1e-12 provides a floor for near-zero CDF values at very small D_p / very low p_0 where rel comparison is undefined.\n\nConstants (π_val, F_diam_ref, F_exp, one, p0_unit) follow the upstream @constants block convention: they are dimensioned parameters with fixed defaults that should not be overridden in normal use. The `one` parameter makes the F_dist expression `one - exp(...)` compatible with the ESM numeric-literal requirement (unit subtrahend cannot be a bare 1). `p0_unit` nondimensionalizes p_0 in the power-law base so the exponent 0.232 is applied to a dimensionless quantity."
},
"tolerance": {
"rel": 1e-08,
"abs": 1e-12
},
"tests": [
{
"id": "defaults_behavior",
"description": "Reference run at upstream Aerosol.jl defaults. Reproduces upstream Aerosol test/cloud_physics_test.jl 'RainFormation physical behavior': E_t = E_coll * E_coal = 0.5, dm_dt > 0, 0 <= F_dist <= 1, and Marshall-Palmer distribution is physically sensible. Sampled at t=0, 60, 600, 3600 s to confirm algebraic constraints hold across the full tspan (all states are time-independent, so every sample must return the same constant).",
"time_span": {
"start": 0.0,
"end": 3600.0
},
"assertions": [
{
"variable": "E_t",
"time": 0.0,
"expected": 0.5
},
{
"variable": "E_t",
"time": 60.0,
"expected": 0.5
},
{
"variable": "E_t",
"time": 600.0,
"expected": 0.5
},
{
"variable": "E_t",
"time": 3600.0,
"expected": 0.5
},
{
"variable": "dm_dt",
"time": 0.0,
"expected": 2.4487207850181197e-09
},
{
"variable": "dm_dt",
"time": 60.0,
"expected": 2.4487207850181197e-09
},
{
"variable": "dm_dt",
"time": 600.0,
"expected": 2.4487207850181197e-09
},
{
"variable": "dm_dt",
"time": 3600.0,
"expected": 2.4487207850181197e-09
},
{
"variable": "F_dist",
"time": 0.0,
"expected": 0.4254396577227785
},
{
"variable": "F_dist",
"time": 60.0,
"expected": 0.4254396577227785
},
{
"variable": "F_dist",
"time": 600.0,
"expected": 0.4254396577227785
},
{
"variable": "F_dist",
"time": 3600.0,
"expected": 0.4254396577227785
},
{
"variable": "n_MP",
"time": 0.0,
"expected": 132581.40321409004
},
{
"variable": "n_MP",
"time": 60.0,
"expected": 132581.40321409004
},
{
"variable": "n_MP",
"time": 600.0,
"expected": 132581.40321409004
},
{
"variable": "n_MP",
"time": 3600.0,
"expected": 132581.40321409004
}
]
},
{
"id": "collection_efficiency_scaling",
"description": "Collection efficiency E_t = E_coll * E_coal must scale linearly with E_coll. At E_coll=0.8 (moderate-efficiency collector), E_t = 0.8 and dm_dt scales proportionally (Eq. 17.106). Exercises the E_t equation and the E_t dependence of dm_dt.",
"parameter_overrides": {
"E_coll": 0.8
},
"time_span": {
"start": 0.0,
"end": 600.0
},
"assertions": [
{
"variable": "E_t",
"time": 0.0,
"expected": 0.8
},
{
"variable": "E_t",
"time": 600.0,
"expected": 0.8
},
{
"variable": "dm_dt",
"time": 0.0,
"expected": 3.917953256028991e-09
},
{
"variable": "dm_dt",
"time": 600.0,
"expected": 3.917953256028991e-09
}
]
},
{
"id": "marshall_palmer_decreasing",
"description": "Marshall-Palmer number density n(D_p) = n_0 * exp(-ψ*D_p) decreases exponentially with collector drop diameter (Eq. 17.108). At D_p=2 mm, n_MP must be much smaller than at the default 1 mm. Mirrors upstream 'n_MP should decrease with size' test.",
"parameter_overrides": {
"D_p": 0.002
},
"time_span": {
"start": 0.0,
"end": 600.0
},
"assertions": [
{
"variable": "n_MP",
"time": 0.0,
"expected": 2197.22855977714
},
{
"variable": "n_MP",
"time": 600.0,
"expected": 2197.22855977714
}
]
},
{
"id": "marshall_palmer_very_large_drop",
"description": "At D_p=5 mm (large raindrop), Marshall-Palmer distribution predicts extremely low number density (n_MP ~ 0.01 m^-4), demonstrating the exponential cutoff at large sizes. Guards the exponential decay in Eq. 17.108 over an extended range.",
"parameter_overrides": {
"D_p": 0.005
},
"time_span": {
"start": 0.0,
"end": 600.0
},
"assertions": [
{
"variable": "n_MP",
"time": 0.0,
"expected": 0.01000122293109394
},
{
"variable": "n_MP",
"time": 600.0,
"expected": 0.01000122293109394
}
]
},
{
"id": "best_cdf_high_rainfall",
"description": "Best raindrop CDF F(D_p) decreases at higher rainfall intensity (larger p_0) because the reference diameter F_diam_ref * p_0^0.232 shifts to larger sizes (Eq. 17.107). At p_0=10 mm/hr with D_p=1 mm, F_dist falls to ~0.153, confirming the p_0 exponent has correct sign.",
"parameter_overrides": {
"p_0": 10.0
},
"time_span": {
"start": 0.0,
"end": 600.0
},
"assertions": [
{
"variable": "F_dist",
"time": 0.0,
"expected": 0.15344640370427565
},
{
"variable": "F_dist",
"time": 600.0,
"expected": 0.15344640370427565
}
]
},
{
"id": "best_cdf_zero_small_dp",
"description": "CDF F(D_p) approaches zero for very small collector drop diameters (D_p -> 0). At D_p=1e-5 m (drizzle embryo, ~0.8% of the reference scale 1.3 mm), F_dist is small (~1.75e-5). Lower bound of S&P Eq. 17.107: (x/D_ref)^2.25 << 1 so F ≈ (x/D_ref)^2.25.",
"parameter_overrides": {
"D_p": 1e-05
},
"time_span": {
"start": 0.0,
"end": 600.0
},
"assertions": [
{
"variable": "F_dist",
"time": 0.0,
"expected": 1.7523612944936318e-05
},
{
"variable": "F_dist",
"time": 600.0,
"expected": 1.7523612944936318e-05
}
]
},
{
"id": "accretion_rate_differential_velocity",
"description": "dm_dt scales with |v_D - v_d| (Eq. 17.106). When v_D = v_d = 3.0 m/s (no relative fall velocity), dm_dt must be zero — no accretion occurs without differential settling. Tests the absolute-value argument in Eq. 17.106.",
"parameter_overrides": {
"v_D": 3.0,
"v_d": 3.0
},
"time_span": {
"start": 0.0,
"end": 600.0
},
"assertions": [
{
"variable": "dm_dt",
"time": 0.0,
"expected": 0.0,
"tolerance": {
"abs": 1e-20
}
},
{
"variable": "dm_dt",
"time": 600.0,
"expected": 0.0,
"tolerance": {
"abs": 1e-20
}
}
]
}
],
"analyses": [
{
"id": "defaults_trajectory",
"description": "Reference-run trajectories of E_t, dm_dt, F_dist, and n_MP at upstream Aerosol.jl defaults over a 1-hour window. All four states are time-independent (algebraic constraints), so line plots are horizontal — makes the algebraic structure visually obvious.",
"time_span": {
"start": 0.0,
"end": 3600.0
},
"plots": [
{
"id": "collection_efficiency_vs_time",
"type": "line",
"description": "E_t = E_coll * E_coal remains constant at 0.5 for the full hour.",
"x": {
"variable": "t",
"label": "time (s)"
},
"y": {
"variable": "E_t",
"label": "collection efficiency (dimensionless)"
}
},
{
"id": "accretion_rate_vs_time",
"type": "line",
"description": "dm_dt constant at ~2.45e-9 kg/s (continuous accretion, S&P Eq. 17.106).",
"x": {
"variable": "t",
"label": "time (s)"
},
"y": {
"variable": "dm_dt",
"label": "dm/dt (kg/s)"
}
},
{
"id": "best_cdf_vs_time",
"type": "line",
"description": "Best CDF F_dist constant at ~0.43 at default 1 mm / 1 mm/hr.",
"x": {
"variable": "t",
"label": "time (s)"
},
"y": {
"variable": "F_dist",
"label": "Best CDF (dimensionless)"
}
}
]
},
{
"id": "marshall_palmer_distribution",
"description": "Marshall-Palmer raindrop number density n(D_p) as a function of collector drop diameter. Classic exponential decay (S&P Eq. 17.108): n = n_0 * exp(-ψ*D_p). On a log-linear axis this is a straight line — the canonical representation of continental vs maritime raindrop spectra.",
"time_span": {
"start": 0.0,
"end": 60.0
},
"parameter_sweep": {
"type": "cartesian",
"dimensions": [
{
"parameter": "D_p",
"range": {
"start": 0.0005,
"stop": 0.005,
"count": 19,
"scale": "linear"
}
}
]
},
"plots": [
{
"id": "n_MP_vs_Dp",
"type": "line",
"description": "Marshall-Palmer number density n_MP vs D_p (S&P Fig. 17.20 style).",
"x": {
"variable": "D_p",
"label": "D_p (m)"
},
"y": {
"variable": "n_MP",
"label": "n_MP (m^-4)"
}
}
]
},
{
"id": "best_cdf_vs_rainfall_intensity",
"description": "Best raindrop CDF F(D_p) as a function of rainfall intensity p_0 at fixed D_p=1 mm. Higher rainfall shifts the distribution to larger drops so the CDF at 1 mm decreases. Covers the range from light rain (0.1 mm/hr) to heavy rain (100 mm/hr).",
"time_span": {
"start": 0.0,
"end": 60.0
},
"parameter_sweep": {
"type": "cartesian",
"dimensions": [
{
"parameter": "p_0",
"range": {
"start": 0.1,
"stop": 100.0,
"count": 21,
"scale": "log"
}
}
]
},
"plots": [
{
"id": "F_dist_vs_p0",
"type": "line",
"description": "Best CDF F_dist at D_p=1 mm vs rainfall intensity p_0 (S&P Eq. 17.107).",
"x": {
"variable": "p_0",
"label": "rainfall intensity (mm/hr)"
},
"y": {
"variable": "F_dist",
"label": "Best CDF (dimensionless)"
}
}
]
},
{
"id": "accretion_rate_heatmap",
"description": "Two-dimensional sweep of dm_dt over collector drop diameter (D_p) and liquid water mixing ratio (w_L). Spans from cloud-water (w_L=1e-4) to heavy convective (w_L=5e-3) conditions, and from small collector drops (0.2 mm) to large raindrops (3 mm). The (D_p+d_p)^2 area factor and the default exponential fall-speed scaling make dm_dt grow rapidly with D_p — useful for identifying where accretion rate becomes dynamically significant.",
"time_span": {
"start": 0.0,
"end": 60.0
},
"parameter_sweep": {
"type": "cartesian",
"dimensions": [
{
"parameter": "D_p",
"range": {
"start": 0.0002,
"stop": 0.003,
"count": 9,
"scale": "linear"
}
},
{
"parameter": "w_L",
"range": {
"start": 0.0001,
"stop": 0.005,
"count": 7,
"scale": "log"
}
}
]
},
"plots": [
{
"id": "dm_dt_heatmap",
"type": "heatmap",
"description": "dm_dt over the (D_p, w_L) plane.",
"x": {
"variable": "D_p",
"label": "D_p (m)"
},
"y": {
"variable": "w_L",
"label": "w_L (dimensionless)"
},
"value": {
"variable": "dm_dt",
"reduce": "final"
}
}
]
}
]
}