Class HeatFlux_N1994
In: physics/heatflux.f90

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

Methods

Included Modules

gridset basicset average chemcalc StorePotTemp StoreMixRt StoreMom moistset

Public Instance methods

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

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

[Source]

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

    !暗黙の型宣言禁止
    implicit none

    !変数定義
    real(8), intent(in)   :: Vel(DimXMin:DimXMax,DimZMin:DimZMax)
                                           !水平風速
    real(8)               :: pz_MomFluxBulk(DimXMin:DimXMax,DimZMin:DimZMax)
                                           !地表面熱フラックス
    integer               :: kz            !配列添字


    !初期化
    !  * 全ての値をゼロに固定
    pz_MomFluxBulk = 0.0d0

    !地表面運動量フラックスによる変化率を計算
    !  * 単位は m/s^2
    !  * 格子点 xz では, 物理領域の最下端の添え字は RegZMin+1

    kz = RegZMin+1

    pz_MomFluxBulk(:,kz) = - Bulk * abs(Vel(:,kz)) * Vel(:,kz) /DelZ

    call StoreMomFlux(pz_MomFluxBulk)

  end function pz_MomFluxBulk
Function :
xz_HeatFluxBulk(DimXMin:DimXMax,DimZMin:DimZMax) :real(8)
: 地表面熱フラックス
xz_PotTemp(DimXMin:DimXMax,DimZMin:DimZMax) :real(8), intent(in)
: 温位の擾乱成分
pz_VelX(DimXMin:DimXMax,DimZMin:DimZMax) :real(8), intent(in)
: 水平風速

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

[Source]

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

    !暗黙の型宣言禁止
    implicit none
    
    !変数定義
    real(8), intent(in)   :: xz_PotTemp(DimXMin:DimXMax,DimZMin:DimZMax)
                                           !温位の擾乱成分    
    real(8), intent(in)   :: pz_VelX(DimXMin:DimXMax,DimZMin:DimZMax)
                                           !水平風速
    real(8)               :: xz_HeatFluxBulk(DimXMin:DimXMax,DimZMin:DimZMax)
                                           !地表面熱フラックス
    real(8)               :: VelX = 3.0d0  !下層での水平速度嵩上げ値
    integer               :: kz            !配列添字

    real(8), allocatable  :: xz_VelX(:,:)  !水平風速 (xz 格子)


    !作業配列の割り付け
    allocate(xz_VelX(DimXMin:DimXMax,DimZMin:DimZMax))


    !初期化
    !  * 全ての値をゼロに固定
    xz_HeatFluxBulk = 0.0d0
    
    !地表面熱フラックスによる加熱率を計算
    !  * 単位は K/s
    !  * エクスナー関数は基本場の値で代表させる.     
    !  * 格子点 xz では, 物理領域の最下端の添え字は RegZMin+1

    kz = RegZMin+1
    xz_VelX = xz_avr_pz(pz_VelX)

    xz_HeatFluxBulk(:,kz) = MAX( 0.0d0, - Bulk * SQRT(xz_VelX(:,kz)**2.0 + VelX**2.0) * (xz_ExnerBasicZ(:,kz) * (xz_PotTemp(:,kz)  + xz_PotTempBasicZ(:,kz)) - TempSfc )/DelZ )

    !作業配列の解放
    deallocate(xz_VelX)

    call StorePotTempFlux(xz_HeatFluxBulk)
    
  end function xz_HeatFluxBulk
Function :
xz_MixRtFluxBulk(DimXMin:DimXMax,DimZMin:DimZMax) :real(8)
: 地表面混合比フラックス
xz_MixRt(DimXMin:DimXMax,DimZMin:DimZMax) :real(8), intent(in)
: 温位の擾乱成分
pz_VelX(DimXMin:DimXMax,DimZMin:DimZMax) :real(8), intent(in)
: 水平風速
xz_Exner(DimXMin:DimXMax,DimZMin:DimZMax) :real(8), intent(in)
: 圧力の擾乱成分
ID :integer, intent(in)
: 凝結成分の ID 番号

下部境界からのフラックスによる凝結成分混合比の変化率を, バルク方法に基づいて計算する.

