29#include <Kokkos_Macros.hpp>
53 this->
reinit(support_points);
62 internal::get_wedge_support_points<dim>(
68 "This constructor only works for linear and quadratic elements."));
84 const double x = p[0];
85 const double y = p[1];
86 const double z = p[2];
97 const double s = 1 - y;
108 const double phi = Qi * Pj * Pk;
110 if (std::fabs(phi) < 1e-14)
121 const unsigned int i,
129 for (
unsigned int j = 0, counter = 0; j < this->
degree() + 1; ++j)
130 for (
unsigned int k = 0; k < this->
degree() + 1 - j; ++k)
131 for (
unsigned int l = 0; l < this->
degree() + 1; ++l, ++counter)
145 const unsigned int j,
146 const unsigned int k,
154 const double x = p[0];
155 const double y = p[1];
156 const double z = p[2];
169 const double s = 1 - y;
170 const double ds_dy = -1.0;
181 1, 0, i, 0, 0, x, s);
185 0, 1, i, 0, 0, x, s);
190 const double dPk_dz =
193 grad[0] = dQi_dx * Pj * Pk;
194 if constexpr (dim > 1)
195 grad[1] = dQi_ds * ds_dy * Pj * Pk + Qi * dPj_dy * Pk;
196 if constexpr (dim > 2)
197 grad[2] = Qi * Pj * dPk_dz;
199 for (
unsigned int d = 0; d < dim; ++d)
200 if (std::fabs(grad[d]) < 1e-14)
211 const unsigned int i,
219 for (
unsigned int j = 0, counter = 0; j < this->
degree() + 1; ++j)
220 for (
unsigned int k = 0; k < this->
degree() + 1 - j; ++k)
221 for (
unsigned int l = 0; l < this->
degree() + 1; ++l, ++counter)
236 return "ScalarLagrangePolynomialWedge";
242std::unique_ptr<ScalarPolynomialsBase<dim>>
245 return std::make_unique<ScalarLagrangePolynomialWedge<dim>>(*this);
std::string name() const override
Tensor< 1, dim > evaluate_orthogonal_basis_derivative(const unsigned int i, const Point< dim > &p) const override
virtual std::unique_ptr< ScalarPolynomialsBase< dim > > clone() const override
double evaluate_orthogonal_basis_function_by_degree(const unsigned int i, const unsigned int j, const unsigned int k, const Point< dim > &p) const override
double evaluate_orthogonal_basis_function(const unsigned int i, const Point< dim > &p) const override
ScalarLagrangePolynomialWedge(const unsigned int degree, const std::vector< Point< dim > > &support_points)
Tensor< 1, dim > evaluate_orthogonal_basis_derivative_by_degree(const unsigned int i, const unsigned int j, const unsigned int k, const Point< dim > &p) const override
virtual unsigned int degree() const
void reinit(const std::vector< Point< dim > > &support_points)
ScalarPolynomialsVandermondeBase(const unsigned int degree, const unsigned int n_dofs)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_ASSERT_UNREACHABLE()
static ::ExceptionBase & ExcNotImplemented()
#define AssertDimension(dim1, dim2)
#define AssertIndexRange(index, range)
#define AssertThrow(cond, exc)
Number jacobi_polynomial_homogenized_derivative(const unsigned int order_x, const unsigned int order_s, const unsigned int degree, const int alpha, const int beta, const Number x, const Number s)
Number jacobi_polynomial_derivative(const unsigned int degree, const int alpha, const int beta, const Number x, const bool rescale_to_dealii_unit_interval)
Number jacobi_polynomial_homogenized_value(const unsigned int degree, const int alpha, const int beta, const Number x, const Number s)
Number jacobi_polynomial_value(const unsigned int degree, const int alpha, const int beta, const Number x, const bool rescale_to_dealii_unit_interval=true)