!= Module HistoryFileIO
!
! Authors::   SUGIYAMA Ko-ichiro
! Version::   $Id: historyfileio2.f90,v 1.1 2011-04-05 14:46:54 sugiyama Exp $ 
! Tag Name::  $Name: arare4-20120911 $
! Copyright:: Copyright (C) GFD Dennou Club, 2006. All rights reserved.
! License::   See COPYRIGHT[link:../../COPYRIGHT]
!
!== Overview 
!
!ファイル出力. 長い時間ステップの値を出力.
!
!== Error Handling
!
!== Known Bugs
!
!== Note
!
!== Future Plans
!

module HistoryAutoFileIO
  !
  !ファイル出力. 長い時間ステップの値を出力.
  !

  ! 種別型パラメタ
  ! Kind type parameter
  !
  use dc_types, only: DP, &    ! 倍精度実数型. Double precision. 
    &                 STRING, &  ! 文字列.       Strings. 
    &                 TOKEN      ! キーワード.   Keywords. 

  use gridset,  only: x_X,               &!X 座標軸(スカラー格子点)
    &                 z_Z,               &!Z 座標軸(スカラー格子点)
    &                 FileNX,            &!X 方向の格子点(ファイル出力)
    &                 FileNZ,            &!Z 方向の格子点(ファイル出力)
    &                 FileXMin,          &!X 方向の配列の下限(ファイル出力)
    &                 FileXMax,          &!X 方向の配列の上限(ファイル出力)
    &                 FileZMin,          &!Z 方向の配列の下限(ファイル出力)
    &                 FileZMax            !Z 方向の配列の上限(ファイル出力)
  use fileset,  only: DefaultFilePrefix, &!ヒストリファイル名
    &                 exptitle,          &!データの表題
    &                 expsrc,            &!データを作成する手順
    &                 expinst,           &!最終変更者・組織
    &                 FileNum             !ヒストリファイルの数
  
  !暗黙の型宣言禁止
  implicit none
  
  !属性の指定
  private

  !公開手続き
  public HistoryFileAutoOpen
  public HistoryFileAutoClose

  ! 非公開変数
  ! Private variables
  !
  character(*), parameter:: module_name = 'history_file_io'
                              ! モジュールの名称. 
                              ! Module name
  character(*), parameter:: version = &
    & '$Name: arare4-20120911 $' // &
    & '$Id: historyfileio2.f90,v 1.1 2011-04-05 14:46:54 sugiyama Exp $'
                              ! モジュールのバージョン
                              ! Module version

  ! INTERFACE 文 ; INTERFACE statements
  !
  interface HistoryFileAutoOpen
    module procedure HistoryFileAutoOpen
  end interface

  interface HistoryFileAutoClose
    module procedure HistoryFileAutoClose
  end interface

contains 

!!!------------------------------------------------------------------------
  subroutine HistoryFileAutoOpen( RestartTime, cfgfile ) 
    !
    ! history_file_io モジュールの初期化を行います. 
    !--
    ! NAMELIST#history_file_io_nml の読み込みはこの手続きで行われます. 
    !++
    !
    ! "history_file_io" module is initialized. 
    !--
    ! "NAMELIST#history_file_io_nml" is loaded in this procedure. 
    !++
    !

    ! モジュール引用 ; USE statements
    !

    ! gtool5 netCDF データの入出力インターフェース (大規模モデル用)
    ! Interface of Input/Output of gtool5 netCDF data (For large models)
    !
    use gtool_historyauto, only: HistoryAutoCreate, &
      & HistoryAutoAddAttr, HistoryAutoAddWeight, HistoryAutoPutAxis

    ! ファイル入出力補助
    ! File I/O support
    !
    use dc_iounit, only: FileOpen

    ! 文字列操作
    ! Character handling
    !
    use dc_string, only: CPrintf

    ! 種別型パラメタ
    ! Kind type parameter
    !
    use dc_types, only: STDOUT ! 標準出力の装置番号. Unit number of standard output

    use timeset, only: TimeInt, TimeDisp


    ! 宣言文 ; Declaration statements
    !
    implicit none
    
    !変数定義
    real(8), intent(in)      :: RestartTime
    character(*), intent(in) :: cfgfile


    !-----------------------------------------------------------
    ! ヒストリー作成
    !-----------------------------------------------------------
    call HistoryAutoCreate(                          &
      & title = exptitle,                            &
      & source = expsrc,                             &
      & institution = expinst,                       &
      & dims=(/'x','z','t'/),                        &
      & dimsizes=(/FileNX, FileNZ, 0/),              &
      & longnames=(/'x-coordinate',                  &
      &             'z-coordinate',                  &
      &             'time        '/),                &
      & units=(/'m  ','m  ','sec'/),                 &
      & xtypes=(/'double', 'double', 'double'/),     &
      & origin  = RestartTime,                       & 
      & terminus = RestartTime + TimeInt,            &
      & interval = TimeDisp,                         &       
      & file_prefix = DefaultFilePrefix,             & 
      & namelist_filename = cfgfile)  

!      & quiet=.true.,                                &
!      & start_date = InitialDate,                    &
!      & flag_mpi_split  = .true.,                    &


    call HistoryAutoAddAttr( &
      & varname = 'x', attrname = 'standard_name', &   ! (in)
      & value = 'x-coordinate' )                       ! (in)
    call HistoryAutoAddAttr( &
      & varname = 'z', attrname = 'standard_name', &   ! (in)
      & value = 'z-coordinate' )                       ! (in)
    
    call HistoryAutoPutAxis('x', x_X(FileXMin: FileXMax))
    call HistoryAutoPutAxis('z', z_Z(FileZMin: FileZMax))

    ! 印字 ; Print
    !
!    call MessageNotify( 'M', module_name, '----- Initialization Messages -----' )
!    call MessageNotify( 'M', module_name, '-- version = %c', c1 = trim(version) )
    
  end subroutine HistoryFileAutoOpen


  subroutine HistoryFileAutoClose
    !
    ! ヒストリデータファイル出力の終了処理を行います. 
    !
    ! Terminate history data files output. 

    ! モジュール引用 ; USE statements
    !

    ! gtool4 netCDF データの入出力インターフェース (大規模モデル用)
    ! Interface of Input/Output of gtool4 netCDF data (For large models)
    !
    use gtool_historyauto, only: HistoryAutoClose

    ! 宣言文 ; Declaration statements
    !
    implicit none

    ! 作業変数
    ! Work variables
    !

    ! 実行文 ; Executable statement
    !

    call HistoryAutoClose

  end subroutine HistoryFileAutoClose


end module HistoryAutoFileIO
