diff --git a/src/problem.rs b/src/problem.rs index 7e9856e..0738445 100644 --- a/src/problem.rs +++ b/src/problem.rs @@ -1,5 +1,5 @@ use nalgebra::SVector; -use roots::find_root_regula_falsi; +use roots::{find_root_regula_falsi, SimpleConvergency}; use super::callback::Callback; use super::controller::{Controller, PIController}; @@ -30,6 +30,7 @@ where } } pub fn solve(&mut self) -> Solution { + let mut convergency = SimpleConvergency{ eps: 1e-14, max_iter: 150 }; let mut times: Vec = vec![self.ode.t]; let mut states: Vec> = vec![self.ode.y]; let mut dense_coefficients: Vec>> = Vec::new(); @@ -71,7 +72,7 @@ where let test_y = self.integrator.step(&self.ode, test_t).0; (callback.event)(self.ode.t + test_t, test_y, &self.ode.params) }; - let root = find_root_regula_falsi(0.0, step, &f, &mut 1e-8).unwrap(); + let root = find_root_regula_falsi(0.0, step, &f, &mut convergency).unwrap(); step = root; (new_y, _, dense_option) = self.integrator.step(&self.ode, step); (callback.effect)(&mut self.ode);