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