オイラーやルンゲクッタなどでは,求めたいステップでの値(例えば&ref(full-implicit.eq1.gif,nolink,70%);)のために
それ以前の値(&ref(full-implicit.eq2.gif,nolink,70%);など)だけを空間微分項に用いていた.
このため,前のステップでの値が既知であれば,単に式にその値を代入するだけで計算が可能であった.
これに対し,&ref(full-implicit.eq1.gif,nolink,70%);を時間微分項以外に用いる方法を陰解法と呼ぶ.
#ref(full-implicit.eq3.gif,nolink,70%)

時間微分以外に&ref(full-implicit.eq2.gif,nolink,70%);がない場合を完全陰解法と呼ぶ.
移流方程式の完全陰解法による差分式(前進オイラー+風上差分)は,
#ref(full-implicit.eq4.gif,nolink,70%)

一つの式に未知数が2つ(&ref(full-implicit.eq5.gif,nolink,70%);)含まれており,陽解法のように単純に代入だけでは解けない.
そのため,すべての&ref(full-implicit.eq6.gif,nolink,70%);に関する式を連立させて解く(連立方程式).
流体シミュレーションではほとんどの場合,線形連立方程式(線形システム)となる.
つまり,上記の式をすべての&ref(full-implicit.eq6.gif,nolink,70%);に関して立てることで,
#ref(full-implicit.eq7.gif,nolink,70%)

という行列方程式を得る.そしてこれを逆行列計算により解く.
#ref(full-implicit.eq8.gif,nolink,70%)

数値流体解析ではこの行列&ref(full-implicit.eq9.gif,nolink,70%);が巨大になってしまい,計算コストが大きくなる.
例えば,3次元空間を&ref(full-implicit.eq10.gif,nolink,70%);のグリッドで分割した場合,&ref(full-implicit.eq11.gif,nolink,70%);の行列となってしまう.
ただし,&ref(full-implicit.eq9.gif,nolink,70%);は正定対称疎行列であることが多く,前処理付共役勾配法など効率的な解法を使うことができる.
それでも,やはり陽解法に比べると圧倒的に計算時間が必要である.
一方で陰解法は数値的に安定しており,大きなタイムステップでも発散することなしに解ける(CFL条件にも左右されない)ため,CG用アプリケーションなどではよく用いられている.



トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS