!---------------------------------------------------------------------
!     Copyright (C) GFD Dennou Club, 2004. All rights reserved.
!---------------------------------------------------------------------
                                                                 !=begin
!= Module ArarePrm
!
!   * Developer: SUGIYAMA Ko-ichiro (sugiyama@gfd-dennou.org)
!   * Version: $Id$ 
!   * Tag Name: $Name:  $
!   * Change History: 
!
!== Overview 
!
!arare を実行するために必要なパラメタを NAMELIST から取得する. 
!NAMELIST 名は外部から取得する. 
!
!== Error Handling
!
!== Known Bugs
!
!== Note
!
!== Future Plans
!
                                                                 !=end

module arareprm

  implicit none

  !--- save 属性
  save
                                                                 !=begin
  !== Public Interface 
  !
  real(8)  :: Grav   !重力
  real(8)  :: alpha  !音波減衰項の係数
  real(8)  :: beta   !クランクニコルソン法なら 0.5, 完全陰解放なら 1
  real(8)  :: Cm     !乱流エネルギー診断式の係数 
  real(8)  :: tfil   !アッセリンの時間フィルタの係数
  real(8)  :: NuH    !数値粘性の係数 (水平方向)
  real(8)  :: NuV    !数値粘性の係数 (鉛直方向)
                                                                 !=end

contains
                                                                 !=begin
  !== Procedure Interface 
  !
  !=== Initialize module and acquire NAMELIST
  !
  !NameList ファイルから arare 実行に必要なパラメタを取得する
  !
  subroutine arareprm_init(cfgfile)
    !=== Dependency
    use gridset, only: DelX, DelZ
    use timeset, only: DelTimeShort, DelTimeLong
    
    !=== Input 
    character(*), intent(in) :: cfgfile
                                                                 !=end
    !--- 内部変数
    real(8)  ::  AlphaH
    real(8)  ::  AlphaV

    !=== NAMELIST
    NAMELIST /arareprm/ Grav, alpha, beta, Cm, tfil, AlphaH, AlphaV

    !--- 変数の取り出し
    open (10, FILE=cfgfile)
    read(10, NML=arareprm)
    close(10)

    !--- 音波減衰項の係数を決める
    alpha = alpha * ( DelX ** 2.0d0 ) / DelTimeShort

    !--- 数値粘性の係数を決める
    NuH  = AlphaH * ( DelX ** 2.0d0 ) / DelTimeLong
    NuV  = AlphaV * ( DelZ ** 2.0d0 ) / DelTimeLong
    
  end subroutine arareprm_init
  
end module arareprm

