IDAIDA (Implicit Differential Algebraic) is a numerical solver providing an efficient and stable method to solve Differential Algebraic Equations (DAEs) Initial Value Problems. Called by xcos.
DescriptionIDA is a numerical solver providing an efficient and stable method to solve Initial Value Problems of the form :
\begin{eqnarray}
F(t,y,\dot{y}) = 0, \hspace{2 mm} y(t_0)=y_0, \hspace{2 mm} \dot{y}(t_0)=\dot{y}_0, \hspace{3 mm} y, \hspace{1.5 mm} \dot{y} \hspace{1.5 mm} and \hspace{1.5 mm} F \in R^N \hspace{10 mm} (1)
\end{eqnarray}
Before solving the problem, IDA runs an implemented routine to find consistent values for
y0
and
yPrime0
.
Starting then with those
y0
and
yPrime0
, IDA approximates
yn+1
with the BDF formula :
\begin{eqnarray}
\sum_{i=0}^{q} \alpha_{n,i} y_{n-i} = h_n\dot{y}_{n}
\end{eqnarray}
with, like in CVode,
yn
the approximation of
y(tn)
,
hn
=
tn - tn-1
the step size, and the coefficients are fixed, uniquely determined by the method type, its order q ranging from 1 to 5 and the history of the step sizes.
Injecting this formula in (1) yields the system :
G(y_n) \equiv F \left( t_n, \hspace{1.5mm} y_n, \hspace{1.5mm} h_n^{-1}\sum_{i=0}^{q} \alpha_{n,i} y_{n-i} \right) = 0
To apply Newton iterations to it, we rewrite it into :
J \left[y_{n(m+1)}-y_{n(m)} \right] = -G(y_{n(m)})
with J an approximation of the Jacobian :
J = \frac{\partial{G}}{\partial{y}} = \frac{\partial{F}}{\partial{y}}+\alpha\frac{\partial{F}}{\partial{\dot{y}}}, \hspace{4 mm} \alpha = \frac{\alpha_{n,0}}{h_n},
α changes whenever the step size or the method order varies.
An implemented direct dense solver is used and we go on to the next step.
IDA uses the history array to control the local error
yn(m) - yn(0)
and recomputes
hn
if that error is not satisfying.
The function is called in between activations, because a discrete activation may change the system.
Following the criticality of the event (its effect on the continuous problem), we either relaunch the solver with different start and final times as if nothing happened, or, if the system has been modified, we need to "cold-restart" the problem by reinitializing it anew and relaunching the solver.
Averagely, IDA accepts tolerances up to 10-11. Beyond that, it returns a Too much accuracy requested error.
Example
The 'Modelica Generic' block returns its continuous states, we can evaluate them with IDA by running the example :
See Also
CVode
LSodar
Runge-Kutta 4(5)
Dormand-Price 4(5)
ode
ode_discrete
ode_root
odedc
impl
BibliographySundials Documentation