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