oscillator_no_sensi/
oscillator_no_sensi.rs

1use cvode_wrap::*;
2
3fn main() {
4    let y0 = [0., 1.];
5    //define the right-hand-side
6    fn f(_t: Realtype, y: &[Realtype; 2], ydot: &mut [Realtype; 2], k: &Realtype) -> RhsResult {
7        *ydot = [y[1], -y[0] * k];
8        RhsResult::Ok
9    }
10    //initialize the solver
11    let mut solver = SolverNoSensi::new(
12        LinearMultistepMethod::Adams,
13        f,
14        0.,
15        &y0,
16        1e-4,
17        AbsTolerance::scalar(1e-4),
18        1e-2,
19    )
20    .unwrap();
21    //and solve
22    let ts: Vec<_> = (1..100).collect();
23    println!("0,{},{}", y0[0], y0[1]);
24    for &t in &ts {
25        let (_tret, &[x, xdot]) = solver.step(t as _, StepKind::Normal).unwrap();
26        println!("{},{},{}", t, x, xdot);
27    }
28}