Class timeset
In: setup/timeset.f90

引数に与えられた NAMELIST ファイルから, 時刻に関する情報を取得し, 保管するための変数型モジュール

Methods

Included Modules

dc_types dc_iounit dc_message mpi_wrapper

Public Instance methods

DelTime
Variable :
DelTime = 2.0d0 :real(DP), save, public
: 長いタイムステップ
DelTimeLong
Variable :
DelTimeLong = 2.0d0 :real(DP), save, public
: 長いタイムステップ
DelTimeShort
Variable :
DelTimeShort = 2.0d-1 :real(DP), save, public
: 短いタイムステップ
EndTime
Variable :
EndTime = 3600.0d0 :real(DP), save, public
: 計算終了時刻
IntegPeriod
Variable :
IntegPeriod = 3600.0d0 :real(DP), save, public
: 積分時間
NstepLong
Variable :
NstepLong = 1800 :integer, save, public
: 長いタイムステップのステップ数
NstepRStat
Variable :
NstepRStat = 100 :integer, save, public
: 短いタイムステップのステップ数
NstepShort
Variable :
NstepShort = 20 :integer, save, public
: 短いタイムステップのステップ数
RestartTime
Variable :
RestartTime = 0.0d0 :real(DP), save, public
: 計算開始時刻
Subroutine :
cfgfile :character(*), intent(in)

NAMELIST から必要な情報を読み取り, 時間関連の変数の設定を行う.

This procedure input/output NAMELIST#timeset_nml .

[Source]

  subroutine timeset_init(cfgfile)
    !
    !NAMELIST から必要な情報を読み取り, 時間関連の変数の設定を行う. 
    !

    !暗黙の型宣言禁止
    implicit none

    !入力変数
    character(*), intent(in)      :: cfgfile

    !内部変数
    integer    :: unit
    integer    :: NumRStat = 10

    !---------------------------------------------------------------    
    ! NAMELIST から情報を取得
    !
    NAMELIST /timeset_nml/ DelTimeLong, DelTimeShort, IntegPeriod, Restarttime, DelTime, NumRStat
    
    call FileOpen(unit, file=cfgfile, mode='r')
    read(unit, NML=timeset_nml)
    close(unit)

    EndTime = RestartTime + IntegPeriod
    
    !---------------------------------------------------------------
    ! ループ回数の設定
    !
    NstepLong = nint( IntegPeriod / DelTimeLong )
    NstepShort = 2 * nint( DelTimeLong / DelTimeShort )
    NstepRStat = NstepLong / NumRStat

    !---------------------------------------------------------------
    ! 確認
    !
    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
      
      !長い時間ステップが短い時間ステップで割り切れない場合には警告を出す
      if(mod(NstepLong, NumRStat) /= 0) then 
        call MessageNotify( "W", "timeset_init", "mod(NstepLong, NumRStat) is not zero")
      end if
      
      call MessageNotify( "M", "timeset_init", "DelTimeLong  = %f", d=(/DelTimeLong/) )
      call MessageNotify( "M", "timeset_init", "DelTimeShort = %f", d=(/DelTimeShort/) )
      call MessageNotify( "M", "timeset_init", "NstepLong  = %d", i=(/NstepLong/) )
      call MessageNotify( "M", "timeset_init", "NstepShort = %d", i=(/NstepShort/) )
      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/) )
    end if
   
  end subroutine timeset_init