[Source]

  function xz_MixRtFluxBulk( xz_MixRt, pz_VelX, xz_Exner, ID )
    !
    ! 下部境界からのフラックスによる凝結成分混合比の変化率を,
    ! バルク方法に基づいて計算する.
    !
    
    !暗黙の型宣言禁止
    implicit none
    
    !変数定義
    real(8), intent(in)   :: xz_MixRt(DimXMin:DimXMax,DimZMin:DimZMax)
                                           !温位の擾乱成分    
    real(8), intent(in)   :: pz_VelX(DimXMin:DimXMax,DimZMin:DimZMax)
                                           !水平風速
    real(8), intent(in)   :: xz_Exner(DimXMin:DimXMax,DimZMin:DimZMax)
                                           !圧力の擾乱成分    
    integer, intent(in)   :: ID            !凝結成分の ID 番号
    real(8)               :: xz_MixRtFluxBulk(DimXMin:DimXMax,DimZMin:DimZMax)
                                           !地表面混合比フラックス
    real(8)               :: VelX = 3.0d0  !下層での水平速度嵩上げ値
    integer               :: kz            !配列添字

    real(8), allocatable  :: xz_VelX(:,:)  !水平風速 (xz 格子)


    !作業配列の割り付け
    allocate(xz_VelX(DimXMin:DimXMax,DimZMin:DimZMax))


    !初期化
    !  * 全ての値をゼロに固定
    xz_MixRtFluxBulk = 0.0d0

    kz = RegZMin+1
    xz_VelX = xz_avr_pz(pz_VelX)
    
    xz_MixRtFluxBulk(:,kz) = max( 0.0d0, - Bulk * SQRT(xz_VelX(:,kz)**2.0 + VelX**2.0) * (xz_MixRt(:,kz) - SvapPress( ID, TempSfc ) / ( ( xz_Exner(:,kz) + xz_ExnerBasicZ(:,kz) ) **( CpDry / GasRDry )*PressSfc ) )/DelZ )

    !作業配列の解放
    deallocate(xz_VelX)

    
  end function xz_MixRtFluxBulk
Function :
xza_MixRtFluxBulk(DimXMin:DimXMax,DimZMin:DimZMax,SpcNum) :real(8)
: 地表面混合比フラックス
xza_MixRt(DimXMin:DimXMax,DimZMin:DimZMax,SpcNum) :real(8), intent(in)
: 混合比の擾乱成分
pz_VelX(DimXMin:DimXMax,DimZMin:DimZMax) :real(8), intent(in)
: 水平風速

下部境界からのフラックスによる凝結成分混合比の変化率を, バルク方法に基づいて計算する.

[Source]

  function xza_MixRtFluxBulk( xza_MixRt, pz_VelX)
    !
    ! 下部境界からのフラックスによる凝結成分混合比の変化率を,
    ! バルク方法に基づいて計算する.
    ! 

    use basicset,      only: SpcWetID, MolWtWet, MolWtDry, xza_MixRtBasicZ
    use moistset,      only: GasNum
    use StoreMixRt,  only: StoreMixRtFlux

    !暗黙の型宣言禁止
    implicit none

    !変数定義
!    real(8), intent(in)   :: xza_MixRtBasicZ(DimXMin:DimXMax,DimZMin:DimZMax,SpcNum)
                                           !混合比の基本場成分
    real(8), intent(in)   :: xza_MixRt(DimXMin:DimXMax,DimZMin:DimZMax,SpcNum)
                                           !混合比の擾乱成分
    real(8), intent(in)   :: pz_VelX(DimXMin:DimXMax,DimZMin:DimZMax)
                                           !水平風速
    real(8)               :: xza_MixRtFluxBulk(DimXMin:DimXMax,DimZMin:DimZMax,SpcNum)
                                           !地表面混合比フラックス
    real(8)               :: VelX = 3.0d0  !下層での水平速度嵩上げ値
    integer               :: kz            !配列添字
    real(8), allocatable  :: xz_VelX(:,:)  !水平風速 (xz 格子)

    integer               :: ID            !凝結成分の ID 番号
    integer               :: s
    !作業配列の割り付け
    allocate(xz_VelX(DimXMin:DimXMax,DimZMin:DimZMax))


    !初期化
    !  * 全ての値をゼロに固定
    xza_MixRtFluxBulk = 0.0d0

    kz = RegZMin+1
    xz_VelX = xz_avr_pz(pz_VelX)
  do s=1,GasNum
    xza_MixRtFluxBulk(:,kz,s) = max( 0.0d0, - Bulk * SQRT(xz_VelX(:,kz)**2.0 + VelX**2.0) * ((xza_MixRtBasicZ(:,kz,s) + xza_MixRt(:,kz,s)) - (MolWtWet(s) / MolWtDry) * SvapPress( 6, TempSfc ) / PressSfc )/DelZ )
   end do
    !作業配列の解放
    deallocate(xz_VelX)

    call StoreMixRtFlux( xza_MixRtFluxBulk )
  end function xza_MixRtFluxBulk