| Class | Thermo_Advanced_Function |
| In: |
thermo_advanced_function.f90
|
基礎ルーチン, 関数集を use して複雑な熱力学関数を計算するモジュール
| Function : | |||
| Louis : | real | ||
| z : | real, intent(in)
| ||
| z0m : | real, intent(in)
| ||
| richard : | real, intent(in)
|
Louis(1980) で提案されている大気の不安定度を考慮したバルク係数の補正係数を計算する関数
real function Louis( z, z0m, richard )
! Louis(1980) で提案されている大気の不安定度を考慮したバルク係数の補正係数を計算する関数
use Thermo_Const
implicit none
real, intent(in) :: z ! cm を求める高度 [m]
real, intent(in) :: z0m ! モデルで計算される粗度高度 [m]
real, intent(in) :: richard ! バルクリチャードソン数
real, parameter :: b=5.0, c=5.0
real :: cm_tmp, zratio
cm_tmp=(kalm/(log(z)-log(z0m)))**2
zratio=z/z0m
if(richard<0.0)then
Louis=1.0-((2.0*b*richard)/(1.0+3.0*b*c*cm_tmp*sqrt(-richard*zratio)))
else
Louis=1.0/(1.0+2.0*b*richard*sqrt(1.0+c*richard))
end if
return
end function
| Function : | |||
| Rich : | real | ||
| za : | real, intent(in)
| ||
| pta : | real, intent(in)
| ||
| ptg : | real, intent(in)
| ||
| va : | real, intent(in)
| ||
| qva : | real, intent(in)
| ||
| qvs : | real, intent(in)
|
バルクリチャードソン数を計算する関数
real function Rich( za, pta, ptg, va, qva, qvs ) ! バルクリチャードソン数を計算する関数 use Phys_Const use Thermo_Function implicit none real, intent(in) :: za ! リチャードソン数を計算する高度 [m] real, intent(in) :: pta ! za での仮温位 [K] real, intent(in) :: ptg ! 地表面での温位 [K] real, intent(in) :: va ! 高度 za での水平風速の絶対値 [m/s] real, intent(in) :: qva ! za での混合比 [kg/kg] real, intent(in) :: qvs ! 地表面での飽和混合比 [kg/kg] real :: ptvg, ptva, dpt ptvg=ptg*((1.0+eps_rdrv*qvs)/(1.0+qvs)) ptva=pta*((1.0+eps_rdrv*qva)/(1.0+qva)) dpt=ptva-ptvg Rich=(g*za*dpt)/(ptva*(va**2)) return end function
| Function : | |||
| cm : | real | ||
| z : | real, intent(in)
| ||
| z0m : | real, intent(in)
| ||
| richard : | real, intent(in), optional
|
運動量に関するバルク係数を計算する関数
real function cm( z, z0m, richard )
! 運動量に関するバルク係数を計算する関数
use Thermo_Const
implicit none
real, intent(in) :: z ! cm を求める高度 [m]
real, intent(in) :: z0m ! モデルで計算される粗度高度 [m]
real, intent(in), optional :: richard ! Louis (1980) のスキームで計算する場合のバルクリチャードソン数
if(present(richard))then
cm=(kalm/(log(z)-log(z0m)))**2
cm=cm*Louis( z, z0m, richard )
else
cm=(kalm/(log(z)-log(z0m)))**2
end if
return
end function