*[[SnappyHexMesh]] [#d5674751] [[OpenFOAM:http://www.openfoam.org]]でメッシュを作成するツールの1つであるSnappyHexMeshについて説明します。 -3次元の(多面体要素からなる)ヘキサ-ドミナントメッシュを自動生成します。 -形状の特徴線を保存します。 -境界層を入れることができます。 -並列化されており、高速にメッシュを作成することが可能です。 ** 表面メッシュ [#lae95520] 形状データは三角形の表面メッシュ(STL, Nastran, OBJなど)です。 constant/triSurfaceで設定します。 #ref(triSurface.png,center,nowrap,60%,triSurface); ** 初期メッシュ [#x7be5e08] blockMeshなどで、オクトツリーの根になる初期メッシュ(6面体)を作成します。 #ref(initial_mesh.png,center,nowrap,60%,initial_mesh); ** オクトツリーによる細分 [#e6ca1dce] -表面形状による細分(特徴性、曲率) -体積形状による細分(閉じた空間、幾何形状) を指定して、初期メッシュを細分します。 #ref(refinement.png,center,nowrap,60%,refinement); ** 使用しない領域のメッシュを削除 [#w187030d] keep pointで、残す領域を指定して、計算領域以外のボリュームメッシュを削除します。 #ref(removeUnusedCells.png,center,nowrap,60%,removeUnusedCells); #ref(castellatedMesh.png,center,nowrap,60%,castellatedMesh); ** スナッピング [#ud3f77ac] スナッピングではpatch面を表面形状上に射影します。 #ref(snappying.png,center,nowrap,60%,snappying); #ref(snnapedMesh.png,center,nowrap,60%,snnapedMesh); スナッピングの設定は、snapControls sub-dictionaryで行います。 #code(c){{ snapControls { nSmoothPatch 3; tolerance 1.0; nSolveIter 300; nRelaxIter 5; nFeatureSnapIter 10; } }} nSmoothPatch 3; 面上に射影する前に、パッチ点をスムージングする回数 toleracne 1.0; 面に近づけるための最大辺長の倍率 nSolverIter 300; スナッピングした変形場に適用するスムージングの回数 nRelaxIter 5; 誤差を減らすための倍率を戻す再の繰り返し数 nFeatureSnapIter 10; 特徴線上にスナッピングするときの繰り返し数 ** 境界層 [#p546c358] 境界層入れる手順は以下の通りです。 + 面に垂直な方向に、指定した厚さだけメッシュを縮めます。 + 内部メッシュにスムージングをかけます。 + メッシュが正当性基準を満たしているかチェックします。満たしていない場合は、縮める距離を減らし、2番に戻ります。どのように縮めても、基準を満たさない場合は、境界層を入れるのを断念します。 + メッシュが基準を満たす場合は、境界層を入れます。 + 最後にメッシュをチェックします。チェックに失敗した場合は、境界層を取り除き、2番に戻ります。 snappyHexMeshDictのaddLayersControls サブ・ディクショナリーで境界層の設定を行います。 nLayerIter 境界層を追加するための最大繰り返し数