Class HeatFlux_3d
In: physics/heatflux_3d.f90

下部境界でのフラックスの計算モジュール

Methods

Included Modules

gridset_3d basicset_3d xyz_module chemcalc StorePotTemp_3d

Public Instance methods

Function :
aaz_MomFluxBulk(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(8)
: 地表面熱フラックス
Vel(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(8), intent(in)
: 水平風速

下部境界からのフラックスによる運動量の変化率を, バルク方法に基づいて計算する.

[Source]

  function aaz_MomFluxBulk( Vel )
    ! 
    ! 下部境界からのフラックスによる運動量の変化率を,
    ! バルク方法に基づいて計算する.
    !

    !暗黙の型宣言禁止
    implicit none
    
    !変数定義
    real(8), intent(in)   :: Vel(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
                                           !水平風速
    real(8)               :: aaz_MomFluxBulk(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
                                           !地表面熱フラックス
    integer               :: kz            !配列添字


    !初期化
    !  * 全ての値をゼロに固定
    aaz_MomFluxBulk = 0.0d0
    
    !地表面運動量フラックスによる変化率を計算
    !  * 単位は m/s^2
    !  * 格子点 xz では, 物理領域の最下端の添え字は RegZMin+1

    kz = RegZMin

    aaz_MomFluxBulk(:,:,kz) = MAX( 0.0d0, - Bulk * abs(Vel(:,:,kz)) * Vel(:,:,kz) /z_dz(kz) )

  end function aaz_MomFluxBulk
Function :
aaz_MomFluxBulk(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(8)
: 地表面熱フラックス
Vel(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(8), intent(in)
: 水平風速

下部境界からのフラックスによる運動量の変化率を, バルク方法に基づいて計算する.

[Source]

  function aaz_MomFluxBulk( Vel )
    ! 
    ! 下部境界からのフラックスによる運動量の変化率を,
    ! バルク方法に基づいて計算する.
    !

    !暗黙の型宣言禁止
    implicit none
    
    !変数定義
    real(8), intent(in)   :: Vel(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
                                           !水平風速
    real(8)               :: aaz_MomFluxBulk(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
                                           !地表面熱フラックス
    integer               :: kz            !配列添字


    !初期化
    !  * 全ての値をゼロに固定
    aaz_MomFluxBulk = 0.0d0
    
    !地表面運動量フラックスによる変化率を計算
    !  * 単位は m/s^2
    !  * 格子点 xz では, 物理領域の最下端の添え字は RegZMin+1

    kz = RegZMin

    aaz_MomFluxBulk(:,:,kz) = MAX( 0.0d0, - Bulk * abs(Vel(:,:,kz)) * Vel(:,:,kz) /z_dz(kz) )

  end function aaz_MomFluxBulk
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)
: 水平風速

下部境界からのフラックスによる温度の変化率を, バルク方法に基づいて計算する.

[Source]

  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

[Validate]