WaveKernelClass Module

##############################################################

call Imatrix%eyes(this%OmegaSqMatrix%size() )

##############################################################



Derived Types

type, public ::  WaveKernel_

Components

Type Visibility Attributes Name Initial
type(CRS_), public :: OmegaSqMatrix
real(kind=Real64), public, allocatable :: Mmatrix_diag(:)
real(kind=Real64), public, allocatable :: DampingRatio(:)
real(kind=real64), public :: tol = dble(1.0e-25)
real(kind=real64), public, allocatable :: v_in1(:)
real(kind=real64), public, allocatable :: v_in2(:)
real(kind=real64), public, allocatable :: v_out1(:)
real(kind=real64), public, allocatable :: v_out2(:)
real(kind=real64), public, allocatable :: u_in1(:)
real(kind=real64), public, allocatable :: u_in2(:)
real(kind=real64), public, allocatable :: u_out1(:)
real(kind=real64), public, allocatable :: u_out2(:)
real(kind=real64), public, allocatable :: hanning_buffer(:,:)
integer(kind=int32), public :: itrmax = 100
integer(kind=int32), public :: EbO_Algorithm = FEMDomain_Overset_GPP
real(kind=real64), public :: EbO_relative_penalty = 1000.0d0

Type-Bound Procedures

procedure, public, pass :: initWaveKernel
procedure, public, pass :: init_by_femdomain_pointers_WK
generic, public :: init => initWaveKernel, init_by_femdomain_pointers_WK
procedure, public :: setLPF => setLPF_WaveKernel
procedure, public :: bandpass => bandpass_WaveKernel
procedure, public :: lowpass => lowpass_WaveKernel
procedure, public :: movingAverage => movingAverage_WaveKernel
procedure, public, pass :: getDisplacement_and_Velocity_WaveKernel
procedure, public, pass :: getDisplacement_and_Velocity_MPI_WaveKernel
procedure, public, pass :: getDisplacement_and_Velocity_complex64_WaveKernel
generic, public :: getDisplacement_and_Velocity => getDisplacement_and_Velocity_WaveKernel, getDisplacement_and_Velocity_complex64_WaveKernel, getDisplacement_and_Velocity_MPI_WaveKernel
procedure, public :: getDisplacement => getDisplacementWaveKernel
procedure, public :: getVelocity => getVelocityWaveKernel

Functions

public function getDisplacementWaveKernel(this, u_n, v_n, dt, fix_idx, cutoff_frequency, debug_mode, RHS, gain) result(u)

Arguments

Type IntentOptional Attributes Name
class(WaveKernel_), intent(inout) :: this
real(kind=real64), intent(in) :: u_n(:)
real(kind=real64), intent(in) :: v_n(:)
real(kind=real64), intent(in) :: dt
integer(kind=int32), intent(in), optional :: fix_idx(:)
real(kind=real64), intent(in), optional :: cutoff_frequency
logical, intent(in), optional :: debug_mode
real(kind=real64), intent(in), optional :: RHS(:)
real(kind=real64), intent(in), optional :: gain

Return Value real(kind=real64), allocatable, (:)

public function getVelocityWaveKernel(this, u_n, v_n, RHS, dt, fix_idx, cutoff_frequency, debug_mode, gain) result(v)

Arguments

Type IntentOptional Attributes Name
class(WaveKernel_), intent(inout) :: this
real(kind=real64), intent(in) :: u_n(:)
real(kind=real64), intent(in) :: v_n(:)
real(kind=real64), intent(in), optional :: RHS(:)
real(kind=real64), intent(in) :: dt
integer(kind=int32), intent(in), optional :: fix_idx(:)
real(kind=real64), intent(in), optional :: cutoff_frequency
logical, intent(in), optional :: debug_mode
real(kind=real64), intent(in), optional :: gain

Return Value real(kind=real64), allocatable, (:)

public pure function LPF_cos_sqrt_taylor_coefficient(k, t, f_c) result(c_k)

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: k
real(kind=real64), intent(in) :: t
real(kind=real64), intent(in) :: f_c

