Das Problem
Ich arbeite derzeit an einer Finite-Elemente-Navier-Stokes-Simulation und möchte die Auswirkungen einer Vielzahl von Parametern untersuchen. Einige Parameter werden in einer Eingabedatei oder über eine Befehlszeile angegeben. Andere Parameter werden als Flags in einem Makefile bereitgestellt, sodass mein Code immer dann neu kompiliert werden muss, wenn ich diese Optionen ändere. Mich würde interessieren, wie man den Parameterraum systematisch erforschen kann.
- Gibt es nützliche C ++ / Python-Bibliotheken / Frameworks, die Ihnen dabei helfen können? Zum Beispiel war das Erkennen von boost.Program_options eine große Hilfe, da es möglich ist, Eingabedateioptionen mit Befehlszeilenargumenten zu überladen. Ich habe auch gesehen, dass einige Leute eine Jobdatei verwenden, die jeden Fall ziemlich effektiv beschreibt, und ein Kollege schlug vor, dass das Schreiben von Parametern in vtu-Dateien als Kommentarblöcke auch funktionieren könnte.
- Vielleicht lohnt es sich gar nicht, viel Zeit dafür zu investieren? Ist es nur eine Ablenkung und eine Zeitverschwendung und es ist am besten, nur Muskeln durch den Testprozess zu ziehen, und zwar brachial und ad hoc?
Einige Gedanken
Ich mache die Dinge derzeit meistens von Hand und habe die folgenden Probleme festgestellt:
- Testfälle benennen . Ich habe versucht, die Ergebnisse in Ordnern zu speichern, deren Laufparameter durch Unterstriche voneinander getrennt sind, z
Re100_dt02_BDF1...
. Diese werden schnell lang oder schwer lesbar / kryptisch, wenn sie zu stark abgekürzt werden. Zu den reellen Zahlenparametern gehört auch ein,.
was umständlich / hässlich ist. - Laufdaten protokollieren . Manchmal möchte ich sehen, dass die Ergebnisse in das Terminal geschrieben und auch in einer Textdatei gespeichert werden. Diese Antwort von StackOverflow ist zum Beispiel etwas hilfreich, aber die Lösungen scheinen ein bisschen aufdringlich zu sein.
- Zeichnen von Daten gemäß Parameter . Es dauert einige Zeit, relevante Daten aus einer Vielzahl von Protokolldateien in einer einzigen Datei zu sammeln, die ich dann plotten kann. Mit einem besseren System würde dies möglicherweise einfacher.
- Aufzeichnung von Kommentaren zu den Daten . Nach der Überprüfung der Ergebnisse schreibe ich einige Kommentare in eine Textdatei, aber es ist manchmal schwierig, diese mit den Ergebnisordnern zu synchronisieren.