人気ブログランキング
人気ブログランキング
OPEN FOAMあれこれ指南 PR

OpenFOAMのソルバー概要と詳細解説

記事内に商品プロモーションを含む場合があります

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; // 角速度
    }
}

ABOUT ME
den
完全独学でWEBデザインを無謀にも挑戦している中年男。 工場勤務の会社員で3児の父。 チャレンジを忘れず、妻に怒られても心はおれず。 有益な情報を発信し、これを見ている人の為になればと思っています。
関連記事一覧