定常(simpleFoam)と非定常(pimpleFoam)でも同じ
constant/turbulencePropertiesにて、laminarかRASかLESかを選ぶ.その下に書く設定を追記する。
チュートリアル/incompressible/pimpleFoam/参照
//
// U
//
FoamFile
{
version 2.0;
format ascii;
class volVectorField; // volScalarField - volVectorField - volSymmTensorField
object U;
}
// 単位 [kg m s K mol A Cd]
dimensions [0 1 -1 0 0 0 0]
// フィールド内部の値。0の場合は初期値
internalField uniform(0 0 0)
// 境界値
boundaryField
{
BoudaryName // メッシュ生成時につけた名前
{
type fixedValue;
value uniform (1 0 0);
or
type zeroGradient; // 値指定の必要はない
}
".*"
{
type zeroGradient; // 値指定の必要はない
}
"(inlet-1|inlet-2)" // outlet-1 or outlet-2
{
type fixedValue;
value uniform (1 0 0);
}
"outlet.*" // outlet-1, outlet-2, outletA, ...
{
type zeroGradient;
}
"nonSlipWall.*"
{
type fixedValue;
value uniform (0 0 0);
}
"slipWall.*"
{
// 壁面スリップ条件
type slip;
}
}
その他便利な境界
boundaryField
{
"inlet.*"
{
// 表面法線方向速度 (※ 法線ベクトルが外側を向いていることがあるので注意)
type surfaceNormalFixedValue;
refValue uniform 10; // [m/s]
}
"volInlet.*"
{
// 体積流量
type flowRateInletVelocity;
volumetricFlowRate constant 2.5e-4; // [m3/s]
value uniform (0 0 0);
}
"flowRateInlet.*"
{
// 質量流量
type flowRateInletVelocity;
massFlowRate constant 2.5e-4; // [kg/s]
rhoInlet 1; / [kg/m3]
value uniform (0 0 0);
}
"turbulenceInlet.*"
{
// 乱れ付き速度境界
type turbulentInlet;
referenceField uniform (10 0 0); // 流速[m/s]
fluctuationScale (0.02 0.01 0.01); // 変動スケール
}
}
こんだけ。非圧縮性ソルバー はそんなにない
mkdir -p $FOAM_RUN // runディレクトリを作っておく。(もしないなら) run // = cd $FOAM_RUN (便利) cp -r $FOAM_TUTORIAL/incompressible/simpleFoam/pitzDaily . cd PitzDaily blockMesh simpleFoam paraFoam
cd steadyIsoThermal blockMesh surfaceFeaturExtract snappyHexMesh -overwrite createPatch -overwrite (v.4以降は不要) paraFoam (メッシュの確認) foamJob simpleFoam (バックグラウンド実行) tail -f log (ログ確認. "End"が計算終了合図)
ログの確認
foamLog log //logsディレクトリができる gnuplot residual.gp evince residual.eps
cd constant rm -rf polyMesh ln -s ../../steadyIsothermal/constant/polyMesh
foamJob buoyantPimpleFoam // 並列の場合 decomposePar // 並列用に領域分割する foamJob -p buoyantPimpleFoam // -pで並列実行 reconstructPar // 領域結合 tail -f log //途中経過確認 paraFoam
// どこのメッシュを残すかの場所を指定する locationInMesh (0 0 0);
// メッシュの初期化 foamCleanPolyMesh
メッシュはきれいになる
// 不要な境界の除去 createPatch -overwrite
# vtk DataFile Version 2.0
grid.vtk
ASCII
DATASET POLYDATA
POINTS 8 float
3.2 1.5 1.2
3.7 1.5 1.2
3.7 1.5 1.2
3.2 1.5 1.2
3.2 2.1 1.2
3.7 2.1 1.2
3.7 2.1 1.2
3.2 2.1 1.2
POLYGONS 2 10
4 0 1 2 3
4 4 5 6 7
blockMesh paraFoam -block
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object blockMeshDict;
}
// x3^
// |
// |__ x1
// /
// x2
// 3____ 2
// /| /|
// /_0__/ |1
//7| |6/
// |____|/
// 4 5
// __ 1
// /|
// _2/ |0 ==> 外向きに右ねじの法則
// __|/
// 3
//
convertToMeters 1; //[m]
vertices
(
(0 0 0) //0
(1 0 0) //1
(1 1 0) //2
(0 1 0) //3
(0 0 0.1) //4
(1 0 0.1) //5
(1 1 0.1) //6
(0 1 0.1) //7
);
blocks
(
hex (0 1 2 3 4 5 6 7) (40 40 10) simpleGrading (8 5 2)
//
// simpleGrading (x1s x2s x3s)
// x*s : 分割幅の比率 (最後の分割幅)/(最初の分割幅)
// edgeGrading(g0 g1 g2 g3 g4 g5 g6 g7 g8 g9 g10 g11)
// g* : 全ての辺に対する分割幅の比率
//
);
edges
(
);
// -*- Boundary Type -*-
// patch パッチ (入/出境界)
// wall 壁
// symmetryPlane 対称面
// cyclic 周期境界
// cyclicAMI 不適合境界
// wedge 2次元軸対象
// empty 2次元問題
boundary
(
top
{
type wall;
faces
(
(3 7 6 2)
); // カンマ必須
}
bottom
{
type wall;
faces
(
(1 5 4 0)
);
}
left
{
type wall;
faces
(
(0 4 7 3)
);
}
right
{
type wall;
faces
(
(2 6 5 1)
);
}
frontAndBack
{
type empty; // 2次元問題
faces
(
(4 5 6 7)
(0 3 2 1)
);
}
);
// mergePatchPairs
// {};
変数宣言
minx -0.00101;
maxx 0.05101;
miny -0.00601;
maxy 0.05601;
minz -0.01001;
maxz 0.05601;
nx 52;
ny 32;
nz 56;
vertices
(
($minx $miny $minz)
($maxx $miny $minz)
($maxx $maxy $minz)
($minx $maxy $minz)
($minx $miny $maxz)
($maxx $miny $maxz)
($maxx $maxy $maxz)
($minx $maxy $maxz)
);
blocks
(
hex (0 1 2 3 4 5 6 7) ($nx $ny $nz) simpleGrading (1 1 1)
);