next up previous contents
Next: 流体力学方程式の高解像度風上差分法 Up: 流体力学方程式の差分解法 Previous: 流体力学方程式の風上差分法(1)---Flux Difference Splitting法

流体力学方程式の風上差分法(2)---Flux Vector Splitting法

 

固有値

を考える。 のうち正の固有値のみを持つ行列、は負の 固有値のみを持つ行列である。 この速度でやりとりされる、流束の方もによって移動するによって移動するとに分離することを考える。 そこで、については後退差分を、については前進差分をとれば 自然と風上差分が実現する。 この方法を、Flux vector Splitting(FVS:流速分離)法という。

空間微分の項は

 

のように書ける。 ここで、流束は

のように計算される。

プログラムを見てみよう。 右固有行列RR[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法による衝撃波管問題の解。 初期条件は同じ。



Kohji Tomisaka
1999年02月16日 18時10分21秒