Class storeset_3d
In: setup/storeset_3d.f90

積算値を保管するための変数型モジュール.

Methods

Included Modules

dc_types xyz_base_module gridset_3d TimeSet

Public Instance methods

Subroutine :
Work(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(in)

移流項の保管

[Source]

  subroutine StoreAdv( Work )
    !移流項の保管

    implicit none

    real(DP), intent(in)  :: Work(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP)              :: Work2(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)

    Work2  = xyz_Adv + Work
    xyz_Adv = Work2

  end subroutine StoreAdv
Subroutine :

保管した値のクリアー

[Source]

  subroutine StoreClean( )
    !保管した値のクリアー
    
    z_Adv  = 0.0d0
    z_Turb = 0.0d0
    z_Diff = 0.0d0
    z_Disp = 0.0d0
    z_Rad  = 0.0d0
    z_Damp = 0.0d0
    z_Cond = 0.0d0
    z_Flux = 0.0d0

    xyz_Adv  = 0.0d0
    xyz_Turb = 0.0d0
    xyz_Diff = 0.0d0
    xyz_Disp = 0.0d0
    xyz_Rad  = 0.0d0
    xyz_Damp = 0.0d0
    xyz_Cond = 0.0d0
    xyz_Flux = 0.0d0
   
!    z_Stab      = 0.0d0
!    z_StabTemp  = 0.0d0
!    z_StabMolWt = 0.0d0

!    xyz_Stab1 = 0.0d0
!    xyz_Stab2 = 0.0d0
!    xyz_Stab3 = 0.0d0

!    za_MixRt  = 0.0d0
!    xyza_MixRt1 = 0.0d0

!    CalNum  = 1.0d-40    !ゼロ割を禁止. 
  end subroutine StoreClean
Subroutine :
Work(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(in)

潜熱・蒸発熱の保管

[Source]

  subroutine StoreCond( Work )
    !潜熱・蒸発熱の保管

    implicit none
    
    real(DP), intent(in)  :: Work(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP)              :: Work2(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)

    Work2   = xyz_Cond + Work
    xyz_Cond = Work2

  end subroutine StoreCond
Subroutine :
Work(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(in)

ダンピング項の保管

[Source]

  subroutine StoreDamp( Work )
    !ダンピング項の保管

    implicit none
    
    real(DP), intent(in)  :: Work(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP)              :: Work2(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)

    Work2   = xyz_Damp + Work
    xyz_Damp = Work2

  end subroutine StoreDamp
Subroutine :
Work(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(in)

数値拡散項の保管

[Source]

  subroutine StoreDiff( Work )
    !数値拡散項の保管

    implicit none
    
    real(DP), intent(in)  :: Work(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP)              :: Work2(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)

    Work2   = xyz_Diff + Work
    xyz_Diff = Work2

  end subroutine StoreDiff
Subroutine :
Work(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(in)

散逸加熱項の保管

[Source]

  subroutine StoreDisp( Work )
    !散逸加熱項の保管

    implicit none
    
    real(DP), intent(in)  :: Work(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP)              :: Work2(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)

    Work2   = xyz_Disp + Work
    xyz_Disp = Work2

  end subroutine StoreDisp
Subroutine :
Work(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(in)

地表面フラックスの保管

[Source]

  subroutine StoreFlux( Work )
    !地表面フラックスの保管

    implicit none
    
    real(DP), intent(in)  :: Work(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP)              :: Work2(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)

    Work2   = xyz_Flux + Work
    xyz_Flux = Work2

  end subroutine StoreFlux
Subroutine :

保管した値の水平平均値 [K/s]

[Source]

  subroutine StoreMeanXY( )
    !保管した値の水平平均値 [K/s]
    real(DP) :: CalNum

    CalNum = TimeDisp / DelTimeLong
    
    z_Adv  = a_MeanXY_aaa( xyz_Adv )   / CalNum
    z_Turb = a_MeanXY_aaa( xyz_Turb )  / CalNum
    z_Diff = a_MeanXY_aaa( xyz_Diff )  / CalNum
    z_Disp = a_MeanXY_aaa( xyz_Disp )  / CalNum
    z_Rad  = a_MeanXY_aaa( xyz_Rad  )  / CalNum
    z_Damp = a_MeanXY_aaa( xyz_Damp )  / CalNum
    z_Cond = a_MeanXY_aaa( xyz_Cond )  / CalNum
    z_Flux = a_MeanXY_aaa( xyz_Flux )  / CalNum

!    z_Stab      = a_MeanXY_aaa( xyz_Stab1 ) / CalNum
!    z_StabTemp  = a_MeanXY_aaa( xyz_Stab2 ) / CalNum
!    z_StabMolWt = a_MeanXY_aaa( xyz_Stab3 ) / CalNum

!    za_MixRt    = aa_MeanXY_aaaa( xyza_MixRt1 ) / CalNum

    !描画する際に対数プロットをするので, 値にゼロが入って欲しくない
!    where ( za_MixRt < 1.0d-20 )
!      za_MixRt = 1.0d-20
!    end where

  end subroutine StoreMeanXY
Subroutine :
Work(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(in)

放射冷却項の保管

[Source]

  subroutine StoreRad( Work )
    !放射冷却項の保管

    implicit none
    
    real(DP), intent(in)  :: Work(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP)              :: Work2(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)

    Work2  = xyz_Rad + Work
    xyz_Rad = Work2

  end subroutine StoreRad
Subroutine :

初期化ルーチン

[Source]

  subroutine StoreSet_Init( )
    !初期化ルーチン

    allocate( z_Adv(DimZMin:DimZMax), z_Turb(DimZMin:DimZMax), z_Disp(DimZMin:DimZMax), z_Diff(DimZMin:DimZMax), z_Rad(DimZMin:DimZMax), z_Damp(DimZMin:DimZMax), z_Cond(DimZMin:DimZMax), z_Flux(DimZMin:DimZMax), xyz_Adv(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_Turb(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_Disp(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_Diff(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_Rad(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_Damp(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_Cond(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax), xyz_Flux(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) )
    
    z_Adv  = 0.0d0
    z_Turb = 0.0d0
    z_Diff = 0.0d0
    z_Disp = 0.0d0
    z_Rad  = 0.0d0
    z_Damp = 0.0d0
    z_Cond = 0.0d0
    z_Flux = 0.0d0

    xyz_Adv  = 0.0d0
    xyz_Turb = 0.0d0
    xyz_Diff = 0.0d0
    xyz_Disp = 0.0d0
    xyz_Rad  = 0.0d0
    xyz_Damp = 0.0d0
    xyz_Cond = 0.0d0
    xyz_Flux = 0.0d0
   
!    z_Stab      = 0.0d0
!    z_StabTemp  = 0.0d0
!    z_StabMolWt = 0.0d0

!    xyz_Stab1 = 0.0d0
!    xyz_Stab2 = 0.0d0
!    xyz_Stab3 = 0.0d0

!    za_MixRt  = 0.0d0
!    xyza_MixRt1 = 0.0d0

!    CalNum  = 1.0d-40    !ゼロ割を禁止. 
  end subroutine StoreSet_Init
Subroutine :
Work(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) :real(DP), intent(in)

乱流項の保管

[Source]

  subroutine StoreTurb( Work )
    !乱流項の保管

    implicit none

    real(DP), intent(in)  :: Work(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)
    real(DP)              :: Work2(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax)

    Work2   = xyz_Turb + Work
    xyz_Turb = Work2

  end subroutine StoreTurb
Function :
aa_MeanXY_aaaa(DimZMin:DimZMax, SpcNum) :real(DP)
: 水平平均値
var(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax, SpcNum) :real(DP), intent(in)
: 平均演算の対象となる変数

水平平均値の計算

[Source]

  function aa_MeanXY_aaaa( var ) 
    !
    ! 水平平均値の計算
    !
    
    !暗黙の型宣言禁止
    implicit none
    
    !変数定義
    real(DP), intent(in)  :: var(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax, SpcNum)
                                     !平均演算の対象となる変数
    real(DP)              :: aa_MeanXY_aaaa(DimZMin:DimZMax, SpcNum)
                                     !水平平均値
    integer               :: i

    do i = 1, SpcNum
      aa_MeanXY_aaaa(:,i) = a_MeanXY_aaa(var(:,:,:,i))
    end do
  
  end function aa_MeanXY_aaaa
z_Adv
Variable :
z_Adv(:) :real(DP), allocatable
z_Cond
Variable :
z_Cond(:) :real(DP), allocatable
z_Damp
Variable :
z_Damp(:) :real(DP), allocatable
z_Diff
Variable :
z_Diff(:) :real(DP), allocatable
z_Disp
Variable :
z_Disp(:) :real(DP), allocatable
z_Flux
Variable :
z_Flux(:) :real(DP), allocatable
z_Rad
Variable :
z_Rad(:) :real(DP), allocatable
z_Turb
Variable :
z_Turb(:) :real(DP), allocatable

[Validate]