Cet article explique comment créer un maillage pour OpenFOAM à l'aide de l'utilitaire snappyHexMesh. snappyHexMesh est un utilitaire pour créer un maillage hexagonal à partir d'un fichier STL. Il est possible de créer un fichier STL de votre forme préférée avec la CAO, etc. et de créer un maillage de cette forme. Pour des raisons d'explication, définissons le nom du répertoire de travail sur * cylindre * et créons un maillage qui circule autour du cylindre.
Je l'explique également dans la vidéo. https://www.youtube.com/watch?v=bas-5wbHOoY
C'est une image complète. Les dimensions du bloc sont Lx = 0,28 m, Ly = 0,12 m, Lz = 0,1 m, et l'origine est l'intersection de l'axe central du cylindre et du plan xy.
Détails de la surface cylindrique. Coupez également la couche limite.
L'utilitaire snappyHexMesh se compose de trois étapes: castllatedMesh, snap et addLayers, et le traitement du contenu revient à supprimer l'extérieur de la zone, à améliorer la précision de la surface frontière et à générer un maillage pour la couche limite. Image comme ci-dessous.
Pour l'exécuter, vous devez préparer deux fichiers de géométrie, tels qu'un maillage d'arrière-plan hexaédrique et un format stl cohérent avec cela. Un exemple de situation conflictuelle est que le fichier de géométrie est plus volumineux que le maillage d'arrière-plan. Le maillage d'arrière-plan peut être créé avec blockMesh et le fichier de géométrie peut être créé avec CAD. Cet article est créé avec FreeCAD.
Cet article n'explique pas tout de snappyHexMesh, donc si vous souhaitez connaître les spécifications détaillées, veuillez vous référer à ce qui suit. https://cfd.direct/openfoam/user-guide/v7-snappyhexmesh/#x27-1970005.4
procédure
** Structure du répertoire au début des travaux **
Préparez les répertoires et les fichiers comme suit. Avec OpenFOAM v7 /opt/openfoam7/tutorials/mesh/snappyHexMesh Si vous en sélectionnez un dans les exemples de répertoires et que vous le copiez et collez, vous n'avez pas à modifier controlDict, fvSchemes, fvSolution, meshQualityDict, c'est donc facile.
cylinder/
├── constant/
│ └── triSurface/
└── system/
├── blockMeshDict
├── controlDict
├── fvSchemes
├── fvSolution
├── meshQualityDict
└── snappyHexMeshDict
Modifiez * cylindre / système / blocMeshDict * comme suit.
/*--------------------------------*- 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
(
);
// ************************************************************************* //
Il n'y a aucune restriction particulière sur le nom du patch ou le nombre de divisions de maillage. Après avoir édité * blockMeshDict *, exécutez blockMesh.
cylinder$ blockMesh
Vous venez de créer un maillage d'arrière-plan. Le corps principal est situé dans * cylindre / constante / polymesh *.
Ensuite, créez un cylindre avec FreeCAD. Je le crée sous Windows.
Le diamètre est de 0,04 m. La hauteur ne doit pas dépasser Lz, elle doit donc être de 0,1 m. Cependant, si vous exportez depuis FreeCAD au format stl, la taille augmentera 1000 fois selon les spécifications, vous devez donc la créer sur FreeCAD avec un diamètre de 0,04 mm et une hauteur de 0,1 mm. snappyHexMesh a une spécification que le système de coordonnées du maillage d'arrière-plan et le système de coordonnées du fichier CAO correspondent. Si vous souhaitez contrôler la position du cylindre, vous devez faire attention au système de coordonnées.
Exemple de création
Sortez-le avec le nom cylindre.stl et placez-le dans * cylindre / constante / triSurface *.
Réglez * cylindre / système / snapyHexMeshDict * comme suit.
/*--------------------------------*- 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;
// ************************************************************************* //
Expliquer tous les paramètres serait compliqué, je vais donc expliquer brièvement les paramètres que j'ai sentis importants dans mon expérience (ou plutôt, il y a pas mal de paramètres que je n'ai jamais touchés).
CastellatedMesh, snap et addLayers immédiatement après FoamFile sont des paramètres qui déterminent s'il faut exécuter chaque processus. Si vous ne coupez pas le maillage de la couche limite, définissez addLayers sur false. Cette fois, le maillage de la couche limite est également coupé, donc tous sont définis sur true.
Dans le dictionnaire de géométrie, spécifiez le fichier CAO à lire. cylindre est le nom de la limite (patch) du fichier stl, et vous pouvez le nommer comme vous le souhaitez. Dans ce cas, le patch est la surface du cylindre. Le nom donné ici sera utilisé en bas. Le type est triSurfaceMesh et le fichier est Cylindre.stl placé dans triSurface.
castellatedMeshControls est un dictionnaire de paramètres pour le traitement de suppression en dehors de la zone de calcul. Plus le nombre de nCellsBetweenLevels est élevé, plus la résolution autour de la surface est élevée. Je l'ai réglé sur 3 ~ 4. locationInMesh définit les coordonnées d'une partie de la zone où vous souhaitez créer un maillage. En d'autres termes, quelque part à l'intérieur du maillage d'arrière-plan et à l'extérieur du cylindre. Si vous spécifiez l'intérieur du cylindre, le maillage à l'intérieur du cylindre sera créé et l'extérieur sera supprimé. refinementSurfaces est un paramètre à définir pour chaque patch. Spécifiez les résolutions minimale et maximale (min max) pour chaque patch. J'ai mis les deux à environ 2.
snapControls est un dictionnaire de paramètres pour le traitement des snap, mais je n'y ai jamais touché.
addLayersControl est un dictionnaire de paramètres pour le traitement des addLayers. Si relativeSizes est vrai, la largeur du treillis à l'intérieur de la couche limite sera calculée en fonction du treillis à l'extérieur de la couche limite. Dans le dictionnaire des couches, spécifiez le nombre de couches pour chaque patch. Le nom du patch est joker comme "cylindre *" car il ne sera pas traité correctement à moins qu'il ne soit "[nom du patch spécifié dans le dictionnaire de géométrie] *". C'était une partie difficile pour un débutant OpenFOAM comme moi. expansionRatio est le rapport de largeur de réseau entre les couches.
Après l'édition, exécutez snappyHexMesh.
cylinder$ snappyHexMesh
Une fois terminé, trois nouveaux répertoires avec des noms numériques seront créés. Le répertoire polyMesh, qui est le corps principal du maillage créé, est contenu dans le répertoire avec le plus grand nombre. Veuillez copier et coller ce répertoire dans le répertoire * constant * du travail pour l'analyse des fluides.
la fin.
Recommended Posts