Version: dev

StokesNumber

Stokes number and stop distance for aerosol single-particle dynamics. Migrated from Aerosol.jl@c8c640bb src/single_particle_dynamics.jl:329 (`StokesNumber` @component). Computes the particle relaxation time τ, the stop distance s_p (the distance a particle travels before coming to rest), and the dimensionless Stokes number St characterizing particle inertia relative to a flow (Seinfeld & Pandis 2006, Chapter 9, Eqs. 9.38, 9.98 and 9.101).

Domain
aerosol
Subdomain
particle_dyn
Type
model
.esm schema
1.0.0
Source
components/aerosol/particle_dyn/stokes.esm
Tags
#aerosol #particle_dyn #model #particle-dynamics #stokes-number

Description

Stokes number and stop distance for aerosol single-particle dynamics. Migrated from Aerosol.jl@c8c640bb src/single_particle_dynamics.jl:329 (StokesNumber @component). Computes the particle relaxation time τ, the stop distance s_p (the distance a particle travels before coming to rest), and the dimensionless Stokes number St characterizing particle inertia relative to a flow (Seinfeld & Pandis 2006, Chapter 9, Eqs. 9.38, 9.98 and 9.101).

Reference

_source_ref: Aerosol.jl@c8c640bb636b22f2425460e9ed5cba50793bfee1:src/single_particle_dynamics.jl:329 Upstream StokesNumber is an MTK @component with six @parameters (D_p, ρ_p, μ, C_c, U, L) and three variables (τ, s_p, St) — no constants. The equations are: • τ ~ (ρ_p * D_p^2 * C_c) / (18 * μ) (Eq. 9.38 — relaxation time) • s_p ~ τ * U (Eq. 9.98 — stop distance) • St ~ τ * U / L (Eq. 9.101 — Stokes number) All three equations are algebraic (no derivatives), making this an observed-only component.

Observability classification: observed-only — every output is given by a single algebraic equation in which the output appears only on the LHS. τ is an intermediate algebraic variable: it is the LHS of the relaxation-time equation and is reused on the RHS of the s_p and St equations, forming a triangular algebraic system. All three outputs migrate as type: state with explicit equations, matching the sibling single_particle_dynamics.jl migrations mean_free_path.esm, slip.esm and aerodynamic_diameter.esm (in slip.esm the intermediate Kn is likewise a type: state reused by the C_c equation). Test scenarios use time_span: [0, 1] and sample at t=0.

Tolerance rationale (model-level rel=1e-9): observed-only algebraic system (no ODE integration); the τ equation is a product/division of parameters, and the s_p and St equations are products/divisions of τ and parameters. Floating-point round-off is ~1e-15. 1e-9 leaves comfortable headroom._

Parameters

NameUnitsDefaultDescription
D_pm1e-06Particle diameter
ρ_pkg/m^31000.0Particle density
μkg/(m*s)1.8e-05Dynamic viscosity of air
C_c11.0Slip correction factor (dimensionless)
Um/s1.0Initial particle velocity
Lm0.01Characteristic length scale

Observed

NameUnitsDefaultDescription
τsRelaxation time
s_pmStop distance
St1Stokes number (dimensionless)

Observed expressions

$$ τ = \frac{ρ_{p} \cdot D_{p}^{2} \cdot C_{c}}{18 \cdot μ} $$

Relaxation time

$$ s_{p} = τ \cdot U $$

Stop distance

$$ St = \frac{τ \cdot U}{L} $$

Stokes number (dimensionless)

Analyses

size_dependence

Sweep particle diameter D_p from 100 nm to 10 μm (log scale) for a fast flow over a small obstacle (U = 10 m/s, L = 0.001 m). The Stokes number St ∝ D_p² rises from ≈ 3.1e-4 (perfect flow tracer) to ≈ 3.1 (strong inertial impaction), crossing St ≈ 1 — the transition where particles can no longer follow fluid streamlines. The stop distance s_p ∝ D_p² grows over the same range.

Time span: 0.0 → 1.0

Swept over: D_p

Stokes number St vs particle diameter (log x-axis) — St ∝ D_p², crossing St ≈ 1 within the swept range to mark the onset of inertial impaction.

Stop distance s_p vs particle diameter (log x-axis) — s_p ∝ D_p², the distance a particle of given size coasts before the drag force brings it to rest.

Raw .esm

