5#if !defined(PRECICE_NO_GINKGO) || !defined(PRECICE_NO_KOKKOS_KERNELS)
7#include <Kokkos_Core.hpp>
9#define PRECICE_HOST_DEVICE KOKKOS_FUNCTION
10#define PRECICE_FMA Kokkos::fma
11#define PRECICE_LOG Kokkos::log
15#define PRECICE_HOST_DEVICE
16#define PRECICE_FMA std::fma
17#define PRECICE_LOG std::log
21#define NUMERICAL_ZERO_DIFFERENCE_DEVICE 1.0e-14
72template <
bool isDefinite>
162 throw std::invalid_argument{
"Shape parameter for radial-basis-function inverse multiquadric has to be larger than zero. Please update the \"shape-parameter\" attribute."};
206 return std::abs(radius);
235 "Shape parameter for radial-basis-function gaussian has to be larger than zero. Please update the \"shape-parameter\" attribute."};
239 "Support radius for radial-basis-function gaussian has to be larger than zero. Please update the \"support-radius\" attribute."};
269 if (radius > supportRadius)
312 "Support radius for radial-basis-function compact thin-plate-splines c2 has to be larger than zero. Please update the \"support-radius\" attribute."};
314 _r_inv = 1. / supportRadius;
331 const double p = radius * r_inv;
364 "Support radius for radial-basis-function compact polynomial c0 has to be larger than zero. Please update the \"support-radius\" attribute."};
366 _r_inv = 1. / supportRadius;
383 const double p = radius * r_inv;
416 "Support radius for radial-basis-function compact polynomial c2 has to be larger than zero. Please update the \"support-radius\" attribute."};
419 _r_inv = 1. / supportRadius;
436 const double p = radius * r_inv;
469 "Support radius for radial-basis-function compact polynomial c4 has to be larger than zero. Please update the \"support-radius\" attribute."};
472 _r_inv = 1. / supportRadius;
489 const double p = radius * r_inv;
522 "Support radius for radial-basis-function compact polynomial c6 has to be larger than zero. Please update the \"support-radius\" attribute."};
524 _r_inv = 1. / supportRadius;
541 const double p = radius * r_inv;
574 "Support radius for radial-basis-function compact polynomial c6 has to be larger than zero. Please update the \"support-radius\" attribute."};
576 _r_inv = 1. / supportRadius;
593 const double p = radius * r_inv;
611#undef PRECICE_HOST_DEVICE
612#undef NUMERICAL_ZERO_DIFFERENCE_DEVICE
#define NUMERICAL_ZERO_DIFFERENCE_DEVICE
#define PRECICE_HOST_DEVICE
constexpr T pow_int(const T base)
Computes the power of a given number by an integral exponent given at compile time,...
PRECICE_HOST_DEVICE double operator()(const double radius, const RadialBasisParameters params) const
double getSupportRadius() const
RadialBasisParameters getFunctionParameters()
double evaluate(double radius) const
CompactPolynomialC0(double supportRadius)
RadialBasisParameters _params
CompactPolynomialC2(double supportRadius)
PRECICE_HOST_DEVICE double operator()(const double radius, const RadialBasisParameters params) const
RadialBasisParameters _params
double getSupportRadius() const
double evaluate(double radius) const
RadialBasisParameters getFunctionParameters() const
CompactPolynomialC4(double supportRadius)
double evaluate(double radius) const
PRECICE_HOST_DEVICE double operator()(const double radius, const RadialBasisParameters params) const
double getSupportRadius() const
RadialBasisParameters _params
RadialBasisParameters getFunctionParameters()
PRECICE_HOST_DEVICE double operator()(const double radius, const RadialBasisParameters params) const
RadialBasisParameters _params
double getSupportRadius() const
CompactPolynomialC6(double supportRadius)
double evaluate(double radius) const
const RadialBasisParameters getFunctionParameters()
CompactPolynomialC8(double supportRadius)
const RadialBasisParameters getFunctionParameters()
double getSupportRadius() const
double evaluate(double radius) const
RadialBasisParameters _params
PRECICE_HOST_DEVICE double operator()(const double radius, const RadialBasisParameters params) const
double getSupportRadius() const
RadialBasisParameters _params
double evaluate(double radius) const
RadialBasisParameters getFunctionParameters()
CompactThinPlateSplinesC2(double supportRadius)
PRECICE_HOST_DEVICE double operator()(const double radius, const RadialBasisParameters params) const
double getSupportRadius() const
RadialBasisParameters _params
PRECICE_HOST_DEVICE double operator()(const double radius, const RadialBasisParameters params) const
Gaussian(const double shape, const double supportRadius=std::numeric_limits< double >::infinity())
double evaluate(const double radius) const
static constexpr double cutoffThreshold
Below that value the function is supposed to be zero. Defines the support radius if not explicitly gi...
RadialBasisParameters getFunctionParameters()
double _supportRadius
Either explicitly set (from cutoffThreshold) or computed supportRadius.
double evaluate(double radius) const
InverseMultiquadrics(double c)
PRECICE_HOST_DEVICE double operator()(const double radius, const RadialBasisParameters params) const
RadialBasisParameters getFunctionParameters()
RadialBasisParameters _params
PRECICE_HOST_DEVICE double operator()(const double radius, const RadialBasisParameters params) const
double evaluate(double radius) const
RadialBasisParameters getFunctionParameters()
RadialBasisParameters _params
Radial basis function with global support.
double evaluate(double radius) const
PRECICE_HOST_DEVICE double operator()(const double radius, const RadialBasisParameters params) const
RadialBasisParameters _params
RadialBasisParameters getFunctionParameters()
Radial basis function with global support.
RadialBasisParameters _params
PRECICE_HOST_DEVICE double operator()(const double radius, const RadialBasisParameters params) const
double evaluate(double radius) const
RadialBasisParameters getFunctionParameters()
contains data mapping from points to meshes.
provides general mathematical constants and functions.
constexpr T pow_int(const T base)
Computes the power of a given number by an integral exponent given at compile time,...
std::enable_if< std::is_arithmetic< Scalar >::value, bool >::type greater(Scalar A, Scalar B, Scalar tolerance=NUMERICAL_ZERO_DIFFERENCE)
Base class for RBF with compact support.
static constexpr bool hasCompactSupport()
Base class for RBF functions to distinguish positive definite functions.
static constexpr bool isStrictlyPositiveDefinite()
Base class for RBF without compact support.
static constexpr double getSupportRadius()
static constexpr bool hasCompactSupport()
Wrapper struct that is used to transfer RBF-specific parameters to the GPU.