T731_010 snappyHexMesh flange

この記事は約20分で読めます。

OpenFoamのサンプル確認（パラメータやキーワードの覚書）です。

チュートリアルフォルダ：チュートリアル場所（windows）

snappyHexMeshの作業になります。

ベース

バージョン : WINDOWS v2206

引用元

<チュートリアルフォルダ>\mesh\snappyHexMesh\flange

▼ジオメトリファイル

<チュートリアルフォルダ>\resources\geometry\flange.stl.gz

作業

//チュートリアルからサンプルをコピーしておきます。//
//stlのファイルもコピーしておきます。位置は下記参照。

//コマンド:メッシュ作成
blockMesh

//コマンド実行
surfaceFeatureExtract

//スナッピー//　※エラー発生のためファイル修正
snappyHexMesh -overwrite

//ParaView用VTK変換//
foamToVTK

※snappyHexMeshDictファイルを編集
（最終行）mergeTolerance 1E-6;　→　mergeTolerance 1E-5;

全体構造

stlの形状ファイルを用意する必要があります。

flange
├ constant
│ └ triSurface
│    └ flange.stl.gz
├ system
│ ├ blockMeshDict
│ ├ controlDict
│ ├ decomposeParDict
│ ├ fvSchemes
│ ├ fvSolution
│ ├ meshQualityDict
│ ├ snappyHexMeshDict
│ └ surfaceFeatureExtractDict
├ Allclean
└ Allrun


system

blockMeshDict

scale   1;

vertices
(
( -0.03 -0.03 -0.03)
(  0.03 -0.03 -0.03)
(  0.03  0.03 -0.03)
( -0.03  0.03 -0.03)
( -0.03 -0.03 0.01)
(  0.03 -0.03 0.01)
(  0.03  0.03 0.01)
( -0.03  0.03 0.01)
);

blocks
(
hex (0 1 2 3 4 5 6 7) (20 16 12) simpleGrading (1 1 1)
);

edges
(
);

boundary
(
allBoundary
{
type patch;
faces
(
(3 7 6 2)
(0 4 7 3)
(2 6 5 1)
(1 5 4 0)
(0 3 2 1)
(4 5 6 7)
);
}
);

controlDict

application     snappyHexMesh;

startFrom       startTime;

startTime       0;

stopAt          endTime;

endTime         50;

deltaT          1;

writeControl    timeStep;

writeInterval   20;

purgeWrite      0;

writeFormat     ascii;

writePrecision  6;

writeCompression off;

timeFormat      general;

timePrecision   6;

runTimeModifiable yes;

meshQualityDict

// Include defaults parameters from master dictionary
#includeEtc "caseDicts/meshQualityDict"

snappyHexMeshDict

