Function : |
|
xz_HeatFluxBulk(DimXMin:DimXMax,DimZMin:DimZMax) : | real(8)
|
xz_PotTemp(DimXMin:DimXMax,DimZMin:DimZMax) : | real(8), intent(in)
|
xz_Exner(DimXMin:DimXMax,DimZMin:DimZMax) : | real(8), intent(in)
|
pz_VelX(DimXMin:DimXMax,DimZMin:DimZMax) : | real(8), intent(in)
|
下部境界からのフラックスによる温度の変化率を, Louis (1979) の
方法に基づいて計算する.
function xz_HeatFluxBulk( xz_PotTemp, xz_Exner, pz_VelX )
!
! 下部境界からのフラックスによる温度の変化率を, Louis (1979) の
! 方法に基づいて計算する.
!
!暗黙の型宣言禁止
implicit none
!変数定義
real(8), intent(in) :: xz_PotTemp(DimXMin:DimXMax,DimZMin:DimZMax)
! 温位の擾乱成分
real(8), intent(in) :: xz_Exner(DimXMin:DimXMax,DimZMin:DimZMax)
! エクスナー関数の擾乱成分
real(8), intent(in) :: pz_VelX(DimXMin:DimXMax,DimZMin:DimZMax)
! 水平風速
real(8) :: xz_HeatFluxBulk(DimXMin:DimXMax,DimZMin:DimZMax)
! 地表面熱フラックス
real(8) :: ExnerBZSfc ! Basic state Exner function at the surface
integer :: kz ! 配列添字
real(8), allocatable :: xz_VelX(:,:) ! 水平風速 (xz 格子)
real(8), allocatable :: x_RICHD(:) ! バルクリチャードソン数
!作業配列の割り付け
allocate(xz_VelX(DimXMin:DimXMax,DimZMin:DimZMax))
allocate(x_RICHD(DImXMin:DimXMax))
!初期化
! * 全ての値をゼロに固定
xz_HeatFluxBulk = 0.0d0
!地表面熱フラックスによる加熱率を計算
! * 単位は K/s
! * エクスナー関数は基本場の値で代表させる.
! * 格子点 xz では, 物理領域の最下端の添え字は RegZMin+1
kz = RegZMin+1
xz_VelX = xz_avr_pz(pz_VelX)
! バルクリチャードソン数の計算
x_RICHD = x_CLRICH(xz_PotTemp, xz_VelX)
! 地表面でのエクスナー関数基本場成分
ExnerBZSfc = (PressSfc / PressBasis) ** (GasRDry / CpDry)
! 熱フラックスの計算
xz_HeatFluxBulk(:,kz) = - x_CDRAGV(x_RICHD) * SQRT(xz_VelX(:,kz)**2.0 + VelX**2.0) * ( xz_PotTemp(:,kz) + xz_PotTempBasicZ(:,kz) - TempSfc / ( ExnerBZSfc + xz_Exner(:,kz) ) )/DelZ
! xz_HeatFluxBulk(:,kz) = &
! & - x_CDRAGV(x_RICHD) * SQRT(xz_VelX(:,kz)**2.0 + VelX**2.0) &
! & * (xz_ExnerBasicZ(:,kz) &
! & * (xz_PotTemp(:,kz) + xz_PotTempBasicZ(:,kz)) &
! & - TempSfc &
! & )/DelZ
call StorePotTempFlux( xz_HeatFluxBulk )
!作業配列の解放
deallocate(xz_VelX)
deallocate(x_RICHD)
end function xz_HeatFluxBulk