This layered standard on top of FMI 3.0 defines how to exchange dynamic models in differential algebraic equation form.
| Although the document refers to version 3.0 of the FMI standard, everything described in this document also applies to all subsequent minor versions. For further information on compatibility, see section Versioning and Layered Standards in the FMI 3.0 specification. |
Copyright © 2025 The Modelica Association Project FMI.
This document is licensed under the Attribution-ShareAlike 4.0 International license. The code is released under the 2-Clause BSD License. The licenses text can be found in the LICENSE.txt file that accompanies this distribution.
1. Introduction
1.1. Intent of this Document
A differential-algebraic system of equations (DAE) is a system of equations that either contains differential equations and algebraic equations, or is equivalent to such a system [1].
-
Avoid the requirement of index reduction inside of FMUs.
-
This may improve accuracy due to better drift handling.
-
-
Avoid local nonlinear equation solvers inside of FMUs.
-
This may improve accuracy and avoid problems with different local and global error tolerances.
-
-
Preserve the sparseness of DAE systems which is lost for the corresponding reduced ODE systems.
-
This may improve the performance by usage of the sparseness.
-
-
Allow connections between constraint FMUs.
-
Connecting reduced ODE FMUs may lead globally to a non-solvable (singular) system but not for unreduced DAE FMUs.
-
1.2. How to read this Document
1.3. Overview
2. Common Concepts
Mathematical Notation
DAE representation
There are different forms of DAEs.
For simplicity discontinuous states are currently disregarded.
Fully-Implicit DAE
The generic fully-implicit DAE, or implicit DAE, formulation:
where \(z(t)\) represents state and additional variables and \(t\) is time.
A similar and sometimes more useful representation:
with dynamic variables \(x(t)\), algebraic variables \(y(t)\) and time \(t\).
Note that \(x(t)\) is not necessarily the state variables, more on this in section 2.1.1.
Semi-Explicit Index 1 / Hessenberg index 1 DAE
The semi-explicit index 1, also called Hessenberg index 1, DAE representation
with \(g\) solvable for \(y\), \(det \left( \frac{\partial}{\partial y}g\right) \neq 0\).
Here \(f\) is called the differential equations and \(g\) the algebraic equations.
Relationship between fully-implicit and semi-explicit DAE
A fully implicit DAE
can always be rewritten as a semi-explicit DAE by introducing a new algebraic variable \(x^{\prime}\)
Semi-Explicit DAE
The semi-explicit DAE representation
with \(g^1\) solvable for \(y\), \(det \left( \frac{\partial}{\partial y}g^1\right) \neq 0\) and \(\left\{ \frac{d}{dt} g_i^k \right\} \subseteq \{ g_i^{k-1}\}, \; k > 1\).
Mass matrix DAE
where mass matrix \(M\) is singular.
An equivalent explicit formulation:
See [cui2020mass].
Linear time-invariant DAE
where matrix \(E\) is singular.
Indices
There are multiple, sometimes closely related, definitions of indices for DAE systems. Usually these indices are a measure of how far from an ODE the DAE is.
Differential Index
The minimum number of times a DAE
has to be differentiated with respect to time \(t\) to be able to determine \(\dot{x}(t)\) as a function of \(t\) and \(x\) is called the differential index.
Perturbation Index
The perturbation index is a measure of the constraints among equations. An index-0 DAE contains neither algebraic loops nor structural singularities. An index-1 DAE contains algebraic loops, but no structural singularities. A DAE with a perturbation index greater than 1, a so-called higher-index DAE, contains structural singularities [2].
Example of Structural Singularity
[cellier2006continuous, chapter 7.7 Structural Singularity Elimination] provides a simple electric circuit model that is an higher-index DAE.
The circuit has two capacitors in parallel and can be represented with equations:
When both capacitive voltages \(v_1\) and \(v_2\) are chosen as state variables equation \(\eqref{constraintEquationExampleCellier}\) has no unknowns left, so it is a constraint equation.
There are different ways to solve this. The modeler could change the causality or exporting tools can try to reduce the perturbation index symbolically [3] to end up with a consistent initialization for the system.