Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Geometrie und Mesh Generation

Das Netz ist ein wesentlicher Bestandteil der numerischen Lösung und muss bestimmte Kriterien erfüllen, um eine gültige und präzise Lösung zu erzeugen. Der folgende Abschnitt beschreibt die snappyHexMesh Utility zur Erstellung von 3d Maschen, die Hexaedral- und Split-Hexedralzellen aus triangulierten Oberflächengeometrien enthalten.

Weitere Einzelheiten zu den Netzspezifikationen und Gültigkeitsbeschränkungen finden Sie unter Kapitel 4 des OpenFOAM User Guide. Um SnappyHexMesh zu betreiben, sind neben einem vorhandenen Geometrie-Basisnetz die folgenden Dateien erforderlich:

openfoam

Figure 1:Case-Verzeichnis mit den Dateien, die erforderlich sind, um SnappyHexMesh auszuführen.

In den folgenden Abschnitten werden die zu verfolgenden Schritte beschrieben.

Erstellung des Hintergrunds Hex Mesh

Bevor Sie snappyHexMesh ausführen können, muss ein von hexahedralen Zellen charakterisiertes Hintergrundnetz erstellt werden. Dieses Netz muss die gesamte Region enthalten, die mit snappyHexMesh kämmt werden sollte, wie in der Abbildung unten gezeigt.

openfoam

Figure 2:Hintergrundgitter mit BlockMesh, die die zu netzende Struktur enthält.

In der Datei blockMeshDict müssen folgende Elemente hinzugefügt werden:

   convertToMeters 1;
    vertices
        (
            ( -30.0 -25.0 -25.0 )   //vertex number 0
            ( 70.0 -25.0 -25.0 )   //vertex number 1
            ( 70.0 25.0 -25.0 )   //vertex number 2
            ( -30.0 25.0 -25.0 )   //vertex number 3
            ( -30.0 -25.0 25.0 )   //vertex number 4
            ( 70.0 -25.0 25.0 )   //vertex number 5
            ( 70.0 25.0 25.0 )   //vertex number 6
            ( -30.0 25.0 25.0 )   //vertex number 7
        );
openfoam

Figure 3:Hintergrundnetz, das die Reihenfolge angibt, in der die Vertiken in der Block-meshDict-Datei geschrieben werden.

    blocks
        (
            hex (0 1 2 3 4 5 6 7)   // vertex numbers
            (400 200 200)   // number of cells in each direction
            simpleGrading (1 1 1) // cell expansion ratios
        );

Für weitere Details zum blockMesh-Dienstprogramm siehe blockMesh in der OpenFOAM User Guide.


OberflächeFeaturesDict

Die OberflächeFeaturesDict extrahiert und schreibt alle Oberflächenmerkmale einer Datei. In dieser Datei müssen alle im Ordner triSurface gespeicherten STL Dateien wie folgt hinzugefügt werden:

    Air
    {
        surfaces
            ("Air.stl");
        includedAngle   180;

    // Write features to obj format for postprocessing
        writeObj                yes;
    }

Die komplette Version der OberflächeFeaturesDict für das aktuelle Tutorial wird im Fallordner gespeichert.


Das ist nicht möglich.

Der decomposeParDict wird verwendet, um ein Netz und Felder eines Gehäuses für die parallele Ausführung zu zersetzen. Bei Parallellauf muss die Geometrie zunächst in einzelne Geometrien für jeden MPI (Message Passing Interface, Standard für Parallel Computing)Prozess segmentiert werden. Der Eintrag numberOfSubdomains ist obligatorisch und der Method definiert den Zersetzungstyp. Es stehen mehrere Zersetzungsverfahren zur Verfügung. Daher stellt die unten angezeigte decomposeParDict-Datei nur eine beispielhafte Option dar.

    numberOfSubdomains 8;
    method          simple;

    simpleCoeffs
    {
        n               (2 2 2);
        delta           0.001;
    }

    hierarchicalCoeffs
    {
        n               (1 1 1);
        delta           0.001;
        order           xyz;
    }

    manualCoeffs
    {
        dataFile        "";
    }

    distributed     no;

    roots           ( );

