計算メッシュの作成
サンプルモデル ベース・メッシュの準備
ベース・メッシュから
CAD 形状にあったメッシュを抜き出して 必要に応じて詳細メッシュ化、
サーフェス上へのレイヤーセルの追加を行う
レイヤーセルの 追加
CAD に合わせて メッシュを抜き出し
メッシュの詳細化
計算メッシュの作成
snappyHexMeshDict の内容 (1)
FoamFile {
version 2.0;
format ascii;
class dictionary;
location system;
object snappyHexMeshDict;
}
// * * * * * * * * * * * * * * * // running steps
castellatedMesh true;
snap true;
addLayers true;
Geometry {
Throttle.stl
{ type triSurfaceMesh;
name Thrittle;
}
pipeWall.stl
{ type triSurfaceMesh;
name pipeWall;
}
Inlet.stl
{ type triSurfaceMesh;
name Inlet;
}
Outlet.stl
{ type triSurfaceMesh;
name Outlet;
}
計算メッシュの作成
snappyHexMeshDict の内容 (2)
densityBox0
{ type searchableBox;
min (-1.0 -2.0 0.0);
max (10.0 2.0 3.0);
castellatedMeshControls {
maxLocalCells 15000000;
maxGlobalCells 40000000;
maxLoadUnbalance 0.10;
minRefinementCells 0;
nCellsBetweenLevels 3;
resolveFeatureAngle 30;
features ( );
計算メッシュの作成
snappyHexMeshDict の内容 (3)
refinementSurfaces {
Throttle
{ level (9 9); } pipeWall
{ level (9 9); } Inlet
{ level (9 9); } Outlet
{ level (9 9); } }
refinementRegions {
densityBox0
{ mode inside;
levels ((1E15 6));
}
locationInMesh
(9.0001 0.0001 1.0001);
allowFreeStandingZoneFaces true;
snapControls {
nSmoothPatch 3;
tolerance 1.0;
nSolveIter 300;
nRelaxIter 5;
nFeatureSnapIter 10;
implicitFeatureSnap true;
explicitFeatureSnap false;
multiResionFeatureSnap true;
}
計算メッシュの作成
snappyHexMeshDict の内容 (4)
addLayersControls {
relativeSizes false;
layers
{ Throttle_surf
{ nSurfaceLayers 1; } pipeWall_surf
{ nSurfaceLayers 1; } }
finalLayerThickness .0008000;
expansionRatio 1.0;
minThickness .0004000;
nGrow 0;
featureAngle 90;
nSmoothSurfaceNormals 1;
nSmoothNormals 3;
nSmoothThickness 10;
maxFaceThicknessRatio 0.5;
maxThicknessToMedialRatio 0.3;
//
minMedianAxisAngle 80;
nBufferCellsNoExtrude 0;
nLayerIter 50;
meshQualityControls::relaxed.;
nRelaxedIter 20;
nRelaxIter 5;
}
計算メッシュの作成
snappyHexMeshDict の内容 (5)
meshQualityControls {
maxNonOrtho 65;
maxBoundarySkewness 10;
maxInternalSkewness 4;
maxConcave 80;
minVol 1E-14;
minTetQuality 1e-11;
minFlatness 0.5;
minArea .00000008;
minTwist 0.02;
minDeterminant 0.01;
minFaceWeight 0.02;
minVolRatio 0.01;
minTriangleTwist -1;
//minVolCollapseRatio 0.01;
nSmoothScale 4;
errorReduction 0.75;
relaxed {
maxNonOrtho 65;
} }
debug 0;
mergeTolerance 1E-10;
//
計算メッシュの作成
snappyHexMeshDict の内容 (1)
FoamFile {
version 2.0;
format ascii;
class dictionary;
location system;
object snappyHexMeshDict;
}
// * * * * * * * * * * * * * * * // running steps
castellatedMesh true;
snap true;
addLayers true;
計算メッシュの作成
snappyHexMeshDict の内容 (1)
Geometry {
Throttle.stl
{ type triSurfaceMesh;
name Thrittle;
}
pipeWall.stl
{ type triSurfaceMesh;
name pipeWall;
}
Inlet.stl
{ type triSurfaceMesh;
name Inlet;
}
Outlet.stl
{ type triSurfaceMesh;
name Outlet;
}
CAD等で作った形状データをメッシャに渡す。
STLファイルのデータに名前を関連付ける
計算メッシュの作成
snappyHexMeshDict の内容 (2)
densityBox0
{ type searchableBox;
min (-1.0 -2.0 0.0);
max (10.0 2.0 3.0);
}
簡単な幾何学形状であれば、STLファイルが無くても定義できる ここでは、「searchableBox」キーワードで矩形柱定義している
計算メッシュの作成
snappyHexMeshDict の内容 (2)
castellatedMeshControls {
maxLocalCells 15000000;
maxGlobalCells 40000000;
maxLoadUnbalance 0.10;
minRefinementCells 0;
nCellsBetweenLevels 3;
resolveFeatureAngle 30;
features ( );
}
並列処理(MPI)でメッシュを作成することを前提とした諸設定
1コア当たりのメッシュ生成数の上限
全体のメッシュ生成数の上限
コア間で分担するメッシュ数の不釣り合いが発生したら メッシュ生成中に各コアに再分配する。
この係数は再分配を始める上限
この例では、10%以上不釣り合いになると再分配される
計算メッシュの作成
snappyHexMeshDict の内容 (3)
refinementSurfaces {
Throttle
{ level (9 9); } pipeWall
{ level (9 9); } Inlet
{ level (9 9); } Outlet
{ level (9 9); } }
refinementRegions {
densityBox0
{ mode inside;
levels ((1E15 6));
}
locationInMesh
(9.0001 0.0001 1.0001);
allowFreeStandingZoneFaces true;
ベースメッシュを分割する回数 形状に与えた名前ごとに定義できる。
“level ([通常の分割回数] [角部の分割回数] ) “ で 定義される
指定した形状(名)の内側に対し メッシュの分割回数を一律で定義する
計算空間の中の任意の一点を指定する。
閉空間で区切られている場合、他方の空間にあるメッシュは 計算空間外と認識され、削除される
計算メッシュの作成
snappyHexMeshDict の内容 (3)
snapControls {
nSmoothPatch 3;
tolerance 1.0;
nSolveIter 300;
nRelaxIter 5;
nFeatureSnapIter 10;
implicitFeatureSnap true;
explicitFeatureSnap false;
multiResionFeatureSnap true;
}
メッシュの面を形状面に沿うように変形させる処理に 用いられる定義。
nSolverIterを増やすと形状再現性が改善する
[implicitFeatureSnap] 形状のエッジを探しながら メッシュの面を変形させる機能
[explicitFeatureSnap] 予め*.eMesh形式のファイルでエッジ線を 準備しておき、これにメッシュのエッジを 一致させる機能 事前に不要なエッジを 削除することができる
計算メッシュの作成
snappyHexMeshDict の内容 (4)
addLayersControls {
relativeSizes false;
layers
{ Throttle_surf
{ nSurfaceLayers 1; } pipeWall_surf
{ nSurfaceLayers 1; } }
finalLayerThickness .0008000;
expansionRatio 1.0;
minThickness .0004000;
nGrow 0;
featureAngle 90;
nSmoothSurfaceNormals 1;
nSmoothNormals 3;
nSmoothThickness 10;
maxFaceThicknessRatio 0.5;
maxThicknessToMedialRatio 0.3;
//
壁面近傍の境界層を精度よく再現するために用いる レイヤー・セルの追加作業に用いられる設定 壁面にあるメッシュのサイズに対する比率で指定するか、
直接メートル単位で指定するか、を選択する。
この例では、直接メートル単位で指定している レイヤー・セルを配置する箇所とセルの層数を指定する。
場所の指定は[形状名]_[パート名]で指定する
「パート名」は、STLファイルであればsolid名と一致している 壁面から一番離れたレイヤー・セル一層の厚さ
壁面に接したセルのことではないので注意
空間が狭い場合にどの距離までならレイヤーを追加するか、
という距離を指定。これ以下であればレイヤーが削除される
計算メッシュの作成
snappyHexMeshDict の内容 (4)
minMedianAxisAngle 80;
nBufferCellsNoExtrude 0;
nLayerIter 50;
meshQualityControls::relaxed.;
nRelaxedIter 20;
nRelaxIter 5;
}
レイヤーセルの追加に伴い、歪んだセルの形状を緩和する 処理の繰り返し回数。
増やせばある程度品質が改善する
計算メッシュの作成
snappyHexMeshDict の内容 (5)
meshQualityControls {
maxNonOrtho 65;
maxBoundarySkewness 10;
maxInternalSkewness 4;
maxConcave 80;
minVol 1E-14;
minTetQuality 1e-11;
minFlatness 0.5;
minArea .00000008;
minTwist 0.02;
minDeterminant 0.01;
minFaceWeight 0.02;
minVolRatio 0.01;
minTriangleTwist -1;
//minVolCollapseRatio 0.01;
nSmoothScale 4;
errorReduction 0.75;
セルの非直行性を許容する最大角。
これ以上歪むセルを形状修正の対象にする
メッシュ体積の最低サイズ。
負の体積セルが生成されることを防ぐ メッシュの面に対する最低サイズ
計算メッシュの作成
snappyHexMeshDict の内容 (5)
relaxed {
maxNonOrtho 65;
} }
debug 0;
mergeTolerance 1E-10;
//
計算メッシュの作成
snappyHexMesh の実行
次のようにファイルを配置する コンソールから起動する
ケース・ディレクトリ
constant polyMesh
blockMeshDict
system
controlDict
$> snappyHexMesh -overwrite
単体コア
(CPU)で実行する場合 単体コア
(CPU)で実行する場合
snappyHexMeshDict
fvSchemes fvSolution
decomposeParDict
※並列処理でメッシュを
作成する場合
※並列処理でメッシュを
作成する場合
hostfile
$>decomposePar -constant
$>foamJob –p snappyHexMesh ¥ –overwrite
$>reconstructParMesh -constant
複数コアで実行する場合
(MPI)複数コアで実行する場合
(MPI)計算条件の設定
境界条件
境界条件と計算結果は同じファイルに保存される
constant polyMesh
blockMeshDict
system
controlDict
snappyHexMeshDict
fvSchemes
fvSolution decomposeParDict
※並列処理でメッシュを 作成する場合
※並列処理でメッシュを 作成する場合
ケース・ディレクトリ
0
p:圧力
U:速度
k:乱流エネルギ
epsilon:乱流
散逸率
サンプル・モデルの境界条件
サンプルモデル ~境界条件
U: 0m/sec P: zero 勾配
U: 0m/sec
P: zero 勾配
計算条件の設定
境界条件
乱流のパラメータの決め方
乱流エネルギー [k] ここで、 U は流入流速 I は乱流強度
乱流強度のめやす:
・高速、圧縮性、内部流などのケース: 5 ~ 20%
・非圧縮性~弱圧縮性などのケース: 1 ~ 5%
・外部流などのケース : 1% 程度
( )
22 3 UI k =
乱流散逸率 [ε] ここで、 Cµ は乱流モデル定数 l は乱流長さスケール
乱流長さスケールのめやす:
・通常は水力直径:等価面積の円の直径の、 3.8% 程度
・流入面の境界層厚さの 22% という方法もある l
C k
2 3
ε =
µ計算条件の設定
境界条件 U
FoamFile {
version 2.0;
format ascii;
class volVectorField;
object U;
}
dimensions [0 1 -1 0 0 0 0];
internalField uniform (100 0 0);
boundaryField {
Inlet_surf {
type fixedValue;
value $internalField;
}
Outlet_surf {
type zeroGradient;
}
Throttle_surf {
type fixedValue;
value uniform (0 0 0);
}
pipeWall_surf {
type fixedValue;
value uniform (0 0 0);
} }
U: 0m/sec
U: 0m/sec
計算条件の設定
境界条件 p
FoamFile {
version 2.0;
format ascii;
class volScalarField;
object p;
}
dimensions [0 2 -2 0 0 0 0];
internalField uniform 0;
boundaryField {
Inlet_surf {
type zeroGradient;
}
Outlet_surf {
type fixedValue;
value uniform 0;
}
Throttle_surf {
type zeroGradient;
}
pipeWall_surf {
type zeroGradient;
} }
p:zero 勾配
p:zero 勾配
計算条件の設定
境界条件 k
FoamFile {
version 2.0;
format ascii;
class volScalarField;
object k;
}
dimensions [0 2 -2 0 0 0 0];
internalField uniform 0.05;
boundaryField {
Inlet_surf {
type fixedValue;
value $internalField;
}
Outlet_surf {
type zeroGradient;
}
Throttle_surf {
type kqRWallFunction;
value $internalField;
}
pipeWall_surf {
type kqRWallFunction;
value $internalField;
} }
k: 壁関数 k: 壁関数
乱流強度のめやす:
・高速、圧縮性、内部流などのケース:5~20%
・非圧縮性~弱圧縮性などのケース:1~5%
・外部流などのケース :1% 程度
計算条件の設定
境界条件 ε
FoamFile {
version 2.0;
format ascii;
class volScalarField;
object epsilon;
}
dimensions [0 2 -3 0 0 0 0];
internalField uniform 0.01;
boundaryField {
Inlet_surf {
type fixedValue;
value $internalField;
}
Outlet_surf {
type zeroGradient;
}
Throttle_surf {
type epsilonWallFunction;
value $internalField;
}
pipeWall_surf {
type epsilonWallFunction;
value $internalField;
}
ε : 壁関数 ε : 壁関数
乱流長さスケールlのめやす:
・水力直径の、3.8%程度 Cµ:0.09 (乱流モデル定数)
l C k
2 3
ε =
µ上式とモデル定数より、
01 . 1 0
. 0
05 . 09 0 . 0
2 3 2
3
≅
×
=
= l
C
µk
ε
計算の実行
シミュレーション実行の準備
次のようにファイルを配置する
ケース・ディレクトリ
constant polyMesh
blockMeshDict
system
controlDict
snappyHexMeshDict
fvSchemes fvSolution
decomposeParDict
※並列処理でメッシュを
作成する場合
※並列処理でメッシュを
作成する場合
hostfile 0
p:圧力
U:速度
k