ユーザーガイド 1.5系 - 4.5 解法とアルゴリズム制御
出典: OFWikiJa
[編集] 4.5 解法とアルゴリズム制御
方程式のソルバ(求解機)、公差、およびアルゴリズムはシステム・ディレクトリのfvSolution辞書から制御されます。以下に示すのは、icoFoamソルバに必要なfvSolution辞書からの入力例です。
17 solvers
18 {
19 p PCG
20 {
21 preconditioner DIC;
22 tolerance 1e-06;
23 relTol 0;
24 };
25
26 U PBiCG
27 {
28 preconditioner DILU;
29 tolerance 1e-05;
30 relTol 0;
31 };
32 }
33
34 PISO
35 {
36 nCorrectors 2;
37 nNonOrthogonalCorrectors 0;
38 pRefCell 0;
39 pRefValue 0;
40 }
41
42 // ************************************************************************* //
fvSolutionは実行されるソルバ特有のサブ辞書を含んでいます。しかし、標準のソルバに使われる大部分については標準のサブ辞書の小さなセットがあります。これらのサブ辞書はこのセクションの後半で説明するsolvers、relaxationFactors、PISO、およびSIMPLEを含んでいます。
[編集] 4.5.1 線形ソルバ制御
例に挙げた最初のサブ辞書やすべてのソルバアプリケーションのサブ辞書はsolversです。それは各離散化方程式に使用されるそれぞれの線形ソルバを指定します。強調して言っておきますと特定の問題を解くために方程式とアルゴリズムを書いたアプリケーションソルバとは対照的にこのタームの線形ソルバは線形方程式の解の演算方法になります。‘線形ソルバ'という言葉は以下意味が明確な場合には‘ソルバ'と省略して使うこともあります。用語の文脈においていかなる曖昧も避けたいと思います。 ソルバの中の各項目の構文は特定の方程式で解かれる変数に関連するキーワードで始まります。例えば、icoFoamは速度Uと圧力pの方程式、つまりUとpの項を解きます。変数名の後にソルバが使用するパラメタを含むソルバ名と辞書が続きます。OpenFOAMで使えるソルバを表4.12で記載します。toleranceを含むrelTol、preconditionerなどのパラメタは次の節で説明します。
| ソルバ | キーワード |
| 初期条件付き共役勾配 | PCG/PBiCG† |
| スムーサーを使ったソルバ | smoothSolver |
| 汎用幾何学的代数マルチグリッド | GAMG |
| †PCGは対称用、PBiCGは非対称用 | |
表4.12:線形ソルバ
ソルバは左右対称のマトリクスと非対称のマトリクスを区別します。行列の対称は解かれている方程式の構造に依存し、ユーザーがこれを決定するこも可能ですが、例えばOpenFOAMが不適当なソルバーが選ばれているかどうかをユーザーにアドバイスするためにエラーメッセージを出すので、それは必須ではありません。
--> FOAM FATAL IO ERROR : Unknown asymmetric matrix solver PCG
Valid asymmetric matrix solvers are :
3
(
PBiCG
smoothSolver
GAMG
)
[編集] 4.5.1.1 解の公差
疎行列ソルバは反復計算、すなわち解の連続性により方程式残差を減少させることに基づいています。残差は表面上、解の誤差の尺度なので小さければ小さいほど、より正確な解となります。より正確には、残差は、現在の解を方程式に代入して、左右両側の差の大きさを取ることによって評価されます。これはまた解析する問題のスケールにかかわらず正規化されます。 特定のフィールドで方程式を解く前に、初期の残差はそのフィールドの現在値に基づいて値を決めます。それぞれのソルバの反復計算の後に、残差は再評価されます。 以下の条件のどちらかを満たせばソルバは停止します。
・残差がソルバの公差以下に減少する、tolerance;
・初期残差比率がソルバの相対的な公差以下に減少する、relTol;
ソルバの公差は解が十分正確であると考えることができるくらい小さい残差レベルにまでするべきです。ソルバの相対的な公差が初期値から最終的な解への相対的な再計算を制限します。解をソルバの公差に収束させるためにはソルバの相対的公差を0に設定するのが一般的です。公差、tolerance、およびrelTolは全てのソルバによって辞書に定められる。
[編集] 4.5.1.2 共役勾配ソルバの前提条件
ソルバ辞書のpreconditionerのキーワードにあるようなマトリクスの条件決めのためのさまざまなオプションの範囲が共役勾配ソルバにあります。preconditionersを表4.13に記載します。
| Preconditioner | キーワード |
| 対角不完全コレスキー分解 (対称) | DIC |
| 高速対角不完全コレスキー分解 (キャッシング付きDIC) | FDIC |
| 対角不完全LU (非対称) | DILU |
| 対角 | diagonal |
| 幾何学的代数マルチグリッド | GAMG |
| preconditioningなし | none |
表4.13 Preconditionerオプション
[編集] 4.5.1.2 平滑化ソルバ
スムーサーを使うソルバは、特定のスムーサーが必要です。 スムーサーオプションを表4.14に記載します。一般にGaussSeidelは最も信頼できるオプションですが、マトリクスがおかしい場合でも、DICであればより収束しやすくなります。場合によっては、GaussSeidelを使った増設のポスト・スムージングいわゆるDICGaussSeidelと呼ばれる方法がさらに有益です。
| スムーサー | キーワード |
| ガウス-シーデル | GaussSeidel |
| 対角不完全コレスキー分解 (対称) | DIC |
| ガウス-シーデル対角不完全コレスキー分解(対称) | DICGaussSeidel |
表4.14:スムーサー・オプション
また、公差パラメタに従って、残差が再計算される前にnSweepsというキーワードによってスイープの数も定めなければなりません。
[編集] 4.5.1.3 代数幾何マルチグリッドソルバ
代数幾何マルチグリッド(GAMG)の一般化されたメソッドは以下の原則に従います:セル数が少ないメッシュで素早く解を導きます。そして、この解をより細かいメッシュに写します。正確な解を出すのに細かいメッシュ上に初期の推測としてその値を使います。最初により粗いメッシュを解く時の速度の増加がメッシュ改良とフィールド・データに関するマッピングによる負荷の増加より重いときに、GAMGは標準の方法より速くなります。実際には、GAMGは指定されたメッシュから計算を始め、徐々にメッシュを粗くもしくは細かくしていきます。ユーザはセルのnCoarsestCellsの数に関して最も粗いレベルにおける大体のメッシュサイズを指定するだけで構いません。 セルの統合はagglomeratorキーワードによって指定されたアルゴリズムで実行されます。今のところ、faceAreaPairメソッドを薦めます。MGridGenの共有されたオブジェクト・ライブラリを指定する追加入力が必要なMGridGenオプションがあることに注意する必要があります。
geometricGamgAgglomerationLibs ("libMGridGenGamgAgglomeration.so");
OpenCFDでは経験上、MGridGenメソッドよりもfaceAreaPairメソッドの方が優れています。すべての方法において、cacheAgglomerationスイッチによって統合を任意にキャッシュできます。 平滑化は4.5.1.3で説明したようにスムーサーによって指定されます。スムーサーによって異なったレベルのメッシュ密度で使われるスイープの数はnPreSweepsやnPostSweeps、nFinestSweepsのキーワードによって指定されます。nPreSweepshへの入力はアルゴリズムがメッシュを粗くする時に使われ,nPostSweepsへの入力はアルゴリズムがメッシュを細分割する時に使われ、nFinestSweepsは解が最も細かいレベルにある時に使われます。
mergeLevelsキーワードは粗さもしくは細かさのレベルによって実行速度を制御します。例えばmergeLevels 1のように、単一のレベルで行うことは最適です。場合によって、特に簡単なメッシュに関しては、例えばmergeLevels2のように一度に2レベル粗くまたは細かくすることによって、解析を確実に早くできます。
[編集] 4.5.2 緩和解析
OpenFOAMでよく使われるfvSolutionの2番目のサブ辞書は緩和して制御するrelaxationFactorsで、計算の安定性を改良するのに使用されるテクニックなのですが、特に定常状態問題を解析する際に使われます。緩和は、領域の解析の前に解のマトリクスとソースを変更するか、または直接領域を変更することによって、反復計算時の変数の変化を制限することで行われます。緩和係数α(0<α≦1)は緩和の量を指定し、0からα=1まで変化し、強さはα→0に従って増加します。α=0は連続した反復計算で変数を全く変化させない場合の解であり、極端なケースです。最適なαの選択は安定した計算を確実にすることができるくらい小さく、また反復計算をスムーズに進められる程度大きくしなければなりません。0.9程度のαの値であれば多くの場合安定性が確保されます。ただし著しく低い値、例えば0.2は反復計算を遅くする場合等の非常に限られた値です。 ユーザは最初に、ある領域に関連しているwordを要素として最初に指定することによって、特定の領域の緩和係数を指定できます。以下で非圧縮定常状態層流のsimpleFoamのチュートリアルの例で使われる緩和係数を参照できます。
17 solvers
18 {
19 p PCG
20 {
21 preconditioner DIC;
22 tolerance 1e-06;
23 relTol 0.01;
24 };
25 U PBiCG
26 {
27 preconditioner DILU;
28 tolerance 1e-05;
29 relTol 0.1;
30 };
31 k PBiCG
32 {
33 preconditioner DILU;
34 tolerance 1e-05;
35 relTol 0.1;
36 };
37 epsilon PBiCG
38 {
39 preconditioner DILU;
40 tolerance 1e-05;
41 relTol 0.1;
42 };
43 R PBiCG
44 {
45 preconditioner DILU;
46 tolerance 1e-05;
47 relTol 0.1;
48 };
49 nuTilda PBiCG
50 {
51 preconditioner DILU;
52 tolerance 1e-05;
53 relTol 0.1;
54 };
55 }
56
57 SIMPLE
58 {
59 nNonOrthogonalCorrectors 0;
60 }
61
62 relaxationFactors
63 {
64 p 0.3;
65 U 0.7;
66 k 0.7;
67 epsilon 0.7;
68 R 0.7;
69 nuTilda 0.7;
70 }
71
72 // ************************************************************************* //
[編集] 4.5.3 PISOとSIMPLEアルゴリズム
OpenFOAMのほとんどの流体力学ソルバアプリケーションはpressure-implicit split-operator (PISO)もしくはsemi-implicit method for pressure-linked equations (SIMPLE)アルゴリズムを使用します。これらのアルゴリズムは、速度と圧力の方程式を解くための反復法で、PISOは過渡状態の問題に、SIMPLEは定常状態の問題に使います。 両アルゴリズムはいくつかの初期解を求め、次に、それらを修正するという方法をとります。SIMPLEは1の修正しかしませんが、PISOは1以上で概して4以下の修正をします。したがって、本節冒頭の入力例に示したようにnCorrectorsキーワードでPISO辞書の補正数を定めます。 非直交性メッシュから成る追加補正は標準のOpenFOAMソルバアプリケーションのSIMPLEとPISOの両方で利用できます。例えば面が直行座標系に並べられる6面体のセルのメッシュのように、メッシュ内の各面において隣接するセルの中心間のベクトルに面が平行であるなら、メッシュは直交しています。非直交の補正数は本節中の入力例に示すようにnNonOrthogonalCorrectorsキーワードによって定めます。例えば、直交メッシュを0として非直交性の度合いによって最大で20まで増加するようにするなど非直交の補正数は解くケースのメッシュに対応させます。
[編集] 4.5.3.1 圧力参照
非圧縮の閉鎖系では圧力は相対的で、重要なのは絶対値ではなく範囲です。この場合、ソルバはセル内のpRefValueの基準面を、pが圧力の変数解の名前の場合、pRefCellに設定します。圧力がpdであるところでは、名前はそれぞれpdRefValueとpdRefCellです。これらの入力は、一般にPISO/SIMPLEサブ辞書に格納されて、ケースに応じてソルバがそれらを必要とした時に使われます。もしこれを忘れるとソルバは実行されずに、エラーメッセージが出ます。
[編集] 4.5.4 その他のパラメタ
標準のOpenFOAMソルバアプリケーションの多くのfvSolutions辞書には、これまでこのセクションで説明した以外の項目はありません。しかし、一般に、fvSolution辞書はソルバ、アルゴリズム、または実際の何かを制御するどんなパラメタを持っていてもおかしくありません。どんなソルバでも、必要なパラメタを把握するためにソースコードを見ることができます。 結局、何かパラメタやサブ辞書がなければ、ソルバが実行される時、詳細なエラーメッセージが印字されて終了するでしょう。その時、それに応じて不足のパラメタを加えて下さい。
