### 9 releases

0.1.10 | Jun 5, 2024 |
---|---|

0.1.9 | May 28, 2024 |

0.1.4 | Apr 5, 2024 |

0.1.2 | Feb 20, 2024 |

#**1106** in Algorithms

**662** downloads per month

Used in **2** crates
(via pharmsol)

**MIT**and maybe GPL-3.0-or-later

475KB

11K
SLoC

# DiffSol

Diffsol is a library for solving ordinary differential equations (ODEs) or semi-explicit differential algebraic equations (DAEs) in Rust. You can use it out-of-the-box with vectors and matrices from the nalgebra or faer crates, or you can implement your own types by implementing the various vector and matrix traits in diffsol.

## Features

DiffSol implements the following solvers:

- A variable order Backwards Difference Formulae (BDF) solver, suitable for stiff problems and singular mass matrices.
- A Singly Diagonally Implicit Runge-Kutta (SDIRK or ESDIRK) solver, suitable for moderately stiff problems and singular mass matrices. You can use your own butcher tableau or use one of the provided (

or`tr_bdf2`

).`esdirk34` - A BDF solver that wraps the IDA solver solver from the Sundials library (requires the

feature). This is similar to the BDF solver above and is include for comparison purposes.`sundials`

All solvers feature adaptive step-size control to given tolerances, dense output, event handling, stepping to specific times and forward sensitivity analysis.
For comparison, the BDF solvers are similar to MATLAB's

solver or the `ode15s`

solver in SciPy's `bdf`

function.
The ESDIRK solver using the provided `solve_ivp`

tableau is similar to MATLAB's `tr_bdf2`

solver.`ode23t`

Users can specify the equations to solve in the following ODE form:

`M ``\`frac`{`dy`}``{`dt`}` = f(t, y, p)

where $M$ is a (possibly singular) mass matrix, $y$ is the state vector, $t$ is the time, $p$ is a vector of parameters, and $f$ is the right-hand side function. The mass matrix $M$ is optional (assumed to be the identity matrix if not provided).

## Installation

See instructions on the crates.io page.

## Usage

For more documentation and examples, see the API documentation.

#### Dependencies

~15–22MB

~436K SLoC