15#include "integral.hpp"
25template <
typename F,
size_t N>
41 std::array<BasisFunctionType, N>
m_u;
42 std::array<BasisFunctionType, N>
m_v;
59 inline HelmholtzTerm(
const std::array<double, N>& p_left,
const std::array<double, N>& p_right,
60 const std::array<BasisFunctionType, N>& u,
const std::array<BasisFunctionType, N>& v,
61 const F& variable_coefficient,
double gamma )
79 inline double operator() (
const std::array<double, N>& x )
const
84 for(
size_t i = 0; i < N; ++i )
90 case BasisFunctionType::leftBasis:
95 case BasisFunctionType::rightBasis:
100 case BasisFunctionType::gradLeftBasis:
105 case BasisFunctionType::gradRightBasis:
114 case BasisFunctionType::leftBasis:
119 case BasisFunctionType::rightBasis:
124 case BasisFunctionType::gradLeftBasis:
129 case BasisFunctionType::gradRightBasis:
140 if( (std::abs(c_eval) >
m_gamma) || (std::fpclassify(c_eval) == FP_INFINITE ))
174 IntegratorHelm(
const F& c,
double epsilon,
size_t depth_min = 0,
size_t depth_max = std::numeric_limits<size_t>::max(),
double gamma = std::numeric_limits<double>::max() )
196 double stencil_integration(
double p_left[N],
double p_right[N], BasisFunctionType u[N], BasisFunctionType v[N])
const
200 std::array<double, N> p_left_array;
201 std::array<double, N> p_right_array;
203 std::array<BasisFunctionType, N> u_array;
204 std::array<BasisFunctionType, N> v_array;
206 for(
size_t i = 0; i < N; ++i )
209 p_left_array[i] = p_left[i];
210 p_right_array[i] = p_right[i];
Class for describing a Helmholtz term.
Definition helmIntegrator.h:35
std::array< double, N > m_p_left
First point spanning the domain.
Definition helmIntegrator.h:39
std::array< BasisFunctionType, N > m_v
Base function tensor for the second d-dimensional base function.
Definition helmIntegrator.h:42
std::array< BasisFunctionType, N > m_u
Base function tensor for the first d-dimensional base function.
Definition helmIntegrator.h:41
double operator()(const std::array< double, N > &x) const
Evaluation operator.
Definition helmIntegrator.h:79
F m_variable_coefficient
Functor providing the variable coefficient.
Definition helmIntegrator.h:43
std::array< double, N > m_p_right
Second point spanning the domain.
Definition helmIntegrator.h:40
HelmholtzTerm(const std::array< double, N > &p_left, const std::array< double, N > &p_right, const std::array< BasisFunctionType, N > &u, const std::array< BasisFunctionType, N > &v, const F &variable_coefficient, double gamma)
Constructor.
Definition helmIntegrator.h:59
double m_gamma
Cutoff parameter for singularities.
Definition helmIntegrator.h:44
Integrator for the Helmholtz operator with variable coefficients.
Definition helmIntegrator.h:27
double stencil_integration(double p_left[N], double p_right[N], BasisFunctionType u[N], BasisFunctionType v[N]) const
Performs the integration of the FEM function defined by p_left, p_right, u and u with the additional ...
Definition helmIntegrator.h:196
size_t m_depth_max
Maximum recursion depth.
Definition helmIntegrator.h:159
double m_gamma
Value to replace infinte values with.
Definition helmIntegrator.h:160
F m_variable_coefficient
The variable coefficient.
Definition helmIntegrator.h:156
double m_epsilon
Refinement criterion on the hierarchical surplus.
Definition helmIntegrator.h:157
IntegratorHelm(const F &c, double epsilon, size_t depth_min=0, size_t depth_max=std::numeric_limits< size_t >::max(), double gamma=std::numeric_limits< double >::max())
Constructor.
Definition helmIntegrator.h:174
size_t m_depth_min
Minimum recursion depth.
Definition helmIntegrator.h:158
Definition interfaceMatrices.h:21