| Class | DynFunc |
| In: |
dynamic/dynfunc.f90
|
陽開放を用いた力学過程の各項の計算モジュール. 具体的には以下の項を計算するための関数を格納する.
* 移流項 * 浮力項 * 気圧傾度力項
| Function : | |||
| pz_AdvVelX(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8)
| ||
| pz_VelX(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
| ||
| xr_VelZ(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
|
z 方向に半格子ずれた点における移流を計算
function pz_AdvVelX(pz_VelX, xr_VelZ)
!
! z 方向に半格子ずれた点における移流を計算
!
!モジュール読み込み
use differentiate_center4, only: xz_dx_pz, pr_dz_pz
! use differentiate_center2, only: xz_dx_pz, pr_dz_pz
!暗黙の型宣言禁止
implicit none
!変数定義
real(8), intent(in) :: pz_VelX(DimXMin:DimXMax, DimZMin:DimZMax)
!水平風速
real(8), intent(in) :: xr_VelZ(DimXMin:DimXMax, DimZMin:DimZMax)
!鉛直風速
real(8) :: pz_AdvVelX(DimXMin:DimXMax, DimZMin:DimZMax)
!スカラー量の水平移流
! pz_AdvVelX = 0.0d0 !初期化
pz_AdvVelX = - pz_VelX * pz_avr_xz( xz_dx_pz( pz_VelX ) ) - pz_avr_pr( pr_avr_xr( xr_VelZ ) * pr_dz_pz( pz_VelX ) )
end function pz_AdvVelX
| Function : | |||
| pz_GradPi(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8)
| ||
| xz_Exner(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
| ||
| pz_VelX(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
| ||
| xr_VelZ(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
|
z 方向に半格子ずれた点での圧力傾度力項の計算. 音波減衰項を含めた形式で定式化してあることに注意.
function pz_GradPi(xz_Exner, pz_VelX, xr_VelZ)
!
! z 方向に半格子ずれた点での圧力傾度力項の計算.
! 音波減衰項を含めた形式で定式化してあることに注意.
!
!モジュール読み込み
use differentiate_center2, only: pz_dx_xz, xz_dx_pz, xz_dz_xr
!暗黙の型宣言禁止
implicit none
!変数定義
real(8), intent(in) :: xz_Exner(DimXMin:DimXMax, DimZMin:DimZMax)
!エクスナー関数の擾乱
real(8), intent(in) :: pz_VelX(DimXMin:DimXMax, DimZMin:DimZMax)
!水平速度
real(8), intent(in) :: xr_VelZ(DimXMin:DimXMax, DimZMin:DimZMax)
!鉛直速度
real(8) :: pz_GradPi(DimXMin:DimXMax, DimZMin:DimZMax)
!圧力傾度力
real(8) :: xz_DivVel(DimXMin:DimXMax, DimZMin:DimZMax)
!速度の収束
!速度の収束
xz_DivVel = xz_dx_pz( pz_VelX ) + xz_dz_xr( xr_VelZ )
!圧力傾度
! pz_GradPi = 0.0d0
pz_GradPi = pz_avr_xz( CpDry * xz_PotTempBasicZ / xz_EffMolWtBasicZ ) * ( pz_dx_xz( xz_Exner ) - pz_dx_xz( DampSound * xz_DivVel ) )
end function pz_GradPi
| Function : | |||
| xr_AdvVelZ(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8)
| ||
| xr_VelZ(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
| ||
| pz_VelX(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
|
x 方向に半格子ずれた点における移流を計算
function xr_AdvVelZ(xr_VelZ, pz_VelX)
!
! x 方向に半格子ずれた点における移流を計算
!
!モジュール読み込み
use differentiate_center4, only: pr_dx_xr, xz_dz_xr
! use differentiate_center2, only: pr_dx_xr, xz_dz_xr
!暗黙の型宣言禁止
implicit none
!変数定義
real(8), intent(in) :: pz_VelX(DimXMin:DimXMax, DimZMin:DimZMax)
!水平風速
real(8), intent(in) :: xr_VelZ(DimXMin:DimXMax, DimZMin:DimZMax)
!鉛直風速
real(8) :: xr_AdvVelZ(DimXMin:DimXMax, DimZMin:DimZMax)
!スカラー量の水平移流
! xr_AdvVelZ = 0.0d0 !初期化
xr_AdvVelZ = - xr_avr_pr( pr_avr_pz( pz_VelX ) * pr_dx_xr( xr_VelZ ) ) - xr_VelZ * xr_avr_xz( xz_dz_xr( xr_VelZ ) )
end function xr_AdvVelZ
| Function : | |||
| xr_Buoy(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8)
| ||
| xz_PotTemp(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
|
鉛直方向の運動方程式に現れる浮力項を計算
function xr_Buoy(xz_PotTemp)
!
! 鉛直方向の運動方程式に現れる浮力項を計算
!
!暗黙の型宣言禁止
implicit none
!変数定義
real(8), intent(in) :: xz_PotTemp(DimXMin:DimXMax, DimZMin:DimZMax)
!温位擾乱
real(8) :: xr_Buoy(DimXMin:DimXMax, DimZMin:DimZMax)
!浮力項
! !初期化
! xr_Buoy = 0.0d0
!浮力項の計算
xr_Buoy = Grav * xr_avr_xz(xz_PotTemp / xz_PotTempBasicZ)
call StoreBuoyTemp(xz_avr_xr(xr_Buoy))
end function xr_Buoy
| Function : | |||
| xz_AdvKm(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8)
| ||
| xz_Var(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
| ||
| pz_VelX(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
| ||
| xr_VelZ(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
|
x, z 方向に半格子ずれた点における移流を計算
function xz_AdvKm(xz_Var, pz_VelX, xr_VelZ)
!
! x, z 方向に半格子ずれた点における移流を計算
!
!モジュール読み込み
use differentiate_center4, only: pz_dx_xz, xr_dz_xz
! use differentiate_center2, only: pz_dx_xz, xr_dz_xz
!暗黙の型宣言禁止
implicit none
!変数定義
real(8), intent(in) :: pz_VelX(DimXMin:DimXMax, DimZMin:DimZMax)
!水平風速
real(8), intent(in) :: xr_VelZ(DimXMin:DimXMax, DimZMin:DimZMax)
!鉛直風速
real(8), intent(in) :: xz_Var(DimXMin:DimXMax, DimZMin:DimZMax)
!スカラー量
real(8) :: xz_AdvKm(DimXMin:DimXMax, DimZMin:DimZMax)
!スカラー量の水平移流
xz_AdvKm = - xz_avr_pz(pz_VelX * pz_dx_xz(xz_Var)) - xz_avr_xr(xr_VelZ * xr_dz_xz(xz_Var))
end function xz_AdvKm
| Function : | |||
| xz_AdvScalar(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8)
| ||
| xz_Var(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
| ||
| pz_VelX(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
| ||
| xr_VelZ(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
|
x, z 方向に半格子ずれた点における移流を計算
function xz_AdvScalar(xz_Var, pz_VelX, xr_VelZ)
!
! x, z 方向に半格子ずれた点における移流を計算
!
!モジュール読み込み
use differentiate_center4, only: pz_dx_xz, xr_dz_xz
! use differentiate_center2, only: pz_dx_xz, xr_dz_xz
!暗黙の型宣言禁止
implicit none
!変数定義
real(8), intent(in) :: pz_VelX(DimXMin:DimXMax, DimZMin:DimZMax)
!水平風速
real(8), intent(in) :: xr_VelZ(DimXMin:DimXMax, DimZMin:DimZMax)
!鉛直風速
real(8), intent(in) :: xz_Var(DimXMin:DimXMax, DimZMin:DimZMax)
!スカラー量
real(8) :: xz_AdvScalar(DimXMin:DimXMax, DimZMin:DimZMax)
!スカラー量の水平移流
xz_AdvScalar = - xz_avr_pz(pz_VelX * pz_dx_xz(xz_Var)) - xz_avr_xr(xr_VelZ * xr_dz_xz(xz_Var))
call StorePotTempAdv( xz_AdvScalar )
end function xz_AdvScalar
| Function : | |||
| xza_AdvScalar(DimXMin:DimXMax, DimZMin:DimZMax, SpcNum) : | real(8)
| ||
| xza_Var(DimXMin:DimXMax, DimZMin:DimZMax, SpcNum) : | real(8), intent(in)
| ||
| pz_VelX(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
| ||
| xr_VelZ(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
|
x, z 方向に半格子ずれた点における移流を計算
function xza_AdvScalar(xza_Var, pz_VelX, xr_VelZ)
!
! x, z 方向に半格子ずれた点における移流を計算
!
!モジュール読み込み
use differentiate_center4, only: pz_dx_xz, xr_dz_xz
! use differentiate_center2, only: pz_dx_xz, xr_dz_xz
!暗黙の型宣言禁止
implicit none
!変数定義
real(8), intent(in) :: pz_VelX(DimXMin:DimXMax, DimZMin:DimZMax)
!水平風速
real(8), intent(in) :: xr_VelZ(DimXMin:DimXMax, DimZMin:DimZMax)
!鉛直風速
real(8), intent(in) :: xza_Var(DimXMin:DimXMax, DimZMin:DimZMax, SpcNum)
!スカラー量
real(8) :: xza_AdvScalar(DimXMin:DimXMax, DimZMin:DimZMax, SpcNum)
!スカラー量の水平移流
integer :: s
do s = 1, SpcNum
xza_AdvScalar(:,:,s) = - xz_avr_pz(pz_VelX * pz_dx_xz(xza_Var(:,:,s))) - xz_avr_xr(xr_VelZ * xr_dz_xz(xza_Var(:,:,s)))
end do
call StoreMixRtAdv( xza_AdvScalar )
end function xza_AdvScalar