simpleFoam 高速化設定

2013年9月17日

はじめに

simpleFoam のチュートリアルケース pitzDaily の設定をいじってできるだけ速く計算することを試みる。

使用バージョン

OpenFOAM 2.2.1

高速化設定

いろいろ試した結果、以下の設定が高速化に効果があった。

  1. p, U 以外の緩和係数を 0.5 にする。
    relaxationFactors
    {
        fields
        {
            p               0.3;
        }
        equations
        {
            U               0.7;
            k               0.5;
            epsilon         0.5;
            R               0.5;
            nuTilda         0.5;
        }
    }
    
  2. p のソルバーの relTol を大きめにする。
    solvers
    {
        p
        {
            solver          PCG;
            preconditioner  DIC;
            tolerance       1e-06;
            relTol          0.05;
        }
    
        U
        {
            solver          PBiCG;
            preconditioner  DILU;
            tolerance       1e-05;
            relTol          0.1;
        }
        ...
    
  3. ソルバーに GAMG/smoothSolver を使う。
    solvers
    {
        p
        {
            solver           GAMG;
            tolerance        1e-6;
            relTol           0.01;
            minIter          5;
            maxIter          100;
            smoother         GaussSeidel;
            nPreSweeps       1;
            nPostSweeps      3;
            nFinestSweeps    3;
            scaleCorrection true; 
            directSolveCoarsest false;
            cacheAgglomeration on;
            nCellsInCoarsestLevel 50;
            agglomerator     faceAreaPair;
            mergeLevels      1;
        }
    
        U
        {
            solver           smoothSolver;
            smoother         GaussSeidel;
            tolerance        1e-5;
            relTol           0.1;
            nSweeps          1;
            maxIter          100;
        }
    
        "(k|epsilon|R|nuTilda)"
        {
            solver           smoothSolver;
            smoother         GaussSeidel;
            tolerance        1e-5;
            relTol           0.1;
            nSweeps          1;
            maxIter          100;
        }
    }
    
  4. renumberMesh + ソルバーに GAMG/smoothSolver を使う。
  5. U のソルバーに coupled を使う。
    solvers
    {
        p
        {
            solver          PCG;
            preconditioner  DIC;
            tolerance       1e-06;
            relTol          0.01;
        }
    
        U
        {
            type            coupled;
            solver          PBiCCCG;
            preconditioner  DILU;
            tolerance       (1e-05 1e-05 1e-05);
            relTol          (0.1 0.1 0.1);
        }
    
        k
        {
            solver          PBiCG;
            preconditioner  DILU;
            tolerance       1e-05;
            relTol          0.1;
        }
        ...
    
  6. 上記すべてを適用する。

それぞれ個別に適用して計算時間を測る。計算マシンの CPU は Core i7 870 (4 コア, 定格 2.93 GHz)。1 CPU で計算。

CaseStepExecution Time
標準 (チュートリアルまま)76853.4
緩和係数変更75251.48
p の relTol 変更76942
GAMG/smoothSolver78544.88
renumberMesh + GAMG/smoothSolver80333.64
coupled69949.4
全部適用59919.73

2.7 倍のスピードアップ。

意外なことは、renumberMesh が高速化に効くことか。GAMG にのみ効くようである。速度場の下手な初期化は収束を遅らせるだけで高速化には効果がなかった。

代数方程式ソルバーの最適化

代数方程式のソルバーを以下のように設定。

    p
    {
        solver           GAMG;
        smoother         DIC;
        agglomerator     faceAreaPair;
        nCellsInCoarsestLevel 10;
        mergeLevels      1;
        nPreSweeps       0;
        nPostSweeps      1;
        maxPreSweeps     2;
        maxPostSweeps    2;
        nFinestSweeps    2;
        preSweepsLevelMultiplier 1;
        postSweepsLevelMultiplier 1;
        scaleCorrection  true;
        directSolveCoarsest false;
        cacheAgglomeration on;
        interpolateCorrection off;
        tolerance        1e-06;
        relTol           0.05;
    }

    U
    {
        type            coupled;
        solver          PBiCICG;
        preconditioner  DILU;
        tolerance       (1e-05 1e-05 1e-05);
        relTol          (0.1 0.1 0.1);
    }

    "(k|epsilon)"
    {
        solver          smoothSolver;
        smoother        DILU;
        tolerance       1e-05;
        relTol          0.1;
    }

GAMG の設定を最適化。また coupled の solver を PBiCICG に変更。

CaseStepExecution Time
標準 (チュートリアルまま)76853.4
高速化設定59919.73
ソルバー最適化52817.07

3.1 倍のスピードアップ。