Bembel
 
Loading...
Searching...
No Matches
ShapeFunctions.hpp
1// This file is part of Bembel, the higher order C++ boundary element library.
2//
3// Copyright (C) 2022 see <http://www.bembel.eu>
4//
5// It was written as part of a cooperation of J. Doelz, H. Harbrecht, S. Kurz,
6// M. Multerer, S. Schoeps, and F. Wolf at Technische Universitaet Darmstadt,
7// Universitaet Basel, and Universita della Svizzera italiana, Lugano. This
8// source code is subject to the GNU General Public License version 3 and
9// provided WITHOUT ANY WARRANTY, see <http://www.bembel.eu> for further
10// information.
11//
12#ifndef BEMBEL_SRC_SPLINE_SHAPEFUNCTIONS_HPP_
13#define BEMBEL_SRC_SPLINE_SHAPEFUNCTIONS_HPP_
14
15namespace Bembel {
16namespace Basis {
17
18using funptr_doubleOut_doubleptrDoubleIn = double (*)(double*, double);
19using funptr_voidOut_doubleptrDoubleIn = void (*)(double*, double);
20
27template <int P>
29 public:
30 inline static double evalCoef(int p, double* ar, double x) {
31 return p == P ? Bembel::Basis::EvalBernstein<double, P>(ar, x)
33 }
34 inline static double evalDerCoef(int p, double* ar, double x) {
35 return p == P ? Bembel::Basis::EvalBernsteinDer<double, P>(ar, x)
37 }
38 inline static void evalBasis(int p, double* ar, double x) {
39 return p == P ? Bembel::Basis::EvalBernsteinBasis<double, P>(ar, x)
41 }
42 inline static void evalDerBasis(int p, double* ar, double x) {
43 return p == P
44 ? Bembel::Basis::EvalBernsteinDerBasis<double, P>(ar, x)
46 }
47 inline static constexpr funptr_doubleOut_doubleptrDoubleIn ptrEvalCoef(
48 int p) {
49 return p == P ? &Bembel::Basis::EvalBernstein<double, P>
51 }
52 inline static constexpr funptr_doubleOut_doubleptrDoubleIn ptrEvalDerCoef(
53 int p) {
54 return p == P ? &Bembel::Basis::EvalBernsteinDer<double, P>
56 }
57 inline static constexpr funptr_voidOut_doubleptrDoubleIn ptrEvalBasis(int p) {
58 return p == P ? &Bembel::Basis::EvalBernsteinBasis<double, P>
60 }
61 inline static constexpr funptr_voidOut_doubleptrDoubleIn ptrEvalDerBasis(
62 int p) {
63 return p == P ? &Bembel::Basis::EvalBernsteinDerBasis<double, P>
65 }
66 inline static constexpr bool checkP(int p) {
67 static_assert(P > 0, "Polynomial degree must be larger than zero");
68 return p <= Constants::MaxP;
69 }
70};
71
72template <>
74 public:
75 inline static double evalCoef(int p, double* ar, double x) {
76 return Bembel::Basis::EvalBernstein<double, 0>(ar, x);
77 }
78 inline static double evalDerCoef(int p, double* ar, double x) {
79 return Bembel::Basis::EvalBernsteinDer<double, 0>(ar, x);
80 }
81 inline static void evalBasis(int p, double* ar, double x) {
82 return Bembel::Basis::EvalBernsteinBasis<double, 0>(ar, x);
83 }
84 inline static void evalDerBasis(int p, double* ar, double x) {
85 return Bembel::Basis::EvalBernsteinDerBasis<double, 0>(ar, x);
86 }
87 inline static constexpr funptr_doubleOut_doubleptrDoubleIn ptrEvalCoef(
88 int p) {
89 return &Bembel::Basis::EvalBernstein<double, 0>;
90 }
91 inline static constexpr funptr_doubleOut_doubleptrDoubleIn ptrEvalDerCoef(
92 int p) {
93 return &Bembel::Basis::EvalBernsteinDer<double, 0>;
94 }
95 inline static constexpr funptr_voidOut_doubleptrDoubleIn ptrEvalBasis(int p) {
96 return &Bembel::Basis::EvalBernsteinBasis<double, 0>;
97 }
98 inline static constexpr funptr_voidOut_doubleptrDoubleIn ptrEvalDerBasis(
99 int p) {
100 return &Bembel::Basis::EvalBernsteinDerBasis<double, 0>;
101 }
102 inline static constexpr bool checkP(int p) { return Constants::MaxP >= 0; }
103};
104
106
107} // namespace Basis
108} // namespace Bembel
109#endif // BEMBEL_SRC_SPLINE_SHAPEFUNCTIONS_HPP_
These routines implement a template recursion that allows to choose a compile time instantiation of a...
Routines for the evalutation of pointwise errors.
constexpr int getFunctionSpaceOutputDimension()