pub enum Algorithm {
Linear,
Newton {
tangent: TangentStrategy,
line_search: Option<LineSearch>,
},
KrylovNewton {
tangent: TangentStrategy,
max_dimension: usize,
},
}Expand description
Iteration strategy for resolving each step’s equilibrium. Closed enum
. docs/algorithms.md designs Newton/KrylovNewton as three
composable axes (tangent strategy, line search, Krylov acceleration)
rather than a combinatorial pile of variants — see that doc for the
full design and Xara reference map.
Variants§
Linear
One tangent formation, one solve, no re-iteration and no convergence
check — correct (and exact, to solver tolerance) whenever the
tangent doesn’t change with the solution, i.e. linear response.
Matches OpenSees’ Linear algorithm semantics.
Newton
Newton-family iteration: re-forms the residual every iteration and
solves against whichever tangent tangent says to form/factor
(TangentStrategy), until ConvergenceTest passes or its
max_iter is exceeded (AnalysisError::FailedToConverge).
tangent: TangentStrategy::Current, line_search: None is today’s
old bare NewtonRaphson variant, exactly.
Fields
tangent: TangentStrategyWhich tangent gets formed/factored at each iteration.
line_search: Option<LineSearch>None: accept each raw Newton correction outright. Some(_):
rescale a correction that doesn’t already satisfy the
convergence test at eta = 1 (docs/algorithms.md §4).
KrylovNewton
Modified Newton (solving against a stale tangent — tangent,
almost always Initial/ReuseAtStepStart in practice) with a
Krylov-subspace correction (docs/algorithms.md §5) applied to
each raw solve, extrapolating from the history of how the last
max_dimension corrections actually moved the residual to recover
most of full Newton’s convergence rate without paying for a fresh
factorization every iteration.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Algorithm
impl RefUnwindSafe for Algorithm
impl Send for Algorithm
impl Sync for Algorithm
impl Unpin for Algorithm
impl UnsafeUnpin for Algorithm
impl UnwindSafe for Algorithm
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T, U> Imply<T> for U
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.