Die Simulation in Dymola kommt nicht in die Gänge, stockt, ist langsam oder bricht sogar ab? – Eine häufige Ursache: Nichtlineare Gleichungssysteme. Lerne sie zu vermeiden, um so Simulationszeit zu sparen und dein Simulationsmodell numerisch robuster zu machen.
Aus unserer Erfahrung empfehlen wir, nichtlineare Gleichungssysteme in Dymola am besten zu vermeiden. Das spart meistens Simulationszeit und macht das Simulationsmodell numerisch robuster. In diesem Artikel zeigen wir euch daher, was nichtlineare Gleichungssysteme in Dymola sind, wie man sie identifiziert und wie man sie lösen bzw. eliminieren kann.
Streng genommen ist der in Dymola benutzte Begriff „nichtlineare Gleichungssysteme“ etwas irreführend, mathematisch exakter ist: „implizite algebraische Gleichungssysteme“. Um genau zu verstehen, wie die „nichtlinearen“ Gleichungen entstehen und warum sie ein Problem darstellen, schauen wir uns zunächst an, welche Typen von Gleichungssystemen wir in Dymola betrachten und wie Dymola Gleichungssysteme allgemein löst.
Das am einfachsten zu lösende Gleichungssystem stellt das gewöhnliche Differentialgleichungssystem (engl. Ordinary Differential Equations, ODE) dar:
$$\dot{x} = F(x)$$
Dabei bezeichnet man \(\dot{x}\) als differentiellen Zustand. Ein ODE kann immer explizit nach diesen differentiellen Zuständen aufgelöst werden.
Mithilfe eines ODE-Solvers, wie z.B. einen Euler-Algorithmus, kann das Gleichungssystem dann in Dymola gelöst werden. Wie in Abbildung 1 vereinfacht dargestellt ist, berechnet Dymola ausgehend von einem bekannten Zustand \(x_0\) und dem ODE-Gleichungssystem die zeitlichen Ableitungen aller differentiellen Zustände und führt dann die Integration auf den Zustand \(x_1\) im nächsten Zeitschritt aus.
Enthält ein Gleichungssystem darüber hinaus algebraische Gleichungen, so kann dieses differentiell-algebraische Gleichungssystem (engl. Differential Algebraic Equations, DAE) im Allgemeinen nicht mehr explizit nach den differentiellen Zuständen aufgelöst werden:
$$\dot{x} = F(x, y)$$
$$0 = G(x, y)$$
Hier unterscheidet man zwischen den differentiellen Zuständen \(\dot{x}\) und den algebraischen Zuständen \(y\).
Diese DAE können in der Regel nicht allein durch den ODE-Solver gelöst werden. Aus diesem Grund nutzt Dymola standardmäßig einen zusätzlichen algebraischen Gleichungslöser (AE-Solver). Dieser kann beispielsweise aus einem Newton-Algorithmus bestehen. Das schrittweise Vorgehen zum Lösen von DAE-Systemen in Dymola ist in Abbildung 2 vereinfacht dargestellt:
Das Lösen eines DAE-Systems startet ebenfalls ausgehend von einem bekannten Initialzustand \(x_0\). Im ersten Schritt werden jedoch zunächst die algebraischen Gleichungssysteme mithilfe eines AE-Solver gelöst (1). Dabei können die algebraischen Zustände beispielsweise durch Iterationen mit dem Newton-Algorithmus berechnet werden. In Dymola werden die zu iterierenden algebraischen Zustände auch als Iterationsvariablen bezeichnet. Anschließend können die algebraischen Zustände \(y_0\) zusammen mit den differentielle Gleichungssystem an den ODE-Solver übermittelt und gelöst werden (2).
Der Vergleich zwischen dem Lösen von ODEs und DAEs in Dymola macht deutlich, dass nichtlineare Gleichungen (bzw. implizite algebraische Gleichungssysteme) zusätzlichen Rechenaufwand verursachen und sich somit negativ auf die Simulationszeit auswirken. Zudem kann das Lösen der algebraischen Gleichungssysteme zusätzliche Probleme, wie z.B. das Nicht-konvergieren von Iterationen, auslösen.
Dymola bietet mithilfe der flag Advanced.Define.DAESolver die Möglichkeit, mit bestimmten Solvern direkt das DAE ohne den vorgeschalteten AE-Solver zu lösen. Hierzu eignet sich beispielsweise der Dassl-Algorithmus (der in Dymola standardmäßig als reiner ODE-Solver genutzt wird). Wenn der DAE-Solver aktiviert ist, werden die nichtlinearen Gleichungen vom Integrator als Teil des Gleichungssystems behandelt, das der Integrator in jedem Zeitschritt löst. Wenn das übersetzte Modell große nichtlineare Gleichungssysteme enthält, können DAE-Löser effizienter sein.
Schauen wir uns hierzu das folgende Beispiel (siehe Abbildung 3) zur Veranschaulichung an: Das Simulationsmodell in der folgenden Abbildung besteht aus einer seriellen Verschaltung von einem Gebläse und einem Rohr sowie Quelle und Senke, die den Druck definieren. Im Rohr werden Druckverluste in Abhängigkeit des Massenstroms berechnet und das Gebläse definiert den Volumenstrom, welcher mithilfe einer Rampe zeitlich variiert wird.
Nach Durchführung der Translation analysieren wir die „Statistics“ des Simulationsmodells:
Hier zeigt Dymola sowohl die Anzahl der nichtlinearen Gleichungssysteme vor als auch nach der Sortierung und Optimierung des Gleichungssystems an. Durch das Sortieren und Optimieren des Gleichungssystems kann Dymola einige nichtlineare Gleichungen bereits eliminieren. Für uns sind jedoch die verbleibenden nichtlinearen Gleichungssysteme von Bedeutung.
Die Länge des Vektors beschreibt die Anzahl an nichtlinearen Gleichungssystemen und die Vektoreinträge die jeweilige Anzahl an algebraischen Zuständen.
Mithilfe der flag Advanced.LogNonLinearIterationVariables gibt Dymola zusätzlich die zu iterierenden algebraischen Zustände im Log-Window an. In unserem Beispiel ist der Massenstrom die Iterationsvariable.
Um das nichtlineare Gleichungssystem auflösen zu können, müssen wir zunächst verstehen, wo das nichtlineare System im Simulationsmodell entsteht. Hier lohnt es sich, einen Blick in die dsmodel.mof zu werfen. Die dsmodel.mof Datei enthält das vollständige, optimierte und sortierte Gleichungssystem des Simulationsmodells. Im Simulation Setup können wir die Ausgabe der Datei, wie folgt aktivieren:
Die dsmodel.mof Datei wird üblicherweise im Arbeitsverzeichnis nach der Translation abgelegt. Am Ende des Abschnitts „Nonlinear system of equations“ finden wir die folgende algebraische Gleichung:
Der Massenstrom wird demnach in Abhängigkeit des Volumenstroms und der Dichte berechnet. Dies ist physikalisch sinnvoll und eigentlich trivial. Also warum resultiert dieser Zusammenhang in einem nichtlinearen Gleichungssystem?
Wir erhalten immer dann ein nichtlineares Gleichungssystem, wenn zwei oder mehrere Gleichungen miteinander gekoppelt sind. In unserem Beispiel ist die Dichte vom Druck \(p\) und somit vom Druckverlust \(\Delta p\) im Rohr abhängig, der wiederum vom Massenstrom abhängt:
$$\Delta p= f(\dot{m}) $$
Somit erhalten wir mit diesen zwei Gleichungen ein algebraisches Gleichungssystem mit \(\dot{m}\) als Iterationsvariable.
Um algebraische Gleichungssysteme zu eliminieren, gibt es verschiedene Lösungsmöglichkeiten. Welche Methode die sinnvollste ist, hängt stark von dem jeweiligen Problem ab.
Egal ob erfahrener Modellentwickler oder Modelica-Anfänger, nichtlineare Gleichungssysteme entstehen unweigerlich und stellen für dynamische Simulationen immer ein Problem dar.
Mit dem Wissen, welchen Effekt nichtlineare Gleichungssysteme auf deine Simulationen haben, wie du diese identifizieren und eliminieren kannst, bist du einen großen Schritt weiter, das Beste aus deinem Modell herauszuholen. Wir wünschen viel Spaß dabei!