4#ifndef SVMP_FE_BASIS_SERENDIPITYBASIS_H
5#define SVMP_FE_BASIS_SERENDIPITYBASIS_H
12#include "BasisFunction.h"
17namespace svmp::FE::basis {
204 int dimension() const noexcept final {
return dimension_; }
207 int order() const noexcept final {
return order_; }
210 std::size_t
size() const noexcept final {
return size_; }
229 const std::vector<math::Vector<double, 3>>&
nodes() const noexcept final {
return nodes_; }
237 std::span<double> values_out)
const final;
245 std::span<Gradient> gradients_out)
const final;
253 std::span<Hessian> hessians_out)
const final;
259 std::size_t size_{0};
260 std::vector<math::Vector<double, 3>> nodes_;
265 std::vector<std::array<int, 3>> mode_exponents_;
267 std::vector<double> inv_vandermonde_;
271 bool uses_legendre_modes_{
false};
275 void init_quadrilateral(
int order);
278 void init_hexahedron(
int order);
282 void evaluate_all_to(
const math::Vector<double, 3>& xi,
283 std::span<double> values_out,
284 std::span<Gradient> gradients_out,
285 std::span<Hessian> hessians_out)
const override;
Abstract interface for finite-element basis-function families.
Definition BasisFunction.h:166
Reduced-degree-of-freedom serendipity basis on supported reference elements.
Definition SerendipityBasis.h:142
int order() const noexcept final
Return the polynomial order represented by this basis.
Definition SerendipityBasis.h:207
void evaluate_gradients_to(const math::Vector< double, 3 > &xi, std::span< Gradient > gradients_out) const final
Evaluate serendipity basis gradients into caller-provided storage.
Definition SerendipityBasis.cpp:527
std::size_t size() const noexcept final
Return the number of basis functions and reference nodes.
Definition SerendipityBasis.h:210
void evaluate_hessians_to(const math::Vector< double, 3 > &xi, std::span< Hessian > hessians_out) const final
Evaluate serendipity basis Hessians into caller-provided storage.
Definition SerendipityBasis.cpp:533
int dimension() const noexcept final
Return the reference-space dimension of the basis.
Definition SerendipityBasis.h:204
BasisTopology topology() const noexcept final
Return the reference topology of this basis.
Definition SerendipityBasis.h:201
const std::vector< math::Vector< double, 3 > > & nodes() const noexcept final
Return the reference interpolation nodes in basis ordering.
Definition SerendipityBasis.h:229
void evaluate_values_to(const math::Vector< double, 3 > &xi, std::span< double > values_out) const final
Evaluate serendipity basis values into caller-provided storage.
Definition SerendipityBasis.cpp:521
BasisType basis_type() const noexcept final
Return the concrete basis family.
Definition SerendipityBasis.h:198
BasisTopology
Reference-cell topology of a basis (the shape, independent of order).
Definition BasisTraits.h:28
@ Unknown
Unrecognized or uninitialized topology.
BasisType
Basis function families.
Definition Types.h:247
ElementType
Reference element types supported by the FE library.
Definition Types.h:215
@ Serendipity
Serendipity elements.
Eigen::Matrix< T, static_cast< int >(N), 1 > Vector
Fixed-size column vector for element-level computations.
Definition Vector.h:51