Return Value real(kind=real64)

public function LPF_damped_cos_sqrt_taylor_coefficient(k, t, f_c, DampingRatio, weights) result(c_k)

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: k
real(kind=real64), intent(in) :: t
real(kind=real64), intent(in) :: f_c
real(kind=real64), intent(in) :: DampingRatio(:)
real(kind=real64), intent(in), optional :: weights(:)

Return Value real(kind=real64), allocatable, (:)

public pure function LPF_t_sinc_sqrt_taylor_coefficient(k, t, f_c) result(s_k)

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: k
real(kind=real64), intent(in) :: t
real(kind=real64), intent(in) :: f_c

Return Value real(kind=real64)

public function LPF_damped_t_sinc_sqrt_taylor_coefficient(k, t, f_c, DampingRatio, weights) result(s_k)

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: k
real(kind=real64), intent(in) :: t
real(kind=real64), intent(in) :: f_c
real(kind=real64), intent(in) :: DampingRatio(:)
real(kind=real64), intent(in), optional :: weights(:)

Return Value real(kind=real64), allocatable, (:)

public function LPF_cos_sqrt_WaveKernelFunction(Omega_sq_matrix, dt, f_c, u_n, itrmax, tol, fix_idx) result(ret)

Arguments

Type IntentOptional Attributes Name
type(CRS_), intent(inout) :: Omega_sq_matrix
real(kind=real64), intent(in) :: dt
real(kind=real64), intent(in) :: f_c
real(kind=real64), intent(in) :: u_n(:)
integer(kind=int32), intent(in) :: itrmax
real(kind=real64), intent(in) :: tol
integer(kind=int32), intent(in) :: fix_idx(:)

Return Value real(kind=real64), allocatable, (:)

public function LPF_damped_cos_sqrt_WaveKernelFunction(Omega_sq_matrix, dt, f_c, u_n, DampingRatio, itrmax, tol, fix_idx, weights) result(ret)

Arguments

Type IntentOptional Attributes Name
type(CRS_), intent(inout) :: Omega_sq_matrix
real(kind=real64), intent(in) :: dt
real(kind=real64), intent(in) :: f_c
real(kind=real64), intent(in) :: u_n(:)
real(kind=real64), intent(in) :: DampingRatio(:)
integer(kind=int32), intent(in) :: itrmax
real(kind=real64), intent(in) :: tol
integer(kind=int32), intent(in), optional :: fix_idx(:)
real(kind=real64), intent(in), optional :: weights(:)

Return Value real(kind=real64), allocatable, (:)

public function LPF_damped_cos_sqrt_complex64_WaveKernelFunction(Omega_sq_matrix, dt, f_c, u_n, DampingRatio, itrmax, tol, fix_idx) result(ret)

Arguments

Type IntentOptional Attributes Name
type(CRS_), intent(inout) :: Omega_sq_matrix
real(kind=real64), intent(in) :: dt
real(kind=real64), intent(in) :: f_c
complex(kind=real64), intent(in) :: u_n(:)
real(kind=real64), intent(in) :: DampingRatio(:)
integer(kind=int32), intent(in) :: itrmax
real(kind=real64), intent(in) :: tol
integer(kind=int32), intent(in), optional :: fix_idx(:)

Return Value complex(kind=real64), allocatable, (:)

public function LPF_t_sinc_sqrt_WaveKernelFunction(Omega_sq_matrix, dt, f_c, v_n, itrmax, tol, fix_idx) result(ret)

Arguments

Type IntentOptional Attributes Name
type(CRS_), intent(inout) :: Omega_sq_matrix
real(kind=real64), intent(in) :: dt
real(kind=real64), intent(in) :: f_c
real(kind=real64), intent(in) :: v_n(:)
integer(kind=int32), intent(in) :: itrmax
real(kind=real64), intent(in) :: tol
integer(kind=int32), intent(in) :: fix_idx(:)

