template class xf::hpc::rtm::Stencil3D

#include "stencil3d.hpp"

Overview

Stencil3D class defines isotrophic laplacian operation and time iterations function.

Parameters:

t_DataType the basic wavefield datatype
t_Order is the spatial discretization order
t_MaxDimZ is the maximum dim along z-axis this kernel can process
t_MaxDimY is the maximum dim along y-axis this kernel can process
t_PEZ is the number of processing elements along z-axis
t_PEX is the number of processing elements along x-axis
template <
    typename t_DataType,
    int t_Order,
    int t_MaxDimZ = 128,
    int t_MaxDimY = 128,
    int t_PEZ = 1,
    int t_PEX = 1
    >
class Stencil3D

    // direct descendants

    template <
        typename t_Domain,
        typename t_DataType,
        int t_Order,
        int t_MaxDimZ = 128,
        int t_MaxDimY = 128,
        int t_MaxB = 40,
        int t_PEZ = 1,
        int t_PEX = 1
        >
    class xf::hpc::rtm::RTM3D

// typedefs

typedef blas::WideType <t_DataType, t_PEZ> t_DataTypeZ
typedef t_DataTypeZ::t_TypeInt t_InTypeZ
typedef blas::WideType <t_DataType, t_PEX> t_DataTypeX
typedef t_DataTypeX::t_TypeInt t_InTypeX
typedef blas::WideType <t_InTypeX, t_PEZ, t_DataTypeX::t_TypeWidth> t_WideType
typedef t_WideType::t_TypeInt t_InType
typedef blas::WideType <t_InType, t_NumData, t_WideType::t_TypeWidth> t_PairType
typedef t_PairType::t_TypeInt t_PairInType

// fields

static const unsigned int t_HalfOrder
static const unsigned int t_NumData
static const unsigned int t_FifoDepth

Methods

setCoef

void setCoef (
    const t_DataType* p_coefz,
    const t_DataType* p_coefy,
    const t_DataType* p_coefx
    )

setCoef set the coefficients for stencil kernel

Parameters:

p_coefz is the coefficents along z-direction
p_coefy is the coefficents along y-direction
p_coefx is the coefficents along x-direction

setDim

void setDim (
    const unsigned int p_z,
    const unsigned int p_y,
    const unsigned int p_x
    )

setDim set the dimension of the wavefields

Parameters:

p_z is the dimension of z-direction
p_y is the dimension of y-direction
p_x is the dimension of x-direction

laplacian

laplacian overload (1)

void laplacian (
    hls::stream <t_InType>& p_in,
    hls::stream <t_InType>& p_pin,
    hls::stream <t_InType>& p_out
    )

laplacian computes the laplacian of an given wavefield

Parameters:

p_in is the input wavefield stream
p_pin is a copy of p_in
p_out is a stream of laplacian results

propagate

propagate overload (1)

void propagate (
    hls::stream <t_InType>& p_v2dt2,
    hls::stream <t_InType>& p_cpvt,
    hls::stream <t_InType>& p_i0,
    hls::stream <t_InType>& p_i1,
    hls::stream <t_InType>& p_o0,
    hls::stream <t_InType>& p_o1,
    bool p_sw = false
    )

propagate computes the time iteration for FDTD

Parameters:

p_v2dt2 is the pow(v * dt, 2)
p_cpvt is a copy of p_v2dt2
p_i0 is a stream of input wavefield
p_i1 is a stream of input wavefield
p_o0 is a stream of output wavefield
p_o1 is a stream of output wavefield
p_sw a switch to swap outptu streams

propagate overload (2)

void propagate (
    hls::stream <t_InType>& p_v2dt2,
    hls::stream <t_InType>& p_cpvt,
    hls::stream <t_PairInType>& p_in,
    hls::stream <t_PairInType>& p_out,
    bool p_sw = false
    )

propagate computes the time iteration for FDTD

Parameters:

p_v2dt2 is the pow(v * dt, 2)
p_cpvt is a copy of p_v2dt2
p_in is a stream of input wavefield
p_out is a stream of output wavefield
p_sw a switch to swap outptu streams