!---------------------------------------------------------------------
!     Copyright (C) GFD Dennou Club, 2004. All rights reserved.
!---------------------------------------------------------------------
                                                                 !=begin
!= Subroutine GetDisturbVar
!
!   * Developer: SUGIYAMA Ko-ichiro
!   * Version: $Id: getdisturbvar.f90,v 1.2.2.2 2005/12/28 11:23:20 kitamo Exp $ 
!   * Tag Name: $Name:  $
!   * Change History: 
!
!== Overview 
!
!擾乱場の初期値を netCDF ファイルから取得する. 
!
!== Error Handling
!
!== Known Bugs
!
!== Note
!
!== Future Plans
!
!   * 時間刻みのチェックだけでなく, 解像度のチェックおよび物理定数のチェックも必要だろう.
!
                                                                 !=end
subroutine GetDisturbVar(disturbfile, ReStartTime,   &
     & fs_VelX_b,    sf_VelZ_b,   ss_Exner_b, &
     & ss_PotTemp_b, ss_DensCloud_b,   &
     & ss_Km_b,      ss_Kh_b,     ss_SupSatRatio_b, &
     & fs_VelX_n,    sf_VelZ_n,   ss_Exner_n, &
     & ss_PotTemp_n, ss_DensCloud_n,    &
     & ss_Km_n,      ss_Kh_n,     ss_SupSatRatio_n)
                                                                 !=begin
  !== Dependency
  use gt4_history
  use dc_trace,   only: BeginSub, EndSub
  use dc_message ,only: MessageNotify
  use bcset,      only: ss_BC, sf_BC, fs_BC
  use timeset,    only: DelTimeLong
  use gridset,    only: DimXMin, DimXMax, DimZMin, DimZMax
                                                                 !=end    
  !== 暗黙の型宣言禁止
  implicit none
                                                                 !=begin
  !== Input 
  character(*), intent(in)  :: disturbfile  !擾乱場のファイル

  !== Output
  real(8), intent(out)  :: ReStartTime(2)
  real(8), intent(out)  :: fs_VelX_n(DimXMin:DimXMax, DimZMin:DimZMax)
  real(8), intent(out)  :: fs_VelX_b(DimXMin:DimXMax, DimZMin:DimZMax)
  real(8), intent(out)  :: sf_VelZ_n(DimXMin:DimXMax, DimZMin:DimZMax)
  real(8), intent(out)  :: sf_VelZ_b(DimXMin:DimXMax, DimZMin:DimZMax)
  real(8), intent(out)  :: ss_Exner_n(DimXMin:DimXMax, DimZMin:DimZMax)
  real(8), intent(out)  :: ss_Exner_b(DimXMin:DimXMax, DimZMin:DimZMax)
  real(8), intent(out)  :: ss_PotTemp_n(DimXMin:DimXMax, DimZMin:DimZMax)
  real(8), intent(out)  :: ss_PotTemp_b(DimXMin:DimXMax, DimZMin:DimZMax)
  real(8), intent(out)  :: ss_DensCloud_n(DimXMin:DimXMax, DimZMin:DimZMax)
  real(8), intent(out)  :: ss_DensCloud_b(DimXMin:DimXMax, DimZMin:DimZMax)
  real(8), intent(out)  :: ss_Km_n(DimXMin:DimXMax, DimZMin:DimZMax)
  real(8), intent(out)  :: ss_Km_b(DimXMin:DimXMax, DimZMin:DimZMax)
  real(8), intent(out)  :: ss_Kh_n(DimXMin:DimXMax, DimZMin:DimZMax)
  real(8), intent(out)  :: ss_Kh_b(DimXMin:DimXMax, DimZMin:DimZMax)
  real(8), intent(out)  :: ss_SupSatRatio_n(DimXMin:DimXMax, DimZMin:DimZMax)
  real(8), intent(out)  :: ss_SupSatRatio_b(DimXMin:DimXMax, DimZMin:DimZMax)
                                                                 !=end    
  !== Work
  real(8)        :: DelTime
  character(30)  :: name            !変数名
  

  call BeginSub("GetDisturbVar", &
&                 fmt="%c",       &
&                 c1="Input initial disturbance variables.")

  !=== Get a Value from netCDF File
  name = "t"
  call HistoryGet( disturbfile, name, ReStartTime )

  !=== 時間刻みのチェック
  DelTime = ReStartTime(2) - ReStartTime(1)
  if ( DelTime /= DelTimeLong ) then 
     call MessageNotify("Error", "getdistrbvar", &
          &    "DelTime for ReStartFile is not the same as DelTimeLong")
     stop
  end if
  

  !=== Get a Value from netCDF File 
  name = "VelX_n"
  call HistoryGet( disturbfile, name, fs_VelX_n )
  
  name = "VelX_b"
  call HistoryGet( disturbfile, name, fs_VelX_b )
  
  name = "VelZ_n"
  call HistoryGet( disturbfile, name, sf_VelZ_n )
  
  name = "VelZ_b"
  call HistoryGet( disturbfile, name, sf_VelZ_b )
  
  name = "Exner_n"
  call HistoryGet( disturbfile, name, ss_Exner_n )
  
  name = "Exner_b"
  call HistoryGet( disturbfile, name, ss_Exner_b )
  
  name = "PotTemp_n"
  call HistoryGet( disturbfile, name, ss_PotTemp_n )
  
  name = "PotTemp_b"
  call HistoryGet( disturbfile, name, ss_PotTemp_b )

  name = "DensCloud_n"
  call HistoryGet( disturbfile, name, ss_DensCloud_n )
  
  name = "DensCloud_b"
  call HistoryGet( disturbfile, name, ss_DensCloud_b )

  name = "Km_n"
  call HistoryGet( disturbfile, name, ss_Km_n )
  
  name = "Km_b"
  call HistoryGet( disturbfile, name, ss_Km_b )
  
  name = "Kh_n"
  call HistoryGet( disturbfile, name, ss_Kh_n )
  
  name = "Kh_b"
  call HistoryGet( disturbfile, name, ss_Kh_b )
  
  name = "SupSatRatio_n"
  call HistoryGet( disturbfile, name, ss_SupSatRatio_n )
  
  name = "SupSatRatio_b"
  call HistoryGet( disturbfile, name, ss_SupSatRatio_b )
  
  
  call EndSub("GetDisturbVar")
  
end subroutine GetDisturbVar


