Subroutine AdvectScalar_MPDATA

Overview

スカラー量の移流を MPDATA スキームを用いて計算する. 

Error Handling

Known Bugs

Note

スキームの都合上, 時間積分は前進差分を用いて行う.
実引数に渡す変数配列の時間レベルに注意すること.

非定常な流れの場合, 引数 fs_VelX, fs_VelZ の時間レベルは ss_Scalar の
時間レベルから DelTime/2 だけ先行させたものにする.

速度場を leapfrog スキームで解く場合に簡単に実装するなら, 時刻 t における
fs_VelX_n, fs_VelZ_n を用いて時間刻み 2*DelTime の前進差分として ss_Scala
を時間積分する.

      t-Δt           t           t+Δt
   -----|-------------|-------------|-----
            [fs_VelX_n,sf_VelZ_n]
   ss_Scalar_b                  ss_Scalar_a 
        |======== 2*DelTime =======>|


精度良く計算するなら時刻 t+Δt/2 における fs_VelX_mid, sf_VelZ_mid を 
用いて時間刻み DelTime の前進差分として ss_Scalar を計算する.

      t-Δt           t           t+Δt
   -----|-------------|------|------|-----
                  [fs_VelX_mid,sf_VelZ_mid]
                  s_Scalar_n   ss_Scalar_a 
                      |== DelTime =>|

Future Plans

Dependency

use dc_trace,      only: BeginSub, EndSub 
use gridset,       only: DimXMin, DimXMax, DimZMin, DimZMax, DelX, DelZ
use average,       only: fs_avr_sf, sf_avr_fs, sf_avr_ss, fs_avr_ss
use differentiate, only: fs_dx_ss, sf_dz_ss, ss_dx_fs, ss_dz_sf
use bcset,         only: ss_BC, sf_BC, fs_BC

Input

real(8), intent(in)  :: fs_VelX(DimXMin:DimXMax, DimZMin:DimZMax)
real(8), intent(in)  :: sf_VelZ(DimXMin:DimXMax, DimZMin:DimZMax)
real(8), intent(in)  :: ss_Scalar(DimXMin:DimXMax, DimZMin:DimZMax)
real(8), intent(in)  :: DelTime

Output

real(8), intent(out) :: ss_AdvScalar(DimXMin:DimXMax, DimZMin:DimZMax)