- 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)