pub struct OdeEnsemble { /* private fields */ }Expand description
A batch of N lane outcomes, in the same order as the lanes handed in.
Lane i of the result corresponds to lanes[i], always — the parallel path
preserves order, so no index bookkeeping is needed.
§Getting states out
Self::states/Self::into_states— all-or-nothing.Okonly when every lane completed; otherwiseErr(OdeEnsembleFailure).Self::lanes— per-lane, when the caller wants to handle failures individually (re-run stiff, sub-cycle, flag the cell).
§Units
See OdeLaneSolution.
Implementations§
Source§impl OdeEnsemble
impl OdeEnsemble
Sourcepub fn lanes(&self) -> &[OdeLaneSolution]
pub fn lanes(&self) -> &[OdeLaneSolution]
Every lane’s outcome, in input order.
Sourcepub fn into_lanes(self) -> Vec<OdeLaneSolution>
pub fn into_lanes(self) -> Vec<OdeLaneSolution>
Consume the ensemble and take the outcomes.
Sourcepub fn get(&self, i: usize) -> Option<&OdeLaneSolution>
pub fn get(&self, i: usize) -> Option<&OdeLaneSolution>
Lane i’s outcome, or None if i is out of range.
Sourcepub fn all_completed(&self) -> bool
pub fn all_completed(&self) -> bool
Whether every lane completed. Vacuously true for an empty ensemble.
Sourcepub fn failure_count(&self) -> usize
pub fn failure_count(&self) -> usize
How many lanes failed, dimensionless.
Sourcepub fn first_failure(&self) -> Option<(usize, &OdeLaneSolution)>
pub fn first_failure(&self) -> Option<(usize, &OdeLaneSolution)>
The first failing lane’s index and outcome, if any.
The natural thing to print when an ensemble fails: it names the cell to look at rather than just the count.
Sourcepub fn failures(&self) -> Vec<(usize, &OdeLaneSolution)>
pub fn failures(&self) -> Vec<(usize, &OdeLaneSolution)>
Every failing lane, as (index, outcome) pairs.
Allocates, so prefer Self::first_failure or Self::failure_count
on a hot path.
Sourcepub fn total_steps(&self) -> u64
pub fn total_steps(&self) -> u64
Total accepted sub-steps over every lane, dimensionless.
The honest measure of how much work the ensemble did, and — read beside
Self::max_steps_taken — the measure of how imbalanced it was.
Sourcepub fn max_steps_taken(&self) -> u32
pub fn max_steps_taken(&self) -> u32
The largest accepted-sub-step count over all lanes, dimensionless; 0
for an empty ensemble.
With Self::total_steps this quantifies the load imbalance the
module-level “Load imbalance” section describes: a maximum far above the
mean is precisely the case that makes work-stealing worth having.
Sourcepub fn states(&self) -> Result<Vec<Vec<f64>>, OdeEnsembleFailure>
pub fn states(&self) -> Result<Vec<Vec<f64>>, OdeEnsembleFailure>
Every lane’s final state, or an error naming the failures — the all-or-nothing path.
§Returns
Ok(v) with v[i] the final state of lane i, in that lane’s own
units, when every lane completed. Otherwise
Err(OdeEnsembleFailure) carrying the failure count and the first
failing lane. No Vec of plausible-looking states is ever returned for
an ensemble that contained a failure.
An empty ensemble returns Ok(vec![]).
§Errors
OdeEnsembleFailure when one or more lanes did not complete.
Sourcepub fn into_states(self) -> Result<Vec<Vec<f64>>, OdeEnsembleFailure>
pub fn into_states(self) -> Result<Vec<Vec<f64>>, OdeEnsembleFailure>
Self::states without the clone — consumes the ensemble.
§Errors
OdeEnsembleFailure when one or more lanes did not complete.