Class Damping
In: util/damping.f90

    Copyright (C) GFD Dennou Club, 2005. All rights reserved.

Module Damping

  * Developer: SUGIYAMA Ko-ichiro
  * Version: $Id: damping.f90,v 1.1.1.1 2006/04/25 03:43:58 deepconv Exp $
  * Tag Name: $Name:  $
  * Change History:

Overview

減衰率とその計算を行うためのパッケージ型モジュール

 * 音波減衰項の係数
 * スポンジ層の設定(境界付近で波の反射を抑え吸収するための層)

Error Handling

Bugs

Note

 * この関数は, 基本場が零な変数(速度, エクスナー関数の擾乱)に
   適用することを想定している.
 * 各格子点に対する関数を定義する必要がある

Future Plans

Methods

Included Modules

gridset timeset

Public Instance methods

[Source]

subroutine DampSound_Init ( damp )
 
    !
    ! 音波減衰項の減衰係数の初期化
    ! 

    !暗黙の型宣言禁止
    implicit none

    !変数定義
    real(8), intent(in)  :: damp

    !-------------------------------------------------------------------
    ! 音波減衰項の減衰率   DelX ** 2.0 に依存?
    !-------------------------------------------------------------------
    DampSound = Damp * ( DelX ** 2.0d0 ) / DelTimeShort
    
    !-----------------------------------------------------------------    
    ! 値の確認
    !-----------------------------------------------------------------
    write(*,*) "DampSound_init, DampSound : ", DampSound

end subroutine

[Source]

subroutine DampSponge_Init ( Time, DepthH, DepthV )

    !
    ! スポンジ層の減衰係数を決める
    !

    !暗黙の型宣言禁止
    implicit none

    !入力変数
    real(8), intent(in)   :: Time     !スポンジ層の e-folding time
    real(8), intent(in)   :: DepthH   !スポンジ層の厚さ(水平方向)
    real(8), intent(in)   :: DepthV   !スポンジ層の厚さ(鉛直方向)
    real(8), parameter    :: Pi =3.1415926535897932385d0   !円周率
    integer               :: i, k

    !初期化
    allocate( &
      & xz_DampRateH(DimXMin:DimXMax, DimZMin:DimZMax), &
      & xz_DampRateV(DimXMin:DimXMax, DimZMin:DimZMax), &
      & pz_DampRateH(DimXMin:DimXMax, DimZMin:DimZMax), &
      & pz_DampRateV(DimXMin:DimXMax, DimZMin:DimZMax), &
      & xr_DampRateH(DimXMin:DimXMax, DimZMin:DimZMax), &
      & xr_DampRateV(DimXMin:DimXMax, DimZMin:DimZMax)    )
    xz_DampRateH = 0.0d0
    xz_DampRateV = 0.0d0
    pz_DampRateH = 0.0d0
    pz_DampRateV = 0.0d0
    xr_DampRateH = 0.0d0
    xr_DampRateV = 0.0d0

    !値の入力
    EFTime     = Time
    DampDepthH = DepthH
    DampDepthV = DepthV
    
    !-----------------------------------------------------------------    
    ! スポンジ層の減衰率
    !-----------------------------------------------------------------
    !水平方向の東側・西側境界
    if ( DampDepthH < DelX ) then 
!      write(*,*) "DampDepthH is too thin. DelX is ", DelX   !警告のみ出力

    else
      do i = DimXMin, DimXMax
        !スカラー格子点の西側境界
        if ( s_X(i) < DampDepthH) then 
          xz_DampRateH(i,:) = ((1.0d0 - s_X(i) / DampDepthH) ** 3.0d0) / EFTime
        end if
        
        !フラックス格子点の西側境界
        if ( f_X(i) < DampDepthH) then 
          pz_DampRateH(i,:) = ((1.0d0 - f_X(i) / DampDepthH) ** 3.0d0) / EFTime
         end if
        
        !スカラー格子点の東側境界    
        if ( s_X(i) > ( XMax - DampDepthH ) ) then 
          xz_DampRateH(i,:) = &
            & ((1.0d0 - (XMax - s_X(i)) / DampDepthH) ** 3.0d0) / EFTime 
        end if
        
        !フラックス格子点の東側境界    
        if ( f_X(i) > ( XMax - DampDepthH ) ) then 
          pz_DampRateH(i,:) = &
            & ((1.0d0 - (XMax - f_X(i)) / DampDepthH) ** 3.0d0) / EFTime 
        end if
      end do
    end if
    !sf と ss は X 方向に関しては同じ
    xr_DampRateH  = xz_DampRateH
    
    !鉛直方向の上部境界    
    if ( DampDepthV < DelZ ) then 
!      write(*,*) "DampDepthV is too thin. DelZ is ", DelZ   !警告のみ表示
      
    else
      do k = DimZMin, DimZMax
        !スカラー格子点
        if ( s_Z(k) >= ( ZMax - DampDepthV ) ) then 
          xz_DampRateV(:,k) =  &
            & (1.0d0 - dcos(Pi * (s_Z(k) - ZMax + DampDepthV) / DampDepthV)) &
            &  / EFTime 
        end if
        
        !フラックス格子点
        if ( f_Z(k) >= ( ZMax - DampDepthV ) ) then 
          xr_DampRateV(:,k) =  &
            & (1.0d0 - dcos(Pi * (f_Z(k) - ZMax + DampDepthV)/ DampDepthV)) &
            &  / EFTime 
        end if
      end do
    end if
    !fs と ss は Z 方向に関しては同じ
    pz_DampRateV  = xz_DampRateV
    
    !-----------------------------------------------------------------    
    ! 値の確認
    !-----------------------------------------------------------------
    write(*,*) "DampSponge_Init, EFTime :    ", EFTime 
    write(*,*) "DampSponge_Init, DampDepthH: ", DampDepthH 
    write(*,*) "DampSponge_Init, DampDepthV: ", DampDepthV    

end subroutine

[Source]

subroutine Damping_Init ( cfgfile )
 
    !
    ! 音波減衰項とスポンジ層の減衰係数の初期化
    ! 

    !暗黙の型宣言禁止
    implicit none

    !変数定義
    character(*), intent(in) :: cfgfile
    real(8)                  :: Alpha
    real(8)                  :: Time
    real(8)                  :: DepthH
    real(8)                  :: DepthV

    !NAMELIST から取得
    NAMELIST /damping/ Alpha, Time, DepthH, DepthV
    open (10, FILE=cfgfile)
    read(10, NML=damping)
    close(10)

    !初期化
    call DampSound_Init( Alpha ) 
    call DampSponge_Init( Time, DepthH, DepthV )

end subroutine

[Validate]