26#include <Kokkos_Macros.hpp>
43 const unsigned int n_components,
44 const unsigned int select,
45 const bool integrate_to_one,
46 const double unitary_integral_value)
51 , integrate_to_one(integrate_to_one)
52 , unitary_integral_value(unitary_integral_value)
53 , rescaling(integrate_to_one ? 1. / (unitary_integral_value *
88 1. / (unitary_integral_value * Utilities::fixed_power<dim>(
radius));
108 return integrate_to_one;
117 const unsigned int n_components,
118 const unsigned int select,
119 const bool integrate_to_one)
135 for (
unsigned int i = 0; i < dim; ++i)
136 base[i]->set_center(
Point<1>(p[i]));
147 for (
unsigned int i = 0; i < dim; ++i)
148 base[i]->set_radius(r);
157 const unsigned int component)
const
161 for (
unsigned int i = 0; i < dim; ++i)
162 ret *= base[i]->value(
Point<1>(p[i]), component);
171 const unsigned int component)
const
175 for (
unsigned int d = 0; d < dim; ++d)
177 ret[d] = base[d]->gradient(
Point<1>(p[d]), component)[0];
178 for (
unsigned int i = 0; i < dim; ++i)
180 ret[d] *= base[i]->value(
Point<1>(p[i]), component);
192 const double integral_Linfty[] = {2.0,
193 3.14159265358979323846264338328,
194 4.18879020478639098461685784437};
198 const double integral_W1[] = {1.0,
199 1.04719755119659774615421446109,
200 1.04719755119659774615421446109};
204 const double integral_Cinfty[] = {1.20690032243787617533623799633,
205 1.26811216112759608094632335664,
206 1.1990039070192139033798473858};
210 const double integral_C1[] = {1.0,
211 0.93417655442731527615578663815,
212 0.821155557658032806157358815206};
220 const unsigned int n_components,
221 const unsigned int select,
222 const bool integrate_to_one)
228 integral_Linfty[dim - 1])
235 const unsigned int component)
const
238 component == this->selected)
239 return ((this->center.distance(p) < this->radius) ? this->rescaling : 0.);
247 std::vector<double> &values,
248 const unsigned int component)
const
250 Assert(values.size() == points.size(),
256 component == this->selected)
257 for (
unsigned int k = 0; k < values.size(); ++k)
258 values[k] = (this->center.distance(points[k]) < this->radius) ?
262 std::fill(values.begin(), values.end(), 0.);
272 Assert(values.size() == points.size(),
275 for (
unsigned int k = 0; k < values.size(); ++k)
277 const double val = (this->center.distance(points[k]) < this->
radius) ?
285 values[k](this->selected) = val;
293 const unsigned int n_components,
294 const unsigned int select,
295 const bool integrate_to_one)
301 integral_W1[dim - 1])
308 const unsigned int component)
const
311 component == this->selected)
313 const double d = this->center.distance(p);
314 return ((d < this->
radius) ?
315 (this->radius - d) / this->radius * this->rescaling :
325 std::vector<double> &values,
326 const unsigned int component)
const
328 Assert(values.size() == points.size(),
332 component == this->selected)
333 for (
unsigned int i = 0; i < values.size(); ++i)
335 const double d = this->center.distance(points[i]);
336 values[i] = ((d < this->
radius) ?
341 std::fill(values.begin(), values.end(), 0.);
352 Assert(values.size() == points.size(),
355 for (
unsigned int k = 0; k < values.size(); ++k)
357 const double d = this->center.distance(points[k]);
367 values[k](this->selected) = val;
377 const unsigned int n_components,
378 const unsigned int select,
379 bool integrate_to_one)
385 integral_Cinfty[dim - 1])
392 const unsigned int component)
const
395 component == this->selected)
397 const double d = this->center.distance(p);
398 const double r = this->
radius;
401 const double e = -r * r / (r * r - d * d);
411 std::vector<double> &values,
412 const unsigned int component)
const
414 Assert(values.size() == points.size(),
417 const double r = this->
radius;
420 component == this->selected)
421 for (
unsigned int i = 0; i < values.size(); ++i)
423 const double d = this->center.distance(points[i]);
430 const double e = -r * r / (r * r - d * d);
436 std::fill(values.begin(), values.end(), 0.);
446 Assert(values.size() == points.size(),
449 for (
unsigned int k = 0; k < values.size(); ++k)
451 const double d = this->center.distance(points[k]);
452 const double r = this->
radius;
456 const double e = -r * r / (r * r - d * d);
466 values[k](this->selected) = val;
476 const unsigned int)
const
478 const double d = this->center.distance(p);
479 const double r = this->
radius;
482 const double e = -d * d / (r - d) / (r + d);
485 (p - this->center) / d *
486 (-2.0 * r * r / Utilities::fixed_power<2>(-r * r + d * d) * d *
496 const unsigned int n_components,
497 const unsigned int select,
498 bool integrate_to_one)
504 integral_C1[dim - 1])
511 const unsigned int component)
const
514 component == this->selected)
516 const double d = this->center.distance(p);
517 const double r = this->
radius;
529 std::vector<double> &values,
530 const unsigned int component)
const
532 Assert(values.size() == points.size(),
535 const double r = this->
radius;
538 component == this->selected)
539 for (
unsigned int i = 0; i < values.size(); ++i)
541 const double d = this->center.distance(points[i]);
553 std::fill(values.begin(), values.end(), 0.);
563 Assert(values.size() == points.size(),
566 for (
unsigned int k = 0; k < values.size(); ++k)
568 const double d = this->center.distance(points[k]);
569 const double r = this->
radius;
581 values[k](this->selected) = val;
592 const double d = this->center.distance(p);
593 const double r = this->
radius;
597 (p - this->center) / d * this->rescaling;
virtual void set_radius(const double r)
bool integrates_to_one() const
double get_radius() const
virtual void set_center(const Point< dim > &p)
const Point< dim > & get_center() const
CutOffFunctionBase(const double radius=1., const Point< dim > center=Point< dim >(), const unsigned int n_components=1, const unsigned int select=CutOffFunctionBase< dim >::no_component, const bool integrate_to_one=false, const double unitary_integral_value=1.0)
virtual double value(const Point< dim > &p, const unsigned int component=0) const override
virtual void vector_value_list(const std::vector< Point< dim > > &points, std::vector< Vector< double > > &values) const override
CutOffFunctionC1(const double radius=1., const Point< dim >=Point< dim >(), const unsigned int n_components=1, const unsigned int select=CutOffFunctionBase< dim >::no_component, bool integrate_to_one=false)
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const override
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const override
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const override
CutOffFunctionCinfty(const double radius=1., const Point< dim >=Point< dim >(), const unsigned int n_components=1, const unsigned int select=CutOffFunctionBase< dim >::no_component, bool integrate_to_one=false)
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const override
virtual double value(const Point< dim > &p, const unsigned int component=0) const override
virtual void vector_value_list(const std::vector< Point< dim > > &points, std::vector< Vector< double > > &values) const override
virtual double value(const Point< dim > &p, const unsigned int component=0) const override
virtual void vector_value_list(const std::vector< Point< dim > > &points, std::vector< Vector< double > > &values) const override
CutOffFunctionLinfty(const double radius=1., const Point< dim >=Point< dim >(), const unsigned int n_components=1, const unsigned int select=CutOffFunctionBase< dim >::no_component, const bool integrate_to_one=false)
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const override
CutOffFunctionTensorProduct(double radius=1.0, const Point< dim > ¢er=Point< dim >(), const unsigned int n_components=1, const unsigned int select=CutOffFunctionBase< dim >::no_component, const bool integrate_to_one=false)
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const override
virtual void set_radius(const double radius) override
virtual double value(const Point< dim > &p, const unsigned int component=0) const override
virtual void set_center(const Point< dim > ¢er) override
virtual void vector_value_list(const std::vector< Point< dim > > &points, std::vector< Vector< double > > &values) const override
virtual double value(const Point< dim > &p, const unsigned int component=0) const override
CutOffFunctionW1(const double radius=1., const Point< dim >=Point< dim >(), const unsigned int n_components=1, const unsigned int select=CutOffFunctionBase< dim >::no_component, const bool integrate_to_one=false)
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const override
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcNotInitialized()
static ::ExceptionBase & ExcMessage(std::string arg1)
::VectorizedArray< Number, width > exp(const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > cos(const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > sin(const ::VectorizedArray< Number, width > &)