WetScavengingLimitations
Combined air refreshing and cloud ice uptake limitations on wet scavenging from Luo & Yu (2023). This component unifies the two novel parameterizations of the paper into a single algebraic system: (1) the air refreshing limitation (Section 2.1, Eqs. 2/5/10/11), which reduces the wet-scavenging removal rate R_A when subgrid cloud-free (rain-free) air mixes into cloudy (rainy) air slower than the model time step; and (2) the cloud ice uptake limitation (Section 2.2, Eqs. 12-15), which limits the cold-cloud rainout efficiency F_I by the rate R_U at which water-soluble aerosols are captured by ice crystals -- the HNO3 ice uptake rate of Jacob (2000), with the temperature-dependent uptake efficiency gamma of Hudson et al. (2002). Migrated from AtmosphericDeposition.jl@e4468c79 src/luo2023.jl:326 (`WetScavengingLimitations` @component). The upstream component is a flat MTK System that inlines the equations of both AirRefreshingLimitation and CloudIceUptakeLimitation -- it does not `couple` them -- so this migration is the union of air_refreshing.esm (esm-1i3m) and cloud_ice_uptake.esm (esm-3hh9): 13 input parameters, 9 module constants, and 7 algebraic state variables (Kᵢ, τ_A, R_A, gamma, R_U, R_AU, F_I) fixed by 7 explicit equations. Observed-only: every equation is algebraic, so the 7 outputs are the algebraic solution while the ice/turbulence/grid/temperature inputs and module constants are parameters.
Description
Combined air refreshing and cloud ice uptake limitations on wet scavenging from Luo & Yu (2023). This component unifies the two novel parameterizations of the paper into a single algebraic system: (1) the air refreshing limitation (Section 2.1, Eqs. 2/5/10/11), which reduces the wet-scavenging removal rate R_A when subgrid cloud-free (rain-free) air mixes into cloudy (rainy) air slower than the model time step; and (2) the cloud ice uptake limitation (Section 2.2, Eqs. 12-15), which limits the cold-cloud rainout efficiency F_I by the rate R_U at which water-soluble aerosols are captured by ice crystals – the HNO3 ice uptake rate of Jacob (2000), with the temperature-dependent uptake efficiency gamma of Hudson et al. (2002). Migrated from AtmosphericDeposition.jl@e4468c79 src/luo2023.jl:326 (WetScavengingLimitations @component). The upstream component is a flat MTK System that inlines the equations of both AirRefreshingLimitation and CloudIceUptakeLimitation – it does not couple them – so this migration is the union of air_refreshing.esm (esm-1i3m) and cloud_ice_uptake.esm (esm-3hh9): 13 input parameters, 9 module constants, and 7 algebraic state variables (Kᵢ, τ_A, R_A, gamma, R_U, R_AU, F_I) fixed by 7 explicit equations. Observed-only: every equation is algebraic, so the 7 outputs are the algebraic solution while the ice/turbulence/grid/temperature inputs and module constants are parameters.
Reference
_source_ref: AtmosphericDeposition.jl@e4468c79c8dd4aae88646cd16d6bcf290874742c:src/luo2023.jl:326
Upstream WetScavengingLimitations is an MTK @component that returns a flat System(eqs, t; name) – it inlines the equations of both AirRefreshingLimitation (luo2023.jl:210) and CloudIceUptakeLimitation (luo2023.jl:260) directly rather than composing them as subsystems. It does NOT call couple/compose; the coupling.couple entry in the migration-tracker features column for this row does not reflect the source (the source defines a single flat system, and the only couple calls in AtmosphericDeposition.jl are in connector_test.jl on unrelated SuperFast/DryDeposition/WetDeposition components). This migration therefore reproduces the flat system: it is the union of the sibling air_refreshing.esm (esm-1i3m) and cloud_ice_uptake.esm (esm-3hh9) migrations – 13 input @parameters (f, Rᵢ, TKE, Δx, Δy, Δz, Δt, N_I, S_I, r_ice, D_g, M, T), 9 module-level @constants, and 7 output @variables (Kᵢ, τ_A, R_A, γ, R_U, R_AU, F_I) related by 7 algebraic equations.
The 7 equations inline the upstream module-level helper functions verbatim, in the upstream source order, which is already a valid topological order (Kᵢ before τ_A; τ_A before R_A; γ before R_U; R_U and Kᵢ before R_AU; R_AU before F_I):
- Kᵢ ~ sqrt(2/3*TKE) * (1/(sqrt(f)*Δx) + 1/(sqrt(f)Δy) + 1/Δz) (Eq. 11, cloudy_air_refreshing_rate, with the Eq. 10 turbulence velocity sqrt(2/3TKE) inlined)
- τ_A ~ (1 - f)/(f*Kᵢ) (Eq. 5, grid_refreshing_time)
- R_A ~ 1/(1/(f*Rᵢ) + τ_A) (Eq. 2, air_refreshing_limited_rate)
- γ ~ γ_base + γ_delta*max(zero_dimless, min(one_dimless, (T_upper_luo - T)/(T_upper_luo - T_lower_luo))) (Eq. 15, hno3_uptake_efficiency; Hudson et al. 2002)
- R_U ~ N_IS_I / (r_ice/D_g + kinetic_prefactor_sisqrt(M/M_ref)/(γ*sqrt(T/T_ref))) (Eq. 14, cloud_ice_uptake_rate; Jacob 2000)
- R_AU ~ fR_UKᵢ / (Kᵢ + (1-f)*R_U) (Eq. 13, air_refreshing_limited_ice_uptake_rate)
- F_I ~ 1 - exp(-R_AU*Δt) (Eq. 12, cold_cloud_rainout_efficiency)
The rational 2/3 inside the turbulence-velocity square root is kept exact as a division of integer literals, mirroring the upstream
2 // 3; all other integer literals (the1s in the reciprocals and the1 - f/1 - expterms) likewise mirror the upstreamIntliterals.
The 9 upstream module-level @constants (T_upper_luo, T_lower_luo, γ_base, γ_delta, zero_dimless, one_dimless, kinetic_prefactor_si, M_ref, T_ref) are migrated as fixed-default type: parameter entries holding their evaluated numeric values, per the rig convention for translating MTK @constants (matches the sibling cloud_ice_uptake.esm migration). zero_dimless = 0.0 and one_dimless = 1.0 are the dimensionless 0/1 the Eq. 15 max/min clamp uses; they are kept as parameters rather than inlined as literals so the equation tree mirrors the upstream hno3_uptake_efficiency helper exactly. M_ref = 1.0 kg/mol and T_ref = 1.0 K non-dimensionalize M and T before the square roots (the upstream device for avoiding fractional unit powers); since both equal 1.0 they leave the numeric result unchanged but the structure is preserved.
The 13 input @parameters carry no defaults upstream (they are driven by a parent system); standalone defaults are assigned here for a representative cold-cloud GEOS-Chem-grid scenario, identical to the cloud_ice_uptake.esm sibling for every shared parameter (f=0.25, TKE=1.5 m^2/s^2, Δx=Δy=200 km, Δz=1 km, Δt=600 s, N_I=1e6 m^-3, S_I=1e-8 m^2, r_ice=1e-4 m, D_g=1e-5 m^2/s, M=0.063 kg/mol HNO3, T=210 K) plus Rᵢ=0.001 s^-1 from the air_refreshing.esm sibling. Because the combined defaults coincide with the cloud_ice_uptake.esm defaults on every cloud-ice parameter, and no cloud-ice output depends on Rᵢ, the cloud-ice test anchors (γ/R_U/Kᵢ/R_AU/F_I) carry over from cloud_ice_uptake.esm unchanged; the air-refreshing tests each pin all six air-refreshing parameters (f, Rᵢ, TKE, Δx, Δy, Δz) explicitly, so the Kᵢ/τ_A/R_A anchors carry over from air_refreshing.esm unchanged.
system_kind is left unset (zero differential states – no D operator), consistent with the observed-only siblings air_refreshing.esm / cloud_ice_uptake.esm.
Tolerance rationale (model-level rel=1e-9, abs=1e-12): observed-only algebraic system (no ODE integration). The 7 equations form a triangular chain of +, -, *, /, sqrt, exp, max, min on float64, evaluated by topological substitution; round-off is ~1e-15 per op, so rel=1e-9 leaves comfortable headroom across the value range (γ ~ 3e-3 to 7e-3, rates ~ 1e-9 to 1e1 s^-1). abs=1e-12 gates the rainout_weak_uptake F_I ~ 1.2e-7 floor case, where a pure relative tolerance would be sub-ULP._
Parameters
| Name | Units | Default | Description |
|---|---|---|---|
f | 1 | 0.25 | Cloud or rainfall fraction (dimensionless) |
Rᵢ | s^-1 | 0.001 | In-cloud or under-rain removing rate |
TKE | m^2/s^2 | 1.5 | Turbulence kinetic energy |
Δx | m | 200000.0 | Grid spacing in x direction |
Δy | m | 200000.0 | Grid spacing in y direction |
Δz | m | 1000.0 | Grid spacing in z direction |
Δt | s | 600.0 | Time step |
N_I | m^-3 | 1000000.0 | Ice crystal number concentration |
S_I | m^2 | 1e-08 | Ice crystal surface area |
r_ice | m | 0.0001 | Ice crystal radius |
D_g | m^2/s | 1e-05 | Gas-phase diffusion coefficient |
M | kg/mol | 0.063 | Molar mass (default: HNO3, 0.063 kg/mol) |
T | K | 210.0 | Temperature |
T_upper_luo | K | 220.0 | Upper temperature threshold for gamma (Eq. 15) |
T_lower_luo | K | 209.0 | Lower temperature threshold for gamma (Eq. 15) |
γ_base | 1 | 0.003 | Base uptake efficiency (Eq. 15) (dimensionless) |
γ_delta | 1 | 0.004 | Temperature-dependent uptake coefficient (Eq. 15) (dimensionless) |
zero_dimless | 1 | 0.0 | Zero (dimensionless) – lower clamp of the Eq. 15 max/min |
one_dimless | 1 | 1.0 | One (dimensionless) – upper clamp of the Eq. 15 max/min |
kinetic_prefactor_si | s/m | 0.86933051443 | Kinetic theory prefactor 4sqrt(pi/(8R)) for ice uptake in SI (Eq. 14), R = 8.314 J/(molK) |
M_ref | kg/mol | 1.0 | Reference molar mass for non-dimensionalization of the square root |
T_ref | K | 1.0 | Reference temperature for non-dimensionalization of the square root |
Observed
| Name | Units | Default | Description |
|---|---|---|---|
Kᵢ | s^-1 | Cloudy/rainy air refreshing rate (Eq. 11) | |
τ_A | s | Grid refreshing time (Eq. 5) | |
R_A | s^-1 | Air refreshing limited removal rate (Eq. 2) | |
γ | 1 | Uptake efficiency of HNO3 on ice (Eq. 15) (dimensionless) | |
R_U | s^-1 | Cloud ice uptake rate (Eq. 14) | |
R_AU | s^-1 | Air refreshing limited cloud ice uptake rate (Eq. 13) | |
F_I | 1 | Cold cloud rainout efficiency (Eq. 12) (dimensionless) |
Observed expressions
$$ Kᵢ = \sqrt{\frac{2}{3} \cdot TKE} \cdot \left(\frac{1}{\sqrt{f} \cdot Δx} + \frac{1}{\sqrt{f} \cdot Δy} + \frac{1}{Δz}\right) $$Cloudy/rainy air refreshing rate (Eq. 11)
$$ τ_{A} = \frac{1 - f}{f \cdot Kᵢ} $$Grid refreshing time (Eq. 5)
$$ R_{A} = \frac{1}{\frac{1}{f \cdot Rᵢ} + τ_{A}} $$Air refreshing limited removal rate (Eq. 2)
$$ γ = γ_{base} + γ_{delta} \cdot \mathrm{max}\left(zero_{dimless}, \mathrm{min}\left(one_{dimless}, \frac{T_{upper\,luo} - T}{T_{upper\,luo} - T_{lower\,luo}}\right)\right) $$Uptake efficiency of HNO3 on ice (Eq. 15) (dimensionless)
$$ R_{U} = \frac{N_{I} \cdot S_{I}}{\frac{r_{ice}}{D_{g}} + \frac{kinetic_{prefactor\,si} \cdot \sqrt{\frac{M}{M_{ref}}}}{γ \cdot \sqrt{\frac{T}{T_{ref}}}}} $$Cloud ice uptake rate (Eq. 14)
$$ R_{AU} = \frac{f \cdot R_{U} \cdot Kᵢ}{Kᵢ + \left(1 - f\right) \cdot R_{U}} $$Air refreshing limited cloud ice uptake rate (Eq. 13)
$$ F_{I} = 1 - e^{-R_{AU} \cdot Δt} $$Cold cloud rainout efficiency (Eq. 12) (dimensionless)
Analyses
air_refreshing_rate_vs_turbulence
Air refreshing limited removal rate R_A as a function of turbulence kinetic energy on the GEOS-Chem-like 200 km / 1 km grid at the component defaults (f = 0.25, Rᵢ = 1e-3 s^-1). As TKE grows the subgrid air mixing strengthens and R_A rises toward the standard well-mixed rate f*Rᵢ; as TKE shrinks the air refreshing limitation suppresses R_A.
Time span: 0.0 → 1.0
Swept over: TKE

