ghorwin / SIM-VICUS

Building and District Energy Simulation and more...
https://ghorwin.github.io/SIM-VICUS/
Other
33 stars 12 forks source link

Restart von NANDRAD Solver schreibt doppelte Ausgaben in die Ergebnisdateien #580

Closed Arombolosh closed 1 year ago

Arombolosh commented 1 year ago

Nandrad Simulation durchführen.

NANDRAD Simulation dabei vorzeigt abbrechen. Dann mit Restart wieder weiter simulieren. Dann werden doppelte Zeitreihen hergestellt. Bei ersten Projekt hatte ich 2 mal die Zeitwerte 8633 h und 8634 h und damit verbundene Ergebnisse

Beim zweiten Projekt sind es 4 doppelte Zeitwerte gewesen 115 h 116 h 117 h 118 h

Wer solche Fehler einbaut muss bei der nächsten Stammtischrunde Kiba für alle ausgeben :)

ghorwin commented 1 year ago

Klappt das mit allen Simulationen? Ist mir aktuell absolut unklar, wie das passieren kann. Da muss ja die Restart-Datei nicht korrekt beim Anhängen von Ausgaben aktualisiert werden. Aber daran wurde meines Wissens nach seit Monaten nichts geändert... Interessant!

ghorwin commented 1 year ago

Ok, ich seh's... das war von Anfang an kaputt :-)

Restart-Info wird nur alle 5 minuten geschrieben:

// siehe
SolverControlFramework::SolverControlFramework(ModelInterface * model) :
    m_restartMode(RestartFromLast),
    m_simTimeDt(3600*24),   // every 1 d simtime
    m_realTimeDt(5*60), // every 5 min real time
...

Dokumentiert sind die Variablen wie folgt:

/*! Simulation time in [s] to wait before writing restart info (default 1 d simulation time). */
double                  m_simTimeDt;
/*! Real (wall clock) time in [s] to wait before writing restart info (default 5 min real time). */
double                  m_realTimeDt;

m_simTimeDt wird derzeit nirgendwo benutzt. Und m_realTimeDt führt dazu, dass eben nur alle 5 Minuten ein Neustartzeitpunkt gesetzt wird. Damit werden alle seit dem letzten Zeitpunkt geschriebenen Ausgaben wiederholt.

Das ist doof, aber ich hab irgendwo ein Skript, was solche Werte rausfiltert (muss ich mal rauskramen).

Eine saubere Lösung a la DELPHIN hat aber den Nachteil, dass man eben nach jedem Schreibvorgang die Restart-Datei schreibt und gerade bei schnellen Simulationen (und dem schnarchlahmen Windows + Defender-Checks) bremst das die Simulationen drastisch aus.

Alle Ausgaben im Speicher zu Cachen und dann nach 5 Minuten zusammen mit dem Restart-Punkt kollektiv rauszuschreiben wäre eine Lösung, ist aber ziemlich aufwändig zu programmieren (vor allem, wenn NANDRAD als FMU benutzt wird).

Vorschlag: m_realTimeDt-check vorerst auskommentieren und mit der "geringfügigen" Verlangsamung von NANDRAD leben - dafür aber keine doppelten Ausgaben haben. Soll ich das so machen?

ghorwin commented 1 year ago

Noch ein besserer Vorschlag: m_realTimeDt wird als "Mindestzeit seit Simulationsstart zum starten von Restartdaten" interpretiert. Sobald die Simulation länger als diese Zeitspanne läuft, ist es eine langsame Simulation und Restart-Daten werden nach jeder Ausgabe geschrieben.

ghorwin commented 1 year ago

Noch besser - entweder Restart nach jeder Ausgabe oder nur am Ende - das ist idiotensicher und funktioniert auch mit FMUs