Und was?

Das SnappyHexMeshDict Wörterbuch enthält eine Reihe von Befehlen, die die verschiedenen Schritte des Meshing-Prozesses steuern. Die wichtigsten sind:

Die wichtigsten Schritte bei der Ausführung von SnappyHexMesh sind:

  1. Castellation: Die Zellen, die über eine durch einen vorgegebenen Punkt definierte Region hinausgehen, werden entfernt.

  2. Snapping: rekonstruiert die Zellen, um die Kanten von innerhalb der Region auf die erforderliche Grenze zu bewegen.

  3. Layering: schafft zusätzliche Schichten in der Grenzregion.

  4. Mesh quality: Kontrolle und Überprüfung der Qualität des Netzes.

Für dieses Beispiel wurde die add Layers-Option, die den Zusatz von viskosen Schichten ermöglicht, auf false gesetzt.

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  2.2.0                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    format      ascii;
    class       dictionary;
    object      snappyHexMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

// Which of the steps to run
castellatedMesh true;    // make basic mesh 
snap            true;    // decide to snap back to surface 
addLayers       false;   // decide to add viscous layers 

Das GEOMETRY Subdictionary listet alle von SnappyHexMeshDict verwendeten Oberflächen auf, mit Ausnahme der blockMesh Geometrie. Darüber hinaus definiert es einen Namen, für den jeder von ihnen als Referenz verwendet wird, wie im folgenden Beispiel gezeigt.

geometry // Load all the STL files here
{
  Air.stl {type triSurfaceMesh; name Air;}
  Concrete-sides.stl {type triSurfaceMesh; name Concrete-sides;}
  Gravel-bottom.stl {type triSurfaceMesh; name Gravel-bottom;}
  Inlet.stl {type triSurfaceMesh; name Inlet;}
  Obstacle.stl {type triSurfaceMesh; name Obstacle;}
  Outlet.stl {type triSurfaceMesh; name Outlet;}
};

Castellation (Refinement)

Die CastellatedMeshControls-Einstellungen ermöglichen dann die Definition der Netzverfeinerung. Die Verfeinerung kann in den Abschnitten features, refinementSurfaces und refinementRegions eingestellt werden. Ausgehend von der Ebene 0, die keiner Verfeinerung entspricht, teilt jede nachfolgende Verfeinerungsebene die Zelle in 4 Teilen.

openfoam

Figure 4:Beispiel für unterschiedliche Maschenveredelungsstufen.

Zusätzlich werden die folgenden Artikel eingestellt:

Weitere Einzelheiten zu diesen Einstellungen finden Sie in der Rubrik castellation and refine] des OpenFOAM User Guide.

castellatedMeshControls
{
    maxLocalCells 50000000;   // max cells per CPU core
    maxGlobalCells 500000000; // max cells to use before mesh deletion step
    minRefinementCells 0;     // was 0 - zero means no bad cells are allowed during refinement stages
    nCellsBetweenLevels 3;    // expansion factor between each high & low refinement zone

    // Explicit feature edge refinement
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    features // taken from STL from each .eMesh file created by "SurfaceFeatureExtract" command
    (
      {file "Air.eMesh"; level 0;}
      {file "Concrete-sides.eMesh"; level 0;}
      {file "Gravel-bottom.eMesh"; level 0;}
      {file "Inlet.eMesh"; level 0;}
      {file "Obstacle.eMesh"; level 0;}
      {file "Outlet.eMesh"; level 0;}
    );

    // Surface based refinement
    // ~~~~~~~~~~~~~~~~~~~~~~~~

    refinementSurfaces // Surface-wise min and max refinement level
    {
      Air {level (0 0);}
      Concrete-sides {level (1 3);}
      Gravel-bottom {level (2 3);}
      Inlet {level (1 3);}
      Obstacle {level (3 3);}
      Outlet {level (2 3);}
    }

    resolveFeatureAngle 30;  // Resolve sharp angles // Default 30
    refinementRegions        // In descending levels of fineness
    allowFreeStandingZoneFaces true;
}

