scirs2_integrate/dae/
mod.rs

1//! Differential Algebraic Equation (DAE) solvers
2//!
3//! This module provides numerical solvers for differential algebraic equations (DAEs).
4//! DAEs are a more general class of equations than ODEs and include algebraic constraints.
5//!
6//! Features:
7//! - Support for index-1 DAE systems
8//! - Semi-explicit DAE solvers for specialized forms
9//! - Implicit DAE solvers for general forms
10//! - Integration with mass matrix functionality
11//! - Specialized BDF methods for DAE systems
12//!
13//! DAEs can be classified based on their index, which roughly corresponds to the
14//! number of times one must differentiate the constraint equations to obtain an ODE.
15//! This module focuses primarily on index-1 DAEs, which are the most common in practice.
16//!
17//! ## Semi-explicit Form
18//!
19//! Semi-explicit DAEs have the form:
20//! ```text
21//! x' = f(x, y, t)
22//! 0 = g(x, y, t)
23//! ```
24//! where x are differential variables and y are algebraic variables.
25//!
26//! ## Fully-implicit Form
27//!
28//! Fully-implicit DAEs have the form:
29//! ```text
30//! F(t, y, y') = 0
31//! ```
32//! where all variables are treated uniformly and the system equations
33//! depend on both the variables and their derivatives.
34
35// Public types module
36pub mod types;
37
38// Public modules
39pub mod index_reduction;
40pub mod methods;
41pub mod solvers;
42pub mod utils;
43
44// Re-export core types
45pub use self::types::{DAEIndex, DAEOptions, DAEResult, DAEType};
46
47// Re-export solver functions
48pub use self::solvers::{
49    solve_higher_index_dae, solve_implicit_dae, solve_ivp_dae, solve_semi_explicit_dae,
50};
51
52// Re-export specialized method functions
53pub use self::methods::bdf_dae::{bdf_implicit_dae, bdf_semi_explicit_dae};
54pub use self::methods::index_reduction_bdf::{
55    bdf_implicit_with_index_reduction, bdf_with_index_reduction,
56};
57pub use self::methods::krylov_dae::{krylov_bdf_implicit_dae, krylov_bdf_semi_explicit_dae};
58
59// Re-export preconditioner functions
60pub use self::methods::block_precond::{
61    create_block_ilu_preconditioner, create_block_jacobi_preconditioner,
62};
63
64// Re-export index reduction types
65pub use self::index_reduction::{
66    DAEStructure, DummyDerivativeReducer, PantelidesReducer, ProjectionMethod,
67};