- Developer: ODAKA Masatsugu (odakker(at)gfd-dennou.org)
 
- Version: $Id: advectscalar_mpdata.f90,v 1.2 2005/02/03 16:38:46 odakker Exp $ 
 
- Tag Name: $Name:  $
 
- Change History: 
 
スカラー量の移流を MPDATA スキームを用いて計算する. 
スキームの都合上, 時間積分は前進差分を用いて行う.
実引数に渡す変数配列の時間レベルに注意すること.
非定常な流れの場合, 引数 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 =>|
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
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
real(8), intent(out) :: ss_AdvScalar(DimXMin:DimXMax, DimZMin:DimZMax)