rainout_efficiency_vs_turbulence
Cold-cloud rainout efficiency F_I as a function of turbulence kinetic energy TKE (log-spaced sweep over four decades) at the default cold-cloud scenario. Illustrates the air-refreshing limitation central to Luo & Yu (2023): weak turbulence throttles the cloudy-air refreshing rate Kᵢ and suppresses F_I, while strong turbulence relaxes the Eq. 13 limit and raises F_I.
Time span: 0.0 → 1.0
Swept over: TKE

uptake_efficiency_vs_temperature
HNO3-on-ice uptake efficiency γ as a function of temperature (Eq. 15, Hudson et al. 2002). Reproduces the HNO3 Uptake Efficiency on Ice figure of the AtmosphericDeposition.jl luo2023 documentation: γ is flat at 0.003 for T >= 220 K, ramps linearly up to 0.007 across 220-209 K, and is flat at 0.007 for T <= 209 K.
Time span: 0.0 → 1.0
Swept over: T

rainout_efficiency_vs_timestep
Cold-cloud rainout efficiency F_I as a function of the model time step Δt (Eq. 12). Reproduces the Cold Cloud Rainout Efficiency figure of the luo2023 documentation: F_I = 1 - exp(-R_AU*Δt) rises monotonically from near zero toward saturation as the time step lengthens, at the default cold-cloud R_AU.
Time span: 0.0 → 1.0
Swept over: Δt

