Function : |
|
xyz_HeatFluxBulk(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) : | real(8)
|
xyz_PotTemp(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) : | real(8), intent(in)
|
pyz_VelX(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) : | real(8), intent(in)
|
xqz_VelY(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) : | real(8), intent(in)
|
下部境界からのフラックスによる温度の変化率を, バルク方法に基づいて計算する.
function xyz_HeatFluxBulk( xyz_PotTemp, pyz_VelX, xqz_VelY )
!
! 下部境界からのフラックスによる温度の変化率を,
! バルク方法に基づいて計算する.
!
!暗黙の型宣言禁止
implicit none
!変数定義
real(8), intent(in) :: xyz_PotTemp(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
!温位の擾乱成分
real(8), intent(in) :: pyz_VelX(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
!水平風速
real(8), intent(in) :: xqz_VelY(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
!水平風速
real(8) :: xyz_HeatFluxBulk(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
!地表面熱フラックス
real(8) :: VelX = 0.0d0 !下層での水平速度嵩上げ値
real(8) :: TempGrndSfc = 270.0d0 !
integer :: kz !配列添字
real(8), allocatable :: xyz_VelX(:,:,:) !水平風速 (xyz 格子)
real(8), allocatable :: xyz_VelY(:,:,:) !水平風速 (xyz 格子)
!作業配列の割り付け
allocate(xyz_VelX(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax))
allocate(xyz_VelY(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax))
!初期化
! * 全ての値をゼロに固定
xyz_HeatFluxBulk = 0.0d0
!地表面熱フラックスによる加熱率を計算
! * 単位は K/s
! * エクスナー関数は基本場の値で代表させる.
! * 格子点 xz では, 物理領域の最下端の添え字は RegZMin+1
kz = RegZMin
xyz_VelX = xyz_avr_pyz(pyz_VelX)
xyz_VelY = xyz_avr_xqz(xqz_VelY)
xyz_HeatFluxBulk(:,:,kz) = MAX( 0.0d0, - Bulk * SQRT( (xyz_VelX(:,:,kz) + VelX)**2.0 + xyz_VelY(:,:,kz)**2.0 ) * (xyz_ExnerBasicZ(:,:,kz) * (xyz_PotTemp(:,:,kz) + xyz_PotTempBasicZ(:,:,kz)) - TempGrndSfc )/z_dz(kz) )
call StorePotTempFlux( xyz_HeatFluxBulk )
!作業配列の解放
deallocate(xyz_VelX)
deallocate(xyz_VelY)
end function xyz_HeatFluxBulk