!= Module BasicEnvInit
!
! Authors::   SUGIYAMA Koichiro, ODAKA Masatsugu
! Version::   $Id: initialdata_toon2002.f90,v 1.2 2011-06-25 14:47:29 sugiyama Exp $
! Tag Name::  $Name: arare5-20120511 $
! Copyright:: Copyright (C) GFD Dennou Club, 2006. All rights reserved.
! License::   See COPYRIGHT[link:../../COPYRIGHT]
!
!== Overview 
!
!デフォルトの基本場を設定するための変数参照型モジュール
!   * BasicEnvFile_init: 基本場の値を netCDF ファイルから取得
!   * BasicEnvCalc_Init: 基本場の情報を Namelist から取得して値を計算
!
!== Error Handling
!
!== Known Bugs
!
!== Note
!
!== Future Plans
!
module initialdata_odaka1998
  !
  !デフォルトの基本場を設定するためのサブルーチン. 
  !基本場を計算し, BasicSet モジュールの値を初期化する. 
  !
  !コンパイルの順序の問題から, 基本場の値(hogeBasicZ な変数)を
  !計算する部分をBasicSet モジュールから切り離している. 
  !ECCM 始め, BasicSet 自体に依存するが hogeBasicZ は use しない
  !外部サブルーチンを利用するためである. 
  !

  !モジュール読み込み
  use dc_types,   only: STRING, DP
  use dc_iounit,   only : FileOpen      
  use dc_message, only: MessageNotify
!  use mpi_wrapper, only: myrank         
  use gridset,  only: kmin,       &!配列の Z 方向の下限
    &                 kmax,       &!配列の Z 方向の上限
    &                 nz
  use axesset, only:  z_Z,        &!スカラー格子点での高度
    &                 z_dz,       &!Z 方向の格子点間隔
    &                 r_dz         !Z 方向の格子点間隔(w格子点)
  use constants, only: &
    &                 GasRDry,       &!乾燥成分の定圧比熱
    &                 CpDry,         &!乾燥成分の定圧比熱
    &                 Grav,          &!重力加速度
    &                 TempSfc,       &!地表面温度
    &                 PressSfc        !地表面圧力
 
  !暗黙の型宣言禁止
  implicit none

  !デフォルトは private
  private

  real(DP), parameter  :: AntA    = 27.4d0 
  real(DP), parameter  :: AntB    = 3103.0d0
  real(DP), parameter  :: TempLTP = 135.0d0
  real(DP), parameter  :: Dhight  = 6.0d2

  !初期化だけ公開
  public  initialdata_odaka1998_basic

contains

!!!------------------------------------------------------------------------------!!!

  subroutine initialdata_odaka1998_basic( z_Temp, z_Press )

    implicit none
    
    real(DP), intent(out):: z_Press(kmin:kmax) !圧力
    real(DP), intent(out):: z_Temp(kmin:kmax)  !温度
    real(DP)             :: z_logP(kmin:kmax)
    real(DP)             :: TempStrt = 220.0d0 !成層圏温度
    integer              :: k
    

    ! 乾燥断熱線に沿った温度分布の計算
    ! 
    z_Temp = TempSfc - z_Z * Grav / CpDry 

    ! 成層圏温度より低温領域では成層圏温度に設定
    z_Temp = Max( TempStrt, z_Temp )

    ! 圧力の計算
    ! * 静水圧平衡の式から圧力を決める
    ! * 台形公式
    ! 
    z_LogP(1) = - 0.5d0*Grav/GasRDry * &
      &  (z_Temp(1) + TempSfc)/(z_Temp(1)*TempSfc)*0.5d0*z_dz(1)

    do k = 2, nz
      z_LogP(k) = z_LogP(k-1) - &
        & 0.5d0*Grav/GasRDry *  &
        & (z_Temp(k) + z_Temp(k-1))/(z_Temp(k)*z_Temp(k-1))*r_dz(k-1)
    end do
   
    z_Press = PressSfc * exp(z_LogP)

  end subroutine initialdata_odaka1998_basic
  
end module initialdata_odaka1998
