Kimmy's Lab.

フルート好きのリケジョkimmyによる裏研究所

2次元圧縮性流体計算(無反射境界条件)

テキスト「空力音の直接数値計算を支える技術」(暗黙の型宣言著)の補足課題7

全部読んだらやってみよう!その2

課題

補足課題6で作成した圧縮性流体計算プログラムに、無反射境界条件を適用する.

  • ヒント
    • 特性波の方向に注意.入ってくる特性波を0にして打ち消す.



解答例

プログラム全体は載せられないので,ポイントだけ解説します.


  • main.f90
        TVDRK : block
                !   :
                !  略
                !   :
                !--- 時間積分の前にNSCBCを適用
                ! NSCBC x-dir
                bd = ([1, Nx])

                do j = 1, Ny
                    ! x=0側の境界.
                    !入ってくる特性波(つまり流速が正の特性波)を0にして打ち消す.
                    L11(1,j) = max((u(1,j) - C0),0.d0)*(d_p_dx(1,j) - dens(1,j)*C0*d_u_dx(1,j))   
                    ! L11の特性波の流速は(u - C0)

                    L12(1,j) = max( u(1,j)      ,0.d0)*((C0**2)*d_dens_dx(1,j) - d_p_dx(1,j))        
                    ! L12の特性波の流速はu

                    L13(1,j) = max( u(1,j)      ,0.d0)*d_v_dx(1,j)                                                   
                    ! L13の特性波の流速はu

                    L15(1,j) = max((u(1,j) + C0),0.d0)*(d_p_dx(1,j) + dens(1,j)*C0*d_u_dx(1,j)) 
                    ! L15の特性波の流速は(u + C0)

                   ! x=Lx側の境界.
                   ! 入ってくる特性波(つまり流速が負の特性波)を0にして打ち消す.
                    L11(2,j) = min((u(Nx,j) - C0),0.d0)*(d_p_dx(Nx,j) - dens(Nx,j)*C0*d_u_dx(Nx,j))    
                    L12(2,j) = min( u(Nx,j)      ,0.d0)*((C0**2)*d_dens_dx(Nx,j) - d_p_dx(Nx,j))
                    L13(2,j) = min( u(Nx,j)      ,0.d0)*d_v_dx(Nx,j)
                    L15(2,j) = min((u(Nx,j) + C0),0.d0)*(d_p_dx(Nx,j) + dens(Nx,j)*C0*d_u_dx(Nx,j))
                end do
                
                do nb = 1, 2
                    d11 = (L12(nb,:) + 0.5d0*(L15(nb,:) + L11(nb,:)))/C0**2
                    d12 = (L15(nb,:) + L11(nb,:))*0.5d0
                    d13 = (L15(nb,:) - L11(nb,:))*0.5d0/(dens(bd(nb),:)*C0)
                    d14 =  L13(nb,:)

                   ! NSCBCを適用した支配方程式(テキストの式(6.1)~(6.5))と,
                   ! もともとの支配方程式(テキストの式(2.1)~(2.5))を比較し,
                   ! 境界の値にNSCBCを適用する.
                    d_dens_u_dx(bd(nb),:)   = d11(:)
                    d_dens_u_u_dx(bd(nb),:) = u(bd(nb),:)*d11(:) + dens(bd(nb),:)*d13(:)
                    d_p_dx(bd(nb), :)  = 0.d0
                    d_visyx_dx(bd(nb), :) = 0.d0
                    d_dens_u_v_dx(bd(nb),:) = v(bd(nb),:)*d11(:) + dens(bd(nb),:)*d14(:)
                    d_dens_u_TE_dx(bd(nb),:)= 0.5d0*(u(bd(nb),:)**2 + v(bd(nb),:)**2)*d11(:) + d12(:)/(Gamma-1.d0) &
                                            + dens(bd(nb),:)*u(bd(nb),:)*d13(:) + dens(bd(nb),:)*v(bd(nb),:)*d14(:)
                    d_u_p_dx(bd(nb),:) = 0.d0
                    d_qx_dx(bd(nb),:)  = 0.d0
                end do

                ! NSCBC y-dir
                !   :
                !  略
                !   :
                
                !--- Time Integration
                !   :
                !  略
                !   :                
        end block TVDRK

計算結果

NSCBCを適用しても,壁からの非物理的な波の反射を完全には抑えられない. 特にdilatation分布を見ると,そのことがよくわかる.

局所境界条件であるNSCBCだけでは反射を完全に抑えられないので,適宜,領域境界条件を適用する. これはテキスト6.3でも述べられていることだけど,実際にやってみるとそのことがよく理解できる.

  • 流速分布

    f:id:kimmy123:20200725161250p:plain
    図1 流速分布

  • 渦度分布

    f:id:kimmy123:20200725161337p:plain
    図2 渦度分布

  • Dilatation分布
    t>3/4で,四隅から波が反射して返ってきている.

    f:id:kimmy123:20200725161406p:plain
    図3 Dilatation分布