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 ) ) call StoreMomAdv( pz_AdvVelX ) 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