固有値
を考える。 はのうち正の固有値のみを持つ行列、は負の 固有値のみを持つ行列である。 この速度でやりとりされる、流束の方もによって移動すると によって移動するとに分離することを考える。 そこで、については後退差分を、については前進差分をとれば 自然と風上差分が実現する。 この方法を、Flux vector Splitting(FVS:流速分離)法という。
空間微分の項は
のように書ける。 ここで、流束は
のように計算される。
プログラムを見てみよう。
右固有行列RをR[l,m]
に、
その逆行列をL[l,m]
に求めるところはFDSと同じである。
w[n1,n2]
はが格納される。
最後にこれに伴う数値流束をEp[j]
に求めている。
for n1:=1 to 3 do begin for n2:=1 to 3 do begin w[n1,n2]:=0.0; for k:=1 to 3 do begin w[n1,n2]:=w[n1,n2] +R[n1,k]*max(0.0,Lambda[k])*L[k,n2]; end; end; end; E1p[j]:=w[1,1]*rho[j]+w[1,2]*m[j]+w[1,3]*e[j]; E2p[j]:=w[2,1]*rho[j]+w[2,2]*m[j]+w[2,3]*e[j]; E3p[j]:=w[3,1]*rho[j]+w[3,2]*m[j]+w[3,3]*e[j];つぎに、
w[n1,n2]
はが格納される。
最後にこれに伴う数値流束をEm[j]
に求めている。
for n1:=1 to 3 do begin for n2:=1 to 3 do begin w[n1,n2]:=0.0; for k:=1 to 3 do begin w[n1,n2]:=w[n1,n2] +R[n1,k]*min(0.0,Lambda[k])*L[k,n2]; end; end; end; E1m[j]:=w[1,1]*rho[j]+w[1,2]*m[j]+w[1,3]*e[j]; E2m[j]:=w[2,1]*rho[j]+w[2,2]*m[j]+w[2,3]*e[j]; E3m[j]:=w[3,1]*rho[j]+w[3,2]*m[j]+w[3,3]*e[j]; end;ここで得られた数値流束は(
Ep[j]
)については後退差分、
(Em[j]
)については前進差分をとって、
時間進化を計算することによって、
だけ進んだ状態を計算することができる。
for j:=1 to jm-1 do begin rho[j]:=rho[j]-nu*(E1p[j]+E1m[j+1]-E1p[j-1]-E1m[j]); m[j] :=m[j] -nu*(E2p[j]+E2m[j+1]-E2p[j-1]-E2m[j]); e[j] :=e[j] -nu*(E3p[j]+E3m[j+1]-E3p[j-1]-E3m[j]); end;
Figure 3.7: Steger WarmingのFlux Vector Splitting法による衝撃波管問題の解。
初期条件は同じ。