Die Simulation des Systems


1. Allgemeines

1.1 Einführung

Die Simulation berechnet das Verhalten des Systems während einer vorgegebenen Zeitspanne. Zur Berechnung wird ein Lineares Gleichungssystem erstellt und für jeden Zeitschritt gelöst. Diese Berechnungen sind domainunabhängig.

1.2 Die Klasse Simulation

Folgende Variablen werden von der Klasse CSimulation zur Verfügung gestellt:

Methoden der Klasse CSimulation:

2.1 Initialisierung

Hier wird zunächst die Größe des Gleichungssystems bestimmt und die Komponenten, die Variablen bereitstellen. Die Größe des Gleichungssystems wird über GetAnzahlLGSZeilen() und GetAnzahlLGSSpalten() bestimmt. Weiterhin werden alle Komponenten des Systems, die Variablen enthalten, in dem Array apVarKomp gespeichert. Dies geschieht aus Effizienzgründen, wie weiter unten noch gezeigt wird. Anschliessend wird Speicher fü:r die Matrix und die Ergebnisvektoren bereitgestellt und die Einträge in die Matrix vorgenommen (mit der Funktion SetzeMatrix()). Somit sind alle wichtigen Daten initialisiert und es kann losgehen.

2.2 Berechnung

Hier wird die eigentliche Arbeit verrichtet. In der Hauptschleife wird die Zeitvariable t in jedem Durchlauf um deltat erhöht, bis zur vorgegebenen Zeitgrenze. Die Schwierigkeit ist aber, das richtige deltat zu finden. Mit Hilfe der Funktion snapshot_Variablen() werden alle Variablen in dem Feld alleVariablen gesichert. Denn nun wird in der zweiten Schleife ein deltaT bestimmt. Dieses deltaT dient dazu die Schrittweite eines Simulationsschrittes gerade so groß zu halten, daß das Ergebnis vom vorherigen nicht erheblich abweicht. Innerhalb der while (!deltat_ist_ok)-Schleife geschieht folgendes: es wird ein Ergebnisvektor (erg1) berechnet mit den Werten, die jetzt in der Matrix und im Ergebnisvektor stehen. Danach wird ein Zeitschritt ausgeführt, d.h. die Werte der Variablen werden neu berechnet. Nun wird die Matrix mit diesen neu berechneten Werten gesetzt und es wird wieder ein Ergebnisvektor (erg2) berechnet. Jetzt werden die beiden Ergebnisvektoren komponentenweise verglichen. Gibt es dabei eine Komponente, die die Vergleichsfunktion nicht erfüllt, so werden die alten Werte der Variablen wiederhergestellt(mit der Funktion restore_Variablen()), die Matrix wieder mit diesen Werten gesetzt und das deltat halbiert. Dies geschieht so lange, bis die Vergleichsfunktion für jede Komponente der Ergebnisvektoren erfüllt ist. Dann ist das delat für diesen Zeitschritt ok. Das delat wird erhöht, da man annimmt, daß das Verhalten nun auf längere Sicht stabil bleibt. Falls man an einem deltalog-Punkt angekommen ist, wird das Systemverhalten noch ausgegeben.

2.3 Ausgabe

Zur Ausgabe des Systemverhaltens an jedem deltalog-Zeitpunkt wird einfach für jede Komponente die Funktion VariablenAusgabe() aufgerufen. Sie gibt einfach alle Ausgaben, d.h. sowohl Variablen als auch Unknown Quantities, mit dem aktuellen Zeitpunkt in eine Datei aus. Die Ausgabedatei hat folgenden Namen: SchematicName+".sim.out", also den Namen der Schemadatei plus die Endung ".sim.out".