Time manage module directly called by GCM run program.
use dycore_type_mod , only: STRING use time_mod , only: StepInterval, OutputStep , & & CurrentLoop , CurrentTime , & & DelTime
private public :: dycore_time_init, dycore_time_progress ! subroutines public :: dycore_time_filter ! subroutines public :: dycore_time_end ! subroutines public :: StepInterval, OutputStep ! variables public :: CurrentLoop , CurrentTime ! variables public :: DelTime ! variables
time_mod の初期化を行なう。
subroutine dycore_time_init
use time_mod, only: time_init use dycore_type_mod, only: DYCORE_VARS, DYCORE_DIMS, & & STRING, DBKIND, INTKIND use dc_trace, only: BeginSub, EndSub, DbgMessage
Vars_a 内の各種データを Vars に、 Vars_n 内の各種データを Vas_b に移す。 Vars_a 内のデータは全てゼロにクリアする。
また、 time_mod の time_progress を呼ぶ事によって time_mod の CurrentTime と CurrentLoop を進める。
subroutine dycore_time_progress( Vars_b, Vars_n, Vars_a )
use dycore_type_mod, only: DYCORE_VARS, & & STRING, REKIND, DBKIND, INTKIND use time_mod , only: time_progress use dc_trace , only: BeginSub, EndSub, DbgMessage
type(DYCORE_VARS), intent(inout):: Vars_b ! 格子点データ全種(t-Δt) type(DYCORE_VARS), intent(inout):: Vars_n ! 格子点データ全種(t) type(DYCORE_VARS), intent(inout):: Vars_a ! 格子点データ全種(t+Δt)
Vars_b, Vars_n, Vars_a を用い、Vars_n に時間フィルターをかける
constants_mod の TimeFilter を時間フィルターの係数として 用いる。ゼロの場合は実質的にフィルターがかからない。
constants_mod の TimeFilterStepInt から、何ステップ毎に フィルターがかかるか制御される。
subroutine dycore_time_filter( Vars_b, Vars_n, Vars_a )
use dycore_type_mod, only: DYCORE_VARS, & & STRING, REKIND, DBKIND, INTKIND use constants_mod , only: TimeFilter, TimeFilterStepInt use dc_trace , only: BeginSub, EndSub, DbgMessage
type(DYCORE_VARS), intent(in) :: Vars_b ! 格子点データ全種(t-Δt) type(DYCORE_VARS), intent(inout):: Vars_n ! 格子点データ全種(t) type(DYCORE_VARS), intent(in) :: Vars_a ! 格子点データ全種(t+Δt)
今の所、何もしない。
subroutine dycore_time_end
use time_mod , only: time_end use dycore_type_mod, only: STRING, REKIND, DBKIND, INTKIND use dc_trace, only: BeginSub, EndSub, DbgMessage