Version: dev

AirRefreshingLimitation

Air refreshing limitation on wet scavenging from Luo & Yu (2023), Eqs. 2, 5, 10, 11. The air refreshing limited removal rate R_A accounts for the finite time needed for species in subgrid cloud-free (rain-free) air to mix into cloudy (rainy) air before being subject to wet scavenging; the standard well-mixed assumption overestimates wet scavenging when the subgrid air mixing time scale is comparable to the model time step. When turbulent mixing is strong (large TKE) the grid refreshing time goes to zero and R_A approaches f*Rᵢ (the standard model); when mixing is weak R_A falls below f*Rᵢ. Migrated from AtmosphericDeposition.jl@e4468c79 src/luo2023.jl:210 (`AirRefreshingLimitation` @component). Observed-only algebraic system: cloud fraction f, in-cloud removal rate Rᵢ, turbulence kinetic energy TKE, and the grid spacings Δx/Δy/Δz are input parameters; Kᵢ, τ_A, and R_A are the algebraic outputs fixed by three explicit equations.

.esm schema
1.0.0
Source
components/atmospheric_deposition/luo2023/air_refreshing.esm

Description

Air refreshing limitation on wet scavenging from Luo & Yu (2023), Eqs. 2, 5, 10, 11. The air refreshing limited removal rate R_A accounts for the finite time needed for species in subgrid cloud-free (rain-free) air to mix into cloudy (rainy) air before being subject to wet scavenging; the standard well-mixed assumption overestimates wet scavenging when the subgrid air mixing time scale is comparable to the model time step. When turbulent mixing is strong (large TKE) the grid refreshing time goes to zero and R_A approaches fRᵢ (the standard model); when mixing is weak R_A falls below fRᵢ. Migrated from AtmosphericDeposition.jl@e4468c79 src/luo2023.jl:210 (AirRefreshingLimitation @component). Observed-only algebraic system: cloud fraction f, in-cloud removal rate Rᵢ, turbulence kinetic energy TKE, and the grid spacings Δx/Δy/Δz are input parameters; Kᵢ, τ_A, and R_A are the algebraic outputs fixed by three explicit equations.

Reference

_source_ref: AtmosphericDeposition.jl@e4468c79:src/luo2023.jl:210 Upstream AirRefreshingLimitation is an MTK @component that already declares f, Rᵢ, TKE, Δx, Δy, Δz as @parameters and Kᵢ, τ_A, R_A as @variables, so the parameter/state split maps directly with no re-typing (unlike the sibling Seinfeld & Pandis Ch.1 observed-only migrations whose inputs were upstream @variables). The three upstream helper functions are inlined into the equation ASTs: cloudy_air_refreshing_rate (Eq. 11, which itself calls turbulence_velocity = sqrt(2/3*TKE), Eq. 10, after Stull 1988 / Pinto 1998), grid_refreshing_time (Eq. 5), and air_refreshing_limited_rate (Eq. 2). The rational 2/3 inside the turbulence-velocity square root is kept exact as a division of integer literals, mirroring the upstream 2 // 3. This component references none of the luo2023.jl module @constants (T_upper_luo, γ_base, kinetic_prefactor_si, etc. are used only by CloudIceUptakeLimitation). system_kind is left unset (zero differential states — no D operator), consistent with the observed-only siblings ideal_gas.esm / total_molar_conc.esm / barometric.esm.

Tolerance rationale (model-level rel=1e-6): observed-only algebraic system (no ODE integration). The three equations form a triangular chain — Kᵢ depends only on parameters, τ_A on Kᵢ, R_A on τ_A — evaluated by topological substitution. 1e-6 covers float64 roundoff in the square-root and reciprocal expression chain across the tested TKE range (1e-6 to 1e3 m^2/s^2), cloud-fraction range (0.25-0.999), and grid-spacing range (200 m to 200 km)._

Parameters

NameUnitsDefaultDescription
f10.3Cloud or rainfall fraction (dimensionless)
Rᵢs^-10.001In-cloud or under-rain removing rate
TKEm^2/s^21.0Turbulence kinetic energy
Δxm200000.0Grid spacing in x direction
Δym200000.0Grid spacing in y direction
Δzm1000.0Grid spacing in z direction

Observed

NameUnitsDefaultDescription
Kᵢs^-1Cloudy/rainy air refreshing rate (Eq. 11)
τ_AsGrid refreshing time (Eq. 5)
R_As^-1Air refreshing limited removal rate (Eq. 2)

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)

Analyses

r_a_vs_tke

Air refreshing limited removal rate R_A as a function of turbulence kinetic energy on the GEOS-Chem-like 200 km / 1 km grid with f=0.3. 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

R_A as a function of turbulence kinetic energy (log-spaced) at f = 0.3.

r_a_vs_cloud_fraction

Air refreshing limited removal rate R_A as a function of cloud (rainfall) fraction f at fixed TKE = 1 m^2/s^2 and the GEOS-Chem-like grid. R_A rises with f as more of the grid cell is directly subject to in-cloud removal and the grid refreshing time falls.

Time span: 0.0 → 1.0

Swept over: f

R_A as a function of cloud fraction f at TKE = 1 m^2/s^2.

air_refreshing_over_tke_and_cloud_fraction

Two-dimensional sweep over turbulence kinetic energy (log-spaced, weak to strong mixing) and cloud fraction f. Surfaces the joint control of turbulence and cloud cover on the air refreshing limited removal rate.

Time span: 0.0 → 1.0

Swept over: TKE, f

R_A as a function of turbulence kinetic energy and cloud fraction.

Raw .esm

