pub struct RkState<V: Vector> { /* private fields */ }Expand description
State container for the SDIRK Runge-Kutta solversintegrator. For the common state API use as_ref and as_mut methods.
Trait Implementations§
Source§impl<V> OdeSolverState<V> for RkState<V>where
V: Vector,
impl<V> OdeSolverState<V> for RkState<V>where
V: Vector,
Source§fn set_problem<Eqn: OdeEquations>(
&mut self,
_ode_problem: &OdeSolverProblem<Eqn>,
) -> Result<(), DiffsolError>
fn set_problem<Eqn: OdeEquations>( &mut self, _ode_problem: &OdeSolverProblem<Eqn>, ) -> Result<(), DiffsolError>
Set the ODE problem for the state, allocating any necessary data structures.
Source§fn set_augmented_problem<Eqn: OdeEquations, AugmentedEqn: AugmentedOdeEquations<Eqn>>(
&mut self,
_ode_problem: &OdeSolverProblem<Eqn>,
_augmented_eqn: &AugmentedEqn,
) -> Result<(), DiffsolError>
fn set_augmented_problem<Eqn: OdeEquations, AugmentedEqn: AugmentedOdeEquations<Eqn>>( &mut self, _ode_problem: &OdeSolverProblem<Eqn>, _augmented_eqn: &AugmentedEqn, ) -> Result<(), DiffsolError>
Set the augmented ODE problem (for sensitivities) for the state.
Source§fn new_from_common(state: StateCommon<V>) -> Self
fn new_from_common(state: StateCommon<V>) -> Self
Create a new state from a common state representation.
Source§fn into_common(self) -> StateCommon<V>
fn into_common(self) -> StateCommon<V>
Convert the state into a common state representation.
Source§fn as_mut(&mut self) -> StateRefMut<'_, V>
fn as_mut(&mut self) -> StateRefMut<'_, V>
Get a mutable reference to the state.
Source§fn check_consistent_with_problem<Eqn: OdeEquations>(
&self,
problem: &OdeSolverProblem<Eqn>,
) -> Result<(), DiffsolError>
fn check_consistent_with_problem<Eqn: OdeEquations>( &self, problem: &OdeSolverProblem<Eqn>, ) -> Result<(), DiffsolError>
Check that the state is consistent with the given ODE problem.
Source§fn check_sens_consistent_with_problem<Eqn: OdeEquations, AugmentedEqn: AugmentedOdeEquations<Eqn>>(
&self,
problem: &OdeSolverProblem<Eqn>,
augmented_eqn: &AugmentedEqn,
) -> Result<(), DiffsolError>
fn check_sens_consistent_with_problem<Eqn: OdeEquations, AugmentedEqn: AugmentedOdeEquations<Eqn>>( &self, problem: &OdeSolverProblem<Eqn>, augmented_eqn: &AugmentedEqn, ) -> Result<(), DiffsolError>
Check that the sensitivity vectors in the state are consistent with the given ODE problem.
Source§fn new<Eqn>(
ode_problem: &OdeSolverProblem<Eqn>,
solver_order: usize,
) -> Result<Self, DiffsolError>
fn new<Eqn>( ode_problem: &OdeSolverProblem<Eqn>, solver_order: usize, ) -> Result<Self, DiffsolError>
Create a new solver state from an ODE problem.
This function will set the initial step size based on the given solver.
If you want to create a state without this default initialisation, use Self::new_without_initialise instead.
You can then use
StateRefMut::set_consistent and StateRefMut::set_step_size to set the state up if you need to.Source§fn new_and_consistent<LS, Eqn>(
ode_problem: &OdeSolverProblem<Eqn>,
solver_order: usize,
) -> Result<Self, DiffsolError>
fn new_and_consistent<LS, Eqn>( ode_problem: &OdeSolverProblem<Eqn>, solver_order: usize, ) -> Result<Self, DiffsolError>
Create a new solver state from an ODE problem.
This function will make the state consistent with any algebraic constraints using a default nonlinear solver.
It will also set the initial step size based on the given solver.
If you want to create a state without this default initialisation, use Self::new_without_initialise instead.
You can then use
StateRefMut::set_consistent and StateRefMut::set_step_size to set the state up if you need to.Source§fn new_with_sensitivities<Eqn>(
ode_problem: &OdeSolverProblem<Eqn>,
solver_order: usize,
) -> Result<Self, DiffsolError>
fn new_with_sensitivities<Eqn>( ode_problem: &OdeSolverProblem<Eqn>, solver_order: usize, ) -> Result<Self, DiffsolError>
Create a new solver state from an ODE problem with sensitivity equations.
This will initialize the sensitivity vectors but will not make them consistent with algebraic constraints.
Source§fn new_with_sensitivities_and_consistent<LS, Eqn>(
ode_problem: &OdeSolverProblem<Eqn>,
solver_order: usize,
) -> Result<Self, DiffsolError>
fn new_with_sensitivities_and_consistent<LS, Eqn>( ode_problem: &OdeSolverProblem<Eqn>, solver_order: usize, ) -> Result<Self, DiffsolError>
Create a new solver state from an ODE problem with sensitivity equations, making both the main state and sensitivities consistent with algebraic constraints.
Source§fn new_without_initialise<Eqn>(
ode_problem: &OdeSolverProblem<Eqn>,
) -> Result<Self, DiffsolError>
fn new_without_initialise<Eqn>( ode_problem: &OdeSolverProblem<Eqn>, ) -> Result<Self, DiffsolError>
Create a new solver state from an ODE problem, without any initialisation apart from setting the initial time state vector y,
the initial time derivative dy and if applicable the sensitivity vectors s.
This is useful if you want to set up the state yourself, or if you want to use a different nonlinear solver to make the state consistent,
or if you want to set the step size yourself or based on the exact order of the solver.
Source§fn new_without_initialise_augmented<Eqn, AugmentedEqn>(
ode_problem: &OdeSolverProblem<Eqn>,
augmented_eqn: &mut AugmentedEqn,
) -> Result<Self, DiffsolError>
fn new_without_initialise_augmented<Eqn, AugmentedEqn>( ode_problem: &OdeSolverProblem<Eqn>, augmented_eqn: &mut AugmentedEqn, ) -> Result<Self, DiffsolError>
Create a new solver state with augmented equations (sensitivities) from an ODE problem, without making the augmented state consistent.
Source§fn new_without_initialise_augmented_at<Eqn, AugmentedEqn>(
ode_problem: &OdeSolverProblem<Eqn>,
augmented_eqn: &mut AugmentedEqn,
t: V::T,
) -> Result<Self, DiffsolError>
fn new_without_initialise_augmented_at<Eqn, AugmentedEqn>( ode_problem: &OdeSolverProblem<Eqn>, augmented_eqn: &mut AugmentedEqn, t: V::T, ) -> Result<Self, DiffsolError>
Create a new solver state with augmented equations from an ODE problem, evaluating the
augmented initial/output operators at a caller-supplied time while leaving the base state
allocation behavior unchanged.
fn initialise_augmented_state<Eqn, AugmentedEqn>( augmented_eqn: &mut AugmentedEqn, ode_problem: &OdeSolverProblem<Eqn>, state: &mut StateCommon<V>, ) -> Result<(), DiffsolError>
Source§fn set_step_size<Eqn>(
&mut self,
h0: Eqn::T,
atol: &Eqn::V,
rtol: Eqn::T,
eqn: &Eqn,
solver_order: usize,
)
fn set_step_size<Eqn>( &mut self, h0: Eqn::T, atol: &Eqn::V, rtol: Eqn::T, eqn: &Eqn, solver_order: usize, )
compute size of first step based on alg in Hairer, Norsett, Wanner
Solving Ordinary Differential Equations I, Nonstiff Problems
Section II.4.2
Note: this assumes that the state is already consistent with the algebraic constraints
and y and dy are already set appropriately
Auto Trait Implementations§
impl<V> Freeze for RkState<V>
impl<V> RefUnwindSafe for RkState<V>
impl<V> Send for RkState<V>
impl<V> Sync for RkState<V>where
V: Sync,
impl<V> Unpin for RkState<V>
impl<V> UnsafeUnpin for RkState<V>
impl<V> UnwindSafe for RkState<V>
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.