Post on 06-Mar-2018
transcript
OPENFOAM®
CFD TOOLKIT C++Dipl.-Ing. (FH) Thomas TianSymposium “Integrale Planung und Simulation 2012”
Inhaltsverzeichnis
� Einleitung und Historisches
� Was ist OpenFOAM?
� OpenFOAM Mathematische Sprache
� Strukturen, Aufbau und Navigation in OpenFOAM
� Community
� Bezugsquellen� Questions and Discussion
Historisches
� Historisches� Entwickelt am Imperial College London seit Anfang der 90ziger.
� In Professor Gosman‘s Gruppe („Thermofluids Section“)� Maßgeblich von Henry Weller und Hrvoje Jasak� Henry Weller hatte den ersten Code für ein „unsteady laminar flow“ schon längst geschrieben.� Hrvoje Jasak (1993) begleitet Henry Weller im Rahmen seiner Promotion und lernte viel über
CFD und Softwareentwicklung
� Ab 2000: kommerzielle Software, vertrieben durch die Firma „Nabla Ltd.“� Im Rahmen seiner Position als Technical Director und Chief Architect of FOAM sollte die
Software kommerzielle Anwender wie auch die Universitäten bedienen.� Software zur damaliger Zeit leistungsstark, aber zu kompliziert für die Anwender. Daher setzte
sich FOAM überwiegend nur im akademischen Bereich durch.� Ende 2004 wurde die Firma aufgelöst.
� Seit 2005 wurde FOAM unter den Namen OpenFOAM® Version1.2 unter der Public Domain Licence veröffentlicht.� großes Interesse, besonders von Universitäten (über 200)� Nun stieg auch das Interesse von kommerziellen Firmen wie Volkswagen.
Einleitung OpenFOAM
� Was ist OpenFOAM?� OpenFOAM ist ein allgemein programmierbares Softwaretool für
Anwendungen in Computational Fluid Dynamics.
� Für Simulationen im 3-dimensionalen Raum.
� OpenFOAM ist ein frei verwendbares Open Source Programm.
� Wurde unter der GNU General Public Licence programmiert.
� Frei zu verwenden bedeutet, dass man die Software auf über 1000 CPUs parallel verwenden könnte, ohne Support oder Lizenzen zu bezahlen!
� Die Software wird weltweit von vielen Anwendern aus der Industrie, Forschung und Universitäten weiter entwickelt.
� Die Open Source CFD Toolbox ist in C++ geschrieben.
� OpenFOAM steht für Field Operation And Manipulation.
Einleitung OpenFOAM
� OpenFOAM ist eine Toolbox, keine Black-Box!
� OpenFOAM liefert den ganzen Programmiercode aus.
� Eigene Anwendungen für das jeweilige CFD Problem kann selbst entwickelt werden.
� Standardfunktionen können durch Bibliotheken zum eigenen Code gebunden werden.
� Top-Level-Solver Code beinhaltet die Gleichungen die gelöst werden sollen:
� Die Software versucht die natürliche Sprache der Strömungsmechanik nachzubilden.
� Verfügt über eine hoch entwickelte symbolische Benutzerschnittstelle, die es möglich macht, spezielle Gleichungssysteme ohne großen Programmieraufwand zu implementieren.
Kommerzielle Software
� Übliche kommerzielle CFD-Solver:� Überwiegend nur ein Programm (Executable) für alle Problemstellungen in
der Strömungsmechanik.
� Innerhalb des Codes selbständige Umschaltung der Algorithmen.
� Programmiert in Fortran oder C, alte Grundstrukturen, aber stetig erweitert.
� Keine Einsicht im Programmcode und auch nicht veröffentlicht.
� Gegenüber OpenFOAM erscheint immer eine Lösung.
OpenFOAM Versionen
1.5
NABLA
OpenCFD
1.6 1.7 2.0 2.1
1.5-dev 1.6-ext 2.0-ext
OpenFOAM Extend
demnächst
…
…
� Zwei hauptsächliche Entwicklungen von OpenFOAM®
Was ist der Unterschied?
� OpenFOAM-2.1.x ist die stabilere Version, die als ausführbaren Dateien angeboten werden.
� Die Version sollte für die meisten Anwender die erste Wahl sein.
� Beinhaltet die neuesten Fehlerbeseitigungen (bug-fixed)
� Nachteil: Gegenüber der OF Extend Version weniger getestet .
� OpenFOAM -1.6-ext hat keine Beziehung mit OpenCFD.
� Wird überwiegend von der Community entwickelt.
� Sollte in der offizielle Version besondere CFD Methoden fehlen, lohnt sich ein Blick in der Extend Version (Beispiel: GGI, Block Matrix und Block Solver).
OpenFOAM Mathematische Sprache
solve(
fvm::ddt(rho, U)+ fvm::div(phi, U)+ turbulence->divRhoR(U)==- fvc::grad(p)
);
∂ρU
∂ t+∇⋅ϕU U �∇⋅ρR=�∇ p
1. Locate rate of change ρU
2. Convective rate of change of ρU
3. Viscous dissipation (laminar + turbulent)
4. Pressure gradient
� „solve“-Funktion hat verschiedene Aufgaben, abhängig vom Typ
� +,-, == Operatoren wurden in OpenFOAM neu definiert
� „divRhoR“-Funktion wird abhängig vom Turbulenzmodell definiert
� Verbessert die Lesbarkeit des Codes!
OpenFOAM Mathematische Sprache
Quelle: Dokumentation OpenFOAM
OpenFOAM Struktur
� FoamX wurde seit der OpenFOAM Version 1.4 eingestellt.� Die Entwicklung von Lösern ging schneller voran als das GUI anzupassen.� Harte Linux-Anwender arbeiten schneller mit der Konsole als mit der Maus.
Quelle: Dokumentation OpenFOAM
X
Aufbau von OpenFOAM
� Was ist in der OpenFOAM Distrubition?� $HOME/OpenFOAM/
� OpenFOAM-2.1.x/� src/ Quellcode
� applications/ Anwendungsprogramm mit Quellcode
� lib/ Shared-Object Bibliotheken
� wmake/ Compiler Skripte
� bin/ zusätzliche Skripte
� doc/ Dokumentation
� etc/ Daten und Konfigurationen
� tutorials/ Beispiele
� platforms/linux64GccDPOpt/ Ausführbaren Dateien (Doppel Präzision, 64bit)
� ThirdParty-2.1.x� openmpi-1.5.3/ Open Source High Performance Computing
� ParaView-3.12.0 / Visualisierungssoftware
� scootch_5.1.11 / Ein Tool für effiziente parallele Aufteilung
Navigation in OpenFOAM
� Navigation in der OpenFOAM Distrubition� Umgebungsvariablen werden in der Linux-Umgebung gesetzt,
um einfacher zu navigieren.
� Es werden Abkürzungen (alias) definiert, um Ordner schnell zu wechseln.
� $HOME/OpenFOAM/� OpenFOAM-2.1.x/ � foam $WM_PROJECT_DIR
� src/ � src $FOAM_SRC
� OpenFOAM/ � foamsrc
� finiteVolumen � foamfv
� applications/ � app $FOAM_APP
� solvers � sol $FOAM_SOLVERS
� utilities � util $FOAM_UTILITIES
� lib/ � lib $FOAM_LIB
� tutorials/ � tut $FOAM_TUTORIALS
OpenFOAM Benutzer Ordner
� OpenFOAM Benutzer-Ordner:� In einer Standardinstallation befindet sich der Benutzer-Ordner
innerhalb der OpenFOAM Installation.
� Der Ordnername setzt sich wie folgt zusammen:� ${LOGNAME}-2.1.x
� Beispiel: $HOME/OpenFOAM/tian-2.1.x
� Alias: „run“ � $HOME/OpenFOAM/tian-2.1.x/run
� Die Simulationsfälle sollten aus dem „run“ gestartet werden.� Umgebungsvariable: $FOAM_RUN
Aufbau eines Simulationscases
� Die oberste Ebene bezeichnet den Namen des Simulationsordners
� System Ordner:
� Einstellungen und Definitionen für den Löser
� Constant Ordner:
� Stoffdaten und Netzinformationen
� Zeit Ordner:
� Anfangs- und Randbedingungen
Was ist der Unterschied?
� „polyMesh“-Beschreibung:� „face“ basierte Beschreibung
� Jeder „face“ ist ausgerichtet an Eigentümerzelle (P) und Nachbarzelle (N)
� „Internal face“ ist maximal mit 2 Zellen verbunden.
� Ist ein „face“ ein Begrenzungsfläche ist der Nachbarzellenindex = -1.
� constant/polyMesh/� points/ Liste der Punkte als Vektoren
� faces/ Liste der Faces inkl. der Punkt-Indexe
� owner/ Liste der Eigentümerzellen, der Indes = Face index
� neighbour/ Liste der Nachbarzellen, der Index = Face Index
� boundary/ Liste der Patches
Quelle: Dokumentation OpenFOAM
„polyMesh“-Beispiel
� polyMesh-Beispiel „faces“:
// * * * * * * * * * * * * * * * * * * * * * //8855078(4(1 543 59621 59079)4(542 59620 59621 543)4(59078 59079 59621 59620)4(2 544 59622 59080)4(543 59621 59622 544)4(59079 59080 59622 59621)4(3 545 59623 59081)4(544 59622 59623 545)4(59080 59081 59623 59622)4(4 546 59624 59082)…)
� polyMesh-Beispiel „points“:
// * * * * * * * * * * * * * * * * * * * * * //
3012978
(
(0 46.175 2.384186e-07)
(0.07005545287 46.175 2.384186e-07)
(0.1401109057 46.175 2.384186e-07)
(0.2101663586 46.175 2.384186e-07)
(0.2802218115 46.175 2.384186e-07)
(0.3502772643 46.175 2.384186e-07)
(0.4203327172 46.175 2.384186e-07)
…
)
„polyMesh“-Beispiel
� polyMesh-Beispiel „boundary:
// * * * * * * * * * * * * * * * * * * * * * * * * * * *//
2
(
movingWall Boundary Patch Name
{
type wall; Art des Patches
nFaces 20; Anzahl der Faces
startFace 760; Startposition der Face-Liste
}
fixedWalls
{
type wall;
nFaces 60;
startFace 780;
}
)
Vernetzung in OpenFOAM
� Gitter in OpenFOAM� OpenFOAM arbeitet in einem 3-dimensionalen
Kartesischen Koordinatensystem� Für 1- und 2- dimensional sowie achsensymmetrische
Probleme werden in einem 3D Gitter simuliert durch Anwenden von spezifischen Randbedingungen
� Eine Zelle hat eine nicht eingeschränkte Anzahl von Seitenflächen (faces)
� Eine Seitenfläche kann beliebig viele Kanten haben� Keine Einschränkung bezüglich der Ausrichtung von
Seitenflächen (face alignment)� Dies ermöglicht eine besondere Vernetzungsfreiheit
und manipulation in OpenFOAM, bekannt als „polyMesh“
Netzgeneration mit SnappyHexMesh
� snappyHexMesh benötigt ein Hintergundnetz� Das Netz kann vorab schon verfeinert werden.
� snappyHexMeshDict:� Zu finden im Unterordner „/system“ eines Simulationsfalles.� Das Dictionary beinhaltet Schlüsselwörter zum Steuern der
Vernetzung.� snappyHexMesh benötigt Oberflächengeometrie
� Geometrie kann ein STL Format sein.� Die Vernetzung bringt auch eigene Standardgeometrien mit wie
Kugel, Zylinder und Box.� decomposeParDict:
� Zu finden im Unterordner „/constant“ eines Simulationfalles.� Ist für die Parallelisierung zuständig.� Wird benötigt auch wenn nur einer CPU gerechnet wird.
Hintergundnetz - blockMesh
Quelle: Jukka-Pekka Keskinen, Ville Vuorinen & Martti Larmi, Aalto university
� „blockMesh“-Tool� Einfache Geometrie können mit dem Tool „blockMesh“ generiert
werden.� Für „snappyHexMesh“ sollte das Hintergrundnetz das Gebiet voll
umschlingen� Das Breite/Höhe/Tiefe-Verhältnis sollte nahe bei 1 sein
SnappyHexMesh
Cell-Spliting(castellatedMesh)
Regionen außerhalb des Tylinders werden nach der Splittung entfernt.
Snapping(snap)
Das Netz wird an anhand der Oberflächengeometrie deformiert.
Add Surface layers(addLayers)
Es wird eine Grenzschicht generiert.
Beispiel: snappyHexMesh
Zuluftdrallauslass Abluftgitter
Quelle: HVAC GUI Tool für OpenFOAM
Bezugsquelle OpenFOAM-2.1.x?
� Offizielle Version OpenFOAM� Version vom 26.03.2012: OF-2.1.x
� Download: http://www.openfoam.com/download
� Verfügbar als:� UBUNTU/DEBIAN Pakete (source code and binaries)� SuSE/RPM Pakete (source code and binaries)� Source Pakete� GIT Repository (Tagesaktuell)
� Erweiterte Version OpenFOAM� Version vom 26.03.2012: OF-1.6.ext
� Download: git://openfoam-extend.git.sourceforge.net/gitroot/openfoam-extend/openfoam-extend
� Verfügbar als:� Live Distrubitation(source code and binaries)� GIT Repository (Tagesaktuell)
Bezugsquelle OpenFOAM-1.6-ext?
OpenFOAM-1.6-ext | The Extend Portal
Quelle: https://www.extend-project.com
� Project:� Kerninformationen über die Entwicklung von OpenFOAM® (features, roadmap,
objectives)
� Community:� Treffpunkte, Veranstaltungen, Gruppierungen von Gleichgesinnten, Stammtische
� Network:� Präsentationen von OpenFOAM® Codes, Werbung von Universitäten und Firmen
Anwendungsforen im Internet | Get Help?
Internationales Forum
Quelle: https://www.cfd-online.de
Deutschsprachiges Forum
Quelle: https://www.cad.de
� Erfahrungsaustausch und/oder Hilfestellungen bei der Durchführung von Simulationen durch Foren im Internet möglich
� Gemeinsames Erarbeiten von Problemstellungen
Wo bekommt man sonst noch Unterstützung?
� Von der Firma OpenCFD� Dokumentation:
� Internetseite: http://www.openfoam.com/docs/� Doxygen:
� Internetseite: http://www.openfoam.org/docs/cpp/
� Über Foren im Internet� CAD.de:
� Internetseite: http://www.cad.de� CFD Online:
� Internetseite: http://www.cfd-online.com� Extend Project:
� Internetseite: http://www.extend-project.com
� Sonstiges� OpenFOAM Wiki‘s, Google Suchmaschine, vom Quellcode, usw.
Questions and Discussion
Vielen Dank
Noch fragen? Nein?Dann zur Praxis
Download‐Link, um das passende Video herunterzuladen
http://www.sendspace.com/file/c8kpto