rainout_over_temperature_and_turbulence
Two-dimensional sweep of the cold-cloud rainout efficiency F_I over temperature T (200-240 K, spanning the cold γ plateau, the linear ramp, and the warm plateau) and turbulence kinetic energy TKE (log-spaced, weak to strong mixing). Surfaces the joint control of the temperature-dependent ice uptake efficiency and the turbulence-driven air refreshing rate on cold-cloud scavenging.
Time span: 0.0 → 1.0
Swept over: T, TKE

Raw .esm
Raw .esm JSON (this component)
{
"reference": {
"notes": "source_ref: AtmosphericDeposition.jl@e4468c79c8dd4aae88646cd16d6bcf290874742c:src/luo2023.jl:326\nUpstream `WetScavengingLimitations` is an MTK `@component` that returns a flat `System(eqs, t; name)` -- it inlines the equations of both `AirRefreshingLimitation` (luo2023.jl:210) and `CloudIceUptakeLimitation` (luo2023.jl:260) directly rather than composing them as subsystems. It does NOT call `couple`/`compose`; the `coupling.couple` entry in the migration-tracker `features` column for this row does not reflect the source (the source defines a single flat system, and the only `couple` calls in AtmosphericDeposition.jl are in connector_test.jl on unrelated SuperFast/DryDeposition/WetDeposition components). This migration therefore reproduces the flat system: it is the union of the sibling air_refreshing.esm (esm-1i3m) and cloud_ice_uptake.esm (esm-3hh9) migrations -- 13 input `@parameters` (f, Rᵢ, TKE, Δx, Δy, Δz, Δt, N_I, S_I, r_ice, D_g, M, T), 9 module-level `@constants`, and 7 output `@variables` (Kᵢ, τ_A, R_A, γ, R_U, R_AU, F_I) related by 7 algebraic equations.\n\nThe 7 equations inline the upstream module-level helper functions verbatim, in the upstream source order, which is already a valid topological order (Kᵢ before τ_A; τ_A before R_A; γ before R_U; R_U and Kᵢ before R_AU; R_AU before F_I):\n - Kᵢ ~ sqrt(2/3*TKE) * (1/(sqrt(f)*Δx) + 1/(sqrt(f)*Δy) + 1/Δz) (Eq. 11, cloudy_air_refreshing_rate, with the Eq. 10 turbulence velocity sqrt(2/3*TKE) inlined)\n - τ_A ~ (1 - f)/(f*Kᵢ) (Eq. 5, grid_refreshing_time)\n - R_A ~ 1/(1/(f*Rᵢ) + τ_A) (Eq. 2, air_refreshing_limited_rate)\n - γ ~ γ_base + γ_delta*max(zero_dimless, min(one_dimless, (T_upper_luo - T)/(T_upper_luo - T_lower_luo))) (Eq. 15, hno3_uptake_efficiency; Hudson et al. 2002)\n - R_U ~ N_I*S_I / (r_ice/D_g + kinetic_prefactor_si*sqrt(M/M_ref)/(γ*sqrt(T/T_ref))) (Eq. 14, cloud_ice_uptake_rate; Jacob 2000)\n - R_AU ~ f*R_U*Kᵢ / (Kᵢ + (1-f)*R_U) (Eq. 13, air_refreshing_limited_ice_uptake_rate)\n - F_I ~ 1 - exp(-R_AU*Δt) (Eq. 12, cold_cloud_rainout_efficiency)\nThe rational 2/3 inside the turbulence-velocity square root is kept exact as a division of integer literals, mirroring the upstream `2 // 3`; all other integer literals (the `1`s in the reciprocals and the `1 - f` / `1 - exp` terms) likewise mirror the upstream `Int` literals.\n\nThe 9 upstream module-level `@constants` (T_upper_luo, T_lower_luo, γ_base, γ_delta, zero_dimless, one_dimless, kinetic_prefactor_si, M_ref, T_ref) are migrated as fixed-default `type: parameter` entries holding their evaluated numeric values, per the rig convention for translating MTK `@constants` (matches the sibling cloud_ice_uptake.esm migration). zero_dimless = 0.0 and one_dimless = 1.0 are the dimensionless 0/1 the Eq. 15 max/min clamp uses; they are kept as parameters rather than inlined as literals so the equation tree mirrors the upstream `hno3_uptake_efficiency` helper exactly. M_ref = 1.0 kg/mol and T_ref = 1.0 K non-dimensionalize M and T before the square roots (the upstream device for avoiding fractional unit powers); since both equal 1.0 they leave the numeric result unchanged but the structure is preserved.\n\nThe 13 input `@parameters` carry no defaults upstream (they are driven by a parent system); standalone defaults are assigned here for a representative cold-cloud GEOS-Chem-grid scenario, identical to the cloud_ice_uptake.esm sibling for every shared parameter (f=0.25, TKE=1.5 m^2/s^2, Δx=Δy=200 km, Δz=1 km, Δt=600 s, N_I=1e6 m^-3, S_I=1e-8 m^2, r_ice=1e-4 m, D_g=1e-5 m^2/s, M=0.063 kg/mol HNO3, T=210 K) plus Rᵢ=0.001 s^-1 from the air_refreshing.esm sibling. Because the combined defaults coincide with the cloud_ice_uptake.esm defaults on every cloud-ice parameter, and no cloud-ice output depends on Rᵢ, the cloud-ice test anchors (γ/R_U/Kᵢ/R_AU/F_I) carry over from cloud_ice_uptake.esm unchanged; the air-refreshing tests each pin all six air-refreshing parameters (f, Rᵢ, TKE, Δx, Δy, Δz) explicitly, so the Kᵢ/τ_A/R_A anchors carry over from air_refreshing.esm unchanged.\n\n`system_kind` is left unset (zero differential states -- no D operator), consistent with the observed-only siblings air_refreshing.esm / cloud_ice_uptake.esm.\n\nTolerance rationale (model-level rel=1e-9, abs=1e-12): observed-only algebraic system (no ODE integration). The 7 equations form a triangular chain of +, -, *, /, sqrt, exp, max, min on float64, evaluated by topological substitution; round-off is ~1e-15 per op, so rel=1e-9 leaves comfortable headroom across the value range (γ ~ 3e-3 to 7e-3, rates ~ 1e-9 to 1e1 s^-1). abs=1e-12 gates the rainout_weak_uptake F_I ~ 1.2e-7 floor case, where a pure relative tolerance would be sub-ULP."
},
"tolerance": {
"rel": 1e-09,
"abs": 1e-12
},
"variables": {
"f": {
"type": "parameter",
"units": "1",
"default": 0.25,
"description": "Cloud or rainfall fraction (dimensionless)"
},
"Rᵢ": {
"type": "parameter",
"units": "s^-1",
"default": 0.001,
"description": "In-cloud or under-rain removing rate"
},
"TKE": {
"type": "parameter",
"units": "m^2/s^2",
"default": 1.5,
"description": "Turbulence kinetic energy"
},
"Δx": {
"type": "parameter",
"units": "m",
"default": 200000.0,
"description": "Grid spacing in x direction"
},
"Δy": {
"type": "parameter",
"units": "m",
"default": 200000.0,
"description": "Grid spacing in y direction"
},
"Δz": {
"type": "parameter",
"units": "m",
"default": 1000.0,
"description": "Grid spacing in z direction"
},
"Δt": {
"type": "parameter",
"units": "s",
"default": 600.0,
"description": "Time step"
},
"N_I": {
"type": "parameter",
"units": "m^-3",
"default": 1000000.0,
"description": "Ice crystal number concentration"
},
"S_I": {
"type": "parameter",
"units": "m^2",
"default": 1e-08,
"description": "Ice crystal surface area"
},
"r_ice": {
"type": "parameter",
"units": "m",
"default": 0.0001,
"description": "Ice crystal radius"
},
"D_g": {
"type": "parameter",
"units": "m^2/s",
"default": 1e-05,
"description": "Gas-phase diffusion coefficient"
},
"M": {
"type": "parameter",
"units": "kg/mol",
"default": 0.063,
"description": "Molar mass (default: HNO3, 0.063 kg/mol)"
},
"T": {
"type": "parameter",
"units": "K",
"default": 210.0,
"description": "Temperature"
},
"T_upper_luo": {
"type": "parameter",
"units": "K",
"default": 220.0,
"description": "Upper temperature threshold for gamma (Eq. 15)"
},
"T_lower_luo": {
"type": "parameter",
"units": "K",
"default": 209.0,
"description": "Lower temperature threshold for gamma (Eq. 15)"
},
"γ_base": {
"type": "parameter",
"units": "1",
"default": 0.003,
"description": "Base uptake efficiency (Eq. 15) (dimensionless)"
},
"γ_delta": {
"type": "parameter",
"units": "1",
"default": 0.004,
"description": "Temperature-dependent uptake coefficient (Eq. 15) (dimensionless)"
},
"zero_dimless": {
"type": "parameter",
"units": "1",
"default": 0.0,
"description": "Zero (dimensionless) -- lower clamp of the Eq. 15 max/min"
},
"one_dimless": {
"type": "parameter",
"units": "1",
"default": 1.0,
"description": "One (dimensionless) -- upper clamp of the Eq. 15 max/min"
},
"kinetic_prefactor_si": {
"type": "parameter",
"units": "s/m",
"default": 0.86933051443,
"description": "Kinetic theory prefactor 4*sqrt(pi/(8R)) for ice uptake in SI (Eq. 14), R = 8.314 J/(mol*K)"
},
"M_ref": {
"type": "parameter",
"units": "kg/mol",
"default": 1.0,
"description": "Reference molar mass for non-dimensionalization of the square root"
},
"T_ref": {
"type": "parameter",
"units": "K",
"default": 1.0,
"description": "Reference temperature for non-dimensionalization of the square root"
},
"Kᵢ": {
"type": "unknown",
"units": "s^-1",
"description": "Cloudy/rainy air refreshing rate (Eq. 11)"
},
"τ_A": {
"type": "unknown",
"units": "s",
"description": "Grid refreshing time (Eq. 5)"
},
"R_A": {
"type": "unknown",
"units": "s^-1",
"description": "Air refreshing limited removal rate (Eq. 2)"
},
"γ": {
"type": "unknown",
"units": "1",
"description": "Uptake efficiency of HNO3 on ice (Eq. 15) (dimensionless)"
},
"R_U": {
"type": "unknown",
"units": "s^-1",
"description": "Cloud ice uptake rate (Eq. 14)"
},
"R_AU": {
"type": "unknown",
"units": "s^-1",
"description": "Air refreshing limited cloud ice uptake rate (Eq. 13)"
},
"F_I": {
"type": "unknown",
"units": "1",
"description": "Cold cloud rainout efficiency (Eq. 12) (dimensionless)"
}
},
"equations": [
{
"_comment": "Eq. 11 - Cloudy/rainy air refreshing rate: Kᵢ = sqrt(2/3*TKE) * [1/(sqrt(f)*Δx) + 1/(sqrt(f)*Δy) + 1/Δz]. The sqrt(2/3*TKE) factor is the isotropic turbulence velocity (Eq. 10, after Stull 1988 / Pinto 1998).",
"lhs": "Kᵢ",
"rhs": {
"op": "*",
"args": [
{
"op": "sqrt",
"args": [
{
"op": "*",
"args": [
{
"op": "/",
"args": [
2,
3
]
},
"TKE"
]
}
]
},
{
"op": "+",
"args": [
{
"op": "/",
"args": [
1,
{
"op": "*",
"args": [
{
"op": "sqrt",
"args": [
"f"
]
},
"Δx"
]
}
]
},
{
"op": "/",
"args": [
1,
{
"op": "*",
"args": [
{
"op": "sqrt",
"args": [
"f"
]
},
"Δy"
]
}
]
},
{
"op": "/",
"args": [
1,
"Δz"
]
}
]
}
]
}
},
{
"_comment": "Eq. 5 - Grid refreshing time: τ_A = (1 - f)/(f*Kᵢ).",
"lhs": "τ_A",
"rhs": {
"op": "/",
"args": [
{
"op": "-",
"args": [
1,
"f"
]
},
{
"op": "*",
"args": [
"f",
"Kᵢ"
]
}
]
}
},
{
"_comment": "Eq. 2 - Air refreshing limited removal rate: R_A = 1/(1/(f*Rᵢ) + τ_A). As τ_A -> 0 (strong mixing) R_A -> f*Rᵢ; as τ_A -> infinity (no mixing) R_A -> 0.",
"lhs": "R_A",
"rhs": {
"op": "/",
"args": [
1,
{
"op": "+",
"args": [
{
"op": "/",
"args": [
1,
{
"op": "*",
"args": [
"f",
"Rᵢ"
]
}
]
},
"τ_A"
]
}
]
}
},
{
"_comment": "Eq. 15 - HNO3-on-ice uptake efficiency (Hudson et al. 2002): γ = γ_base + γ_delta*max(0, min(1, (T_upper_luo - T)/(T_upper_luo - T_lower_luo))). γ = 0.003 for T >= 220 K and γ = 0.007 for T <= 209 K, ramping linearly between.",
"lhs": "γ",
"rhs": {
"op": "+",
"args": [
"γ_base",
{
"op": "*",
"args": [
"γ_delta",
{
"op": "max",
"args": [
"zero_dimless",
{
"op": "min",
"args": [
"one_dimless",
{
"op": "/",
"args": [
{
"op": "-",
"args": [
"T_upper_luo",
"T"
]
},
{
"op": "-",
"args": [
"T_upper_luo",
"T_lower_luo"
]
}
]
}
]
}
]
}
]
}
]
}
},
{
"_comment": "Eq. 14 - Cloud ice uptake rate (Jacob 2000): R_U = N_I*S_I / (r_ice/D_g + kinetic_prefactor_si*sqrt(M/M_ref)/(γ*sqrt(T/T_ref))). M and T are non-dimensionalized by M_ref/T_ref before the square roots to avoid fractional unit powers.",
"lhs": "R_U",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
"N_I",
"S_I"
]
},
{
"op": "+",
"args": [
{
"op": "/",
"args": [
"r_ice",
"D_g"
]
},
{
"op": "/",
"args": [
{
"op": "*",
"args": [
"kinetic_prefactor_si",
{
"op": "sqrt",
"args": [
{
"op": "/",
"args": [
"M",
"M_ref"
]
}
]
}
]
},
{
"op": "*",
"args": [
"γ",
{
"op": "sqrt",
"args": [
{
"op": "/",
"args": [
"T",
"T_ref"
]
}
]
}
]
}
]
}
]
}
]
}
},
{
"_comment": "Eq. 13 - Air refreshing limited cloud ice uptake rate: R_AU = f*R_U*Kᵢ / (Kᵢ + (1-f)*R_U) -- the Eq. 2 refreshing-limit structure applied to the ice uptake rate R_U.",
"lhs": "R_AU",
"rhs": {
"op": "/",
"args": [
{
"op": "*",
"args": [
{
"op": "*",
"args": [
"f",
"R_U"
]
},
"Kᵢ"
]
},
{
"op": "+",
"args": [
"Kᵢ",
{
"op": "*",
"args": [
{
"op": "-",
"args": [
1,
"f"
]
},
"R_U"
]
}
]
}
]
}
},
{
"_comment": "Eq. 12 - Cold cloud rainout efficiency: F_I = 1 - exp(-R_AU*Δt). F_I is the fraction of water-soluble aerosols removed via cloud-ice uptake over a time step.",
"lhs": "F_I",
"rhs": {
"op": "-",
"args": [
1,
{
"op": "exp",
"args": [
{
"op": "-",
"args": [
{
"op": "*",
"args": [
"R_AU",
"Δt"
]
}
]
}
]
}
]
}
}
],
"tests": [
{
"id": "default_scenario",
"description": "Default representative cold-cloud GEOS-Chem-grid scenario at the component defaults (f = 0.25, Rᵢ = 1e-3 s^-1, TKE = 1.5 m^2/s^2, 200 km x 1 km grid, Δt = 600 s, HNO3 ice uptake at T = 210 K). Pins all seven outputs and re-checks R_A, γ, F_I at t = 1 to confirm the algebraic system is time-invariant. The air-refreshing outputs (Kᵢ/τ_A/R_A) reproduce the air_refreshing.esm `eq11_reference` anchor (which used the same f/Rᵢ/TKE/grid), and the cloud-ice outputs (γ/R_U/Kᵢ/R_AU/F_I) reproduce the cloud_ice_uptake.esm `default_cold_cloud` anchor.",
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "Kᵢ",
"time": 0.0,
"expected": 0.00102
},
{
"variable": "τ_A",
"time": 0.0,
"expected": 2941.176470588235
},
{
"variable": "R_A",
"time": 0.0,
"expected": 0.00014406779661016949
},
{
"variable": "γ",
"time": 0.0,
"expected": 0.006636363636363636
},
{
"variable": "R_U",
"time": 0.0,
"expected": 0.0008150689881718272
},
{
"variable": "R_AU",
"time": 0.0,
"expected": 0.00012740904195932977
},
{
"variable": "F_I",
"time": 0.0,
"expected": 0.07359652878399103
},
{
"variable": "R_A",
"time": 1.0,
"expected": 0.00014406779661016949
},
{
"variable": "γ",
"time": 1.0,
"expected": 0.006636363636363636
},
{
"variable": "F_I",
"time": 1.0,
"expected": 0.07359652878399103
}
]
},
{
"id": "geoschem_default",
"description": "Air refreshing limitation at a representative GEOS-Chem case (air_refreshing.esm `geoschem_default` anchor): f = 0.3, Rᵢ = 1e-3 s^-1, TKE = 1 m^2/s^2 on the 200 km / 1 km grid. R_A is roughly half of f*Rᵢ -- the regime where the air refreshing limitation matters most.",
"parameter_overrides": {
"f": 0.3,
"Rᵢ": 0.001,
"TKE": 1.0,
"Δx": 200000.0,
"Δy": 200000.0,
"Δz": 1000.0
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "Kᵢ",
"time": 0.0,
"expected": 0.0008314037007777247
},
{
"variable": "τ_A",
"time": 0.0,
"expected": 2806.498613309816
},
{
"variable": "R_A",
"time": 0.0,
"expected": 0.0001628709073294316
}
]
},
{
"id": "strong_mixing",
"description": "Strong-mixing limit of the air refreshing limitation (Luo & Yu 2023 limiting-behavior test): a very large TKE = 1000 m^2/s^2 on a fine 50 km / 500 m grid drives the grid refreshing time τ_A toward zero, so R_A approaches the standard well-mixed rate f*Rᵢ = 3e-4 s^-1 (here within ~1.3%).",
"parameter_overrides": {
"f": 0.3,
"Rᵢ": 0.001,
"TKE": 1000.0,
"Δx": 50000.0,
"Δy": 50000.0,
"Δz": 500.0
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "Kᵢ",
"time": 0.0,
"expected": 0.05352539603259635
},
{
"variable": "τ_A",
"time": 0.0,
"expected": 43.59301390151994
},
{
"variable": "R_A",
"time": 0.0,
"expected": 0.0002961272758639925
}
]
},
{
"id": "weak_mixing",
"description": "Weak-mixing limit of the air refreshing limitation (Luo & Yu 2023 limiting-behavior test): a near-zero TKE = 1e-6 m^2/s^2 on a coarse 200 km grid makes τ_A enormous, so R_A collapses to far below f*Rᵢ (R_A/(f*Rᵢ) ~ 0.0012).",
"parameter_overrides": {
"f": 0.3,
"Rᵢ": 0.001,
"TKE": 1e-06,
"Δx": 200000.0,
"Δy": 200000.0,
"Δz": 1000.0
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "Kᵢ",
"time": 0.0,
"expected": 8.314037007777246e-07
},
{
"variable": "τ_A",
"time": 0.0,
"expected": 2806498.613309816
},
{
"variable": "R_A",
"time": 0.0,
"expected": 3.558931704775726e-07
}
]
},
{
"id": "full_cloud_coverage",
"description": "Full-cloud-coverage limit of the air refreshing limitation (Luo & Yu 2023 limiting-behavior test): as f -> 1 the grid refreshing time τ_A = (1-f)/(f*Kᵢ) -> 0, so R_A -> Rᵢ. At f = 0.999, R_A = 9.978e-4 s^-1, within ~0.2% of Rᵢ = 1e-3 s^-1.",
"parameter_overrides": {
"f": 0.999,
"Rᵢ": 0.001,
"TKE": 1.0,
"Δx": 200000.0,
"Δy": 200000.0,
"Δz": 1000.0
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "Kᵢ",
"time": 0.0,
"expected": 0.000824665632284324
},
{
"variable": "τ_A",
"time": 0.0,
"expected": 1.2138265035105547
},
{
"variable": "R_A",
"time": 0.0,
"expected": 0.000997790067115624
}
]
},
{
"id": "fine_grid",
"description": "High-resolution grid case for the air refreshing limitation: a fine 10 km horizontal / 200 m vertical grid with f = 0.5, Rᵢ = 2e-3 s^-1, TKE = 0.5 m^2/s^2. Exercises a non-default Rᵢ and small grid spacings; R_A is ~75% of f*Rᵢ.",
"parameter_overrides": {
"f": 0.5,
"Rᵢ": 0.002,
"TKE": 0.5,
"Δx": 10000.0,
"Δy": 10000.0,
"Δz": 200.0
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "Kᵢ",
"time": 0.0,
"expected": 0.0030500506621336737
},
{
"variable": "τ_A",
"time": 0.0,
"expected": 327.8634064722212
},
{
"variable": "R_A",
"time": 0.0,
"expected": 0.0007530895083981064
}
]
},
{
"id": "gamma_warm_plateau",
"description": "Eq. 15 warm plateau: at T = 250 K (well above the 220 K upper threshold) the max/min clamp saturates at 0 and γ = γ_base = 0.003 -- the minimum HNO3-on-ice uptake efficiency (upstream luo2023_test.jl `Eq. 15` T = 250 K case). R_U, R_AU, F_I follow from the warm-temperature γ.",
"parameter_overrides": {
"T": 250.0
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "γ",
"time": 0.0,
"expected": 0.003
},
{
"variable": "R_U",
"time": 0.0,
"expected": 0.0006849284717434525
},
{
"variable": "R_AU",
"time": 0.0,
"expected": 0.00011387962151763193
},
{
"variable": "F_I",
"time": 0.0,
"expected": 0.06604570151675793
}
]
},
{
"id": "gamma_warm_threshold",
"description": "Eq. 15 upper-threshold boundary: at exactly T = 220 K the ramp argument (220 - T)/(220 - 209) = 0, so γ = γ_base = 0.003. Verifies the warm endpoint of the linear ramp (upstream luo2023_test.jl `Eq. 15` T >= 220 K branch).",
"parameter_overrides": {
"T": 220.0
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "γ",
"time": 0.0,
"expected": 0.003
},
{
"variable": "R_U",
"time": 0.0,
"expected": 0.000670974977179463
},
{
"variable": "F_I",
"time": 0.0,
"expected": 0.06517474310875937
}
]
},
{
"id": "gamma_cold_plateau",
"description": "Eq. 15 cold plateau: at T = 200 K (well below the 209 K lower threshold) the ramp argument exceeds 1, the min clamp saturates at 1, and γ = γ_base + γ_delta = 0.007 -- the maximum HNO3-on-ice uptake efficiency (upstream luo2023_test.jl `Eq. 15` T = 200 K case).",
"parameter_overrides": {
"T": 200.0
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "γ",
"time": 0.0,
"expected": 0.007
},
{
"variable": "R_U",
"time": 0.0,
"expected": 0.0008193930573499208
},
{
"variable": "F_I",
"time": 0.0,
"expected": 0.07383095076384805
}
]
},
{
"id": "gamma_cold_threshold",
"description": "Eq. 15 lower-threshold boundary: at exactly T = 209 K the ramp argument (220 - T)/(220 - 209) = 1, so γ = γ_base + γ_delta = 0.007. Verifies the cold endpoint of the linear ramp (upstream luo2023_test.jl `Eq. 15` T <= 209 K branch).",
"parameter_overrides": {
"T": 209.0
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "γ",
"time": 0.0,
"expected": 0.007
},
{
"variable": "R_U",
"time": 0.0,
"expected": 0.0008226271801153912
},
{
"variable": "F_I",
"time": 0.0,
"expected": 0.07400563743093802
}
]
},
{
"id": "gamma_linear_midpoint",
"description": "Eq. 15 linear-ramp midpoint: at T = 214.5 K the ramp argument (220 - T)/(220 - 209) = 0.5, so γ = γ_base + 0.5*γ_delta = 0.005 (upstream luo2023_test.jl `Eq. 15` T = 214.5 K case). This is the consistent operating point of the upstream Eq. 14 unit test, which used an artificial γ = 0.005.",
"parameter_overrides": {
"T": 214.5
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "γ",
"time": 0.0,
"expected": 0.005
},
{
"variable": "R_U",
"time": 0.0,
"expected": 0.0007704342363922707
},
{
"variable": "F_I",
"time": 0.0,
"expected": 0.07111749961196356
}
]
},
{
"id": "gamma_lower_quarter",
"description": "Eq. 15 linear ramp at the lower quarter point: T = 217.25 K gives (220 - T)/(220 - 209) = 0.25, so γ = γ_base + 0.25*γ_delta = 0.004. Exercises the interior of the linear ramp between the warm threshold and the midpoint.",
"parameter_overrides": {
"T": 217.25
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "γ",
"time": 0.0,
"expected": 0.004
},
{
"variable": "R_U",
"time": 0.0,
"expected": 0.0007298754433942737
},
{
"variable": "F_I",
"time": 0.0,
"expected": 0.06876691836830806
}
]
},
{
"id": "gamma_upper_quarter",
"description": "Eq. 15 linear ramp at the upper quarter point: T = 211.75 K gives (220 - T)/(220 - 209) = 0.75, so γ = γ_base + 0.75*γ_delta = 0.006. Exercises the interior of the linear ramp between the midpoint and the cold threshold.",
"parameter_overrides": {
"T": 211.75
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "γ",
"time": 0.0,
"expected": 0.006
},
{
"variable": "R_U",
"time": 0.0,
"expected": 0.0008000544348260321
},
{
"variable": "F_I",
"time": 0.0,
"expected": 0.0727747849032423
}
]
},
{
"id": "high_turbulence",
"description": "Strong turbulent mixing: TKE = 100 m^2/s^2 raises the cloudy-air refreshing rate Kᵢ by a factor sqrt(100/1.5) ~ 8.16 relative to the default. The faster air refreshing relaxes the Eq. 13 limit, so the air-refreshing limited ice uptake rate R_AU and the rainout efficiency F_I both rise.",
"parameter_overrides": {
"TKE": 100.0
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "Kᵢ",
"time": 0.0,
"expected": 0.008328265125462805
},
{
"variable": "R_AU",
"time": 0.0,
"expected": 0.00018983331995663392
},
{
"variable": "F_I",
"time": 0.0,
"expected": 0.10765280669856891
}
]
},
{
"id": "weak_turbulence",
"description": "Weak turbulent mixing: TKE = 0.01 m^2/s^2 lowers the cloudy-air refreshing rate Kᵢ to sqrt(0.01/1.5) ~ 0.082 of the default. Slow air refreshing tightens the Eq. 13 limit, strongly suppressing the rainout efficiency F_I -- the central effect the Luo & Yu (2023) parameterization captures.",
"parameter_overrides": {
"TKE": 0.01
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "Kᵢ",
"time": 0.0,
"expected": 8.328265125462806e-05
},
{
"variable": "R_AU",
"time": 0.0,
"expected": 2.443227454961941e-05
},
{
"variable": "F_I",
"time": 0.0,
"expected": 0.014552439366250502
}
]
},
{
"id": "rainout_saturation",
"description": "Strong-uptake saturation limit: abundant ice surface (N_I = 1e8 m^-3, S_I = 1e-6 m^2) drives a large R_U, strong turbulence (TKE = 100 m^2/s^2) lifts Kᵢ, and a long time step (Δt = 3600 s) lets the Eq. 12 exponential saturate, so F_I approaches 1 (complete cold-cloud rainout). Mirrors the upstream luo2023_test.jl `F_I limits` large-R_AU*Δt branch.",
"parameter_overrides": {
"N_I": 100000000.0,
"S_I": 1e-06,
"TKE": 100.0,
"Δt": 3600.0
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "R_U",
"time": 0.0,
"expected": 8.150689881718272
},
{
"variable": "Kᵢ",
"time": 0.0,
"expected": 0.008328265125462805
},
{
"variable": "R_AU",
"time": 0.0,
"expected": 0.002772311427858336
},
{
"variable": "F_I",
"time": 0.0,
"expected": 0.9999536978027082
}
]
},
{
"id": "rainout_weak_uptake",
"description": "Weak-uptake floor limit: sparse ice surface (N_I = 1e3 m^-3, S_I = 1e-10 m^2) gives a vanishingly small R_U and a short time step (Δt = 60 s) keeps R_AU*Δt tiny, so F_I -> 0 (negligible cold-cloud rainout). Mirrors the upstream luo2023_test.jl `F_I limits` small-R_AU*Δt branch; the abs=1e-12 tolerance gates this ~1.2e-7 floor value.",
"parameter_overrides": {
"N_I": 1000.0,
"S_I": 1e-10,
"Δt": 60.0
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "R_U",
"time": 0.0,
"expected": 8.150689881718273e-09
},
{
"variable": "R_AU",
"time": 0.0,
"expected": 2.037660258417178e-09
},
{
"variable": "F_I",
"time": 0.0,
"expected": 1.2225960799305824e-07
}
]
},
{
"id": "heavy_species",
"description": "Molar-mass dependence of the Eq. 14 kinetic term: a heavier species (M = 0.098 kg/mol, e.g. sulfuric acid) increases the kinetic resistance kinetic_prefactor_si*sqrt(M/M_ref)/(γ*sqrt(T/T_ref)), lowering the uptake rate R_U relative to the HNO3 default (M = 0.063). Confirms the sqrt(M/M_ref) factor is wired in.",
"parameter_overrides": {
"M": 0.098
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "R_U",
"time": 0.0,
"expected": 0.0007794344280142675
},
{
"variable": "R_AU",
"time": 0.0,
"expected": 0.0001238681130184578
},
{
"variable": "F_I",
"time": 0.0,
"expected": 0.07162623921120326
}
]
},
{
"id": "large_ice_crystals",
"description": "Diffusion-limited regime of Eq. 14: larger ice crystals (r_ice = 1e-3 m) with D_g = 2e-5 m^2/s make the gas-phase diffusion resistance r_ice/D_g = 50 s/m dominate over the kinetic term, sharply reducing the uptake rate R_U and hence F_I. Confirms the r_ice/D_g diffusion term is wired in.",
"parameter_overrides": {
"r_ice": 0.001,
"D_g": 2e-05
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "R_U",
"time": 0.0,
"expected": 0.0001913183552482547
},
{
"variable": "R_AU",
"time": 0.0,
"expected": 4.193094252017475e-05
},
{
"variable": "F_I",
"time": 0.0,
"expected": 0.02484472622685796
}
]
},
{
"id": "coarse_grid",
"description": "Grid-resolution dependence of Eq. 11: doubling the horizontal grid spacing (Δx = Δy = 400 km) and vertical spacing (Δz = 2000 m) halves the cloudy-air refreshing rate Kᵢ to 5.1e-4 s^-1, tightening the Eq. 13 air-refreshing limit and reducing F_I. Coarser GCM grids experience stronger refreshing limitation.",
"parameter_overrides": {
"Δx": 400000.0,
"Δy": 400000.0,
"Δz": 2000.0
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "Kᵢ",
"time": 0.0,
"expected": 0.00051
},
{
"variable": "R_AU",
"time": 0.0,
"expected": 9.267915332699406e-05
},
{
"variable": "F_I",
"time": 0.0,
"expected": 0.05408965958524958
}
]
}
],
"analyses": [
{
"id": "air_refreshing_rate_vs_turbulence",
"description": "Air refreshing limited removal rate R_A as a function of turbulence kinetic energy on the GEOS-Chem-like 200 km / 1 km grid at the component defaults (f = 0.25, Rᵢ = 1e-3 s^-1). As TKE grows the subgrid air mixing strengthens and R_A rises toward the standard well-mixed rate f*Rᵢ; as TKE shrinks the air refreshing limitation suppresses R_A.",
"initial_state": {},
"parameters": {},
"time_span": {
"start": 0.0,
"end": 1.0
},
"parameter_sweep": {
"type": "cartesian",
"dimensions": [
{
"parameter": "TKE",
"range": {
"start": 0.01,
"stop": 100.0,
"count": 41,
"scale": "log"
}
}
]
},
"plots": [
{
"id": "r_a_vs_tke",
"type": "line",
"description": "Air refreshing limited removal rate R_A as a function of turbulence kinetic energy (log-spaced).",
"x": {
"variable": "TKE",
"label": "Turbulence kinetic energy (m^2/s^2)"
},
"y": {
"variable": "R_A",
"label": "Air refreshing limited removal rate (s^-1)"
}
}
]
},
{
"id": "rainout_efficiency_vs_turbulence",
"description": "Cold-cloud rainout efficiency F_I as a function of turbulence kinetic energy TKE (log-spaced sweep over four decades) at the default cold-cloud scenario. Illustrates the air-refreshing limitation central to Luo & Yu (2023): weak turbulence throttles the cloudy-air refreshing rate Kᵢ and suppresses F_I, while strong turbulence relaxes the Eq. 13 limit and raises F_I.",
"initial_state": {},
"parameters": {},
"time_span": {
"start": 0.0,
"end": 1.0
},
"parameter_sweep": {
"type": "cartesian",
"dimensions": [
{
"parameter": "TKE",
"range": {
"start": 0.01,
"stop": 100.0,
"count": 41,
"scale": "log"
}
}
]
},
"plots": [
{
"id": "f_i_vs_tke",
"type": "line",
"description": "Cold cloud rainout efficiency F_I as a function of turbulence kinetic energy (log-spaced).",
"x": {
"variable": "TKE",
"label": "Turbulence kinetic energy (m^2/s^2)"
},
"y": {
"variable": "F_I",
"label": "Cold cloud rainout efficiency F_I (dimensionless)"
}
}
]
},
{
"id": "uptake_efficiency_vs_temperature",
"description": "HNO3-on-ice uptake efficiency γ as a function of temperature (Eq. 15, Hudson et al. 2002). Reproduces the `HNO3 Uptake Efficiency on Ice` figure of the AtmosphericDeposition.jl luo2023 documentation: γ is flat at 0.003 for T >= 220 K, ramps linearly up to 0.007 across 220-209 K, and is flat at 0.007 for T <= 209 K.",
"initial_state": {},
"parameters": {},
"time_span": {
"start": 0.0,
"end": 1.0
},
"parameter_sweep": {
"type": "cartesian",
"dimensions": [
{
"parameter": "T",
"range": {
"start": 190.0,
"stop": 240.0,
"count": 51,
"scale": "linear"
}
}
]
},
"plots": [
{
"id": "gamma_vs_T",
"type": "line",
"description": "Uptake efficiency γ as a function of temperature T (Eq. 15).",
"x": {
"variable": "T",
"label": "Temperature (K)"
},
"y": {
"variable": "γ",
"label": "HNO3 uptake efficiency γ (dimensionless)"
}
}
]
},
{
"id": "rainout_efficiency_vs_timestep",
"description": "Cold-cloud rainout efficiency F_I as a function of the model time step Δt (Eq. 12). Reproduces the `Cold Cloud Rainout Efficiency` figure of the luo2023 documentation: F_I = 1 - exp(-R_AU*Δt) rises monotonically from near zero toward saturation as the time step lengthens, at the default cold-cloud R_AU.",
"initial_state": {},
"parameters": {},
"time_span": {
"start": 0.0,
"end": 1.0
},
"parameter_sweep": {
"type": "cartesian",
"dimensions": [
{
"parameter": "Δt",
"range": {
"start": 60.0,
"stop": 3600.0,
"count": 31,
"scale": "linear"
}
}
]
},
"plots": [
{
"id": "f_i_vs_dt",
"type": "line",
"description": "Cold cloud rainout efficiency F_I as a function of time step Δt (Eq. 12).",
"x": {
"variable": "Δt",
"label": "Time step Δt (s)"
},
"y": {
"variable": "F_I",
"label": "Cold cloud rainout efficiency F_I (dimensionless)"
}
}
]
},
{
"id": "rainout_over_temperature_and_turbulence",
"description": "Two-dimensional sweep of the cold-cloud rainout efficiency F_I over temperature T (200-240 K, spanning the cold γ plateau, the linear ramp, and the warm plateau) and turbulence kinetic energy TKE (log-spaced, weak to strong mixing). Surfaces the joint control of the temperature-dependent ice uptake efficiency and the turbulence-driven air refreshing rate on cold-cloud scavenging.",
"initial_state": {},
"parameters": {},
"time_span": {
"start": 0.0,
"end": 1.0
},
"parameter_sweep": {
"type": "cartesian",
"dimensions": [
{
"parameter": "T",
"range": {
"start": 200.0,
"stop": 240.0,
"count": 15,
"scale": "linear"
}
},
{
"parameter": "TKE",
"range": {
"start": 0.01,
"stop": 100.0,
"count": 15,
"scale": "log"
}
}
]
},
"plots": [
{
"id": "f_i_heatmap",
"type": "heatmap",
"description": "Cold cloud rainout efficiency F_I as a function of temperature T and turbulence kinetic energy TKE.",
"x": {
"variable": "T",
"label": "Temperature (K)"
},
"y": {
"variable": "TKE",
"label": "Turbulence kinetic energy (m^2/s^2)"
},
"value": {
"variable": "F_I",
"reduce": "final"
}
}
]
}
]
}