pub struct RkState<V: Vector> { /* private fields */ }
Trait Implementations§
Source§impl<V> OdeSolverState<V> for RkState<V>where
V: Vector,
impl<V> OdeSolverState<V> for RkState<V>where
V: Vector,
fn set_problem<Eqn: OdeEquations>( &mut self, _ode_problem: &OdeSolverProblem<Eqn>, ) -> Result<(), DiffsolError>
fn set_augmented_problem<Eqn: OdeEquations, AugmentedEqn: AugmentedOdeEquations<Eqn>>( &mut self, _ode_problem: &OdeSolverProblem<Eqn>, _augmented_eqn: &AugmentedEqn, ) -> Result<(), DiffsolError>
fn new_from_common(state: StateCommon<V>) -> Self
fn into_common(self) -> StateCommon<V>
fn as_mut(&mut self) -> StateRefMut<'_, V>
fn as_ref(&self) -> StateRef<'_, V>
fn check_consistent_with_problem<Eqn: OdeEquations>( &self, problem: &OdeSolverProblem<Eqn>, ) -> Result<(), DiffsolError>
fn check_sens_consistent_with_problem<Eqn: OdeEquations, AugmentedEqn: AugmentedOdeEquations<Eqn>>( &self, problem: &OdeSolverProblem<Eqn>, augmented_eqn: &AugmentedEqn, ) -> Result<(), DiffsolError>
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 Self::set_consistent and Self::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 Self::set_consistent and Self::set_step_size to set the state up if you need to.
fn new_with_sensitivities<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>
fn into_adjoint<LS, Eqn, AugmentedEqn>(
self,
ode_problem: &OdeSolverProblem<Eqn>,
augmented_eqn: &mut AugmentedEqn,
) -> Result<Self, DiffsolError>where
Eqn: OdeEquationsImplicit<T = V::T, V = V, C = V::C>,
AugmentedEqn: AugmentedOdeEquationsImplicit<Eqn> + Debug,
LS: LinearSolver<AugmentedEqn::M>,
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.
fn new_without_initialise_augmented<Eqn, AugmentedEqn>( ode_problem: &OdeSolverProblem<Eqn>, augmented_eqn: &mut AugmentedEqn, ) -> Result<Self, DiffsolError>
Source§fn set_consistent<Eqn, S>(
&mut self,
ode_problem: &OdeSolverProblem<Eqn>,
root_solver: &mut S,
) -> Result<(), DiffsolError>
fn set_consistent<Eqn, S>( &mut self, ode_problem: &OdeSolverProblem<Eqn>, root_solver: &mut S, ) -> Result<(), DiffsolError>
Calculate a consistent state and time derivative of the state, based on the equations of the problem.
Source§fn set_consistent_augmented<Eqn, AugmentedEqn, S>(
&mut self,
ode_problem: &OdeSolverProblem<Eqn>,
augmented_eqn: &mut AugmentedEqn,
root_solver: &mut S,
) -> Result<(), DiffsolError>where
Eqn: OdeEquationsImplicit<T = V::T, V = V, C = V::C>,
AugmentedEqn: AugmentedOdeEquationsImplicit<Eqn> + Debug,
S: NonLinearSolver<AugmentedEqn::M>,
fn set_consistent_augmented<Eqn, AugmentedEqn, S>(
&mut self,
ode_problem: &OdeSolverProblem<Eqn>,
augmented_eqn: &mut AugmentedEqn,
root_solver: &mut S,
) -> Result<(), DiffsolError>where
Eqn: OdeEquationsImplicit<T = V::T, V = V, C = V::C>,
AugmentedEqn: AugmentedOdeEquationsImplicit<Eqn> + Debug,
S: NonLinearSolver<AugmentedEqn::M>,
Calculate the initial sensitivity vectors and their time derivatives, based on the equations of the problem.
Note that this function assumes that the state is already consistent with the algebraic constraints
(either via Self::set_consistent or by setting the state up manually).
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>where
V: Send,
impl<V> Sync for RkState<V>where
V: Sync,
impl<V> Unpin 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.