SnappyHexMesh

OpenFOAMでメッシュを作成するツールの1つであるSnappyHexMeshについて説明します。

表面メッシュ

形状データは三角形の表面メッシュ(STL, Nastran, OBJなど)です。constant/triSurfaceで設定します。

triSurface

初期メッシュ

blockMeshなどで、オクトツリーの根になる初期メッシュ(6面体)を作成します。

initial_mesh

オクトツリーによる細分

を指定して、初期メッシュを細分します。

表面形状、体積形状の指定はsystem/snappyHexMeshDictのgeometryで行います。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 
-
|
-
|
|
!
|
|
-
|
|
|
!
!
geometry
{
    motorBike.obj
    {
        type triSurfaceMesh;
        name motorBike;
    }
 
    refinementBox
    {
        type searchableBox;
        min (-1.0 -0.7 0.0);
        max ( 8.0  0.7 2.5);
    }
};

このgeometryで指定した表面メッシュは以下のために使用されます:

下図は、refinementBoxによる細分化の例です。

refinement

また、細分化に使用するパラメータは、system/snappyHexMeshDictのcastellatedMeshControlsに記述します。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 
-
-
|
!
|
|
|
|
|
|
|
|
|
-
|
!
|
-
|
|
!
|
|
-
|
!
-
|
-
-
!
|
-
|
!
-
|
|
!
!
!
|
|
|
-
|
!
-
|
-
|
|
!
!
|
-
|
!
|
|
!
 
castellatedMeshControls
{
    // Refinement parameters
    // ~~~~~~~~~~~~~~~~~~~~~
    maxLocalCells 100000;
 
    maxGlobalCells 2000000;
 
    minRefinementCells 10;
 
    maxLoadUnbalance 0.10;
 
    nCellsBetweenLevels 3;
 
    // Explicit feature edge refinement
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    features
    (
        {
            file "motorBike.eMesh";
            level 6;
        }
    );
 
    // Surface based refinement
    // ~~~~~~~~~~~~~~~~~~~~~~~~
    refinementSurfaces
    {
        motorBike
        {
            // Surface-wise min and max refinement level
            level (5 6);
 
            // Optional specification of patch type (default is wall). No
            // constraint types (cyclic, symmetry) etc. are allowed.
            patchInfo
            {
                type wall;
                inGroups (motorBikeGroup);
            }
        }
    }
 
    resolveFeatureAngle 30;
 
    // Region-wise refinement
    // ~~~~~~~~~~~~~~~~~~~~~~
    refinementRegions
    {
        refinementBox
        {
            mode inside;
            levels ((1E15 4));
        }
    }
 
    // Mesh selection
    // ~~~~~~~~~~~~~~
    locationInMesh (3.0001 3.0001 0.43);
 
    allowFreeStandingZoneFaces true;
}

refinementSurfacesの

 level (5 6);

levelは細分化のレベルを(最小レベル, 最大レベル)で指定します。

使用しない領域のメッシュを削除

keep pointで、残す領域を指定して、計算領域以外のボリュームメッシュを削除します。

removeUnusedCells
castellatedMesh

スナッピング

スナッピングではpatch面を表面形状上に射影します。

snappying
snnapedMesh

スナッピングの設定は、system/snappyHexMeshDictのsnapControlsで行います。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 
-
|
|
|
|
|
|
|
|
|
!
 
snapControls
{
    nSmoothPatch 3;
 
    tolerance 1.0;
 
    nSolveIter 300;
 
    nRelaxIter 5;
 
    nFeatureSnapIter 10;
}
 nSmoothPatch 3;

面上に射影する前に、パッチ点をスムージングする回数

 toleracne 1.0;

面に近づけるための最大辺長の倍率

 nSolverIter 300;

スナッピングした変形場に適用するスムージングの回数

 nRelaxIter 5;

誤差を減らすための倍率を戻す再の繰り返し数

 nFeatureSnapIter 10;

特徴線上にスナッピングするときの繰り返し数

境界層

境界層入れる手順は以下の通りです。

  1. 面に垂直な方向に、指定した厚さだけメッシュを縮めます。
  2. 内部メッシュにスムージングをかけます。
  3. メッシュが正当性基準を満たしているかチェックします。満たしていない場合は、縮める距離を減らし、2番に戻ります。どのように縮めても、基準を満たさない場合は、境界層を入れるのを断念します。
  4. メッシュが基準を満たす場合は、境界層を入れます。
  5. 最後にメッシュをチェックします。チェックに失敗した場合は、境界層を取り除き、2番に戻ります。

境界層の設定は、system/snappyHexMeshDictのaddLayersControlsで行います。

 nLayerIter

境界層を追加するための最大繰り返し数


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS