13#include "integral.hpp"
14#include "../interfaceMatrices.h"
24template <
typename F,
size_t N>
38 std::array<double,N>
h_u;
39 std::array<double,N>
h_v;
40 std::array<double,N>
p_u;
41 std::array<double,N>
p_v;
42 std::array<int,N>
d_u;
43 std::array<int,N>
d_v;
60 inline TermRHS(
const std::array<double, N>& h_u_,
const std::array<double, N>& h_v_,
const std::array<double, N>& p_u_,
const std::array<double, N>& p_v_,
const std::array<int, N>& d_u_,
const std::array<int, N>& d_v_,
const F& variable_coefficient,
double gamma )
80 inline double operator() (std::array<double, N>& x )
const
87 for(
size_t i = 0; i < N; i++ )
92 double suppleft=
p_u[i]-
h_u[i];
93 double suppright=
p_u[i]+
h_u[i];
95 if(suppleft <= x[i] && x[i] <= suppright){
96 double slope = 1.0/
h_u[i];
99 value *= (slope*x[i]+c);
102 value *= (-1.0*slope*x[i]+c);
114 double suppleft =
p_v[i] -
h_v[i];
115 double suppright =
p_v[i] +
h_v[i];
116 if (suppleft <= x[i] && x[i] <= suppright) {
117 double slope = 1.0 /
h_v[i];
121 value *= (slope * x[i] + c);
125 value *= (-1.0 * slope * x[i] + c);
149 if( (std::abs(c_eval) >
m_gamma) || (std::fpclassify(c_eval) == FP_INFINITE) )
183 IntegratorRHS(
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() )
205 double integration(std::array<double, N> l_b, std::array<double, N> r_b, std::array<double, N> p_u, std::array<double, N> p_v, std::array<double, N> h_u, std::array<double, N> h_v,
206 array<int, N> d_u, std::array<int, N> d_v)
const
220 double stencil_integration(
double p_left[N],
double p_right[N],
221 BasisFunctionType u[N], BasisFunctionType v[N])
const {
return 0;};
Class for describing a Helmholtz term.
Definition integratorRHS.h:34
std::array< double, N > h_u
Meshwidth of Base function u.
Definition integratorRHS.h:38
std::array< double, N > p_u
Position of Base function u;.
Definition integratorRHS.h:40
F m_variable_coefficient
Functor providing the variable coefficient.
Definition integratorRHS.h:44
std::array< int, N > d_v
Depth of Base function v;.
Definition integratorRHS.h:43
std::array< int, N > d_u
Depth of Base function u;.
Definition integratorRHS.h:42
std::array< double, N > h_v
Meshwidth of Base function v.
Definition integratorRHS.h:39
TermRHS(const std::array< double, N > &h_u_, const std::array< double, N > &h_v_, const std::array< double, N > &p_u_, const std::array< double, N > &p_v_, const std::array< int, N > &d_u_, const std::array< int, N > &d_v_, const F &variable_coefficient, double gamma)
Constructor.
Definition integratorRHS.h:60
std::array< double, N > p_v
Position of Base function v;.
Definition integratorRHS.h:41
double operator()(std::array< double, N > &x) const
Evaluation operator.
Definition integratorRHS.h:80
double m_gamma
Cutoff parameter for singularities.
Definition integratorRHS.h:45
Integrator for the Helmholtz operator with variable coefficients.
Definition integratorRHS.h:26
IntegratorRHS(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 integratorRHS.h:183
double m_gamma
Value to replace infinte values with.
Definition integratorRHS.h:169
size_t m_depth_max
Maximum recursion depth.
Definition integratorRHS.h:168
double integration(std::array< double, N > l_b, std::array< double, N > r_b, std::array< double, N > p_u, std::array< double, N > p_v, std::array< double, N > h_u, std::array< double, N > h_v, array< int, N > d_u, std::array< int, N > d_v) const
Performs the integration of the FEM function defined by p_left, p_right, u and u with the additional ...
Definition integratorRHS.h:205
F m_variable_coefficient
The variable coefficient.
Definition integratorRHS.h:165
double m_epsilon
Refinement criterion on the hierarchical surplus.
Definition integratorRHS.h:166
size_t m_depth_min
Minimum recursion depth.
Definition integratorRHS.h:167
Definition interfaceMatrices.h:21