scirs2-integrate
Numerical integration, ODE/PDE/SDE solvers, and physics simulation for the SciRS2 scientific computing library (v0.3.0).
scirs2-integrate provides a comprehensive suite of numerical integration methods modeled after SciPy's integrate module, extended with advanced capabilities including Stochastic Differential Equation (SDE) solvers, Lattice Boltzmann Method (LBM) fluid simulation, Discontinuous Galerkin (DG) finite elements, phase field models, Boundary Element Methods, Isogeometric Analysis, Port-Hamiltonian discretization, and Monte Carlo / Quasi-Monte Carlo integration — all as pure Rust.
Features (v0.3.0)
Quadrature (Definite Integrals)
- Adaptive quadrature: Automatic error control;
quad,dblquad,tplquad,nquad - Gaussian quadrature: Gauss-Legendre, Gauss-Hermite, Gauss-Laguerre, Gauss-Chebyshev
- Romberg integration: Richardson extrapolation with configurable depth
- Tanh-sinh quadrature: High accuracy near endpoint singularities
- Lebedev rules: Spherical integration with angular quadrature
- Newton-Cotes rules: Coefficient generation for arbitrary orders
quad_vec: Vectorized quadrature for array-valued integrands- Cubature: Adaptive multidimensional cubature rules
Monte Carlo and Quasi-Monte Carlo Integration
- Standard Monte Carlo: Importance sampling, stratified sampling, control variates
- Quasi-Monte Carlo (QMC): Sobol sequences, Halton sequences, lattice rules
qmc_quad: High-dimensional integration with low-discrepancy sequences- Parallel Monte Carlo: Work-stealing parallel evaluation for throughput
ODE Solvers (Initial Value Problems)
- Explicit methods: Euler, RK4 (fixed step), RK23 (Bogacki-Shampine), RK45 (Dormand-Prince)
- High-order explicit: DOP853 (Dormand-Prince 8(5,3)), high-precision adaptive
- Implicit / stiff methods: BDF (orders 1-5), Radau IIA (L-stable), LSODA (auto-switching)
solve_ivp: Unified solver interface supporting all methods- Event detection: Zero-crossing with direction control, terminal events, dense output
- Mass matrix support: Constant, time-dependent, and state-dependent M(t,y)·y' = f(t,y)
- IMEX methods: Implicit-Explicit splitting for stiff + non-stiff additive systems
Boundary Value Problem Solvers
- Collocation BVP:
solve_bvpwith adaptive mesh refinement - Shooting methods: Single and multiple shooting for two-point BVPs
- Continuation methods: Parameter-dependent BVP families, arc-length continuation
Differential-Algebraic Equations (DAE)
- Index-1 DAE: BDF-based solver for semi-explicit index-1 systems
- Higher-index DAE: Pantelides algorithm for automatic index reduction
- Block preconditioners: Scalable Krylov methods for large DAE systems
Partial Differential Equations (PDE)
- Finite Difference: 1D/2D/3D spatial schemes; central, upwind, WENO
- Finite Element (FEM): Linear/quadratic triangular and tetrahedral elements
- Spectral methods: Fourier, Chebyshev, Legendre, spectral element
- Finite Volume: Conservative schemes; upwind flux, Godunov, Roe
- Time-stepping FEM: Space-time Galerkin for parabolic/hyperbolic PDEs
- Adaptive Mesh Refinement: Automatic grid refinement and coarsening
Stochastic Differential Equations (SDE)
- Euler-Maruyama: First-order explicit SDE solver
- Milstein scheme: Strong order 1.0 SDE solver
- Strong order 1.5: Iterated stochastic integral methods
- Multi-dimensional SDEs: Correlated noise, vector Wiener processes
- Stochastic PDE (SPDE): Space-time white and colored noise PDEs
Lattice Boltzmann Method (LBM)
- D2Q9 and D3Q19 lattices: Standard 2D and 3D fluid simulation
- BGK and MRT collision operators: Single-relaxation and multi-relaxation time
- Boundary conditions: Bounce-back, Zou-He, periodic
- Turbulence models: Smagorinsky subgrid-scale model
- Multiphase LBM: Shan-Chen interaction potential
Discontinuous Galerkin (DG)
- Modal DG: Polynomial basis functions on reference elements
- Nodal DG: Interpolation-based formulation
- Numerical fluxes: Upwind, Lax-Friedrichs, Roe, HLLC
- hp-adaptivity: Simultaneous mesh and polynomial degree refinement
Phase Field Models
- Cahn-Hilliard equation: Phase separation with free energy functional
- Allen-Cahn equation: Interface dynamics and crystal growth
- Phase field crystal: Periodic density functional models
- Coupled mechanics: Chemo-mechanical coupling for battery electrode models
Boundary Element Method (BEM)
- Laplace BEM: Potential flow and heat conduction
- Helmholtz BEM: Acoustic and electromagnetic scattering
- Fast multipole BEM: O(N log N) matrix-vector products
- Galerkin and collocation: Both formulations supported
Isogeometric Analysis (IGA)
- B-spline and NURBS basis: Exact geometry representation
- k-refinement: Simultaneous h- and p-refinement of NURBS patches
- Structural IGA: Shells, beams, and solid mechanics
Port-Hamiltonian Discretization
- Structure-preserving: Discrete Dirac structures on staggered grids
- Interconnection: Energy-routing between subsystems
- Passivity: Guaranteed energy dissipation bounds
Symplectic Integrators
- Stormer-Verlet: 2nd-order symplectic for separable Hamiltonians
- Ruth 4th-order: Higher-order symplectic Runge-Kutta
- Leapfrog / velocity Verlet: Molecular dynamics and N-body
- Gauss-Legendre collocation: Implicit symplectic for non-separable H
Specialized Domain Solvers
- Quantum mechanics: Schrödinger equation (split-operator, Crank-Nicolson)
- Fluid dynamics: Navier-Stokes (projection, incompressible)
- Financial PDEs: Black-Scholes, Heston, Monte Carlo for exotic derivatives
- Integral equations: Fredholm and Volterra equations of the 1st and 2nd kind
Quick Start
Add to your Cargo.toml:
[]
= "0.3.0"
With optional performance features:
[]
= { = "0.3.0", = ["parallel", "simd"] }
Adaptive 1D quadrature
use quad;
// Integrate sin(x) from 0 to pi; exact result = 2.0
let result = quad?;
assert!;
println!;
Solving an ODE with adaptive step size
use ;
use array;
// dy/dt = -y, y(0) = 1 -> exact: y = exp(-t)
let opts = ODEOptions ;
let result = solve_ivp?;
println!;
Quasi-Monte Carlo integration
use MonteCarloOptions;
use qmc_quad;
// Integrate f(x,y) = sin(x+y) over [0,1]^2
let result = qmc_quad?;
println!;
Stochastic Differential Equation (Euler-Maruyama)
use ;
// dX = -X dt + 0.5 dW, X(0) = 1.0
let opts = SdeOptions ;
let paths = sde_euler_maruyama?;
println!;
Lattice Boltzmann (2D lid-driven cavity)
use ;
let cfg = LBMConfig ;
let mut solver = new;
solver.run?;
let velocity_field = solver.velocity_field;
Cahn-Hilliard phase field
use ;
let cfg = CahnHilliardConfig ;
let mut sim = random_initial?;
sim.advance?; // 500 time steps
let order_param = sim.phi; // phase field array
API Overview
| Module | Description |
|---|---|
quad |
Adaptive 1D quadrature (quad, dblquad, nquad) |
gaussian |
Gauss-Legendre, Gauss-Hermite, etc. |
romberg |
Romberg / Richardson extrapolation |
tanhsinh |
Tanh-sinh quadrature for singular integrands |
monte_carlo |
Monte Carlo integration with importance sampling |
quasi_monte_carlo |
QMC with Sobol/Halton sequences |
ode |
ODE initial value problems (solve_ivp, all methods) |
bvp |
Boundary value problems (solve_bvp) |
dae |
Differential-algebraic equations |
pde |
Finite difference, FEM, spectral, finite volume |
sde / sde_simple |
Stochastic ODE and SPDE solvers |
lbm |
Lattice Boltzmann Method |
dg |
Discontinuous Galerkin |
phase_field |
Cahn-Hilliard, Allen-Cahn, phase field crystal |
bem |
Boundary Element Method |
iga |
Isogeometric Analysis |
port_hamiltonian |
Port-Hamiltonian structure-preserving methods |
shooting |
Single and multiple shooting for BVPs |
continuation |
Parameter continuation methods |
symplectic |
Symplectic integrators (Verlet, Ruth, GL) |
integral_equations |
Fredholm and Volterra integral equations |
specialized |
Domain-specific solvers (quantum, fluids, finance) |
adaptive |
Adaptive quadrature primitives |
quadrature |
Quadrature rule coefficient tables |
acceleration |
Anderson acceleration for iterative solvers |
autotuning |
Hardware-aware parameter tuning |
Feature Flags
| Feature | Description |
|---|---|
default |
Core quadrature and ODE solvers |
simd |
SIMD-accelerated numerical operations |
parallel |
Multi-threaded parallel execution |
symplectic |
Symplectic integrators for Hamiltonian systems |
parallel_jacobian |
Parallel Jacobian computation for ODE solvers |
Documentation
Full API documentation is available at docs.rs/scirs2-integrate.
Additional guides are in the docs/ directory:
docs/event_detection_guide.md: Zero-crossing event detection for ODEsdocs/mass_matrix_guide.md: M(t,y)·y' = f(t,y) formulationsdocs/method_selection_guide.md: Choosing the right solverdocs/performance_optimization_guide.md: Tuning for throughput
License
Licensed under the Apache License 2.0. See LICENSE for details.