In dem im obigen Beispiel dargestellten Abschnitt RefinementSurfaces wurden für jedes Bestandteilelement unterschiedliche Verfeinerungsstufen eingestellt. Nachfolgend wird ein detailliertes Beispiel für die sich ergebende Verfeinerung für die Kiesboden- und Hinderniselemente gezeigt.

openfoam

Figure 5:Ergebnisende Verfeinerung für die Elemente Obstacle und Gravel-Bottom**, die das Netz komponieren.

Sobald der Funktions- und Oberflächenspaltvorgang abgeschlossen ist, erfolgt der Zellabtrag. Letzteres erfordert einen oder mehrere Bereiche, die vollständig von einer Begrenzungsfläche des Domänens umhüllt sind. Um die Region anzugeben, in der die Zellen gehalten werden müssen, muss das Schlüsselwort locationInMesh definiert werden. Dieser Vektor definiert einfach den Bereich, der zurückgehalten werden will.

locationInMesh (43.359 5 2.5803);  // to decide which side of mesh to keep **

Schnappen

Nach beendeter Zellteilung und Zellabspaltung kann der Snapping-Prozess stattfinden. Diese Aufgabe beschäftigt sich mit dem Bewegen der Zell-Schnittpunkte auf der Oberfläche, um ein konformes Netz zu schaffen, was die Eingangsgeometrie entspricht. Hier eine Liste der Keywords, die gesetzt werden sollen:

// Settings for the snapping.
snapControls
{
    nSmoothPatch    3;
    // nSmoothInternal $nSmoothPatch;
    tolerance       1.0;
    nSolveIter      600;
    nRelaxIter      5;

    // Feature snapping

        nFeatureSnapIter 10; // default is 10
        implicitFeatureSnap false; // default is false - detects without doing surfaceFeatureExtract
        explicitFeatureSnap true; // default is true
        multiRegionFeatureSnap true; // default is false - detects features between multiple surfaces
}

Schichtung

Falls in dem mit der Schnappstufe erhaltenen Mesh einige unregelmäßige Zellen entlang der Grenzen vorhanden sind, können zusätzliche Schichten aus hexahedralen Zellen entlang der Grenze eingebracht werden. Diese Stufe beinhaltet das Schrumpfen des vorhandenen Netzes, um die Zellenschicht einzufügen.

Benutzer können zwischen 4 verschiedenen Schichtdickenparametern wählen: expansionRatio, finalLayerThickness, firstLayerThickness, thickness. Geben Sie in diesem Beispiel nur zwei an, um eine Überspezifikation des Problems zu vermeiden. Die einzustellenden Parameter haben folgende Bedeutungen:

Weitere Einzelheiten finden Sie im Abschnitt layer add des OpenFOAM User Guide.

// Settings for the layer addition.

addLayersControls 
//add the PATCH names from inside the STL file so STLpatchName-insideSTLName
 {
    relativeSizes false; 
    layers
    {
    }

    expansionRatio 1.0;
    finalLayerThickness 0.3; 
    minThickness 0.25; 
    nGrow 0; 

    // Advanced settings

    featureAngle 150;
    nRelaxIter 3;
    nSmoothSurfaceNormals 50;
    nSmoothNormals 3;
    nSmoothThickness 10; 
    maxFaceThicknessRatio 0.5; 
    maxThicknessToMedialRatio 0.3; 
    minMedianAxisAngle 90; 
    nBufferCellsNoExtrude 0;   
    nLayerIter 50; 
    NnRelaxedIter 20;
 }

Mesh Qualitätskontrollen

The final part of the snappyHexMeshDict file deals with the Mesh Quality. In this section, the values of the extrema encountered during the meshing process are defined. The purpose is to ensure an adequate quality of the resulting mesh. A comprehensive overview on the meaning of the mesh quality parameters can be found at https://simscale.com/docs. The OpenFOAM keywords defining mesh quality parameters are (with highlighting of the most important, and somewhat important parameters):

// Generic mesh quality settings

