sf_VelZ_in(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
|
DelTime : | real(8), intent(in)
: | end
暗黙の型宣言禁止
begin
Input
|
|
sf_AdvDiffZ(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
|
fs_VelX(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
|
sf_VelZ(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
|
ss_Exner_n(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
|
ss_Exner_a(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
|
sf_VelZ_out(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(out)
|
subroutine VelocityZ( sf_VelZ_in, DelTime, sf_AdvDiffZ, fs_VelX, sf_VelZ, ss_Exner_n, ss_Exner_a, sf_VelZ_out )
!=begin
!== Dependency
!=end
!== 暗黙の型宣言禁止
implicit none
!=begin
!== Input
real(8), intent(in) :: DelTime
real(8), intent(in) :: sf_VelZ_in(DimXMin:DimXMax, DimZMin:DimZMax)
real(8), intent(in) :: ss_Exner_n(DimXMin:DimXMax, DimZMin:DimZMax)
real(8), intent(in) :: ss_Exner_a(DimXMin:DimXMax, DimZMin:DimZMax)
real(8), intent(in) :: fs_VelX(DimXMin:DimXMax, DimZMin:DimZMax)
real(8), intent(in) :: sf_VelZ(DimXMin:DimXMax, DimZMin:DimZMax)
real(8), intent(in) :: sf_AdvDiffZ(DimXMin:DimXMax, DimZMin:DimZMax)
!== Output
real(8), intent(out) :: sf_VelZ_out(DimXMin:DimXMax, DimZMin:DimZMax)
!=end
!== Work
real(8) :: ss_DivVel(DimXMin:DimXMax, DimZMin:DimZMax)
real(8) :: sf_PressGradVelZ(DimXMin:DimXMax, DimZMin:DimZMax)
real(8) :: sf_TendVelZ(DimXMin:DimXMax, DimZMin:DimZMax)
call BeginSub("VelocityZ", fmt="%c", c1="Calculate VelZ_backward (sf_VelZ).")
!=== 速度の収束
ss_DivVel = ss_dx_fs( fs_VelX ) + ss_dz_sf( sf_VelZ )
!=== 速度 w の圧力勾配
sf_PressGradVelZ = - sf_avr_ss( ss_CpBasicZ * ss_PotTempBasicZ ) * ( beta * sf_dz_ss( ss_Exner_a ) + (1.0d0 - beta) * sf_dz_ss( ss_Exner_n ) - sf_dz_ss( alpha * ss_DivVel ) )
!=== 微分係数の評価
sf_TendVelZ = sf_PressGradVelZ + sf_AdvDiffZ
!=== 数値積分
sf_VelZ_out = sf_VelZ_in + DelTime * sf_TendVelZ
!=== 境界条件
call boundary(sf_BC, sf_VelZ_out)
call EndSub("VelocityZ")
end subroutine VelocityZ