*時間差分 [#hf60c3d9]
**TVD RK [#b819da71]
ルンゲクッタ法などの解法は1次元,一定幅グリッドではTV安定であるが,
多次元,可変幅グリッドではどうか?という問題がある.
これに対して,TVDを満たすルンゲクッタがTVD RK&note{Shu1988:C.-W. Shu and S. Osher, "Efficient implementation of essentially non-oscillatory shock capturing schemes", J. Comput. Phys. 77, pp.439-471, 1988.};である(TVDについては下参照).

移流方程式の時間微分以外の項を&ref(tvdrk.eq1.gif,nolink,70%);として,一般的なRKは,
#ref(tvdrk.eq2.gif,nolink,70%)

ここで,&ref(tvdrk.eq3.gif,nolink,70%);である.
上付の&ref(tvdrk.eq4.gif,nolink,70%);はRKのステップごとの中間値を示している.

これに対して,TVD RKは以下である.
#ref(tvdrk.eq5.gif,nolink,70%)

ここで,
#ref(tvdrk.eq6.gif,nolink,70%)


**TVD RK2 [#xc624a05]
***TVD RK2 [#xc624a05]
2次精度のTVD RKはRKにおける修正オイラー法(RK2)に対応する.

&ref(tvdrk.eq7.gif,nolink,70%);で,
#ref(tvdrk.eq8.gif,nolink,70%)

?から,
#ref(tvdrk.eq9.gif,nolink,70%)

?から,
#ref(tvdrk.eq10.gif,nolink,70%)

ここで,通常のRKの&ref(tvdrk.eq11.gif,nolink,70%);を用い,
さらに,&ref(tvdrk.eq12.gif,nolink,70%);とすると,
#ref(tvdrk.eq13.gif,nolink,70%)

よって,
#ref(tvdrk.eq14.gif,nolink,70%)

TVD RK2では&ref(tvdrk.eq15.gif,nolink,70%);と&ref(tvdrk.eq16.gif,nolink,70%);についての2回の前進オイラー法の組み合わせで成り立っている.
この事実を使った実装を以下に示す.
+前進オイラー法により&ref(tvdrk.eq16.gif,nolink,70%);を求める.
#ref(tvdrk.eq17.gif,nolink,70%)

+前進オイラー法により&ref(tvdrk.eq16.gif,nolink,70%);から&ref(tvdrk.eq18.gif,nolink,70%);を求める.
#ref(tvdrk.eq19.gif,nolink,70%)

+&ref(tvdrk.eq20.gif,nolink,70%);と&ref(tvdrk.eq18.gif,nolink,70%);の平均をとることで,最終的な値を得る.
#ref(tvdrk.eq21.gif,nolink,70%)




**TVD RK3 [#y0ff4cfd]
***TVD RK3 [#y0ff4cfd]
&ref(tvdrk.eq22.gif,nolink,70%);で,
#ref(tvdrk.eq23.gif,nolink,70%)

?から,
#ref(tvdrk.eq24.gif,nolink,70%)

?から,
#ref(tvdrk.eq25.gif,nolink,70%)

ここで,通常のRKの&ref(tvdrk.eq26.gif,nolink,70%);を用い,
#ref(tvdrk.eq27.gif,nolink,70%)

&ref(tvdrk.eq28.gif,nolink,70%);とすると,
#ref(tvdrk.eq29.gif,nolink,70%)

よって,
#ref(tvdrk.eq30.gif,nolink,70%)

TVD RK3では3回の前進オイラー法の組み合わせ(&ref(tvdrk.eq15.gif,nolink,70%);と&ref(tvdrk.eq16.gif,nolink,70%);と&ref(tvdrk.eq31.gif,nolink,70%);について)で成り立っている.
TVD RK2と同様に,この事実を使った実装を以下に示す.
+TVD RK2と同じく2回の前進オイラー法により&ref(tvdrk.eq32.gif,nolink,70%);を求める.
#ref(tvdrk.eq33.gif,nolink,70%)

+以下の凸結合により&ref(tvdrk.eq31.gif,nolink,70%);
#ref(tvdrk.eq34.gif,nolink,70%)

+&ref(tvdrk.eq31.gif,nolink,70%);から前進オイラー法で&ref(tvdrk.eq35.gif,nolink,70%);を算出する.
#ref(tvdrk.eq36.gif,nolink,70%)

+最終的に,以下の凸結合により&ref(tvdrk.eq37.gif,nolink,70%);を近似する.
#ref(tvdrk.eq38.gif,nolink,70%)


**TVD RK4 [#f225c799]
***TVD RK4 [#f225c799]
&ref(tvdrk.eq39.gif,nolink,70%);で,
#ref(tvdrk.eq40.gif,nolink,70%)

各係数の導出は長くなりそうなので省略(&note{Shu1988};参照}.
#ref(tvdrk.eq41.gif,nolink,70%)


**TVD,TVB [#b9389917]
***TVD,TVB [#b9389917]
TVD(Total-Variation Diminishing)&note{Harten1983:A. Harten, "High resolution schemes for hyperbolic conservation laws", J. Comput. Phys. 49, pp.357-393, 1983.};は非線形方程式の収束条件のひとつである.
nステップ目でのTV(Total-Variation : 全変動)は以下のように定義される.
#ref(tvdrk.eq42.gif,nolink,70%)

これを離散化すると,
#ref(tvdrk.eq43.gif,nolink,70%)

となる.そして,
#ref(tvdrk.eq44.gif,nolink,70%)

を満たすとき,TV安定であるといい,その数値計算手法はTVDと呼ばれる.
また,
#ref(tvdrk.eq45.gif,nolink,70%)

を満たすとき,TVB(Total-Variation Bounded)であるという.
ここで&ref(tvdrk.eq46.gif,nolink,70%);は&ref(tvdrk.eq47.gif,nolink,70%);のみに依存する定数である.

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