Raw .esm JSON (this component)
{
  "reference": {
    "notes": "source_ref: Aerosol.jl@c8c640bb636b22f2425460e9ed5cba50793bfee1:src/single_particle_dynamics.jl:329\nUpstream `StokesNumber` is an MTK `@component` with six `@parameters` (D_p, ρ_p, μ, C_c, U, L) and three variables (τ, s_p, St) — no constants. The equations are:\n  • τ   ~ (ρ_p * D_p^2 * C_c) / (18 * μ)  (Eq. 9.38 — relaxation time)\n  • s_p ~ τ * U                            (Eq. 9.98 — stop distance)\n  • St  ~ τ * U / L                        (Eq. 9.101 — Stokes number)\nAll three equations are algebraic (no derivatives), making this an observed-only component.\n\nObservability classification: observed-only — every output is given by a single algebraic equation in which the output appears only on the LHS. τ is an intermediate algebraic variable: it is the LHS of the relaxation-time equation and is reused on the RHS of the s_p and St equations, forming a triangular algebraic system. All three outputs migrate as `type: state` with explicit `equations`, matching the sibling single_particle_dynamics.jl migrations mean_free_path.esm, slip.esm and aerodynamic_diameter.esm (in slip.esm the intermediate Kn is likewise a `type: state` reused by the C_c equation). Test scenarios use `time_span: [0, 1]` and sample at t=0.\n\nTolerance rationale (model-level rel=1e-9): observed-only algebraic system (no ODE integration); the τ equation is a product/division of parameters, and the s_p and St equations are products/divisions of τ and parameters. Floating-point round-off is ~1e-15. 1e-9 leaves comfortable headroom."
  },
  "tolerance": {
    "rel": 1e-09
  },
  "variables": {
    "D_p": {
      "type": "parameter",
      "units": "m",
      "default": 1e-06,
      "description": "Particle diameter"
    },
    "ρ_p": {
      "type": "parameter",
      "units": "kg/m^3",
      "default": 1000.0,
      "description": "Particle density"
    },
    "μ": {
      "type": "parameter",
      "units": "kg/(m*s)",
      "default": 1.8e-05,
      "description": "Dynamic viscosity of air"
    },
    "C_c": {
      "type": "parameter",
      "units": "1",
      "default": 1.0,
      "description": "Slip correction factor (dimensionless)"
    },
    "U": {
      "type": "parameter",
      "units": "m/s",
      "default": 1.0,
      "description": "Initial particle velocity"
    },
    "L": {
      "type": "parameter",
      "units": "m",
      "default": 0.01,
      "description": "Characteristic length scale"
    },
    "τ": {
      "type": "unknown",
      "units": "s",
      "description": "Relaxation time"
    },
    "s_p": {
      "type": "unknown",
      "units": "m",
      "description": "Stop distance"
    },
    "St": {
      "type": "unknown",
      "units": "1",
      "description": "Stokes number (dimensionless)"
    }
  },
  "equations": [
    {
      "lhs": "τ",
      "rhs": {
        "op": "/",
        "args": [
          {
            "op": "*",
            "args": [
              {
                "op": "*",
                "args": [
                  "ρ_p",
                  {
                    "op": "^",
                    "args": [
                      "D_p",
                      2
                    ]
                  }
                ]
              },
              "C_c"
            ]
          },
          {
            "op": "*",
            "args": [
              18,
              "μ"
            ]
          }
        ]
      }
    },
    {
      "lhs": "s_p",
      "rhs": {
        "op": "*",
        "args": [
          "τ",
          "U"
        ]
      }
    },
    {
      "lhs": "St",
      "rhs": {
        "op": "/",
        "args": [
          {
            "op": "*",
            "args": [
              "τ",
              "U"
            ]
          },
          "L"
        ]
      }
    }
  ],
  "tests": [
    {
      "id": "default_conditions",
      "description": "Default conditions: D_p = 1.0e-6 m, ρ_p = 1000 kg/m³, μ = 1.8e-5 kg/(m·s), C_c = 1.0, U = 1.0 m/s, L = 0.01 m. Relaxation time τ = ρ_p*D_p²*C_c/(18μ) = 1e-9/3.24e-4 ≈ 3.0864e-6 s; stop distance s_p = τ*U ≈ 3.0864e-6 m; Stokes number St = τ*U/L ≈ 3.0864e-4 (St ≪ 1, the particle closely follows the flow).",
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "τ",
          "time": 0.0,
          "expected": 3.08641975308642e-06
        },
        {
          "variable": "s_p",
          "time": 0.0,
          "expected": 3.08641975308642e-06
        },
        {
          "variable": "St",
          "time": 0.0,
          "expected": 0.00030864197530864197
        }
      ]
    },
    {
      "id": "stop_distance",
      "description": "Faster initial velocity (U = 10 m/s) at default size: τ is unchanged at 3.0864e-6 s, but the stop distance scales linearly with velocity, s_p = τ*U ≈ 3.0864e-5 m. Mirrors the upstream `s_p = τU` test. St = τ*U/L ≈ 3.0864e-3.",
      "parameter_overrides": {
        "U": 10.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "τ",
          "time": 0.0,
          "expected": 3.08641975308642e-06
        },
        {
          "variable": "s_p",
          "time": 0.0,
          "expected": 3.08641975308642e-05
        },
        {
          "variable": "St",
          "time": 0.0,
          "expected": 0.0030864197530864196
        }
      ]
    },
    {
      "id": "inertial_impaction",
      "description": "Fast flow over a small obstacle (U = 10 m/s, L = 0.001 m) at default particle size: St = τ*U/L ≈ 0.0309. Mirrors the upstream `St = τU/L` test. Shrinking the characteristic length L by 10× raises St by 10× relative to the stop_distance scenario, moving the particle toward the inertial-impaction regime.",
      "parameter_overrides": {
        "U": 10.0,
        "L": 0.001
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "τ",
          "time": 0.0,
          "expected": 3.08641975308642e-06
        },
        {
          "variable": "s_p",
          "time": 0.0,
          "expected": 3.08641975308642e-05
        },
        {
          "variable": "St",
          "time": 0.0,
          "expected": 0.0308641975308642
        }
      ]
    },
    {
      "id": "large_inertial_particle",
      "description": "Large particle (D_p = 1.0e-5 m = 10 μm): τ ∝ D_p², so a 10× larger diameter raises τ by 100× to ≈ 3.0864e-4 s. With default U = 1 m/s and L = 0.01 m, s_p ≈ 3.0864e-4 m and St ≈ 0.0309 — inertia is now appreciable.",
      "parameter_overrides": {
        "D_p": 1e-05
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "τ",
          "time": 0.0,
          "expected": 0.000308641975308642
        },
        {
          "variable": "s_p",
          "time": 0.0,
          "expected": 0.000308641975308642
        },
        {
          "variable": "St",
          "time": 0.0,
          "expected": 0.030864197530864203
        }
      ]
    },
    {
      "id": "small_tracer_particle",
      "description": "Small particle (D_p = 1.0e-7 m = 100 nm): τ ∝ D_p², so a 10× smaller diameter lowers τ by 100× to ≈ 3.0864e-8 s. s_p ≈ 3.0864e-8 m and St ≈ 3.0864e-6 — the particle behaves as a near-perfect flow tracer (St ≪ 1).",
      "parameter_overrides": {
        "D_p": 1e-07
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "τ",
          "time": 0.0,
          "expected": 3.086419753086419e-08
        },
        {
          "variable": "s_p",
          "time": 0.0,
          "expected": 3.086419753086419e-08
        },
        {
          "variable": "St",
          "time": 0.0,
          "expected": 3.086419753086419e-06
        }
      ]
    },
    {
      "id": "dense_slip_corrected_particle",
      "description": "Dense particle (ρ_p = 2000 kg/m³) with a slip correction above unity (C_c = 1.5): τ = ρ_p*D_p²*C_c/(18μ) scales linearly with both ρ_p and C_c, giving τ = 3.0864e-6*2*1.5 ≈ 9.2593e-6 s. At default U and L, s_p ≈ 9.2593e-6 m and St ≈ 9.2593e-4.",
      "parameter_overrides": {
        "ρ_p": 2000.0,
        "C_c": 1.5
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "τ",
          "time": 0.0,
          "expected": 9.25925925925926e-06
        },
        {
          "variable": "s_p",
          "time": 0.0,
          "expected": 9.25925925925926e-06
        },
        {
          "variable": "St",
          "time": 0.0,
          "expected": 0.0009259259259259261
        }
      ]
    }
  ],
  "analyses": [
    {
      "id": "size_dependence",
      "description": "Sweep particle diameter D_p from 100 nm to 10 μm (log scale) for a fast flow over a small obstacle (U = 10 m/s, L = 0.001 m). The Stokes number St ∝ D_p² rises from ≈ 3.1e-4 (perfect flow tracer) to ≈ 3.1 (strong inertial impaction), crossing St ≈ 1 — the transition where particles can no longer follow fluid streamlines. The stop distance s_p ∝ D_p² grows over the same range.",
      "initial_state": {},
      "parameters": {
        "U": 10.0,
        "L": 0.001
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_sweep": {
        "type": "cartesian",
        "dimensions": [
          {
            "parameter": "D_p",
            "range": {
              "start": 1e-07,
              "stop": 1e-05,
              "count": 50,
              "scale": "log"
            }
          }
        ]
      },
      "plots": [
        {
          "id": "stokes_number_vs_diameter",
          "type": "line",
          "description": "Stokes number St vs particle diameter (log x-axis) — St ∝ D_p², crossing St ≈ 1 within the swept range to mark the onset of inertial impaction.",
          "x": {
            "variable": "D_p",
            "label": "D_p (m)"
          },
          "y": {
            "variable": "St",
            "label": "St (dimensionless)"
          }
        },
        {
          "id": "stop_distance_vs_diameter",
          "type": "line",
          "description": "Stop distance s_p vs particle diameter (log x-axis) — s_p ∝ D_p², the distance a particle of given size coasts before the drag force brings it to rest.",
          "x": {
            "variable": "D_p",
            "label": "D_p (m)"
          },
          "y": {
            "variable": "s_p",
            "label": "s_p (m)"
          }
        }
      ]
    }
  ]
}