CFD-Post als Batchjobs betreiben [Beispiel: Video]
Inhaltsverzeichnis
Nach der Simulation von Strömungen mit Fluent oder CFX geht es an das Postprocessing – die Auswertung. Bei transienten, also zeitabhängigen Strömungen ist das Auswerten über ein Video oft der erste Ansatz.
Für ein Projekt haben wir eine natürliche Konvektionsströmung untersucht. Wir simulierten eine zweidimensionale Strömung in einem rechteckigen Behälter. Die linke Wand wurde beheizt, die rechte Wand gekühlt. Das Fluid innerhalb des Behälters (in diesem Fall Wasser) beginnt zu strömen (aufgrund des Dichteunterschieds nach der Erwärmung).
Ohne großartig auf die Physik dahinter einzugehen (Boussinesq-Annäherung, Rayleighzahl im Bereich von 10⁸ bis 10¹⁰), möchte ich eigentlich nur das Postprocessing beschreiben.
Wir haben etliche von diesen Simulationen durchgeführt, wo wir entweder die Rayleighzahl oder das Aspektverhältnis variiert haben. Darum gab es relativ viele Videos, die wir erstellen wollten. Leider dauert das Erstellen von Videos auch auf leistungsstarken Rechnern mehrere Stunden, was den Einsatz von Batch-Jobs nahelegt.
Was ist ein Batch-Job?
Bei einem Batch-Job wird keine Interaktion mit einem Clienten erwartet und man braucht keine grafische Ausgabe. Das heißt, es findet eine reine Berechnung statt, deren Prozess uns nicht interessiert, sondern nur das Ergebnis. Wir müssen dem Computer nicht dabei zusehen, wie er rechnet.
Wie bereitet man einen CFD-Post Batch-Job vor?
Man muss zwei Dateien anfertigen: Die Session-Datei (*.cse) und die State-Datei (*.cst).
State-Datei: Hierzu lädt man die Ergebnisse der Fluent-Rechnung in CFD-Post (File → Load Results) und erstellt – wie gewohnt – die Auswertung. Ich habe das Feld richtig ausgerichtet, ein Temperaturfeld eingeblendet und einen Zeitstempel auf die rechte Seite gesetzt.
Wenn das alles eingestellt ist (so wird es später im Video zu sehen sein!), kann man die State-Datei speichern (File → Save State as).
Session-Datei: In dieser Datei werden sozusagen „die Mausklicks“ gespeichert, die im Batchjob abgearbeitet werden sollen. Man führt die Berechnung einmal manuell durch, und zeichnet alle Mausklicks dabei auf. Das ist mit den Makros in Excel vergleichbar, die man ja auch „aufzeichnen“ kann.
Die Aufzeichnung starten man, indem man eine Session-Datei anlegt: Session → New Session. Die Datei speichert man in seinem Batch-Ordner. Dann geht man Schritt für Schritt die Mausklicks durch. Bei mir: Auf das Animationssymbol klicken, dann die Videoeinstellungen vornehmen und auf den Playbutton klicken.
Wenn die Berechnung durch ist, kann man CFD-Post beenden. In der Session-Datei stehen nun alle notwendigen Befehle, die man für einen Batch-Job braucht. Meine sieht z.B. folgendermaßen aus:
COMMAND FILE: CFX Post Version = 14.5 END > load timestep=-1 ANIMATION: Animation Bit Rate = 5152000 Animation Frame Rate = 24 Animation Quality = Highest Animation Speed Factor = 2 Antialiasing = On Drop Last MPEG Frame = Off Hardcopy Tolerance = 0.0001 Intermediate File Format = jpg Keep Intermediate Files = Off MPEG Height = 480 MPEG Scale = 100 MPEG Size = 1080p MPEG Width = 640 Output Directory = . Output to User Directory = Off QAnim Override Symbol = On QAnim Symbol Size = 1.0 QAnim Symbol Spacing = 0.6 QAnim Symbol Type = Ball Screen Capture = Off Speed Adjustment Selection = Normal Speed Scaling Method = Distribute Frames Smoothly Timestep Interpolation Method = Timestep Variable Bit Rate = On White Background = Off END ANIMATION: ANIMATION QAnim Object List = Timesteps QAnim Frames = 46 QAnim MPEG Filename = /pfad/zum/speicherort/video.avi QAnim Save MPEG = On QAnim Looping = Bounce QAnim Looping Cycles = 1 Video Format = avi END >animate quickAnimate
Wie sendet man ihn über LSF ab?
Der Befehl für einen CFD-Post Batch-Job lautet allgemein:
cfdpost -batch *.cse *.cst
Damit man ihn über das LSF als Batch-Job betreiben kann, muss man ihn noch in eine *.lsf Datei packen. Diese sieht bei mir so aus:
#!/bin/csh #BSUB -q BatchXL #BSUB -R "mem > 25000 && mapacc span[hosts=1]" #BSUB -oo lsf_cfdpost.log #BSUB -e lsf_cfdpost.err #BSUB -J CFDPost_job_name #BSUB -n 4 date pwd cfdpost -batch /pfad/zur/session.cse /pfad/zur/state.cst date
Abschicken kann man diesen Batch-Job wie gewohnt über
bsub < cfdpost.lsf
Und was kommt dabei raus?
Nach einiger Zeit kommen dann die Videos auf die Festplatte. Das ist dann relativ unspektakulär, aber die Berechnung dauert halt ewig. Ein paar von meinen Ergebnissen habe ich in folgendes Youtube-Video gepackt:
https://www.youtube.com/watch?v=DWyAu068HNQ
Weiterführende Links
Natürlich kann man auch schon die Fluent-Rechnung als Batch-Job rechnen. Eine Anleitung habe ich dazu auch schon geschrieben.
Informationen der TU Ilmenau zu diesem Thema.
Schreibe einen Kommentar