あらかじめ定義されたソルバー¶
いくつかの問題に対しは特定のソルバーを作成する方が便利ですが,モデルを素早くテストするためのソルバーがあります.また,これは独自のソルバを作成するための例としても使用できます.これは src/getfem/getfem_model_solvers.h
と src/getfem_model_solvers.cc
で定義され,呼び出しは次の通りです.
getfem::standard_solve(md, iter);
ここで md
はmodelオブジェクトで, iter
は Gmm++ の反復オブジェクトです.使用例については,次のセクションも参照してください.
"小さな" 問題ではデフォルトの線形ソルバーとして SuperLU が使用されることに注意してください.また, MUMPS と GetFEM (セクション 線形代数プロセス を参照)をリンクさせ並列バージョンを使用することができます.非線形問題に対しては,Newton法(Newton-Raphson法とも呼ばれる)が用いられます.
また,変数のサブセットに関してのみ問題を解決するために,いくつかの変数(modelオブジェクトのメソッド md.disable_variable(varname) を使用)を無効にすることができます(無効な変数はデータと見なされます).例えばグローバルNewton法を固定点1で置き換えます.
iterオブジェクトの標準的な初期化は次のとおりであることを思い出してください( 反復ソルバー に関する Gmm++ のドキュメントを参照).
gmm::iteration iter(1E-7, 1, 200);
ここで, 1E-7
は停止基準の相対許容誤差であり, 1 はノイズの多いオプションであり, 200 は最大反復回数です.Newton法の停止基準は,以下のように構築されます.相対許容誤差の場合 \(\varepsilon\) ,アルゴリズムは次のときに停止します.
\(F(u)\) は残差ベクトルです. \(\|\cdot\|_1\) は \(\rm I\hspace{-0.15em}R^n\) 内の古典的な1-ノルムです, \(h\) はNewton法によって与えられた探索方向です.\(L\) は推定された(ソース項およびDirichletブリック要素から来る)外部負荷のノルムであり, \(u\) は探索された変数の現在の状態です.最大値 \(10^{-25}\) は \(L\) と(または) \(u\) の値がない異常な場合を避けるためです.