meshQualityControls
{
    maxNonOrtho 65;         // consider to set a limit of 45 deg
    maxBoundarySkewness 20; 
    maxInternalSkewness 4;  // however, skewness should not exceed 0.5
    maxConcave 80;
    minVol 1e-13;
    minTetQuality 1e-15;
    minArea -1;
    minTwist 0.02;
    minDeterminant 0.001;
    minFaceWeight 0.05;
    minVolRatio 0.01;
    minTriangleTwist -1;

    // Advanced
    nSmoothScale 4;
    errorReduction 0.75;
}

debug 0;

mergeTolerance 1E-6;

Meshing starten (blockMesh)

Nachdem die erforderlichen Keywords in den erforderlichen Wörterbüchern definiert wurden, besteht der letzte Schritt in running-Befehlen im Terminal in folgender Reihenfolge:

user@user123:~/OpenFOAM-9/channel/Mesh$ blockMesh
user@user123:~/OpenFOAM-9/channel/Mesh$ surfaceFeatures
user@user123:~/OpenFOAM-9/channel/Mesh$ decomposePar
user@user123:~/OpenFOAM-9/channel/Mesh$ mpirun -np x snappyHexMesh -parallel

Alternativ:

user@user123:~/OpenFOAM-9/channel/Mesh$ snappyHexMesh
user@user123:~/OpenFOAM-9/channel/Mesh$ reconstructParMesh -constant
user@user123:~/OpenFOAM-9/channel/Mesh$ checkMesh
  Checking topology...
    Boundary definition OK.
    Cell to face addressing OK.
    Point usage OK.
    Upper triangular ordering OK.
    Face vertices OK.
    Number of regions: 1 (OK).

  Checking patch topology for multiply connected surfaces...
                   Patch    Faces   Points                  Surface topology
                     Air    12879    13927  ok (non-closed singly connected)
          Concrete-sides   103621   109304  ok (non-closed singly connected)
           Gravel-bottom   132062   136819  ok (non-closed singly connected)
                   Inlet      288      339  ok (non-closed singly connected)
                Obstacle    27076    27416  ok (non-closed singly connected)
                  Outlet    20610    21252  ok (non-closed singly connected)

  Checking geometry...
    Overall domain bounding box (-2.5 -1e-06 -1) (56.7409 10 6.2461)
    Mesh has 3 geometric (non-empty/wedge) directions (1 1 1)
    Mesh has 3 solution (non-empty) directions (1 1 1)
    Boundary openness (-5.71676e-15 7.42351e-15 8.33816e-16) OK.
    Max cell openness = 4.76547e-16 OK.
    Max aspect ratio = 7.03771 OK.
    Minimum face area = 3.89097e-05. Maximum face area = 0.0910262.  Face area magnitudes OK.
    Min volume = 2.62118e-06. Max volume = 0.0180894.  Total volume = 2271.44.  Cell volumes OK.
    Mesh non-orthogonality Max: 47.7783 average: 6.72481
    Non-orthogonality check OK.
    Face pyramids OK.
    Max skewness = 3.12739 OK.
    Coupled point location match (average 0) OK.

  Mesh OK.

  End
user@user123:~/OpenFOAM-9/channel/Mesh$ paraFoam

Mesh Visualisierung

Um das generierte Mesh in ParaView zu visualisieren, wählen Sie im Abschnitt Properties die Apply Option.

openfoam snappyHexMesh paraFoam

Figure 6:Visualisierung des resultierenden Netzes in ParaView.

Das Bild unten zeigt einige Features, die erforderlich sind, um das erstellte Mesh angemessen zu visualisieren. Speziell zur Analyse der Zellen ist es möglich, die Option Surface with Edges auszuwählen. Die verschiedenen Elemente, die das Netz zusammensetzen, können dann ausgewählt/entwickelt werden, um bestimmte Teile im Detail zu analysieren. Schließlich können sie in dem Fall, in dem der Mesh Check Fehler zurückgegeben hat, z.B. Gesichter mit hoher Skewness durch Auswahl der Include Sets Option visualisiert werden.

openfoam snappyHexMesh paraFoam

Figure 7:Visualisierung des resultierenden Meshs in ParaView, das die erstellten Zellen hervorhebt.