18#ifndef BEM_RWG_OPS_GENERIC_H
19#define BEM_RWG_OPS_GENERIC_H
51 ROT_VECTOR_SINGLE_LAYER,
52 VECTOR_DOUBLE_LAYER_PV,
53 ROT_VECTOR_DOUBLE_LAYER_PV,
56 ROT_VECTOR_HYPERSINGULAR,
75 case OperatorName::VECTOR_SINGLE_LAYER:
76 os <<
"< RWG | G . RWG >";
78 case OperatorName::ROT_VECTOR_SINGLE_LAYER:
79 os <<
"< nxRWG | G . RWG >";
81 case OperatorName::VECTOR_DOUBLE_LAYER_PV:
82 os <<
"< RWG | gradG x RWG > (pv)";
84 case OperatorName::ROT_VECTOR_DOUBLE_LAYER_PV:
85 os <<
"< nxRWG | gradG x RWG > (pv)";
87 case OperatorName::SCALAR_SINGLE_LAYER:
88 os <<
"< pulse | G . pulse >";
90 case OperatorName::VECTOR_HYPERSINGULAR:
91 os <<
"< RWG | G + (1/k^2) hessG . RWG >";
93 case OperatorName::ROT_VECTOR_HYPERSINGULAR:
94 os <<
"< nxRWG | G + (1/k^2) hessG . RWG >";
96 case OperatorName::RWG_RWG:
97 os <<
"< RWG | RWG >";
99 case OperatorName::ROT_RWG_RWG:
100 os <<
"< nxRWG | RWG >";
102 case OperatorName::DIVRWG:
106 throw std::invalid_argument(
107 "OperatorName: `op_name` is invalid or not implemented."
120template <
typename ObsIntegratorType = ObsStrategic<>>
125 std::is_base_of<ObsIntegratorBase, ObsIntegratorType>::value,
126 "GenericRwgOp: `ObsIntegratorType` must derive from `ObsIntegratorBase`"
183template <
typename ObsIntegratorType = ObsQuadrature<>>
188 std::is_base_of<ObsIntegratorBase, ObsIntegratorType>::value,
189 "GenericPulseOp: `ObsIntegratorType` must derive from `ObsIntegratorBase`"
Class for computing pulse function operators based on a given OperatorName.
GenericPulseOp(const OperatorName op_name, const ObsIntegratorType obs_integrator=ObsStrategic<>())
Constructs a GenericPulseOp for computing operator op_name with a specified integration object.
EigMatMN< Complex, 1, 1 > compute(const Complex k, const Triangle< 3 > &obs_tri, const Triangle< 3 > &src_tri) override
Computes the operator value for the given observation and source triangles.
Class for computing RWG operators based on a given OperatorName.
GenericRwgOp(const OperatorName op_name, const ObsIntegratorType obs_integrator=ObsStrategic<>())
Constructs a GenericRwgOp for computing operator op_name with a specified integration object.
EigMatMN< Complex, 3, 3 > compute(const Complex k, const Triangle< 3 > &obs_tri, const Triangle< 3 > &src_tri) override
Computes the operator values for the given observation and source triangles.
Base class for RWG-based BEM operators.
std::ostream & operator<<(std::ostream &os, OperatorName op_name)
Overloaded output stream operator for OperatorName.
OperatorName
Enum class defining operator names.
std::complex< Float > Complex
Complex floating point number.
Eigen::Matrix< T, N, 1 > EigColVecN
Fixed-size column vector of size N containing type T.
Namespace for RWG-based BEM functionality.