Ensemble¶
Convenience functions for running batched ensembles over Gaussian updraft-speed
distributions using jax.vmap.
run_updraft_ensemble ¶
run_updraft_ensemble(
aerosols: list[Any],
T0: float,
S0: float,
P0: float,
*,
mean: float,
std: float,
n: int,
seed: int = 0,
v_min: float = 0.01,
accom: float = c.ac,
z_cap: float = 400.0,
t_end: float | None = None,
max_steps: int = 100000,
) -> dict[str, Any]
Convenience: sample a Gaussian updraft distribution and run the ensemble.
Equilibrates y0 once for the given aerosols/conditions, samples n updraft
speeds from Normal(mean, std) (clipped at v_min), and returns the per-member
S_max/N_act (see smax_nact_ensemble).
t_end defaults to
z_cap / min(V) so even the slowest member reaches its supersaturation maximum.
Source code in pyrcel/ensemble.py
smax_nact_ensemble ¶
smax_nact_ensemble(
y0: ArrayLike,
r_drys: ArrayLike,
Nis: ArrayLike,
kappas: ArrayLike,
accom: float,
V_samples: ArrayLike,
t_end: float,
*,
rtol: float = STATE_RTOL,
atol: ArrayLike | None = None,
max_steps: int = 100000,
) -> dict[str, NDArray[np.floating[Any]] | NDArray[np.bool_] | float]
Peak supersaturation and activated number for a batch of updraft speeds.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
y0
|
array, shape ``(7 + nr,)``
|
Equilibrated initial state (shared across the ensemble). |
required |
r_drys
|
array, shape ``(nr,)``
|
Aerosol dry radii (m), number concentrations (m^-3), hygroscopicities. |
required |
Nis
|
array, shape ``(nr,)``
|
Aerosol dry radii (m), number concentrations (m^-3), hygroscopicities. |
required |
kappas
|
array, shape ``(nr,)``
|
Aerosol dry radii (m), number concentrations (m^-3), hygroscopicities. |
required |
accom
|
float
|
Accommodation coefficient. |
required |
V_samples
|
array, shape ``(n,)``
|
Updraft speeds (m/s). |
required |
t_end
|
float
|
Upper bound on integration time; must exceed the slowest member's time-to-peak
(use |
required |
Returns:
| Type | Description |
|---|---|
dict
|
|
Source code in pyrcel/ensemble.py
sample_gaussian_updrafts ¶
sample_gaussian_updrafts(
mean: float, std: float, n: int, *, seed: int = 0, v_min: float = 0.01
) -> NDArray[np.floating[Any]]
Draw n updraft speeds from Normal(mean, std) (m/s).
Samples are clipped at v_min so every member is a physical (positive) updraft;
with a low-mean/high-std request this truncation matters, so the returned array is
what was actually simulated.