SnappyHexMesh ist ein vollständig paralleler, geteilter Sechseck-Gittergenerator, der eine minimale Gitterqualität garantiert. Gesteuert mit OpenFOAM®-Dictionaries eignet er sich besonders gut im batchgesteuerten Betrieb.
Die wichtigsten Merkmale:
- startet von jedem reinen Hex-Mesh (strukturiert oder unstrukturiert)
- liest Geometrie in triangulierten Formaten, z.B. in stl, obj, vtk
- keine Begrenzung der Anzahl der Eingabeflächen
- kann einfache analytisch definierte Geometrie verwenden, z.B. Kasten, Kugel, Kegel
- erzeugt prismatische Schichten
- skaliert gut beim parallelen Vermaschen.
- kann mit unsauberen Oberflächen arbeiten, d.h. mit nicht wasserdichten Oberflächen
(Aus dem OpenFOAM® v8 Benutzerhandbuch: 5.4 Netzgenerierung mit snappyHexMesh)
Dieser Abschnitt beschreibt das Netzgenerierungsprogramm snappyHexMesh, das mit OpenFOAM geliefert wird. Das Dienstprogramm snappyHexMesh erzeugt automatisch 3-dimensionale Netze mit Hexaedern (hex) und Split-Hexaedern (split-hex) aus triangulierten Oberflächengeometrien oder Dreiflächen im Stereolithographie- (STL) oder Wellenfront-Objekt- (OBJ) Format. Das Netz passt sich annähernd der Oberfläche an, indem ein Ausgangsnetz iterativ verfeinert und das resultierende Split-Hex-Netz auf die Oberfläche gemorpht wird. In einer optionalen Phase wird das resultierende Netz zurück geschrumpft und Zellschichten werden eingefügt. Die Spezifikation des Netzverfeinerungsgrades ist sehr flexibel und die Oberflächenbehandlung ist robust mit einer vordefinierten Endqualität des Netzes. Sie läuft bei jeder Iteration parallel zu einem Load-Balancing-Schritt.
Der Prozess der Erzeugung eines Netzes mit snappyHexMesh wird anhand des unten gezeigten Schemas beschrieben.
Ziel ist es, einen rechteckig geformten Bereich (in der Abbildung grau schattiert) zu vernetzen, der ein Objekt umgibt, das durch eine Dreifläche beschrieben wird, z.B. typisch für eine externe Aerodynamiksimulation. Beachten Sie, dass der Schaltplan zweidimensional ist, um ihn leichter verständlich zu machen, auch wenn das snappyHexMesh ein 3D-Vernetzungswerkzeug ist.
Um snappyHexMesh ausführen zu können, benötigt der Benutzer Folgendes:
Eine oder mehrere Tri-Surface-Dateien, die sich in einem Constant/Tri-Surface-Unterverzeichnis des Fallverzeichnisses (Case-Ordner im OpenFOAM-Verzeichnis)befinden.
Ein Hex-Hintergrundnetz, das die Ausdehnung des Rechengebiets und eine Netzdichte auf Basisebene definiert, typischerweise wird es mit blockMesh erzeugt.
Ein snappyHexMeshDict-Wörterbuch mit entsprechenden Einträgen, das sich im Systemunterverzeichnis des Falls befindet.
Das snappyHexMeshDict-Wörterbuch enthält Schalter auf der obersten Ebene, die die verschiedenen Stufen des Vernetzungsprozesses steuern und individuelle Unterverzeichnisse eines jeden Prozesses.
Nach dem Wählen des Tools snappyHexMesh öffnet sich folgendes Fenster.
Mit diesen 4 Schaltern aktivieren, bzw. deaktivieren Sie die enthaltenen Optionen, in den entsprechenden Bereichen, "castellateMesh", "Snap", "Layers" und "Quality" oder "keepPatches".
castellatedMesh (verzahnte Netzstruktur), die Zellaufteilung wird gemäß der vom Benutzer im Subdictionary castellatedMeshControls im snappyHexMeshDict angegebenen Spezifikation durchgeführt.
maxLocalCells | Maximale Anzahl von Zellen pro Prozessor während der Verfeinerung. Dies gibt die maximale Anzahl von Zellen pro Prozessor während der Verfeinerungsphase an. Wenn die lokale Anzahl von Zellen größer als die maximale Anzahl von Zellen pro Prozessor (maxLocalCells) auf einem beliebigen Prozessor ist, wechselt der Algorithmus von der Verfeinerung mit anschließender Balancierung (aktuelle Methode) zur Balancierung vor der Verfeinerung (gewichtet) . |
maxGlobalCells | Gesamtzahl der Zellen während der Verfeinerung (d.h. vor Abschluss der vollständigen Verfeinerung). Diese gibt die maximale Gesamtanzahl der Zellen während der Verfeinerungsphase an. Der Verfeinerungsprozess wird sofort beendet, wenn die Gesamtanzahl der Zellen während der Verfeinerung diese Zahl überschreitet. In diesem Fall kann es sein, dass die Verfeinerungsstufe nicht abgeschlossen wird. (Zum Beispiel werden in diesem Fall einige Regionsverfeinerungen nicht durchgeführt). |
minRefinementCells | Wenn minRefinementCells ≥ Anzahl der zu veredelnden Zellen ist, stoppt die Verfeinerung des Netzes. Damit wird die Mindestanzahl von Zellen während der Verfeinerungsphase festgelegt. Der Algorithmus zur Oberflächenverfeinerung kann beispielsweise viele Iterationen zur Verfeinerung nur einiger Zellen benötigen. Diese Einstellung bewirkt, dass die Verfeinerung gestoppt wird, wenn die zu verfeinernden Zellen unter dem angegebenen Wert liegen Hinweis: Es wird mindestens eine Iteration durchgeführt, es sei denn, die Anzahl der zu verfeinernden Zellen ist 0. |
nCellsBetweenLevels |
Anzahl der Pufferschichten von Zellen zwischen aufeinander folgenden Verfeinerungsebenen. |
resolveFeatureAngle | Wendet den maximalen Verfeinerungsgrad auf Zellen an, die Schnittpunkte sehen können, deren Winkel den resolveFeatureAngle überschreitet (typischerweise auf 30 gesetzt). Das refinementSurfaces-Wörterbuch in castellatedMeshControls erfordert Wörterbucheinträge für jede STL-Oberfläche und eine Standard-Level-Spezifikation der minimalen und maximalen Verfeinerung in der Form (<min> <max>). Die minimale Verfeinerungsebene wird im Allgemeinen über die Oberfläche angewendet, die maximale Ebene wird auf Zellen angewendet, die Schnittpunkte sehen können, die einen Winkel bilden, der über den durch resolveFeatureAngle angegebenen hinausgeht. |
maxLoadUnbalance | Dies gibt die maximale Abweichung der Prozessorbalance im parallelen Vermaschungsprozess an. Ein Wert von 0 zwingt zum ständigen Ausgleich. |
Der nächste Schritt des Vernetzungsprozesses umfasst das Verschieben von Zell-Eckpunkten auf die Oberflächengeometrie, um die zerklüftete, zackenförmige Oberfläche aus dem Netz zu entfernen. Um das Netz an die Oberfläche anzuschmiegen und anzugleichen.
Der Snap-Prozess wird durch die folgenden Parameter bestimmt, die Anzahl der Iterationen und den maximalen relativen Abstand für die Fangpunktsuche (Toleranz) zwischen Netz und Objektoberfläche steuern.
Der Prozess funktioniert folgendermaßen.
Verschieben der Scheitelpunkte in der gezackten Grenzfläche auf die STL-Oberfläche;
Lösen der Relaxation des internen Netzes mit den zuletzt verschobenen Grenzpunkten.
Die Eckpunkte finden, die eine Verletzung der Netzqualitätsparameter verursachen.
Die Verschiebung dieser Eckpunkte von ihrem Anfangswert (bei 1) zu reduzieren und von 2 zu wiederholen, bis die Netzqualität zufriedenstellend ist.
Die Methode verwendet die Einstellungen im snapControls-Subdictionary in snappyHexMeshDict, die unten aufgeführt sind.
nSmoothPatch | Anzahl der Patch-Glättungsiterationen, bevor eine Übereinstimmung mit der Oberfläche gefunden wird (typischerweise 3). |
tolerance | Verhältnis des Abstands für Punkte, die von einem Oberflächenmerkmalspunkt oder einer Kante angezogen werden sollen, zur lokalen maximalen Kantenlänge (typischerweise 2,0). |
nSolveIter | Anzahl der Netzverschiebungsrelaxations-Iterationen (typischerweise 30-100). |
nRelaxIter | Maximale Anzahl von Fangrelaxations-Iterationen (typischerweise 5). |
nFeatureSnapIter | Diese gibt die Anzahl der Iterationen innerhalb des Hauptfangiterationsprozesses an, um Netzpunkte an die Oberfläche zu ziehen und scharfe Kanten zu vermeiden. Dies geschieht unter Verwendung der extrahierten Featurekanten im Schritt des kaskadierten Netzes. |
ExplicitFeatureSnap |
Für diese Methode kann eine Feature-Verfeinerung unter Netzverfeinerungen hinzugefügt werden, um die Feature-Extraktion für das Fangen zu spezifizieren. Die Methode kann Fang-Features behandeln, die den Schnittpunkt zwischen Begrenzungsflächen darstellen, die sich sogar in derselben Ebene befinden. Von der offiziellen Website von OPENFOAM® "Die explizite Methode bietet eine größere Kontrolle und, unserer Erfahrung nach, eine etwas bessere Merkmalskonformation. Die implizite Methode hat den Vorteil, dass sie vollständig automatisiert ist. |
ImplicitFeatureSnap | Bei der impliziten Methode muss der Benutzer keine Merkmale extrahieren. Stattdessen wird der Schlüsselworteintrag resolveMax Face Angle For Layer Generation (featureAngle) verwendet, um oberflächengeometrische Merkmale, z.B. Falten in der Geometrie, zu identifizieren. Anstatt direkt an einer Kantengeometrie zu rasten, wie in der vorherigen Methode explizit angegeben, rastet die implizite Methode an einer Darstellung des Features ein, die aus der lokalen Oberflächentopologie berechnet wurde. |
Die Netzausgabe aus dem snapping kann zur Simulation Zweck geeignet sein, obwohl sie einige unregelmäßige Zellen entlang der Grenzflächen erzeugen kann. Es gibt eine optionale Stufe des Vernetzungsprozesses, die zusätzliche Schichten hexaedrischer Zellen einführt, die an der Grenzfläche ausgerichtet sind, wie durch die dunkel schattierten Zellen unten veranschaulicht wird.
Der Prozess des Hinzufügens von Netzschichten beinhaltet das Schrumpfen des vorhandenen Netzes von der Grenze aus und das Einfügen von Zellschichten, im Großen und Ganzen wie folgt.
1. Das Netz wird von der Oberfläche um eine bestimmte Dicke in der Richtung senkrecht zur Oberfläche zurück projiziert.
2. Lösen der Auflockerung des inneren Netzes mit den letzten projizierten Grenzpunkten.
3. Prüfen, ob die Validierungskriterien erfüllt sind, andernfalls die projizierte Dicke reduzieren und zu 2 zurückkehren, wenn die Validierung für keine Dicke erfüllt
werden kann, keine Schichten mehr einfügen, wenn die Validierungskriterien erfüllt werden können, keine Schichten mehr einfügen.
4. Wenn die Validierungskriterien erfüllt werden können, Netzschichten einfügen.
5. Das Netz wird erneut geprüft, wenn die Prüfungen fehlschlagen, werden Schichten entfernt und wir kehren zu 2 zurück.
Das Layer-Additionsverfahren verwendet die Einstellungen im addLayersControls-Subdictionary in snappyHexMeshDict, die Einträge sind unten aufgeführt. Der Benutzer hat die Wahl zwischen 4 verschiedenen Schichtdickenparametern - expansionRatio, finalLayerThickness, firstLayerThickness, thickness - von denen er nur 2 angeben muss; mehr als 2, und das Problem ist überbestimmt.
relativeSizes | Schalter, der festlegt, ob die angegebenen Schichtdicken relativ zur unverzerrten Zellgröße außerhalb der Schicht oder absolut sind. |
firstLayerThickness |
Dicke der am weitesten von der Wand entfernten Schicht, normalerweise in Kombination mit relativen Größen gemäß dem Eintrag relativeSizes, |
finalLayerThickness |
Dicke der am weitesten von der Wand entfernten Schicht, normalerweise in Kombination mit relativen Größen gemäß dem Eintrag relativeSizes. |
expansionRatio | Gibt das Wachstum aufeinander folgender Schichten an. Je größer der Wert, desto größer der Höhenunterschied der Schichten. Dieser Standardwert wird durch die Ebenenverfeinerung unter Netzverfeinerungen überschrieben. |
thickness | Gesamtdicke aller Zellschichten, normalerweise in Kombination mit absoluten Größen gemäß dem Eintrag relativeSizes. |
finalLayerThickness | Dicke der am weitesten von der Wand entfernten Schicht, normalerweise in Kombination mit relativen Größen gemäß dem Eintrag relativeSizes. |
minThickness | Mindestdicke der Zellschicht, entweder relativ oder absolut (siehe Schalter "relattiveSizes" oben). |
featureAngle | Winkel, oberhalb dessen die Oberfläche nicht extrudiert wird. |
nSmoothNormals | Anzahl der Glättungsiterationen der Bewegungsrichtung des inneren Netzes (typischerweise 3). Höhere Werte führen zu einer besseren Extrusion der Schichten. |
maxFaceThicknessRatio | Stoppen des Schichtwachstums bei stark verzogenen Zellen (typischerweise 0,5). |
maxThicknessToMediaRatio |
Reduzierung des Schichtwachstums bei großem Verhältnis von Dicke zu medialem Abstand (typischerweise 0,3) Diese Variable gibt das maximale Verhältnis von Dicke zu medialem Abstand an. Das Schichtwachstum wird reduziert, wenn das Verhältnis größer als der angegebene Wert ist. |
nRelaxedlter | Maximale Anzahl von Iterationen, nach denen die Kontrollen im aufgelockerten Subdictionary von meshQuality verwendet werden (typischerweise 20). |
nBufferCellsNoExtrude | Dies gibt die Anzahl der Pufferzellen für die Terminierung der Schichten an (typischerweise 0). |
expansionRatio | Legt das Wachstum aufeinander folgender Schichten fest, ein Expansionsfaktor für das Schichtnetz, Zunahme der Größe von einer Schicht zur nächsten. Je größer der Wert, desto größer der Höhenunterschied der Schichten. Dieser Standardwert wird durch die Lagenverfeinerung unter Netzverfeinerungen überschrieben. |
nGrow | Die Anzahl der Schichten verbundener Flächen, die nicht gewachsen sind, wenn Punkte nicht extrudiert werden, hilft bei der Konvergenz der Schichtaddition in der Nähe von Merkmalen. |
nSmoothSurfaceNormals | Dies gibt die Anzahl der Iterationen zur Glättung der Oberflächennormalen für die Extrusion von Schichten an (typischerweise 1). Höhere Werte führen zu einer besseren Extrusion von Schichten. |
nSmoothThickness | Dies gibt die Anzahl der Iterationen zum Glätten der Gesamtschichtdicke über verschiedene Oberflächenbereiche an (typischerweise 10). |
minMediaAxisAngle | Winkel, der zur Aufnahme von Punkten der Mittelachse verwendet wird (typischerweise 90). |
nRelaxIter | Dies gibt die maximale Anzahl von Iterationen an, nach denen vereinfachte Netzqualitätskontrollen verwendet werden. Bis zum Wert Max Iteration's with Strict Quality Controls (nRelaxedIter) verwendet der Algorithmus die Einstellungen in den Netz-Qualitätskontrollen, nach diesen Iterationen verwendet er die vereinfachten Netz-Qualitätskontrollwerte (typischerweise 5). |
nLayerIter | Dies spezifiziert die Iterationen des gesamten Layer-Additionsalgorithmus. Der Algorithmus stoppt sofort nach dem angegebenen Wert, auch wenn das Netz schlechte Zellen aufweist. Ein Wert von 50-60 wird empfohlen. |
Die Netzqualität wird durch die Einträge im Sub-Dictionary meshQualityControls in snappyHexMeshDict kontrolliert.
maxNonOrtho | Maximal zulässige Nicht-Orthogonalität (in Grad, typischerweise 65). |
maxBoundarySkewness | Max. zulässige Grenzflächenschiefe (typischerweise 20). |
maxInternalSkewness | Max. zulässige Schiefe der Innenfläche (typischerweise 4). |
maxConcave | Max. zulässige Konkavität der Flächen (typischerweise 80). |
miniFlatness | Verhältnis der minimalen projizierten Fläche zur tatsächlichen Fläche (typischerweise 0,5). |
minVol | Minimales Zellpyramidenvolumen (typischerweise 1e-13, große negative Zahl deaktiviert). |
minTetQuality | Minimale Qualität der tetraedrischen Zellen aus der Zellzerlegung. (Im Allgemeinen deaktiviert durch die Einstellung einer großen negativen Zahl seit v5.0, als die neue baryzentrische Verfolgung eingeführt wurde, die mit negativen Tets umgehen konnte.) |
minTwist | Minimale Flächenverdrehung (typischerweise 0,05). |
minDeterminant | Minimale normalisierte Zelldeterminante, 1 = hex, ≤ 0 = illegale Zelle (typischerweise 0,001). |
minFaceWeight | Minimale Flächengewichtung 0 - 0,5 (typischerweise 0,05) |
minVolRatio | Minimales Volumenverhältnis 0 - 1,0 (typischerweise 0,01). |
minTriangleTwist | Minimale Dreiecksverdrehung > 0 für Fluent Kompatibilität (typischerweise -1). |
nSmoothScale | Anzahl der Fehlerverteilungs-Iterationen (typischerweise 4). |
errorReduction | Betrag, um die Verschiebung an Fehlerpunkten zu reduzieren (typischerweise 0,75). |
Mit einem Klick auf den Buttons "Ok", akzeptieren Sie die von Ihnen getätigten Eingaben und das Fenster schließt sich.
Mit einem Klick auf den Button "Reset" setzen Sie alle Einstellungen wieder auf die Originaleinstellungen zurück, mit einem Klick auf den Button "Abbrechen" brechen Sie die Übernahme aller Einstellungen ab und dieses Fenster schließt sich wieder.