In diesem Artikel wird erläutert, wie Sie mit dem Dienstprogramm snappyHexMesh ein Netz für OpenFOAM erstellen. snappyHexMesh ist ein Dienstprogramm zum Erstellen eines hexagonalen Netzes aus einer STL-Datei. Es ist möglich, eine STL-Datei Ihrer Lieblingsform mit CAD usw. zu erstellen und ein Netz dieser Form zu erstellen. Zur Erklärung setzen wir den Arbeitsverzeichnisnamen auf * Zylinder * und erstellen ein Netz, das um den Zylinder fließt.
Ich erkläre es auch im Video. https://www.youtube.com/watch?v=bas-5wbHOoY
Es ist ein fertiges Bild. Die Blockabmessungen sind Lx = 0,28 m, Ly = 0,12 m, Lz = 0,1 m, und der Ursprung ist der Schnittpunkt der Mittelachse des Zylinders und der xy-Ebene.
Details der zylindrischen Oberfläche. Schneiden Sie auch die Grenzschicht.
Das Dienstprogramm snappyHexMesh besteht aus drei Schritten: castllatedMesh, snap und addLayers. Der Verarbeitungsinhalt entspricht dem Entfernen außerhalb des Bereichs, dem Verbessern der Genauigkeit der Grenzfläche und dem Generieren eines Netzes für die Grenzschicht. Bild wie unten.
Um es auszuführen, müssen Sie zwei Geometriedateien vorbereiten, z. B. ein hexaedrisches Hintergrundnetz und ein STL-Format, das damit übereinstimmt. Ein Beispiel für eine Konfliktsituation ist, dass die Geometriedatei größer als das Hintergrundnetz ist. Das Hintergrundnetz kann mit blockMesh erstellt werden, und die Geometriedatei kann mit CAD erstellt werden. Dieser Artikel wurde mit FreeCAD erstellt.
In diesem Artikel werden nicht alle snappyHexMesh erläutert. Wenn Sie also die detaillierten Spezifikationen kennen möchten, lesen Sie bitte die folgenden Informationen. https://cfd.direct/openfoam/user-guide/v7-snappyhexmesh/#x27-1970005.4
Verfahren
** Verzeichnisstruktur zu Beginn der Arbeit **
Bereiten Sie Verzeichnisse und Dateien wie folgt vor. Mit OpenFOAM v7 /opt/openfoam7/tutorials/mesh/snappyHexMesh Wenn Sie eines aus den Beispielverzeichnissen auswählen und kopieren, müssen Sie controlDict, fvSchemes, fvSolution, meshQualityDict nicht bearbeiten, damit es einfach ist.
cylinder/
├── constant/
│ └── triSurface/
└── system/
├── blockMeshDict
├── controlDict
├── fvSchemes
├── fvSolution
├── meshQualityDict
└── snappyHexMeshDict
Bearbeiten Sie * Zylinder / System / BlockMeshDict * wie folgt.
/*--------------------------------*- C++ -*----------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 7
\\/ M anipulation |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
convertToMeters 1;
vertices
(
(-0.08 -0.06 0)
( 0.2 -0.06 0)
( 0.2 0.06 0)
(-0.08 0.06 0)
(-0.08 -0.06 0.1)
( 0.2 -0.06 0.1)
( 0.2 0.06 0.1)
(-0.08 0.06 0.1)
);
blocks
(
hex (0 1 2 3 4 5 6 7) (100 80 10) simpleGrading (1 1 1)
);
edges
(
);
boundary
(
z_min
{
type patch;
faces ((0 3 2 1));
}
z_max
{
type patch;
faces ((4 5 6 7));
}
y_min
{
type patch;
faces ((0 1 5 4));
}
y_max
{
type patch;
faces ((2 3 7 6));
}
x_min
{
type patch;
faces ((0 4 7 3));
}
x_max
{
type patch;
faces ((1 2 6 5));
}
);
mergePatchPairs
(
);
// ************************************************************************* //
Es gibt keine besonderen Einschränkungen hinsichtlich des Patchnamens oder der Anzahl der Netzunterteilungen. Führen Sie nach dem Bearbeiten von * blockMeshDict * blockMesh aus.
cylinder$ blockMesh
Sie haben jetzt ein Hintergrundnetz erstellt. Der Hauptkörper befindet sich in * Zylinder / Konstante / Polymesh *.
Erstellen Sie als Nächstes einen Zylinder mit FreeCAD. Ich erstelle es unter Windows.
Der Durchmesser beträgt 0,04 m. Die Höhe sollte Lz nicht überschreiten, daher sollte sie 0,1 m betragen. Wenn Sie jedoch aus FreeCAD im STL-Format exportieren, erhöht sich die Größe gemäß den Spezifikationen um das 1000-fache. Sie müssen sie daher in FreeCAD mit einem Durchmesser von 0,04 mm und einer Höhe von 0,1 mm erstellen. snappyHexMesh hat eine Spezifikation, die dem Koordinatensystem des Hintergrundnetzes und dem Koordinatensystem der CAD-Datei entspricht. Wenn Sie die Position des Zylinders steuern möchten, müssen Sie auf das Koordinatensystem achten.
Erstellungsbeispiel
Geben Sie es mit dem Namen Zylinder.stl aus und platzieren Sie es in * Zylinder / Konstante / TriSurface *.
Stellen Sie * Zylinder / System / snapyHexMeshDict * wie folgt ein.
/*--------------------------------*- C++ -*----------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 7
\\/ M anipulation |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object snappyHexMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
castellatedMesh true;
snap true;
addLayers true;
geometry
{
cylinder
{
type triSurfaceMesh;
file "cylinder.stl";
}
};
castellatedMeshControls
{
maxLocalCells 100000;
maxGlobalCells 2000000;
minRefinementCells 2;
nCellsBetweenLevels 4;
resolveFeatureAngle 30;
locationInMesh (0.18 0.05 0.09); // Inside point
allowFreeStandingZoneFaces true;
features
(
);
refinementSurfaces
{
cylinder
{
level (2 2);
}
}
refinementRegions
{
}
}
snapControls
{
nSmoothPatch 3;
tolerance 1.0;
nSolveIter 300;
nRelaxIter 5;
nFeatureSnapIter 10;
implicitFeatureSnap false;
explicitFeatureSnap true;
multiRegionFeatureSnap true;
}
addLayersControls
{
relativeSizes true;
layers
{
"cylinder*"
{
nSurfaceLayers 5;
}
}
expansionRatio 1.2;
finalLayerThickness 0.3;
minThickness 0.25;
nGrow 0;
featureAngle 30;
nRelaxIter 5;
nSmoothSurfaceNormals 1;
nSmoothNormals 3;
nSmoothThickness 10;
maxFaceThicknessRatio 0.5;
maxThicknessToMedialRatio 0.3;
minMedianAxisAngle 90;
nBufferCellsNoExtrude 0;
nLayerIter 50;
nRelaxedIter 20;
}
meshQualityControls
{
#include "meshQualityDict"
relaxed
{
maxNonOrtho 75;
}
}
writeFlags
(
scalarLevels // write volScalarField with cellLevel for postprocessing
layerSets // write cellSets, faceSets of faces in layer
layerFields // write volScalarField for layer coverage
);
mergeTolerance 1E-6;
// ************************************************************************* //
Das Erklären aller Parameter wäre kompliziert, daher werde ich kurz die Parameter erläutern, die mir in meiner Erfahrung wichtig waren (oder besser gesagt, es gibt einige Parameter, die ich nie berührt habe).
CastellatedMesh, snap und addLayers unmittelbar nach FoamFile sind Parameter, die bestimmen, ob jeder Prozess ausgeführt werden soll. Wenn Sie das Grenzschichtnetz nicht ausschneiden, setzen Sie addLayers auf false. Dieses Mal wird auch das Grenzschichtnetz geschnitten, sodass alle auf true gesetzt sind.
Geben Sie im Geometriewörterbuch die zu lesende CAD-Datei an. Zylinder ist der Name der Grenze (Patch) der STL-Datei, und Sie können sie beliebig benennen. In diesem Fall ist das Pflaster die Oberfläche des Zylinders. Der hier angegebene Name wird unten verwendet. Der Typ ist triSurfaceMesh und die Datei istylinder.stl in triSurface.
castellatedMeshControls ist ein Einstellungswörterbuch für die Entfernungsverarbeitung außerhalb des Berechnungsbereichs. Je größer die Anzahl der nCellsBetweenLevels ist, desto höher ist die Auflösung um die Oberfläche. Ich habe es auf 3 ~ 4 gesetzt. locationInMesh legt die Koordinaten eines Teils des Bereichs fest, in dem Sie ein Netz erstellen möchten. Mit anderen Worten, irgendwo innerhalb des Hintergrundnetzes und außerhalb des Zylinders. Wenn Sie die Innenseite des Zylinders angeben, wird das Netz innerhalb des Zylinders erstellt und die Außenseite entfernt. refinementSurfaces ist ein Parameter, der für jeden Patch festgelegt wird. Geben Sie die minimale und maximale (min max) Auflösung für jeden Patch an. Ich habe beide auf ungefähr 2 gesetzt.
snapControls ist ein Einstellungswörterbuch für die Snap-Verarbeitung, das ich jedoch nie berührt habe.
addLayersControl ist ein Einstellungswörterbuch für die Verarbeitung von addLayers. Wenn relativeSizes wahr ist, wird die Gitterbreite innerhalb der Grenzschicht gemäß dem Gitter außerhalb der Grenzschicht berechnet. Geben Sie im Ebenenwörterbuch die Anzahl der Ebenen für jeden Patch an. Der Grund, warum der Patch-Name ein Platzhalter "Zylinder *" ist, ist, dass er nur dann ordnungsgemäß verarbeitet wird, wenn er "[im Geometriewörterbuch angegebener Patch-Name] *" ist. Für einen OpenFOAM-Anfänger wie mich war es ein schwieriger Teil. expansionRatio ist das Gitterbreitenverhältnis zwischen Schichten.
Führen Sie nach der Bearbeitung snappyHexMesh aus.
cylinder$ snappyHexMesh
Wenn Sie fertig sind, werden drei neue Verzeichnisse mit numerischen Namen erstellt. Das PolyMesh-Verzeichnis, das den Hauptteil des erstellten Netzes darstellt, ist in dem Verzeichnis mit der größten Nummer enthalten. Bitte kopieren Sie dieses Verzeichnis und fügen Sie es für die Flüssigkeitsanalyse in das Verzeichnis * constant * des Jobs ein.
das Ende.
Recommended Posts