ENOを改良して,重み付き平均をとることで5次精度を実現したのがWENOである.

3次精度のENOでは&ref(eqa_phix-i.gif,,70%);について,
&ref(eqa_weno1.gif,,70%);の6つの内,4つの値を用いて補間を行う.
3次精度のENOでは&ref(eqa_phix-i.gif,nolink,70%);について,
&ref(eqa_weno1.gif,nolink,70%);の6つの内,4つの値を用いて補間を行う.
そして,その組み合わせは3パターン
(&ref(eqa_weno2.gif,,70%);と&ref(eqa_weno3.gif,,70%);と&ref(eqa_weno4.gif,,70%);)である.
実際に展開してみと以下となる(&ref(eqa_phix-.gif,,70%);では,k=i-1).
(&ref(eqa_weno2.gif,nolink,70%);と&ref(eqa_weno3.gif,nolink,70%);と&ref(eqa_weno4.gif,nolink,70%);)である.
実際に展開してみと以下となる(&ref(eqa_phix-.gif,nolink,70%);では,k=i-1).

#ref(eqa_weno5.gif,,70%)
#ref(eqa_weno5.gif,nolink,70%)

1+2+4, 1+2+5, 1+3+6, 1+3+7の4パターンになるが,
以下に示すように1+2+5と1+3+6が同じなので,組み合わせは3パターンになる.
それぞれさらに展開してφiの式にする.

#ref(eqa_weno6.gif,,70%)
#ref(eqa_weno6.gif,nolink,70%)

差分を&ref(eqa_weno7.gif,,70%);と表記すると上記3パターンは,
差分を&ref(eqa_weno7.gif,nolink,70%);と表記すると上記3パターンは,

#ref(eqa_weno8.gif,,70%)
#ref(eqa_weno8.gif,nolink,70%)

ENO近似は結局この3つのパターンに集約される.
これらの内どれかが状況に応じて用いられる.
WENO(Weighted ENO)はその名の通り,これら3つの凸結合
((凸結合とは一次結合&ref(eqa_weno9.gif,,70%);でアフィン結合(&ref(eqa_weno10.gif,,70%);),かつ,&ref(eqa_weno11.gif,,70%);))
で&ref(eqa_phix.gif,,70%);を近似する
((凸結合とは一次結合&ref(eqa_weno9.gif,nolink,70%);でアフィン結合(&ref(eqa_weno10.gif,nolink,70%);),かつ,&ref(eqa_weno11.gif,nolink,70%);))
で&ref(eqa_phix.gif,nolink,70%);を近似する
((X. D. Liu, S. Osher, and T. Chan, "Weighted essentially non-oscillatory schemes", J. Comput. Phys. 115(1), pp. 200-212, 1994.)).
つまり,
#ref(eqa_weno12.gif,,70%)
ここで,&ref(eqa_weno13.gif,,70%);.
#ref(eqa_weno12.gif,nolink,70%)
ここで,&ref(eqa_weno13.gif,nolink,70%);.

問題となるのは&ref(eqa_weno14.gif,,70%);の選択である.
関数が滑らかならば,&ref(eqa_weno15.gif,,70%);で5次精度が得られる
問題となるのは&ref(eqa_weno14.gif,nolink,70%);の選択である.
関数が滑らかならば,&ref(eqa_weno15.gif,nolink,70%);で5次精度が得られる
((G. Jiang and C.-W. Shu, "Efficient implementation of weighted ENO schemes", J. Comput. Phys. 126, pp.202-228, 1996.)).
ただし,矩形波のように滑らかでない関数だととたんに不安定になる.
((G. Jiang and D. Peng, "Weighted ENO Schemes for Hamilton Jacobi Equations", SIAM J. Sci. Comput. 21, pp.2126-2143, 2000.))では滑らかでない関数でも安定な重みの計算法を提案している.その方法を以下に示す.

&ref(eqa_phix.gif,,70%);の滑らかさ(smoothness)を以下のように定義する.
#ref(eqa_weno16.gif,,70%)
先ほどの重みの組み合わせ(&ref(eqa_weno17.gif,,70%);)をsmoothnessの2乗で割ることで重みを得る.
#ref(eqa_weno18.gif,,70%)
&ref(eqa_phix.gif,nolink,70%);の滑らかさ(smoothness)を以下のように定義する.
#ref(eqa_weno16.gif,nolink,70%)
先ほどの重みの組み合わせ(&ref(eqa_weno17.gif,nolink,70%);)をsmoothnessの2乗で割ることで重みを得る.
#ref(eqa_weno18.gif,nolink,70%)
ここで,
#ref(eqa_weno19.gif,,70%)
&ref(eqa_weno20.gif,,70%);はゼロ割を防ぐための項である.
&ref(eqa_weno21.gif,,70%);は&ref(eqa_phi.gif,,70%);が符号付距離場であることが前提で設定されている.
つまり,&ref(eqa_phix.gif,,70%);がほぼ1であり,&ref(eqa_weno22.gif,,70%);の場合である.
最終的に&ref(eqa_weno23.gif,,70%);を満たすために,正規化を行う.
#ref(eqa_weno24.gif,,70%)
#ref(eqa_weno19.gif,nolink,70%)
&ref(eqa_weno20.gif,nolink,70%);はゼロ割を防ぐための項である.
&ref(eqa_weno21.gif,nolink,70%);は&ref(eqa_phi.gif,nolink,70%);が符号付距離場であることが前提で設定されている.
つまり,&ref(eqa_phix.gif,nolink,70%);がほぼ1であり,&ref(eqa_weno22.gif,nolink,70%);の場合である.
最終的に&ref(eqa_weno23.gif,nolink,70%);を満たすために,正規化を行う.
#ref(eqa_weno24.gif,nolink,70%)

これらから,
#ref(eqa_weno25.gif,,70%)
により&ref(eqa_phi.gif,,70%);を更新することで5次精度の結果が得られる.
#ref(eqa_weno25.gif,nolink,70%)
により&ref(eqa_phi.gif,nolink,70%);を更新することで5次精度の結果が得られる.

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