OpenFOAMの残差について

1,522 views
Skip to first unread message

sumida617

unread,
Oct 4, 2011, 10:50:18 PM10/4/11
to OpenFOAM
初めまして、大学でOpenFOAMを学んでいる隅田と申します。OpenFOAMでわからない事があったので質問させていただきます。

収束判定に用いられる残差には残差の二乗和や平方和などがあると知ったのですが、
OpenFOAMの収束判定に用いられる残差はどのような残差を用いているのでしょうか。

まだ勉強不足でわかりづらい書き方になってしまいましたが、回答よろしくお願いします。

ohbuchi

unread,
Oct 5, 2011, 4:30:58 PM10/5/11
to OpenFOAM
こんにちは。
ソルバによって様々でしょうが、非圧縮系ソルバならsrc/finiteVolume/lnInclude/continuityErrs.H
で定義されています。
連続の式の残差fvc::div(phi)のセル体積荷重平均に時間刻みをかけたものです。

{
volScalarField contErr = fvc::div(phi);

scalar sumLocalContErr = runTime.deltaT().value()*
mag(contErr)().weightedAverage(mesh.V()).value();

scalar globalContErr = runTime.deltaT().value()*
contErr.weightedAverage(mesh.V()).value();
cumulativeContErr += globalContErr;

Info<< "time step continuity errors : sum local = " <<
sumLocalContErr
<< ", global = " << globalContErr
<< ", cumulative = " << cumulativeContErr
<< endl;

sumida617

unread,
Oct 7, 2011, 6:00:49 AM10/7/11
to OpenFOAM
回答していただきありがとうございます。
回答を参考に自分なりにも調べて理解したいと思います。

ohbuchi

unread,
Oct 7, 2011, 6:49:21 AM10/7/11
to OpenFOAM
こんにちは。
ソルバを実行すると、各方程式ごとに初期残差、最終残差など表示されますが
こちらは、lduMatrix.Hで定義されたSolverクラスで出力される残差です。
これは、連立一次方程式の残差ベクトルAx-bの大きさを正規化したものです。
二乗和(L2)ではなくL1ノルムになります。

ただ、非圧縮定常計算の収束判定には各方程式の残差よりも連続の式の
残差が使われると思います。
ご参考まで。



On 10月7日, 午後7:00, sumida617 <sumida...@gmail.com> wrote:
> 回答していただきありがとうございます。
> 回答を参考に自分なりにも調べて理解したいと思います。
Reply all
Reply to author
Forward
0 new messages