| Class | timeset |
| In: |
../src/setup/timeset.f90
|
引数に与えられた NAMELIST ファイルから, 時刻に関する情報を取得し, 保管するための変数型モジュール
| Subroutine : |
subroutine TimesetProgress
implicit none
! 時刻刻み幅を直す
!
DelTimeLong = DelTimeLongSave
NstepShort = NstepShortSave
! 時刻を進める
!
TimeB = TimeN
TimeN = TimeA
TimeA = TimeA + DelTimeLong
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
!---------------------------------------------------------------
! 時刻・タイムステップの設定
! t=0 の時は, 最初の 1 ループだけオイラー法で解くので細工する.
!
NstepShort = 2 * nint( DelTimeLong / DelTimeShort )
DelTimeLongSave = DelTimeLong
NstepShortSave = NstepShort
if (RestartTime /= 0.0d0) then
TimeB = RestartTime - DelTimeLong
TimeN = RestartTime
TimeA = RestartTime + DelTimeLong
else
TimeB = RestartTime
TimeN = RestartTime
TimeA = RestartTime + DelTimeLong
DelTimeLong = DelTimeLong * 5.0d-1
NstepShort = NstepShort / 2
end if
!---------------------------------------------------------------
! 確認
!
if (myrank == 0) then
!積分時間が長い時間ステップで割り切れない場合には警告を出す
if(mod((IntegPeriod - Restarttime), DelTimeLong) /= 0) then
call MessageNotify( "W", "timeset_init", "mod((IntegPeriod - Restarttime), DelTimeLong) is not zero")
end if
!長い時間ステップが短い時間ステップで割り切れない場合には警告を出す
if(mod(DelTimeLong, DelTimeShort) /= 0) then
call MessageNotify( "W", "timeset_init", "mod(DelTimeLong, DelTimeShort) is not zero")
end if
call MessageNotify( "M", "timeset_init", "DelTimeLong = %f", d=(/DelTimeLongSave/) )
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/) )
end if
end subroutine timeset_init