Manual time-stepping
The fundamental method to step the solver through a solution is the step method on the OdeSolverMethod trait, which steps the solution forward in time by a single step, with a step size chosen by the solver in order to satisfy the error tolerances in the problem struct. The step method returns a Result that contains the new state of the solution if the step was successful, or an error if the step failed.
use diffsol::OdeSolverMethod;
pub fn solve_step<'a, Solver, Eqn>(solver: &mut Solver)
where
Solver: OdeSolverMethod<'a, Eqn>,
Eqn: diffsol::OdeEquations<T = f64> + 'a,
{
while solver.state().t < 10.0 {
if solver.step().is_err() {
break;
}
}
}
The step method will return an error if the solver fails to converge to the solution or if the step size becomes too small.