工学系大学院生のブログ

2人の大学院生による雑記ブログ

第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}\)について考えます。

FVSのイメージ図


一次風上で近似することを考えると、\(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回に書いてあります。

このエントリーをはてなブックマークに追加

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です