代数方程式ソルバーの比較2013年8月30日 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
はじめにOpenFOAM の代数方程式ソルバーの比較を行う。 使用バージョンOpenFOAM 2.2.1 代数方程式ソルバーの比較OpenFOAM の代数方程式ソルバーの比較を行う。 simpleFoam のチュートリアルケース pitzDaily を使用する。チュートリアルケースの p の relTol を 0.05 にし、k, epsilon の緩和係数を 0.5 に設定、renumberMesh を適用したものを比較対象とし、このケースにおける最適設定を探る。 設定基本
p
{
solver PCG;
preconditioner DIC;
tolerance 1e-06;
relTol 0.05;
}
"(U|k|epsilon)"
{
solver PBiCG;
preconditioner DILU;
tolerance 1e-05;
relTol 0.1;
}
GAMG
p
{
solver GAMG;
smoother GaussSeidel;
agglomerator faceAreaPair;
nCellsInCoarsestLevel 10;
mergeLevels 1;
nPreSweeps 2;
directSolveCoarsest true;
cacheAgglomeration on;
tolerance 1e-06;
relTol 0.05;
}
PCG/GAMG preconditioner
p
{
solver PCG;
preconditioner
{
preconditioner GAMG;
smoother GaussSeidel;
agglomerator faceAreaPair;
nCellsInCoarsestLevel 10;
mergeLevels 1;
nPreSweeps 2;
directSolveCoarsest true;
cacheAgglomeration on;
}
tolerance 1e-06;
relTol 0.05;
}
smoothSolver
U
{
solver smoothSolver;
smoother DILU;
tolerance 1e-05;
relTol 0.1;
}
coupled
U
{
type coupled;
solver PBiCCCG;
preconditioner DILU;
tolerance (1e-05 1e-05 1e-05);
relTol (0.1 0.1 0.1);
}
比較対象
計算マシンの CPU は Core i7 870 (4 コア, 定格 2.93 GHz)。1 CPU で計算。 p/GAMG
p の GAMG の各設定の比較。このケースでは、nPreSweeps 2, directSolveCoarsest true, cacheAgglomeration on がもっとも計算時間が短かったので、これを採用する。 p/GAMG 2
smoother の比較。たいして変わらないが、DIC が多少速いらしい。 p/PCG
PCG の preconditioner の比較。GAMG が速いが、それ以外であれば DIC でよさそうである。 p/smoothSolver
smoothSolver の smoother の比較。かえって時間がかかっているため、中止。 U/GAMG
U の GAMG の smoother の比較。かえって時間がかかっているため、中止。 U/PBiCG
PBiCG の preconditioner の比較。diagonal が速い。 U/smoothSolver
smoothSolver の smoother の比較。DILU が多少速いが、PBiCG よりは遅い。 U/coupled
coupled の solver の比較。PBiCICG が多少速い。 U/coupled 2
preconditioner の比較。DILU でよさそう。 k-epsilon/PCG
k-epsilon の PCG の preconditioner の比較、U と傾向が合うかどうかの確認。やはり diagonal が多少速い。 k-epsilon/smoothSolver
smoothSolver の smoother の比較、U と傾向が合うかどうかの確認。やはり DILU が多少速い。 最適設定以上の結果から、以下の設定がよさそうである (左から速そうな順番)。
ただし、組み合わせで傾向が変わる可能性もあるので、最後に組み合わせでいくつかのケースを比較してみる。
U, k-epsilon は smoothSolver よりも PCG (diagnoal) のほうがよさそうであったが、GAMG と組み合わせると差がなくなってしまっている。coupled との併用では、smoothSolver のほうがほんの少し速そうであるが、差は微妙である。GAMG の preconditioner について、GaussSeidel と DIC の差はほとんどなかったので、一応 GussSeidel も試してみると、ほんの少し DIC よりも速いときがあるが、言うほどの差があるわけでもないので、どちらでもよいのだろう。 GAMG 再検討最適設定のめどがついてきたので、ここで改めて GAMG のパラメタを細かく検討してみる。
nPreSweeps, nPostSweeps, maxPreSweeps, nPostSweeps を減らすのは効果がありそうである。nCellsInCoarsestLevel, mergeLeves は nPreSweeps などと組み合わせるとよい効果はみられない。directSolveCoarsest は今回はオフにしてもたいして変わらないようである。 smoother も再検討する。
GaussSeidel はあまり速くない。 上記の設定を使い、PCG の smoother に GAMG を用いた場合の nVcycles の違いをみる。
変えてもよくはならなそうである。 結論今回のケースでは、GAMG や coupled が使えない状況も考慮して、つぎの 3 つを用意しておくのがよさそうである。
差が微妙なものは、反復回数が少ないほうを選んだ。 候補 1
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;
}
候補 2
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
{
solver PBiCG;
preconditioner diagonal;
tolerance 1e-05;
relTol 0.1;
}
"(k|epsilon)"
{
solver smoothSolver;
smoother DILU;
tolerance 1e-05;
relTol 0.1;
}
候補 3
p
{
solver PCG;
preconditioner DIC;
tolerance 1e-06;
relTol 0.05;
}
"(U|k|epsilon)"
{
solver PBiCG;
preconditioner diagonal;
tolerance 1e-05;
relTol 0.1;
}
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| PENGUINITIS | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||