!---------------------------------------------------------------------
!     Copyright (C) GFD Dennou Club, 2005. All rights reserved.
!---------------------------------------------------------------------
                                                                 !=begin
!= Module SpongeLayer
!
!   * Developer: SUGIYAMA Ko-ichiro
!   * Version: $Id: spongelayer.f90,v 1.1.4.1 2006/01/13 06:28:12 sugiyama Exp $
!   * Tag Name: $Name:  $
!   * Change History: 
!
!== Overview
!
!スポンジ層
!  * 境界付近で波の反射を抑え吸収するための層
! 
!== Error Handling
!
!== Bugs
!
!== Note
!
!  * この関数は, 基本場が零な変数(速度, エクスナー関数の擾乱)に
!    適用することを想定している. 
!  * 各格子点に対する関数を定義する必要がある
!
!== Future Plans
!
!
                                                                 !=end

module SpongeLayer 

  interface ss_SLayer_ss
     function ss_SLayer_ss(ss_Var)
       use gridset
       real(8),intent(in):: ss_Var(DimXMin:DimXMax, DimZMin:DimZMax)
       real(8)           :: ss_SLayer_ss(DimXMin:DimXMax, DimZMin:DimZMax)
     end function ss_SLayer_ss
  end interface

  interface sf_SLayer_sf
     function sf_SLayer_sf(sf_Var)
       use gridset
       real(8),intent(in):: sf_Var(DimXMin:DimXMax, DimZMin:DimZMax)
       real(8)           :: sf_SLayer_sf(DimXMin:DimXMax, DimZMin:DimZMax)
     end function sf_SLayer_sf
  end interface

  interface fs_SLayer_fs
     function fs_SLayer_fs(fs_Var)
       use gridset
       real(8),intent(in):: fs_Var(DimXMin:DimXMax, DimZMin:DimZMax)
       real(8)           :: fs_SLayer_fs(DimXMin:DimXMax, DimZMin:DimZMax)
     end function fs_SLayer_fs
  end interface

end module SpongeLayer

!!!
!!! ss 格子点に対するスポンジ層
!!!
function ss_SLayer_ss(ss_Var)
                                                                 !=begin
  !== Dependency
  use gridset,  only: DimXMin, DimXMax, DimZMin, DimZMax
  use arareset, only: ss_SDumpH, ss_SDumpV
                                                                 !=end
  !--- 暗黙の型宣言禁止
  implicit none
                                                                 !=begin  
  !== Input
  real(8), intent(in)   :: ss_Var(DimXMin:DimXMax, DimZMin:DimZMax)
                                                                 !=end
                                                                 !=begin
  !== Out
  real(8)  :: ss_SLayer_ss(DimXMin:DimXMax, DimZMin:DimZMax)
                                                                 !=end

  !--- スポンジ層によるダンピングを計算
  ss_SLayer_ss =  0.0d0    !初期化
  ss_SLayer_ss =  ( ss_SDumpH + ss_SDumpV ) * ss_Var
  
end function ss_SLayer_ss


!!!
!!! sf 格子点に対するスポンジ層
!!!
function sf_SLayer_sf(sf_Var)
                                                                 !=begin
  !== Dependency
  use gridset,  only: DimXMin, DimXMax, DimZMin, DimZMax
  use arareset, only: sf_SDumpH, sf_SDumpV
                                                                 !=end
  !--- 暗黙の型宣言禁止
  implicit none
                                                                 !=begin  
  !== Input
  real(8), intent(in)   :: sf_Var(DimXMin:DimXMax, DimZMin:DimZMax)
                                                                 !=end
                                                                 !=begin
  !== Out
  real(8)  :: sf_SLayer_sf(DimXMin:DimXMax, DimZMin:DimZMax)
                                                                 !=end

  !--- スポンジ層によるダンピングを計算  
  sf_SLayer_sf =  0.0d0  !初期化
  sf_SLayer_sf =  ( sf_SDumpH + sf_SDumpV )* sf_Var
  
end function sf_SLayer_sf


!!!
!!! fs 格子点に対するスポンジ層
!!!
function fs_SLayer_fs(fs_Var)
                                                                 !=begin
  !== Dependency
  use gridset,  only: DimXMin, DimXMax, DimZMin, DimZMax
  use arareset, only: fs_SDumpH, fs_SDumpV
                                                                 !=end
  !--- 暗黙の型宣言禁止
  implicit none
                                                                 !=begin  
  !== Input
  real(8), intent(in)   :: fs_Var(DimXMin:DimXMax, DimZMin:DimZMax)
                                                                 !=end
                                                                 !=begin
  !== Out
  real(8)  :: fs_SLayer_fs(DimXMin:DimXMax, DimZMin:DimZMax)
                                                                 !=end

  !--- スポンジ層によるダンピングを計算  
  fs_SLayer_fs =  0.0d0 !初期化
  fs_SLayer_fs = ( fs_SDumpH + fs_SDumpV ) * fs_Var
  
end function fs_SLayer_fs