Return Value real(kind=real64), allocatable, (:)

public function LPF_damped_t_sinc_sqrt_WaveKernelFunction(Omega_sq_matrix, dt, f_c, v_n, itrmax, tol, fix_idx, DampingRatio, weights) result(ret)

Arguments

Type IntentOptional Attributes Name
type(CRS_), intent(inout) :: Omega_sq_matrix
real(kind=real64), intent(in) :: dt
real(kind=real64), intent(in) :: f_c
real(kind=real64), intent(in) :: v_n(:)
integer(kind=int32), intent(in) :: itrmax
real(kind=real64), intent(in) :: tol
integer(kind=int32), intent(in), optional :: fix_idx(:)
real(kind=real64), intent(in) :: DampingRatio(:)
real(kind=real64), intent(in), optional :: weights(:)

Return Value real(kind=real64), allocatable, (:)

public function LPF_damped_t_sinc_sqrt_MPI_WaveKernelFunction(Omega_sq_matrix, dt, f_c, v_n, itrmax, tol, fix_idx, DampingRatio, MPID, FEMDomain, weights) result(ret)

Arguments

Type IntentOptional Attributes Name
type(CRS_), intent(inout) :: Omega_sq_matrix
real(kind=real64), intent(in) :: dt
real(kind=real64), intent(in) :: f_c
real(kind=real64), intent(in) :: v_n(:)
integer(kind=int32), intent(in) :: itrmax
real(kind=real64), intent(in) :: tol
integer(kind=int32), intent(in), optional :: fix_idx(:)
real(kind=real64), intent(in) :: DampingRatio(:)
type(MPI_), intent(inout) :: MPID
type(FEMDomain_), intent(inout) :: FEMDomain
real(kind=real64), intent(in), optional :: weights(:)

Return Value real(kind=real64), allocatable, (:)

public function LPF_damped_t_sinc_sqrt_complex64_WaveKernelFunction(Omega_sq_matrix, dt, f_c, v_n, itrmax, tol, fix_idx, DampingRatio, weights) result(ret)

Arguments

Type IntentOptional Attributes Name
type(CRS_), intent(inout) :: Omega_sq_matrix
real(kind=real64), intent(in) :: dt
real(kind=real64), intent(in) :: f_c
complex(kind=real64), intent(in) :: v_n(:)
integer(kind=int32), intent(in) :: itrmax
real(kind=real64), intent(in) :: tol
integer(kind=int32), intent(in), optional :: fix_idx(:)
real(kind=real64), intent(in) :: DampingRatio(:)
real(kind=real64), intent(in), optional :: weights(:)

Return Value complex(kind=real64), allocatable, (:)


Subroutines

public subroutine initWaveKernel(this, FEMDomain, DOF, YoungModulus, PoissonRatio, DampingRatio, Density)

Arguments

Type IntentOptional Attributes Name
class(WaveKernel_), intent(inout) :: this
type(FEMDomain_), intent(inout) :: FEMDomain
integer(kind=int32), intent(in) :: DOF
real(kind=real64), intent(in) :: YoungModulus(:)
real(kind=real64), intent(in), optional :: PoissonRatio(:)
real(kind=real64), intent(in), optional :: DampingRatio(:)
real(kind=real64), intent(in) :: Density(:)

public subroutine init_by_femdomain_pointers_WK(this, FEMDomainPointers, DOF, YoungModulus, PoissonRatio, DampingRatio, Density)

Arguments

Type IntentOptional Attributes Name
class(WaveKernel_), intent(inout) :: this
type(FEMDomainp_), intent(inout) :: FEMDomainPointers(:)
integer(kind=int32), intent(in) :: DOF
real(kind=real64), intent(in) :: YoungModulus(:)
real(kind=real64), intent(in), optional :: PoissonRatio(:)
real(kind=real64), intent(in), optional :: DampingRatio(:)
real(kind=real64), intent(in) :: Density(:)

public subroutine bandpass_WaveKernel(this, u_n, v_n, freq_range, dt, fix_idx)

