This module set physical constants. Default value is standard condition on the earth. These values could be changed by NAMELIST.
物理定数を設定するためのモジュールである。 デフォルトでは地球上の標準状態の値を持っているが、 NAMELIST により変更することも可能である。
use type_mod, only : REKIND, DBKIND, INTKIND, TOKEN, STRING
private
public :: constants_init, constants_end  ! subroutines
public :: & ! variables
     &    PI, R0, Omega, Grav, Cp, RAir, EL, CpVap, RVap,  &
     &    DH2O, EpsV, ES0, StB, FKarm, EpsVT, SecPerDay,   &
     &    EFoldTime, TempAve, TimeFilter, VisOrder,        &
     &    TimeFilterStepInt
real(DBKIND), save  ::  & ! follow data is default values.
     &
     & PI        = 3.141592653589793 , & ! 円周率
     & R0        = 6.371d6           , & ! 球の半径
     & Omega     = 7.292d-5          , & ! 回転角速度
     & Grav      = 9.8d0             , & ! 重力加速度
     &
     & Cp        = 1004.6d0          , & ! 大気定圧比熱
     & RAir      = 287.04d0          , & ! 大気気体定数
     & EL        = 2.5d6             , & ! 水の凝結の潜熱
     & CpVap     = 1810.0d0          , & ! 水蒸気定圧比熱
     & RVap      = 461.0d0           , & ! 水蒸気気体定数
     & DH2O      = 1000.0d0          , & ! 水の密度
     & EpsV      = 0.6226464208      , & ! 水と大気の分子量比ε
     & ES0       = 611.0d0           , & ! 0℃飽和蒸気圧:Pa
     & StB       = 5.67d-8           , & ! Stefan-Boltzman
     & FKarm     = 0.4d0             , & ! Karman 定数
     & EpsVT     = 0.6060479376      , & ! 1/ε-1
     &
     & SecPerDay = 86400.0d0         , & ! 1日あたりの秒数 
     &
     & EFoldTime = 8640.0d0          , & ! 最大波数に対する e-folding time
     & TempAve   = 300.0             , & ! 平均温度
     & TimeFilter= 0.05                  ! 時間フィルター係数
integer(INTKIND), save ::  &
     & VisOrder          = 4         , & ! 超粘性の次数
     & TimeFilterStepInt = 1             ! 時間フィルターするステップ間隔
モジュールを初期化し、NAMELIST から値を取得する。 NAMELIST から値が取得できないものに関しては上記のデフォルト値が 用いられる。
NAMELIST ファイルは、メインプログラムにて nmlfile_mod の nmlfile_init で指定されることが想定されているが、 もしもこの初期化ルーチンより以前に指定されていなければ、 nmlfile_init のデフォルトで指定される NAMELIST ファイルを 読む。
subroutine constants_init
use type_mod , only : REKIND, DBKIND, INTKIND, TOKEN, STRING use nmlfile_mod, only : nmlfile_init, nmlfile_open, nmlfile_close use dc_trace , only : BeginSub, EndSub, DbgMessage use dc_message , only : MessageNotify
namelist /constants_nml/ &
     &
     & PI                , & ! 円周率
     & R0                , & ! 球の半径
     & Omega             , & ! 回転角速度
     & Grav              , & ! 重力加速度
     &
     & Cp                , & ! 大気定圧比熱
     & RAir              , & ! 大気気体定数
     & EL                , & ! 水の凝結の潜熱
     & CpVap             , & ! 水蒸気定圧比熱
     & RVap              , & ! 水蒸気気体定数
     & DH2O              , & ! 水の密度
     & EpsV              , & ! 水と大気の分子量比ε
     & ES0               , & ! 0℃飽和蒸気圧:Pa
     & StB               , & ! Stefan-Boltzman
     & FKarm             , & ! Karman 定数
     & EpsVT             , & ! 1/ε-1
     &
     & SecPerDay         , & ! 1日あたりの秒数
     &
     & EFoldTime         , & ! 最大波数に対する e-folding time
     & TempAve           , & ! 平均温度
     & TimeFilter        , & ! 時間フィルター係数
     & TimeFilterStepInt , & ! 時間フィルターするステップ間隔
     & VisOrder              ! 超粘性の次数
NAMELIST から読み込んだ値を破棄し、各定数をデフォルトの値に戻す。
subroutine constants_end
use dc_trace, only : BeginSub, EndSub, DbgMessage