11 #ifndef BEMBEL_SRC_MAXWELL_SINGLELAYERPOTENTIAL_HPP_ 
   12 #define BEMBEL_SRC_MAXWELL_SINGLELAYERPOTENTIAL_HPP_ 
   17 template <
typename LinOp>
 
   18 class MaxwellSingleLayerPotential;
 
   22 template <
typename LinOp>
 
   24   typedef Eigen::VectorXcd::Scalar Scalar;
 
   25   static constexpr 
int OutputSpaceDimension = 3;
 
   33 template <
typename LinOp>
 
   35     : 
public PotentialBase<MaxwellSingleLayerPotential<LinOp>, LinOp> {
 
   42                     std::complex<double>>::Scalar,
 
   46                          const Eigen::Vector3d &point,
 
   49     auto s = p.segment<2>(0);
 
   55     auto x_f = p.segment<3>(3);
 
   58     auto h = element.
get_h();
 
   65     auto scalar_part = fun_ev.evaluate(element, p);
 
   66     auto divergence_part = fun_ev.evaluateDiv(element, p);
 
   71     auto integrand = (kernel * scalar_part +
 
   72                       1. / wavenumber2_ * kernel_gradient * divergence_part) *
 
   82                                       const Eigen::Vector3d &y)
 const {
 
   83     auto r = (x - y).norm();
 
   84     return std::exp(-std::complex<double>(0., 1.) * wavenumber_ * r) / 4. /
 
   91                                       const Eigen::Vector3d &y)
 const {
 
   95     auto i = std::complex<double>(0., 1.);
 
   96     return (std::exp(-i * wavenumber_ * r) * (-1. - i * wavenumber_ * r) / 4. /
 
  103   void set_wavenumber(std::complex<double> wavenumber) {
 
  104     wavenumber_ = wavenumber;
 
  105     wavenumber2_ = wavenumber_ * wavenumber_;
 
  110   std::complex<double> get_wavenumber() { 
return wavenumber_; }
 
  113   std::complex<double> wavenumber_;
 
  114   std::complex<double> wavenumber2_;
 
The ElementTreeNode corresponds to an element in the element tree.
double get_h() const
getter
This class implements the specification of the integration for the single layer potential for Maxwell...
std::complex< double > evaluateKernel(const Eigen::Vector3d &x, const Eigen::Vector3d &y) const
Fundamental solution of Helmholtz problem.
Eigen::VectorXcd evaluateKernelGrad(const Eigen::Vector3d &x, const Eigen::Vector3d &y) const
Gradient of fundamental solution of Helmholtz problem.
Eigen::Matrix< double, 12, 1 > SurfacePoint
typedef of SurfacePoint
Routines for the evalutation of pointwise errors.
struct containing specifications on the linear operator has to be specialized or derived for any part...
functional base class. this serves as a common interface for existing functionals.
Base case for specifying the return type of the potential.
struct containing specifications on the functional has to be specialized or derived for any particula...