スカラー量の時間発展を解く
use dc_trace, only: BeginSub, EndSub use gridset, only: DimXMin, DimXMax, DimZMin, DimZMax use bcset, only: ss_BC use average, only: ss_avr_sf use basicset, only: ss_PotTempBasicZ use arareset, only: NuH, NuV use average, only: ss_avr_fs, ss_avr_sf, fs_avr_ss, sf_avr_ss use differentiate_center4, only: fs_dx_ss, ss_dx_fs, sf_dz_ss, ss_dz_sf
real(8), intent(in) :: DelTime real(8), intent(in) :: ss_Scalar_in(DimXMin:DimXMax, DimZMin:DimZMax) real(8), intent(in) :: fs_VelX_adv(DimXMin:DimXMax, DimZMin:DimZMax) real(8), intent(in) :: sf_VelZ_adv(DimXMin:DimXMax, DimZMin:DimZMax) real(8), intent(in) :: ss_Scalar_adv(DimXMin:DimXMax, DimZMin:DimZMax) real(8), intent(in) :: ss_Scalar_dif(DimXMin:DimXMax, DimZMin:DimZMax) real(8), intent(in) :: ss_Kh_dif(DimXMin:DimXMax, DimZMin:DimZMax)
real(8), intent(out) :: ss_Scalar_out(DimXMin:DimXMax, DimZMin:DimZMax)
スカラー量の移流を 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 bcset, only: ss_BC, sf_BC, fs_BC use differentiate_center4, only: fs_dx_ss, sf_dz_ss, ss_dx_fs, ss_dz_sf
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)