Impasse Points
A Python implementation of the Rabier-Rheinboldt algorithm for integrating differential-algebraic equations (DAEs) through singularities.
Overview
Impasse Points is a Python implementation of the Rabier & Rheinboldt (1994) algorithm for integrating semi-explicit differential-algebraic equations (DAEs) through singularities.
An impasse point is a singularity at which the algebraic constraints prevent the solution from continuing beyond a certain time , even though the solution remains bounded. These singularities often indicate that the model is idealized. Standard solvers fail at impasse points. This algorithm detects them by monitoring a scalar that vanishes when the system becomes singular, and can traverse the singularity to explore other solution branches using a pseudo-time reparametrization.
Key Features
Singularity Traversal
The algorithm enables integration through impasse points using:
- Pseudo-time parametrization: Replaces physical time with a pseudo-time where . As the system approaches an impasse point, but the solution in pseudo-time remains smooth.
- Augmented system formulation: Adds normalization conditions to handle rank-deficient matrices, inspired by numerical bifurcation theory.
- Gamma sign monitoring: Detects impasse points by tracking sign changes in , which vanishes at singularities.
Numerical Methods
- Constraint projection: Newton iteration to maintain solutions on the constraint manifold
- QR factorization: Computes orthonormal bases for tangent and normal spaces
- Adaptive integration: DOPRI5 Runge-Kutta with error control
Reference
P.J. Rabier and W.C. Rheinboldt, On the Computation of Impasse Points of Quasi-Linear Differential-Algebraic Equations, Mathematics of Computation, Vol. 62, No. 205, pp. 133-154, January 1994.