pub struct BdfState<V, M = <V as DefaultDenseMatrix>::M>{ /* private fields */ }Implementations§
Source§impl<V, M> BdfState<V, M>
impl<V, M> BdfState<V, M>
pub fn initialise_diff_to_first_order(&mut self)
pub fn initialise_sdiff_to_first_order(&mut self)
pub fn initialise_gdiff_to_first_order(&mut self)
pub fn initialise_sgdiff_to_first_order(&mut self)
Trait Implementations§
Source§impl<V, M> OdeSolverState<V> for BdfState<V, M>
impl<V, M> OdeSolverState<V> for BdfState<V, M>
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_ref(&self) -> StateRef<'_, V>
fn as_mut(&mut self) -> StateRefMut<'_, 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, M> Freeze for BdfState<V, M>
impl<V, M> RefUnwindSafe for BdfState<V, M>
impl<V, M> Send for BdfState<V, M>
impl<V, M> Sync for BdfState<V, M>
impl<V, M> Unpin for BdfState<V, M>
impl<V, M> UnwindSafe for BdfState<V, M>
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.