
コンテンツ
OpenFOAMの基本的な使い方はこちらから
OpenFOAMの基本的な使い方はこちらの記事を参照ください。>>>OpenFoamではじめての流体解析 まずはキャビティ流れを確認する
今回のゴール
今回はSnappyHexMeshを使用しますが、設定項目が多くて初心者にはとっつきにくいところがあります。まずは最適なメッシュ設定を見つけるというよりも、設定をかえたときにどのようなメッシュが切られるかを確認したいと思います。
尚、本シリーズはOpenFoamの使い方に慣れることを目的としているので、解析の正確性などを保証するものではなく、設定を変更して流体の流れを変えること。この実現をゴールとします。(試行錯誤して行っていますので余計な記載や、変更が十分でないところがあることご了承願います。また環境やバージョンによって結果が異なる可能性もあります。)
STLファイルを準備する
FreeCadを用いてSTLファイルを準備します。今回は100×40×10の立方体を作成し、その中央付近に円柱を配置しました。STLのエクスポートは、inlet、outlet、walls、cylinderと4種類に分けています。
geometry
{
walls.stl
{
type triSurfaceMesh;
name walls;
}
cylinder.stl
{
type triSurfaceMesh;
name cylinder;
}
inlet.stl
{
type triSurfaceMesh;
name inlet;
}
outlet.stl
{
type triSurfaceMesh;
name outlet;
}
}
BlockMeshDictの設定
BlockMeshでの分割数は取り合えず(100 40 10)にしました。
blocks
(
hex (0 1 2 3 4 5 6 7) (100 40 10) simpleGrading (1 1 1)
);
SnappyHexMesh 設定1
準備が整ったので、実際にメッシュを切っていきましょう。SnappyHexMeshは大きくは次の3つに分かれています。
snapとaddLayerは一旦FalseにしてcastellatedMeshのみを使用します。
castellatedMesh true;
snap false;
addLayers false;
そして、castellatedMeshのなかのfeaturesとrefinementSurfacesの2つのパラーメータを使ってみましょう。両方ともゼロの設定からはじめます。
features
(
{
file "walls.eMesh";
level 0;
}
{
file "cylinder.eMesh";
level 0;
}
{
file "inlet.eMesh";
level 0;
}
{
file "outlet.eMesh";
level 0;
}
);
refinementSurfaces
{
walls
{
level (0 0);
}
cylinder
{
level (0 0);
}
inlet
{
level (0 0);
}
outlet
{
level (0 0);
}
}
結果はこちら。ガタガタですね。背景メッシュピッチのまま円柱もメッシュが切られてます。
SnappyHexMesh 設定2
もうすこし細かくしたいので、featuresパラメーターを触ってみましょう。さきほどの設定1のパラメータからfeatures_”cylinder.eMesh”のところだけを変更しました。
{
file "cylinder.eMesh";
level 3;
}
細かくはなりましたが、メッシュがきれいに切られているとは言い難いです。それに内部は依然ガタガタしています。
SnappyHexMesh 設定3
featuresではなく、refinementSurfacesで調整してましょう。featuresのレベルはゼロに戻しておきます。
{
file "cylinder.eMesh";
level 0;
}
refinementSurfaces
{
walls
{
level (0 0);
}
cylinder
{
level (2 4);
}
inlet
{
level (0 0);
}
outlet
{
level (0 0);
}
}
ガタガタはしてますが、先ほどに比べると良くなりましたね。
SnappyHexMesh 設定4
さすがにcastellatedMeshでは、思い通りの形状にできないので次はsnapも使ってみようと思います。(castellatedMeshは、refinementSurfaces_level (2 4)のままです)
snapの設定はほぼデフォルトのままです。
castellatedMesh true;
snap true;
addLayers false;
snapControls
{
nSmoothPatch 3;
tolerance 2.0;
nSolveIter 30;
nRelaxIter 5;
nFeatureSnapIter 10;
implicitFeatureSnap false;
explicitFeatureSnap true;
multiRegionFeatureSnap false;
}
ガタガタがなくなり、きれいな円形にすることができましたね。
SnappyHexMesh 設定5
次はAdd Layerで境界層を追加してみようと思います。設定4のままAdd Layerを有効にします。Add Layerの設定はほぼデフォルトのままです。
castellatedMesh true;
snap true;
addLayers true;
addLayersControls
{
relativeSizes true;
layers
{
"cylinder*"
{
nSurfaceLayers 3;
}
}
expansionRatio 1.0;
finalLayerThickness 0.3;
minThickness 0.1;
nGrow 0;
featureAngle 60;
slipFeatureAngle 30;
nRelaxIter 3;
nSmoothSurfaceNormals 1;
nSmoothNormals 3;
nSmoothThickness 10;
maxFaceThicknessRatio 0.5;
maxThicknessToMedialRatio 0.3;
minMedialAxisAngle 90;
nBufferCellsNoExtrude 0;
nLayerIter 50;
}
設定通り、3層のレイヤーが追加されました。
SnappyHexMesh 設定6
設定5までで、十分な精細さをもち且つ形状に沿ったメッシュを切ることができましたが、無駄に細かすぎる感もあるのでもう少し調整してみましょう。
設定5からの違いは、castellatedMesh、refinementSurfacesのlevel (0 0)に変更しただけです。
cylinder
{
level (0 0);
}
レベルを落としたため、すっきりとさせることができました。形状にも沿っていますね。
このようにsnappyHexMeshは、設定ファイルを通じてカスタマイズすることができます。メッシュ精細化や最適化のパラメータを調整することで、STL形状に合わせたメッシュを生成することができそうですね。ただ、設定項目が多いので望みのメッシュ形状を得るまでに色々と試行錯誤する必要はあるかもです。触っている感触としては細分化を組み合わせるとあまりいい結果にならないように感じます。必要最低限の設定項目で調整するというほうが良いかも。