!---------------------------------------------------------------------
!     Copyright (C) GFD Dennou Club, 2004. All rights reserved.
!---------------------------------------------------------------------
                                                                 !=begin
!= Module TimeSet
!
!   * Developer: SUGIYAMA Ko-ichiro (sugiyama@gfd-dennou.org)
!   * Version: $Id: timeset.f90,v 1.7 2005/02/03 02:20:58 sugiyama Exp $
!   * Tag Name: $Name:  $
!   * Change History:
!
!== Overview
!
!NAMELIST から時間の設定を行うモジュール
!
!== Error Handling
!
!== Known Bugs
!
!== Note
!
!== Future Plans
!
!エラー処理において gt4f90io を利用
!
                                                                 !=end

module timeset
  implicit none
  save
                                                                 !=begin
  !== Public Interface
  real(8)           :: DelTimeLong   !長いタイムステップ
  real(8)           :: DelTimeShort  !短いタイムステップ
  real(8)           :: TimeInt    !積分時間
  real(8)           :: TimeDisp   !ファイル出力する時間間隔
  integer           :: NstepLong !長いタイムステップのステップ数
  integer           :: NstepShort!短いタイムステップのステップ数
                                                                 !=end
contains
                                                                 !=begin
  !== Procedure Interface
  !
  !=== Initialize module and acquire NAMELIST
  !
  !NAMELIST から必要な情報を読み取り, 変数の設定を行う.
  !
  subroutine timeset_init(cfgfile)

    !== Dependency
    use dc_trace,      only: BeginSub, EndSub
    use dc_message,    only: MessageNotify

    !=== Input
    character(*), intent(in) :: cfgfile

    !=== NAMELIST
    NAMELIST /timeset/ &
         & DelTimeLong, DelTimeShort, TimeInt, TimeDisp
                                                                 !=end

    call BeginSub("timeset_init", &
&                 fmt="%c",       &
&                 c1="Initialize parameters of time integration. ")

    open (10, FILE=cfgfile)
    read(10, NML=timeset)
    close(10)

    !--- ループ回数
    NstepLong = TimeInt / DelTimeLong
    NstepShort = 2 * DelTimeLong / DelTimeShort

    !--- 警告
    if(mod(TimeInt, DelTimeLong) /= 0) then
       call MessageNotify("Message", "timeset_init", &
&                         "mod(TimeInt, DelTimeLong) is not zero")
    end if

    if(mod(DelTimeLong, DelTimeShort) /= 0) then
       call MessageNotify("Message", "timeset_init", &
&                         "mod(DelTimeLong, DelTimeShort) is not zero")
    end if

    if(mod(TimeDisp, DelTimeLong) /= 0) then
       call MessageNotify("Message", "timeset_init", &
&                         "mod(TimeDisp, DelTimeLong) is not zero")
    end if

    call EndSub("timeset_init")

  end subroutine timeset_init

end module timeset