第5-2回 Riemann問題(FVS)[python]
前回は圧縮性流体の支配方程式としてオイラー方程式を取り上げました。この式は保存形で書かれており、有限体積法で解くことができます。
しかし、圧縮性流体において重要な問題があり、その一つがリーマン(Riemann)問題です。
次の図のように、ある領域において不連続な初期値をもつ場合の方程式をリーマン問題と言います。

離散化した際は当然ながら、上記のように不連続な値を取らざるを得ないです。
しかし、現実で衝撃波のように不連続な値が発生する場合、いままで通り風上差分を用いることができるのでしょうか。
オイラー方程式では3種の式が連動していますが、それぞれの伝播する方向は常に等しいわけではありません。
そこでFVS(Flux Vector Splitting)と呼ばれる方法を用います。
まず、オイラー方程式をヤコビアン行列\(A=\frac{\partial F}{\partial Q} \)を用いて少し書き換えます。
$$\frac{\partial Q}{\partial t}+\frac{\partial F}{\partial x}=0 ⇔ \frac{\partial Q}{\partial t}+\frac{\partial F}{\partial Q} \frac{\partial Q}{\partial x}=0 $$
$$ ⇔ \frac{\partial Q}{\partial t}+A\frac{\partial Q}{\partial x}=0 $$
このことから、\(A\)が特性速度となり、\(A\)により流れの向きが決まります。
また、上の式の左辺第二項より\(F=AQ\)です。
ヤコビアン行列\(A\)は3×3の行列であり、固有値がそれぞれの向きを決定づけるので、対角化し固有値を算出します。
$$A=R\Lambda R^{-1}$$
$$R= \left[ \begin{array}{ccc} 1&1&1 \\ u-c&u&u+c \\ H-uc&\frac{1}{2}u^2&H+uc \end{array}\right] $$
$$\Lambda= \left[ \begin{array}{ccc} u-c&0&0 \\ 0&u&0 \\ 0&0&u+c \end{array}\right] $$
$$R^{-1}= \left[ \begin{array}{ccc} \frac{1}{2}\left( b_1+\frac{u}{c}\right) &
-\frac{1}{2}\left( \frac{1}{c}+b_2u\right) &\frac{1}{2}b_2 \\ 1-b_1&b_2 u&-b_2 \\ \frac{1}{2}\left( b_1-\frac{u}{c}\right) & \frac{1}{2}\left( \frac{1}{c}+b_2 u\right) &\frac{1}{2} b_2 \end{array}\right] $$
$$c=\sqrt{(\gamma-1)(H-\frac{1}{2}u^2)}, b_1=\frac{u^2}{2}\frac{\gamma-1}{c^2}, b_2=\frac{\gamma-1}{c^2}$$
固有値が正のときに流れは左から右へ、固有値が負のときに流れは右から左へ伝わります。
話を戻しますが、FVSはこの固有値により向きを変える方法になります。固有値が正のものに\(+\)、固有値が負のものに\(-\)をつけて次のように書きます。
$$A^{\pm}=R\Lambda^{\pm}R^{-1}$$
少し、具体的に\(\tilde{f}_{j+1/2}\)について考えます。

一次風上で近似することを考えると、\(A^+\)に対して \(A^+_j\)をとり、
\(A^-\)に対して \(A^-_{j+1}\)をとることになります。
つまり、フラックスは次のように書けます。
$$\tilde{f}_{j+1/2}=F_j^++F_{j+1}^- =A_j^+Q_j+A_{j+1}^-Q_{j+1} $$
これをフラックスとして適用することで、オイラー方程式を解くことができます。
最後に具体的な\(A^+,A^-\)の計算方法を書いておきます。
$$A^+ =R\Lambda^+ R^{-1}= R\ \frac{1}{2}\left[ \begin{array}{ccc} u-c+|u-c|&0&0 \\ 0&u+|u|&0 \\ 0&0&u+c+|u+c| \end{array}\right] R^{-1}$$
$$A^- =R\Lambda^- R^{-1}= R\ \frac{1}{2}\left[ \begin{array}{ccc} u-c-|u-c|&0&0 \\ 0&u-|u|&0 \\ 0&0&u+c-|u+c| \end{array}\right] R^{-1}$$
次回は実際にコードに落とし込んでみたいと思います。
by hide
*コードは第5-3回に書いてあります。
Tweet
コメントを残す