OpenFOAMは、さまざまな物理現象や数値解析に対応する多くのソルバーを提供しています。この記事では、代表的なソルバーについてその種類と特徴、ファイル構成、主な変数について詳しく解説します。
1.基本ソルバー
非圧縮性流体
icoFoam
用途: 非圧縮性のナビエ・ストークス方程式を解くためのソルバーで、時間依存の問題に適しています。
特徴: 単純な問題設定に適しており、特に時間発展を伴う流れの解析に使用されます。
制御ファイル例:
controlDict
: シミュレーションの時間ステップや出力間隔を設定します。fvSchemes
: 時間微分、対流項、拡散項などの離散化スキームを設定します。fvSolution
: 連立方程式の解法設定を行います。
simpleFoam
用途: 非圧縮性の定常流れを解析するためのソルバーで、SIMPLEアルゴリズムを使用します。
特徴: 主に定常流れ問題に適しており、収束が比較的早いです。
制御ファイル例:
controlDict
fvSchemes
fvSolution
pisoFoam
用途: 非圧縮性の時間依存流れを解析するためのソルダーで、PISOアルゴリズムを使用します。 特徴: 時間依存の流れ問題に適しており、複雑な流れ場の解析が可能です。
制御ファイル例:
controlDict
fvSchemes
fvSolution
buoyantBoussinesqSimpleFoam
用途: 浮力効果を考慮した非圧縮性の定常流れを解析するためのソルダー。
特徴: 温度差による自然対流問題など、浮力効果が重要な問題に適しています。
制御ファイル例:
controlDict
fvSchemes
fvSolution
buoyantPimpleFoam
用途: 浮力効果を考慮した圧縮性の時間依存流れを解析するためのソルダーで、PIMPLEアルゴリズムを使用します。
特徴: 圧縮性流体や温度差による自然対流など、浮力効果を伴う複雑な流れの解析が可能です。
制御ファイル例:
controlDict
fvSchemes
fvSolution
圧縮性流体
rhoCentralFoam
用途: 圧縮性の非定常流体の解析 特徴: 高マッハ数の流れや衝撃波の解析に適しており、中心差分スキームを使用して数値散逸を抑えます。
制御ファイル例:
controlDict
fvSchemes
fvSolution
thermophysicalProperties
sonicFoam
用途: 圧縮性の非定常流体の解析 特徴: 音速に近い流れや衝撃波の解析に適しており、圧縮性のラメ・ナビエ・ストークス方程式を解きます。
制御ファイル例:
controlDict
fvSchemes
fvSolution
thermophysicalProperties
rhoPimpleFoam
用途: 圧縮性の時間依存流れの解析 特徴: PIMPLEアルゴリズムを使用しており、高速で圧縮性のある流体の解析に適しています。大規模な時間依存問題にも対応可能です。
制御ファイル例:
controlDict
fvSchemes
fvSolution
thermophysicalProperties
rhoPorousSimpleFoam
用途: 圧縮性流体の定常流れの解析 特徴: 多孔質媒体を通る流体の定常解析に適しており、SIMPLEアルゴリズムを使用しています。
制御ファイル例:
controlDict
fvSchemes
fvSolution
thermophysicalProperties
2.多相流ソルバー
interFoam
用途: 多相流(特に気液界面)の解析に使用され、VOF(Volume of Fluid)法を使用します。 特徴: 水面や気泡の動きを解析するのに適しています。界面追跡が可能です。
制御ファイル例:
controlDict
fvSchemes
fvSolution
transportProperties
: 流体の物性値を設定します。
multiphaseInterFoam
用途: 複数の流体相を持つ多相流の解析に使用されます。 特徴: 複数の流体相が混在する流れを解析するのに適しています。
制御ファイル例:
controlDict
fvSchemes
fvSolution
transportProperties
reactingTwoPhaseEulerFoam
用途: 反応を考慮した二相流の解析に使用されます。 特徴: 化学反応を伴う二相流体の解析が可能です。
制御ファイル例:
controlDict
fvSchemes
fvSolution
thermophysicalProperties
: 反応に関する物性値を設定します。
3.化学反応ソルバー
reactingFoam
用途: 化学反応を伴う流れの解析に使用されます。 特徴: 燃焼や化学反応を伴う流れの解析に適しています。
制御ファイル例:
controlDict
fvSchemes
fvSolution
thermophysicalProperties
: 反応に関する物性値を設定します。
rhoReactingFoam
用途: 圧縮性の化学反応を伴う流れの解析に使用されます。 特徴: 圧縮性流体の燃焼解析に適しています。
制御ファイル例:
controlDict
fvSchemes
fvSolution
thermophysicalProperties
熱伝導ソルバー
laplacianFoam
用途: 拡散方程式(例: 熱伝導方程式)を解くためのソルダーです。 特徴: 熱伝導や質量拡散など、純粋な拡散問題に適しています。
制御ファイル例:
controlDict
fvSchemes
fvSolution
高度なソルバー
overPimpleDyMFoam
overPimpleDyMFoamの特徴
動的メッシュ: 動的メッシュ機能を利用して、移動するジオメトリや変形するメッシュを扱うことができます。
PIMPLEアルゴリズム: 圧縮性流体の時間依存解析にPIMPLEアルゴリズムを使用します。これは、PISOアルゴリズムとSIMPLEアルゴリズムのハイブリッドであり、時間依存問題において収束性と安定性を向上させます。
オーバーセットメッシュ(Overset Mesh): 複雑な相対運動や相対的な物体の移動を解析するために、重ね合わせメッシュ(Overset Mesh)を使用します。
このソルバーを使用することで、複雑なジオメトリの移動や変形を伴うシミュレーションを効率的に実行することができます。設定ファイルには、動的メッシュやオーバーセットメッシュの特定の設定が含まれており、これらを適切に設定することで高度な解析を行うことが可能です。
各ソルバーの具体的なファイル設定例
icoFoamの設定例
controlDict
application icoFoam; // 使用するソルバーを指定します
startFrom startTime; // シミュレーションの開始時間の設定方法を指定します
startTime 0; // シミュレーションの開始時間
stopAt endTime; // シミュレーションの終了条件を指定します
endTime 0.5; // シミュレーションの終了時間
deltaT 0.001; // 時間ステップの設定
writeControl timeStep; // データの書き出し間隔を時間ステップで指定します
writeInterval 100; // データを書き出す時間ステップの間隔
fvSchemes
ddtSchemes
{
default Euler; // 時間微分のスキームをEuler法に設定します
}
divSchemes
{
default none; // デフォルトの対流スキームを設定しません
div(phi,U) Gauss linearUpwind grad(U); // 速度場の対流項にガウス積分法と線形風上差分法を使用します
}
laplacianSchemes
{
default Gauss linear corrected; // 拡散項にガウス積分法と線形補正法を使用します
}
fvSolution
solvers
{
p
{
solver GAMG; // 圧力の解法にGAMGソルバーを使用します
tolerance 1e-6; // 許容誤差
relTol 0.01; // 相対許容誤差
}
U
{
solver PBiCG; // 速度の解法にPBiCGソルバーを使用します
preconditioner DILU; // 前処理にDILUを使用します
tolerance 1e-5; // 許容誤差
relTol 0.1; // 相対許容誤差
}
}
PIMPLE
{
momentumPredictor yes; // 運動量予測子を使用します
nCorrectors 2; // PIMPLEアルゴリズムの補正ステップ数
nNonOrthogonalCorrectors 0; // 非直交補正ステップ数
}
overPimpleDyMFoamの設定ファイル
controlDict
シミュレーションの制御パラメータを設定します。
application overPimpleDyMFoam; // 使用するソルバーを指定します
startFrom startTime; // シミュレーションの開始時間の設定方法を指定します
startTime 0; // シミュレーションの開始時間
stopAt endTime; // シミュレーションの終了条件を指定します
endTime 10; // シミュレーションの終了時間
deltaT 0.001; // 時間ステップの設定
writeControl timeStep; // データの書き出し間隔を時間ステップで指定します
writeInterval 100; // データを書き出す時間ステップの間隔
fvSchemes
離散化スキームを設定します。
ddtSchemes
{
default Euler; // 時間微分のスキームをEuler法に設定します
}
divSchemes
{
default none; // デフォルトの対流スキームを設定しません
div(phi,U) Gauss linearUpwind grad(U); // 速度場の対流項にガウス積分法と線形風上差分法を使用します
div(phi,k) Gauss linearUpwind grad(k); // 乱流エネルギーの対流項にガウス積分法と線形風上差分法を使用します
div(phi,epsilon) Gauss linearUpwind grad(epsilon); // 乱流エネルギー散逸率の対流項にガウス積分法と線形風上差分法を使用します
}
laplacianSchemes
{
default Gauss linear corrected; // 拡散項にガウス積分法と線形補正法を使用します
}
interpolationSchemes
{
default linear; // 線形補間を使用します
}
snGradSchemes
{
default corrected; // 補正済み法を使用します
}
fvSolution
連立方程式の解法を設定します。
solvers
{
p
{
solver GAMG; // 圧力に対するソルバー(ここではGAMG)
tolerance 1e-6; // 許容誤差
relTol 0.01; // 相対許容誤差
smoother GaussSeidel;// スムーザーの種類(ここではGauss-Seidel法)
nPreSweeps 2; // 前スイープ回数
nPostSweeps 2; // 後スイープ回数
cacheAgglomeration true; // 凝集をキャッシュするかどうか
agglomerator faceAreaPair; // 凝集方法(faceAreaPair)
mergeLevels 1; // マージレベル
}
U
{
solver PBiCG; // 速度に対するソルバー(ここではPBiCG)
preconditioner DILU; // 前処理(ここではDILU)
tolerance 1e-5; // 許容誤差
relTol 0.1; // 相対許容誤差
}
"(k|epsilon)" // 乱流モデルのkとepsilonに対するソルバー設定
{
solver PBiCG; // ソルバー(ここではPBiCG)
preconditioner DILU; // 前処理(ここではDILU)
tolerance 1e-5; // 許容誤差
relTol 0.1; // 相対許容誤差
}
}
PIMPLE
{
momentumPredictor yes; // 運動量予測子を使用するかどうか
nOuterCorrectors 3; // 外部補正ステップ数
nCorrectors 2; // 内部補正ステップ数
nNonOrthogonalCorrectors 1; // 非直交補正ステップ数
}
dynamicMeshDict
動的メッシュの設定を行います。
dynamicFvMesh dynamicOversetFvMesh; // 使用する動的メッシュタイプ(ここではdynamicOversetFvMesh)
dynamicOversetFvMeshCoeffs
{
interpolationMethod linear; // オーバーセットメッシュの補間方法を線形に設定
}
motionSolverLibs ("libfvMotionSolvers.so"); // 使用するモーションソルバーライブラリ
solver
{
type solidBodyMotionSolver; // ソリッドボディのモーションソルバータイプ
solidBodyMotionFunction rotatingMotion; // モーションの種類(ここでは回転運動)
rotatingMotionCoeffs
{
origin (0 0 0); // 回転の中心
axis (0 0 1); // 回転軸
omega 10; // 角速度
}
}