rusoda 0.1.0

Pure rust and just need log dependencies implementation of odepack dlsoda.
Documentation
  • Coverage
  • 0%
    0 out of 11 items documented0 out of 0 items with examples
  • Size
  • Source code size: 114.97 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 3.63 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 24s Average build duration of successful builds.
  • all releases: 24s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Homepage
  • ElliotLaw/rusoda
    1 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • ElliotLaw

rusoda

Description

rust implementation of odepack dlsoda

Instructions

  1. Build a struct which contains your ode system coeffs and number of eqs.
struct Oral1Cpt {
    incalc_par: Vec<f64>,
    neq: usize,
}
  1. Implement OdeSystem trait for your struct(define the ode function).
use rusoda::OdeSystem;

impl OdeSystem for Oral1Cpt {
    fn func(&self, _t: f64, _y: &mut [f64], _dy: &mut [f64]) {
        let ka = self.incalc_par[0];
        let cl = self.incalc_par[1];
        let v = self.incalc_par[2];
        (*_dy)[0] = -ka * (*_y)[0];
        (*_dy)[1] = ka * (*_y)[0] - cl / v * (*_y)[1];
    }
}
  1. Initialize LSODA solver and call "solve" method.
use rusoda::IStateInput;
use rusoda::LSODA;

use std::time::Instant;
    env_logger::init();
    let mut t = 0.;
    let tout = 12.;
    let y = [4.0, 0.0];
    let mut lsoda = LSODA::init();
    let sys = Oral1Cpt::init(vec![3.09, 32., 648.]);

    let mut state = IStateInput::InitialCall;
    let tt = Instant::now();

    let res = lsoda.solve(
        &sys, sys.neq, &y, &mut t, tout, &mut state, 1e-3, 1e-6, false,
    );

    println!("{:?},TIME:{}MS", res, tt.elapsed().as_millis())