*時間差分 [#hf60c3d9] **TVD RK [#b819da71] ルンゲクッタ法などの解法は1次元,一定幅グリッドではTV安定であるが, 多次元,可変幅グリッドではどうか?という問題がある. これに対して,TVDを満たすルンゲクッタがTVD RK¬e{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%) 各係数の導出は長くなりそうなので省略(¬e{Shu1988};参照}. #ref(tvdrk.eq41.gif,nolink,70%) **TVD,TVB [#b9389917] ***TVD,TVB [#b9389917] TVD(Total-Variation Diminishing)¬e{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%);のみに依存する定数である.