Raw .esm JSON (this component)
{
  "reference": {
    "notes": "source_ref: AtmosphericDeposition.jl@e4468c79:src/luo2023.jl:210\nUpstream `AirRefreshingLimitation` is an MTK `@component` that already declares f, Rᵢ, TKE, Δx, Δy, Δz as `@parameters` and Kᵢ, τ_A, R_A as `@variables`, so the parameter/state split maps directly with no re-typing (unlike the sibling Seinfeld & Pandis Ch.1 observed-only migrations whose inputs were upstream `@variables`). The three upstream helper functions are inlined into the equation ASTs: `cloudy_air_refreshing_rate` (Eq. 11, which itself calls `turbulence_velocity` = sqrt(2/3*TKE), Eq. 10, after Stull 1988 / Pinto 1998), `grid_refreshing_time` (Eq. 5), and `air_refreshing_limited_rate` (Eq. 2). The rational 2/3 inside the turbulence-velocity square root is kept exact as a division of integer literals, mirroring the upstream `2 // 3`. This component references none of the luo2023.jl module `@constants` (T_upper_luo, γ_base, kinetic_prefactor_si, etc. are used only by CloudIceUptakeLimitation). `system_kind` is left unset (zero differential states — no D operator), consistent with the observed-only siblings ideal_gas.esm / total_molar_conc.esm / barometric.esm.\n\nTolerance rationale (model-level rel=1e-6): observed-only algebraic system (no ODE integration). The three equations form a triangular chain — Kᵢ depends only on parameters, τ_A on Kᵢ, R_A on τ_A — evaluated by topological substitution. 1e-6 covers float64 roundoff in the square-root and reciprocal expression chain across the tested TKE range (1e-6 to 1e3 m^2/s^2), cloud-fraction range (0.25-0.999), and grid-spacing range (200 m to 200 km)."
  },
  "tolerance": {
    "rel": 1e-06
  },
  "variables": {
    "f": {
      "type": "parameter",
      "units": "1",
      "default": 0.3,
      "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.0,
      "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"
    },
    "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)"
    }
  },
  "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).",
      "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"
            ]
          }
        ]
      }
    }
  ],
  "tests": [
    {
      "id": "eq11_reference",
      "description": "Canonical Eq. 11 anchor (Luo & Yu 2023 docstring example): f=0.25 and TKE=1.5 m^2/s^2 chosen so the turbulence velocity sqrt(2/3*TKE) = 1 m/s exactly, on a GEOS-Chem-like 200 km horizontal / 1 km vertical grid. Kᵢ = 1.02e-3 s^-1.",
      "parameter_overrides": {
        "f": 0.25,
        "Rᵢ": 0.001,
        "TKE": 1.5,
        "Δ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.00102
        },
        {
          "variable": "τ_A",
          "time": 0.0,
          "expected": 2941.176470588235
        },
        {
          "variable": "R_A",
          "time": 0.0,
          "expected": 0.00014406779661016949
        }
      ]
    },
    {
      "id": "geoschem_default",
      "description": "Representative case at the component defaults: f=0.3, TKE=1 m^2/s^2 on the GEOS-Chem-like 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 (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 (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 (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: 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
        }
      ]
    }
  ],
  "analyses": [
    {
      "id": "r_a_vs_tke",
      "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 with f=0.3. 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": {
        "f": 0.3,
        "Rᵢ": 0.001,
        "Δx": 200000.0,
        "Δy": 200000.0,
        "Δz": 1000.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_sweep": {
        "type": "cartesian",
        "dimensions": [
          {
            "parameter": "TKE",
            "range": {
              "start": 0.01,
              "stop": 100.0,
              "count": 25,
              "scale": "log"
            }
          }
        ]
      },
      "plots": [
        {
          "id": "r_a_vs_tke",
          "type": "line",
          "description": "R_A as a function of turbulence kinetic energy (log-spaced) at f = 0.3.",
          "x": {
            "variable": "TKE",
            "label": "Turbulence kinetic energy (m^2/s^2)"
          },
          "y": {
            "variable": "R_A",
            "label": "Air refreshing limited removal rate (s^-1)"
          }
        }
      ]
    },
    {
      "id": "r_a_vs_cloud_fraction",
      "description": "Air refreshing limited removal rate R_A as a function of cloud (rainfall) fraction f at fixed TKE = 1 m^2/s^2 and the GEOS-Chem-like grid. R_A rises with f as more of the grid cell is directly subject to in-cloud removal and the grid refreshing time falls.",
      "initial_state": {},
      "parameters": {
        "Rᵢ": 0.001,
        "TKE": 1.0,
        "Δx": 200000.0,
        "Δy": 200000.0,
        "Δz": 1000.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_sweep": {
        "type": "cartesian",
        "dimensions": [
          {
            "parameter": "f",
            "range": {
              "start": 0.05,
              "stop": 0.95,
              "count": 19,
              "scale": "linear"
            }
          }
        ]
      },
      "plots": [
        {
          "id": "r_a_vs_f",
          "type": "line",
          "description": "R_A as a function of cloud fraction f at TKE = 1 m^2/s^2.",
          "x": {
            "variable": "f",
            "label": "Cloud fraction (dimensionless)"
          },
          "y": {
            "variable": "R_A",
            "label": "Air refreshing limited removal rate (s^-1)"
          }
        }
      ]
    },
    {
      "id": "air_refreshing_over_tke_and_cloud_fraction",
      "description": "Two-dimensional sweep over turbulence kinetic energy (log-spaced, weak to strong mixing) and cloud fraction f. Surfaces the joint control of turbulence and cloud cover on the air refreshing limited removal rate.",
      "initial_state": {},
      "parameters": {
        "Rᵢ": 0.001,
        "Δx": 200000.0,
        "Δy": 200000.0,
        "Δz": 1000.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_sweep": {
        "type": "cartesian",
        "dimensions": [
          {
            "parameter": "TKE",
            "range": {
              "start": 0.01,
              "stop": 100.0,
              "count": 12,
              "scale": "log"
            }
          },
          {
            "parameter": "f",
            "range": {
              "start": 0.05,
              "stop": 0.95,
              "count": 12,
              "scale": "linear"
            }
          }
        ]
      },
      "plots": [
        {
          "id": "r_a_heatmap",
          "type": "heatmap",
          "description": "R_A as a function of turbulence kinetic energy and cloud fraction.",
          "x": {
            "variable": "TKE",
            "label": "Turbulence kinetic energy (m^2/s^2)"
          },
          "y": {
            "variable": "f",
            "label": "Cloud fraction (dimensionless)"
          },
          "value": {
            "variable": "R_A",
            "reduce": "final"
          }
        }
      ]
    }
  ]
}