Folgende Variablen werden von der Klasse CSimulation zur Verfügung gestellt:
Diese Variablen werden aus dem expandierten Netz übernommen
Diese Variablen dienen der Ausgabe der Simulation sowie zum Laden/Speichern
Hiermit wird gerechnet
Einige Variablen, die die Simulation betreffen
Ausgabe des Systemverhaltens
Diese Variablen sind aus Effizienzgründen da
Hierauf wird gearbeitet
Methoden der Klasse CSimulation:
Zuerst müssen natürlich ein System und Daten vorhanden sein. Dies geschieht über den Load-Button. Falls die einzelnen Komponenten schon Daten enthalten, müssen nur noch zwei Werte angegeben werden:
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.
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.
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".