FoamFile
{
version     2.0;
format      ascii;
class       dictionary;
object      snappyHexMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

// Which of the steps to run
castellatedMesh true;
snap            true;

// Geometry. Definition of all surfaces. All surfaces are of class
// searchableSurface.
// Surfaces are used
// - to specify refinement for any mesh cell intersecting it
// - to specify refinement for any mesh cell inside/outside/near
// - to 'snap' the mesh boundary to the surface
geometry
{
flange.stl
{
type triSurfaceMesh;
name flange;
}

//- Refine a bit extra around the small centre hole
refineHole
{
type    sphere;
origin  (0 0 -0.012);
}
}

// Settings for the castellatedMesh generation.
castellatedMeshControls
{

// Refinement parameters
// ~~~~~~~~~~~~~~~~~~~~~

// If local number of cells is >= maxLocalCells on any processor
// switches from from refinement followed by balancing
// (current method) to (weighted) balancing before refinement.
maxLocalCells 100000;

// Overall cell limit (approximately). Refinement will stop immediately
// upon reaching this number so a refinement level might not complete.
// Note that this is the number of cells before removing the part which
// is not 'visible' from the keepPoint. The final number of cells might
// actually be a lot less.
maxGlobalCells 2000000;

// The surface refinement loop might spend lots of iterations refining just a
// few cells. This setting will cause refinement to stop if <= minimumRefine
// are selected for refinement. Note: it will at least do one iteration
// (unless the number of cells to refine is 0)
minRefinementCells 0;

// Number of buffer layers between different levels.
// 1 means normal 2:1 refinement restriction, larger means slower
// refinement.
nCellsBetweenLevels 1;

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

// Specifies a level for any cell intersected by its edges.
// This is a featureEdgeMesh, read from constant/triSurface for now.
features
(
{
file "flange.extendedFeatureEdgeMesh";
level 0;
}
);

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

// Specifies two levels for every surface. The first is the minimum level,
// every cell intersecting a surface gets refined up to the minimum level.
// The second level is the maximum level. Cells that 'see' multiple
// intersections where the intersections make an
// angle > resolveFeatureAngle get refined up to the maximum level.

refinementSurfaces
{
flange
{
// Surface-wise min and max refinement level
level (2 2);
}
}

resolveFeatureAngle 30;

// Region-wise refinement
// ~~~~~~~~~~~~~~~~~~~~~~

// Specifies refinement level for cells in relation to a surface. One of
// three modes
// - distance. 'levels' specifies per distance to the surface the
//   wanted refinement level. The distances need to be specified in
//   descending order.
// - inside. 'levels' is only one entry and only the level is used. All
//   cells inside the surface get refined up to the level. The surface
//   needs to be closed for this to be possible.
// - outside. Same but cells outside.

refinementRegions
{
refineHole
{
mode inside;
levels ((1E15 3));
}
}

// Mesh selection
// ~~~~~~~~~~~~~~

// After refinement patches get added for all refinementSurfaces and
// all cells intersecting the surfaces get put into these patches. The
// section reachable from the locationInMesh is kept.
// NOTE: This point should never be on a face, always inside a cell, even
// after refinement.
// This is an outside point locationInMesh (-0.033 -0.033 0.0033);
locationInMesh (-9.23149e-05 -0.0025 -0.0025); // Inside point

// Whether any faceZones (as specified in the refinementSurfaces)
// are only on the boundary of corresponding cellZones or also allow
// free-standing zone faces. Not used if there are no faceZones.
allowFreeStandingZoneFaces true;
}

// Settings for the snapping.
snapControls
{
//- Number of patch smoothing iterations before finding correspondence
//  to surface
nSmoothPatch 3;

//- Relative distance for points to be attracted by surface feature point
//  or edge. True distance is this factor times local
//  maximum edge length.
tolerance 1.0;

//- Number of mesh displacement relaxation iterations.
nSolveIter 300;

//- Maximum number of snapping relaxation iterations. Should stop
//  before upon reaching a correct mesh.
nRelaxIter 5;

// Feature snapping

//- Number of feature edge snapping iterations.
//  Leave out altogether to disable.
nFeatureSnapIter 10;

//- Detect (geometric) features by sampling the surface
implicitFeatureSnap false;

//- Use castellatedMeshControls::features
explicitFeatureSnap true;

//- Detect features between multiple surfaces
//  (only for explicitFeatureSnap, default = false)
multiRegionFeatureSnap true;
}

// Settings for the layer addition.
{
// Are the thickness parameters below relative to the undistorted
// size of the refined cell outside layer (true) or absolute sizes (false).
relativeSizes true;

// Per final patch (so not geometry!) the layer information
layers
{
"flange_.*"
{
nSurfaceLayers 1;
}
}

// Expansion factor for layer mesh
expansionRatio 1.0;

// Wanted thickness of final added cell layer. If multiple layers
// is the thickness of the layer furthest away from the wall.
// Relative to undistorted size of cell outside layer.
// See relativeSizes parameter.
finalLayerThickness 0.3;

// Minimum thickness of cell layer. If for any reason layer
// cannot be above minThickness do not add layer.
// See relativeSizes parameter.
minThickness 0.25;

// If points get not extruded do nGrow layers of connected faces that are
// also not grown. This helps convergence of the layer addition process
// close to features.
nGrow 0;

// When not to extrude surface. 0 is flat surface, 90 is when two faces
// are perpendicular
featureAngle 30;

// Maximum number of snapping relaxation iterations. Should stop
// before upon reaching a correct mesh.
nRelaxIter 5;

// Number of smoothing iterations of surface normals
nSmoothSurfaceNormals 1;

// Number of smoothing iterations of interior mesh movement direction
nSmoothNormals 3;

// Smooth layer thickness over surface patches
nSmoothThickness 10;

// Stop layer growth on highly warped cells
maxFaceThicknessRatio 0.5;

// Reduce layer growth where ratio thickness to medial
// distance is large
maxThicknessToMedialRatio 0.3;

// Angle used to pick up medial axis points
minMedialAxisAngle 90;

// Create buffer region for new layer terminations
nBufferCellsNoExtrude 0;

// Overall max number of layer addition iterations. The mesher will exit
// if it reaches this number of iterations; possibly with an illegal
// mesh.
nLayerIter 50;

// Max number of iterations after which relaxed meshQuality controls
// get used. Up to nRelaxIter it uses the settings in meshQualityControls,
// after nRelaxIter it uses the values in meshQualityControls::relaxed.
nRelaxedIter 20;
}

// Generic mesh quality settings. At any undoable phase these determine
// where to undo.
meshQualityControls
{
#include "meshQualityDict"

// Optional : some meshing phases allow usage of relaxed rules.
relaxed
{
//- Maximum non-orthogonality allowed. Set to 180 to disable.
maxNonOrtho 75;
}

//- Number of error distribution iterations
nSmoothScale 4;
//- Amount to scale back displacement at error points
errorReduction 0.75;
}

// Write flags
writeFlags
(
scalarLevels    // write volScalarField with cellLevel for postprocessing
layerSets       // write cellSets, faceSets of faces in layer
layerFields     // write volScalarField for layer coverage
);

// Merge tolerance. Is fraction of overall bounding box of initial mesh.
// Note: the write tolerance needs to be higher than this.
mergeTolerance 1E-5;

// ************************************************************************* //


surfaceFeatureExtractDict

flange.stl
{
// How to obtain raw features (extractFromFile || extractFromSurface)
extractionMethod    extractFromSurface;

// Mark edges whose adjacent surface normals are at an angle less
// than includedAngle as features
// - 0  : selects no edges
// - 180: selects all edges
includedAngle       150;

// Write options

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

スポンサーリンク

Slide
Slide
Slide

Slide

シェアする
CAEなど工房

Translate »
タイトルとURLをコピーしました