Skip to main content

Module dae_init

Module dae_init 

Source
Expand description

Consistent initialization for DAEs.

For differential-algebraic equations (DAEs), the initial conditions must satisfy the algebraic constraints. This module provides functions to compute consistent initial conditions for index-1 DAEs.

§Background

A DAE in semi-explicit form is:

y₁' = f₁(t, y₁, y₂)    (differential equations)
0   = g(t, y₁, y₂)      (algebraic constraints)

Given initial values (y₁⁰, y₂⁰) where y₂⁰ may not satisfy the constraint g = 0, we solve for y₂ such that g(t₀, y₁⁰, y₂) = 0.

§Example

use numra_ode::{DaeProblem, compute_consistent_initial};

// Constraint: y₂ = y₁²
let dae = DaeProblem::new(
    |_t, y: &[f64], dydt: &mut [f64]| {
        dydt[0] = -y[0];                // y₁' = -y₁
        dydt[1] = y[1] - y[0] * y[0];   // 0 = y₂ - y₁² (residual)
    },
    |mass: &mut [f64]| {
        mass[0] = 1.0; mass[1] = 0.0;
        mass[2] = 0.0; mass[3] = 0.0;   // M[1,1] = 0 (algebraic)
    },
    0.0, 1.0,
    vec![2.0, 0.0],  // Inconsistent: y₂ should be 4
    vec![1],         // Index 1 is algebraic
);

let y0 = compute_consistent_initial(&dae, 0.0, &[2.0, 0.0]).unwrap();
assert!((y0[1] - 4.0).abs() < 1e-10);  // Now consistent

Author: Moussa Leblouba Date: 4 February 2026 Modified: 2 May 2026

Functions§

compute_consistent_initial
Compute consistent initial conditions for an index-1 DAE.
compute_consistent_initial_tol
Compute consistent initial conditions with user-specified tolerance.