Class | saturate_nha1992 |
In: |
saturate/saturate_nha1992.f90
|
Note that Japanese and English are described in parallel.
Nakajima et al. (1992) で用いられた飽和蒸気圧 に関する以下の式 を用い, 飽和比湿および飽和比湿の温度微分の値を算出します.
Saturation specific humidity and temperature derivative of it are calculated with a folloing formula for saturation watar vapor pressure in Nakajima et al. (1992).
ここで, は温度, は普遍気体定数です. および潜熱 , 水蒸気飽和曲線の定数 は以下のように与えられます.
where is temperature, is the gas constant. and latent heat , constant for the water vapor saturation curve are as follows.
飽和水蒸気圧から飽和比湿 を求める際には, 以下の式を用います.
Saturation specific humidity is calculated from saturation watar vapor pressure as follows.
ここで は凝結成分と大気の分子量比, は気圧です.
where is molecular weight ratio of water vapor to air, is air pressure.
従って, 飽和比湿, 飽和比湿の温度変化を求める式は以下のように なります.
Therefore, saturation specific humidity and temperature derivative of it are calculated as follows.
CalcQVapSat : | 飽和比湿の計算 |
CalcDQVapSatDTemp : | 飽和比湿の温度微分の計算 |
———— : | ———— |
CalcQVapSat : | Calculate saturation specific humidity |
CalcDQVapSatDTemp : | Calculate temperature derivative of saturation specific humidity |
Variable : | |||
saturate_nha1992_inited = .false. : | logical, save, public
|
Function : | |||
xy_DQVapSatDTemp(is:ie, js:je) : | real(DP)
| ||
is : | integer , intent(in) | ||
ie : | integer , intent(in) | ||
js : | integer , intent(in) | ||
je : | integer , intent(in) | ||
xy_Temp(is:ie, js:je) : | real(DP), intent(in)
| ||
xy_QVapSat(is:ie, js:je) : | real(DP), intent(in)
|
温度 Temp と飽和比湿 QVapSat を用い, 飽和比湿の温度微分 DQVapSatDTemp を求めます.
Calculate temperature derivative of saturation specific humidity DQVapSatDTemp using temperature Temp and saturation specific humidity QVapSat.
function xy_CalcDQVapSatDTemp( is, ie, js, je, xy_Temp, xy_QVapSat ) result( xy_DQVapSatDTemp ) ! ! 温度 *Temp* と飽和比湿 *QVapSat* を用い, ! 飽和比湿の温度微分 *DQVapSatDTemp* を求めます. ! ! Calculate temperature derivative of saturation specific humidity ! *DQVapSatDTemp* using ! temperature *Temp* and saturation specific humidity *QVapSat*. ! ! モジュール引用 ; USE statements ! ! 宣言文 ; Declaration statements ! implicit none integer , intent(in):: is integer , intent(in):: ie integer , intent(in):: js integer , intent(in):: je real(DP), intent(in):: xy_Temp (is:ie, js:je) ! $ T $ . 温度. Temperature real(DP), intent(in):: xy_QVapSat(is:ie, js:je) ! $ q^{*} $ . 飽和比湿. Saturation specific humidity real(DP):: xy_DQVapSatDTemp(is:ie, js:je) ! $ \DP{q^{*}}{T} $ . 飽和比湿の温度微分. ! Temperature derivative of saturation specific humidity. ! 作業変数 ! Work variables ! real(DP):: xyz_Temp (is:ie, js:je, 1:1) ! $ T $ . 温度. Temperature real(DP):: xyz_QVapSat (is:ie, js:je, 1:1) ! $ q^{*} $ . 飽和比湿. Saturation specific humidity real(DP):: xyz_DQVapSatDTemp(is:ie, js:je, 1:1) ! $ \DP{q^{*}}{T} $ . 飽和比湿の温度微分. ! Temperature derivative of saturation specific humidity. xyz_Temp (:,:,1) = xy_Temp xyz_QVapSat(:,:,1) = xy_QVapSat xyz_DQVapSatDTemp = xyz_CalcDQVapSatDTemp( is, ie, js, je, 1, 1, xyz_Temp, xyz_QVapSat ) xy_DQVapSatDTemp = xyz_DQVapSatDTemp(:,:,1) end function xy_CalcDQVapSatDTemp
Function : | |||
xy_QVapSat(is:ie, js:je) : | real(DP)
| ||
is : | integer , intent(in) | ||
ie : | integer , intent(in) | ||
js : | integer , intent(in) | ||
je : | integer , intent(in) | ||
xy_Temp(is:ie, js:je) : | real(DP), intent(in)
| ||
xy_Press(is:ie, js:je) : | real(DP), intent(in)
|
温度 Temp と気圧 Press を用い, 飽和比湿 QVapSat を求めます.
Calculate saturation specific humidity QVapSat using temperature Temp and air pressure Press.
function xy_CalcQVapSat( is, ie, js, je, xy_Temp, xy_Press ) result( xy_QVapSat ) ! ! 温度 *Temp* と気圧 *Press* を用い, ! 飽和比湿 *QVapSat* を求めます. ! ! Calculate saturation specific humidity *QVapSat* using ! temperature *Temp* and air pressure *Press*. ! ! モジュール引用 ; USE statements ! ! 宣言文 ; Declaration statements ! implicit none integer , intent(in):: is integer , intent(in):: ie integer , intent(in):: js integer , intent(in):: je real(DP), intent(in):: xy_Temp (is:ie, js:je) ! $ T $ . 温度. Temperature real(DP), intent(in):: xy_Press(is:ie, js:je) ! $ p $ . 気圧. Air pressure real(DP):: xy_QVapSat(is:ie, js:je) ! $ q^{*} $ . 飽和比湿. Saturation specific humidity ! 作業変数 ! Work variables ! real(DP):: xyz_Temp (is:ie, js:je, 1:1) ! $ T $ . 温度. Temperature real(DP):: xyz_Press (is:ie, js:je, 1:1) ! $ p $ . 気圧. Air pressure real(DP):: xyz_QVapSat(is:ie, js:je, 1:1) ! $ q^{*} $ . 飽和比湿. Saturation specific humidity ! 実行文 ; Executable statement ! ! 飽和比湿の計算 ! Calculate saturation specific humidity ! xyz_Temp (:,:,1) = xy_Temp xyz_Press(:,:,1) = xy_Press xyz_QVapSat = xyz_CalcQVapSat( is, ie, js, je, 1, 1, xyz_Temp, xyz_Press ) xy_QVapSat = xyz_QVapSat(:,:,1) end function xy_CalcQVapSat
Function : | |||
xyz_DQVapSatDTemp(is:ie, js:je, ks:ke) : | real(DP)
| ||
is : | integer , intent(in) | ||
ie : | integer , intent(in) | ||
js : | integer , intent(in) | ||
je : | integer , intent(in) | ||
ks : | integer , intent(in) | ||
ke : | integer , intent(in) | ||
xyz_Temp(is:ie, js:je, ks:ke) : | real(DP), intent(in)
| ||
xyz_QVapSat(is:ie, js:je, ks:ke) : | real(DP), intent(in)
|
温度 Temp と飽和比湿 QVapSat を用い, 飽和比湿の温度微分 DQVapSatDTemp を求めます.
Calculate temperature derivative of saturation specific humidity DQVapSatDTemp using temperature Temp and saturation specific humidity QVapSat.
function xyz_CalcDQVapSatDTemp( is, ie, js, je, ks, ke, xyz_Temp, xyz_QVapSat ) result( xyz_DQVapSatDTemp ) ! ! 温度 *Temp* と飽和比湿 *QVapSat* を用い, ! 飽和比湿の温度微分 *DQVapSatDTemp* を求めます. ! ! Calculate temperature derivative of saturation specific humidity ! *DQVapSatDTemp* using ! temperature *Temp* and saturation specific humidity *QVapSat*. ! ! モジュール引用 ; USE statements ! ! 物理定数設定 ! Physical constants settings ! use constants, only: GasRUniv ! $ R^{*} $ [J K-1 mol-1]. ! 普遍気体定数. Universal gas constant ! 宣言文 ; Declaration statements ! implicit none integer , intent(in):: is integer , intent(in):: ie integer , intent(in):: js integer , intent(in):: je integer , intent(in):: ks integer , intent(in):: ke real(DP), intent(in):: xyz_Temp (is:ie, js:je, ks:ke) ! $ T $ . 温度. Temperature real(DP), intent(in):: xyz_QVapSat(is:ie, js:je, ks:ke) ! $ q^{*} $ . 飽和比湿. Saturation specific humidity real(DP):: xyz_DQVapSatDTemp(is:ie, js:je, ks:ke) ! $ \DP{q^{*}}{T} $ . 飽和比湿の温度微分. ! Temperature derivative of saturation specific humidity. ! 作業変数 ! Work variables ! ! 実行文 ; Executable statement ! ! 飽和比湿の温度微分の計算 ! Calculate temperature derivative of saturation specific humidity ! xyz_DQVapSatDTemp = xyz_QVapSat * LatHeat / ( GasRUniv * xyz_Temp**2 ) end function xyz_CalcDQVapSatDTemp
Function : | |||
xyz_QVapSat(is:ie, js:je, ks:ke) : | real(DP)
| ||
is : | integer , intent(in) | ||
ie : | integer , intent(in) | ||
js : | integer , intent(in) | ||
je : | integer , intent(in) | ||
ks : | integer , intent(in) | ||
ke : | integer , intent(in) | ||
xyz_Temp(is:ie, js:je, ks:ke) : | real(DP), intent(in)
| ||
xyz_Press(is:ie, js:je, ks:ke) : | real(DP), intent(in)
|
温度 Temp と気圧 Press を用い, 飽和比湿 QVapSat を求めます.
Calculate saturation specific humidity QVapSat using temperature Temp and air pressure Press.
function xyz_CalcQVapSat( is, ie, js, je, ks, ke, xyz_Temp, xyz_Press ) result( xyz_QVapSat ) ! ! 温度 *Temp* と気圧 *Press* を用い, ! 飽和比湿 *QVapSat* を求めます. ! ! Calculate saturation specific humidity *QVapSat* using ! temperature *Temp* and air pressure *Press*. ! ! モジュール引用 ; USE statements ! ! 物理定数設定 ! Physical constants settings ! use constants, only: GasRUniv, EpsV ! $ \epsilon_v $ . ! 水蒸気分子量比. ! Molecular weight of water vapor ! 宣言文 ; Declaration statements ! implicit none integer , intent(in):: is integer , intent(in):: ie integer , intent(in):: js integer , intent(in):: je integer , intent(in):: ks integer , intent(in):: ke real(DP), intent(in):: xyz_Temp (is:ie, js:je, ks:ke) ! $ T $ . 温度. Temperature real(DP), intent(in):: xyz_Press(is:ie, js:je, ks:ke) ! $ p $ . 気圧. Air pressure real(DP):: xyz_QVapSat(is:ie, js:je, ks:ke) ! $ q^{*} $ . 飽和比湿. Saturation specific humidity ! 作業変数 ! Work variables ! ! 実行文 ; Executable statement ! ! 飽和比湿の計算 ! Calculate saturation specific humidity ! xyz_QVapSat = EpsV * ( P0 / xyz_Press ) * exp ( - LatHeat / ( GasRUniv * xyz_Temp ) ) end function xyz_CalcQVapSat
Subroutine : |
依存モジュールの初期化チェック
Check initialization of dependency modules
subroutine InitCheck ! ! 依存モジュールの初期化チェック ! ! Check initialization of dependency modules ! モジュール引用 ; USE statements ! ! 格子点設定 ! Grid points settings ! use gridset, only: gridset_inited ! 物理定数設定 ! Physical constants settings ! use constants, only: constants_inited ! 実行文 ; Executable statement ! if ( .not. gridset_inited ) call MessageNotify( 'E', module_name, '"gridset" module is not initialized.' ) if ( .not. constants_inited ) call MessageNotify( 'E', module_name, '"constants" module is not initialized.' ) end subroutine InitCheck
Constant : | |||
LatHeat = 43655_DP : | real(DP), parameter
|
Constant : | |||
P0 = 1.4e+11_DP : | real(DP), parameter
|
Subroutine : |
saturate_nha1992 モジュールの初期化を行います.
"saturate_nha1992" module is initialized.
subroutine SaturateInit ! ! saturate_nha1992 モジュールの初期化を行います. ! ! ! "saturate_nha1992" module is initialized. ! ! モジュール引用 ; USE statements ! ! NAMELIST ファイル入力に関するユーティリティ ! Utilities for NAMELIST file input ! use namelist_util, only: namelist_filename, NmlutilMsg ! ファイル入出力補助 ! File I/O support ! use dc_iounit, only: FileOpen ! 種別型パラメタ ! Kind type parameter ! use dc_types, only: STDOUT ! 標準出力の装置番号. Unit number of standard output ! 文字列操作 ! Character handling ! use dc_string, only: StoA ! ヒストリデータ出力 ! History data output ! use gtool_historyauto, only: HistoryAutoAddVariable ! 宣言文 ; Declaration statements ! implicit none !!$ integer:: unit_nml ! NAMELIST ファイルオープン用装置番号. !!$ ! Unit number for NAMELIST file open !!$ integer:: iostat_nml ! NAMELIST 読み込み時の IOSTAT. !!$ ! IOSTAT of NAMELIST read ! NAMELIST 変数群 ! NAMELIST group name ! !!$ namelist /saturate_nha1992_nml/ ! ! デフォルト値については初期化手続 "saturate_nha1992#SaturateInit" ! のソースコードを参照のこと. ! ! Refer to source codes in the initialization procedure ! "saturate_nha1992#SaturateInit" for the default values. ! ! 実行文 ; Executable statement ! if ( saturate_nha1992_inited ) return call InitCheck ! デフォルト値の設定 ! Default values settings ! !!$ ! NAMELIST の読み込み !!$ ! NAMELIST is input !!$ ! !!$ if ( trim(namelist_filename) /= '' ) then !!$ call FileOpen( unit_nml, & ! (out) !!$ & namelist_filename, mode = 'r' ) ! (in) !!$ !!$ rewind( unit_nml ) !!$ read( unit_nml, & ! (in) !!$ & nml = saturate_nha1992_nml, & ! (out) !!$ & iostat = iostat_nml ) ! (out) !!$ close( unit_nml ) !!$ !!$ call NmlutilMsg( iostat_nml, module_name ) ! (in) !!$ end if ! 印字 ; Print ! call MessageNotify( 'M', module_name, '----- Initialization Messages -----' ) call MessageNotify( 'M', module_name, '-- version = %c', c1 = trim(version) ) saturate_nha1992_inited = .true. end subroutine SaturateInit
Constant : | |||
module_name = ‘saturate_nha1992‘ : | character(*), parameter
|