Class | timeset |
In: |
../src/setup/timeset.f90
|
引数に与えられた NAMELIST ファイルから, 時刻に関する情報を取得し, 保管するための変数型モジュール
timeset_init : | 初期化ルーチン |
TimesetDelTimeHalf : | リープフロッグスキームの最初の 1 ステップを回すためのルーチン |
TimesetProgress : | リープフロッグスキームで 1 ステップを回すためのルーチン |
Subroutine : |
最初の一回目はオイラースキームで回すので, 長い時間刻みを半分にし, 短い時間で回すループ回数も半分にする. Asselin の時間フィルタの係数をゼロとする.
subroutine TimesetDelTimeHalf ! != リープフロッグスキームの最初の 1 ステップを回すためのルーチン ! ! 最初の一回目はオイラースキームで回すので, ! 長い時間刻みを半分にし, 短い時間で回すループ回数も半分にする. ! Asselin の時間フィルタの係数をゼロとする. implicit none TimeB = TimeN DelTimeLong = DelTimeLongSave * 0.5d0 NstepShort = NstepShortSave / 2 tfil = 0.0d0 !--------------------------------------------------------------- ! 確認 ! if (myrank == 0) then call MessageNotify( "M", "timeset_init_TimesetDelTimeHalf", "Initial DelTimeLong = %f", d=(/DelTimeLong/) ) call MessageNotify( "M", "timeset_init_TimesetDelTimeHalf", "Initial NstepShort = %d", i=(/NstepShort/) ) call MessageNotify( "M", "timeset_init_TimesetDelTimeHalf", "Asselin Time Filter coefficient = %f", d=(/tfil/) ) end if end subroutine TimesetDelTimeHalf
Subroutine : |
時刻を進め, 時刻の刻み幅と Asselin の時間フィルタの係数を直す.
subroutine TimesetProgress ! ! = リープフロッグスキームで 1 ステップを回すためのルーチン ! ! 時刻を進め, 時刻の刻み幅と Asselin の時間フィルタの係数を直す. ! implicit none ! 時刻刻み幅を直す ! DelTimeLong = DelTimeLongSave NstepShort = NstepShortSave ! 時刻を進める ! TimeB = TimeN TimeN = TimeA TimeA = TimeA + DelTimeLong ! Asselin の時間フィルタの係数 tfil = tfilSave end subroutine TimesetProgress
Subroutine : |
NAMELIST から必要な情報を読み取り, 時間関連の変数の設定を行う.
This procedure input/output NAMELIST#timeset_nml .
subroutine timeset_init ! != 初期化ルーチン ! ! NAMELIST から必要な情報を読み取り, 時間関連の変数の設定を行う. ! !暗黙の型宣言禁止 implicit none !内部変数 integer :: unit !--------------------------------------------------------------- ! NAMELIST から情報を取得 ! NAMELIST /timeset_nml/ DelTimeLong, DelTimeShort, IntegPeriod, RestartTime, DelTimeOutput call FileOpen(unit, file=namelist_filename, mode='r') read(unit, NML=timeset_nml) close(unit) ! 計算終了時刻 ! EndTime = RestartTime + IntegPeriod ! 時刻・タイムステップの設定 ! 実数の割り算なので, 念の為に. ! NstepShort = 2 * ( nint( DelTimeLong * 1.0d3 ) / nint( DelTimeShort * 1.0d3 ) ) ! 時間刻みの設定 ! 元々の値を保管しておく DelTimeLongSave = DelTimeLong NstepShortSave = NstepShort ! リスタートファイルを書き出すタイミング ! NstepOutput = nint( DelTimeOutput * 1.0d3 ) / nint( DelTimeLong * 1.0d3 ) ! 時刻の設定 ! TimeB = RestartTime - DelTimeLong TimeN = RestartTime TimeA = RestartTime + DelTimeLong ! リスタートか否か. リスタートなら .false. ! if ( nint( RestartTime * 1.0d3 ) == 0 ) then FlagInitialRun = .true. else FlagInitialRun = .false. end if !--------------------------------------------------------------- ! 確認 ! if (myrank == 0) then call MessageNotify( "M", "timeset_init", "DelTimeLong = %f", d=(/DelTimeLong/) ) call MessageNotify( "M", "timeset_init", "DelTimeShort = %f", d=(/DelTimeShort/) ) call MessageNotify( "M", "timeset_init", "Restarttime = %f", d=(/Restarttime/) ) call MessageNotify( "M", "timeset_init", "IntegPeriod = %f", d=(/IntegPeriod/) ) call MessageNotify( "M", "timeset_init", "EndTime = %f", d=(/EndTime/) ) call MessageNotify( "M", "timeset_init", "DelTimeOutput= %f", d=(/DelTimeOutput/) ) call MessageNotify( "M", "timeset_init", "NstepShort = %d", i=(/NstepShort/) ) call MessageNotify( "M", "timeset_init", "NstepOutput = %d", i=(/NstepOutput/) ) call MessageNotify( "M", "timeset_init", "tfil = %f", d=(/tfil/) ) end if end subroutine timeset_init