Arguments

Type IntentOptional Attributes Name
class(WaveKernel_), intent(inout) :: this
real(kind=real64), intent(inout) :: u_n(:)
real(kind=real64), intent(inout) :: v_n(:)
real(kind=real64), intent(in) :: freq_range(1:2)
real(kind=real64), intent(in) :: dt
integer(kind=int32), intent(in), optional :: fix_idx(:)

public subroutine lowpass_WaveKernel(this, u_n, v_n, cutoff_frequency, dt, fix_idx)

Arguments

Type IntentOptional Attributes Name
class(WaveKernel_), intent(inout) :: this
real(kind=real64), intent(inout) :: u_n(:)
real(kind=real64), intent(inout) :: v_n(:)
real(kind=real64), intent(in) :: cutoff_frequency
real(kind=real64), intent(in) :: dt
integer(kind=int32), intent(in), optional :: fix_idx(:)

public subroutine movingAverage_WaveKernel(this, u_n, v_n, fix_idx)

Arguments

Type IntentOptional Attributes Name
class(WaveKernel_), intent(inout) :: this
real(kind=real64), intent(inout) :: u_n(:)
real(kind=real64), intent(inout) :: v_n(:)
integer(kind=int32), intent(in), optional :: fix_idx(:)

public subroutine getDisplacement_and_Velocity_WaveKernel(this, u_n, v_n, dt, fix_idx, cutoff_frequency, debug_mode, u, v, RHS)

Arguments

Type IntentOptional Attributes Name
class(WaveKernel_), intent(inout) :: this
real(kind=real64), intent(in) :: u_n(:)
real(kind=real64), intent(in) :: v_n(:)
real(kind=real64), intent(in) :: dt
integer(kind=int32), intent(in), optional, allocatable :: fix_idx(:)
real(kind=real64), intent(in), optional :: cutoff_frequency
logical, intent(in), optional :: debug_mode
real(kind=real64), allocatable :: u(:)
real(kind=real64), allocatable :: v(:)
real(kind=real64), intent(in), optional :: RHS(:)

public subroutine getDisplacement_and_Velocity_MPI_WaveKernel(this, u_n, v_n, dt, fix_idx, cutoff_frequency, debug_mode, u, v, RHS, MPID, FEMDomain)

Arguments

Type IntentOptional Attributes Name
class(WaveKernel_), intent(inout) :: this
real(kind=real64), intent(in) :: u_n(:)
real(kind=real64), intent(in) :: v_n(:)
real(kind=real64), intent(in) :: dt
integer(kind=int32), intent(in), optional, allocatable :: fix_idx(:)
real(kind=real64), intent(in) :: cutoff_frequency
logical, intent(in), optional :: debug_mode
real(kind=real64), allocatable :: u(:)
real(kind=real64), allocatable :: v(:)
real(kind=real64), intent(in), optional :: RHS(:)
type(MPI_), intent(inout) :: MPID
type(FEMDomain_), intent(inout) :: FEMDomain

public subroutine getDisplacement_and_Velocity_complex64_WaveKernel(this, u_n, v_n, dt, fix_idx, cutoff_frequency, debug_mode, u, v, RHS)

Arguments

Type IntentOptional Attributes Name
class(WaveKernel_), intent(inout) :: this
complex(kind=real64), intent(in) :: u_n(:)
complex(kind=real64), intent(in) :: v_n(:)
real(kind=real64), intent(in) :: dt
integer(kind=int32), intent(in), optional, allocatable :: fix_idx(:)
real(kind=real64), intent(in), optional :: cutoff_frequency
logical, intent(in), optional :: debug_mode
complex(kind=real64), allocatable :: u(:)
complex(kind=real64), allocatable :: v(:)
real(kind=real64), intent(in), optional :: RHS(:)

public subroutine setLPF_WaveKernel(this, weights)

Arguments

Type IntentOptional Attributes Name
class(WaveKernel_), intent(inout) :: this
real(kind=real64), intent(in) :: weights(:)