4#ifndef SVMP_FE_BASIS_BASISFUNCTION_H
5#define SVMP_FE_BASIS_BASISFUNCTION_H
7#include "BasisExceptions.h"
138namespace svmp::FE::basis {
141using Gradient = math::Vector<double, 3>;
144using Hessian = math::Matrix<double, 3, 3>;
151void require_span_size(std::size_t actual, std::size_t expected,
const char* label);
206 virtual
int order() const noexcept = 0;
212 virtual std::
size_t size() const noexcept = 0;
226 virtual const std::vector<math::
Vector<
double, 3>>&
nodes() const noexcept;
242 std::vector<
double>& values) const;
255 std::vector<Gradient>& gradients) const;
268 std::vector<Hessian>& hessians) const;
282 std::vector<
double>& values,
283 std::vector<Gradient>& gradients,
284 std::vector<Hessian>& hessians) const;
297 std::span<
double> values_out) const = 0;
311 std::span<Gradient> gradients_out) const;
325 std::span<Hessian> hessians_out) const;
344 std::span<
double> values_out,
345 std::span<Gradient> gradients_out,
346 std::span<Hessian> hessians_out) const;
362 std::vector<Gradient>& gradients,
363 double eps =
double(1e-6)) const;
378 std::vector<Hessian>& hessians,
379 double eps =
double(1e-5)) const;
Reference-topology vocabulary (BasisTopology) and the internal ElementType/topology/order maps.
Fixed-size vector types for FE computations, backed by Eigen.
Fixed-size matrix types for FE computations, backed by Eigen.
Fundamental type definitions for the finite element library.
The Vector template class is used for storing int and double data.
Definition Vector.h:26
Abstract interface for finite-element basis-function families.
Definition BasisFunction.h:166
void evaluate_gradients(const math::Vector< double, 3 > &xi, std::vector< Gradient > &gradients) const
Evaluate basis gradients at a reference coordinate.
Definition BasisFunction.cpp:33
virtual void evaluate_gradients_to(const math::Vector< double, 3 > &xi, std::span< Gradient > gradients_out) const
Evaluate basis gradients into caller-provided storage.
Definition BasisFunction.cpp:61
void evaluate_values(const math::Vector< double, 3 > &xi, std::vector< double > &values) const
Evaluate basis function values at a reference coordinate.
Definition BasisFunction.cpp:27
virtual ~BasisFunction()=default
Destroy a basis function through the abstract interface.
void numerical_hessian(const math::Vector< double, 3 > &xi, std::vector< Hessian > &hessians, double eps=double(1e-5)) const
Approximate Hessians by centered finite differences of gradients.
Definition BasisFunction.cpp:118
virtual const std::vector< math::Vector< double, 3 > > & nodes() const noexcept
Return the reference interpolation nodes in basis ordering.
Definition BasisFunction.cpp:17
virtual BasisTopology topology() const noexcept=0
Return the reference topology of this basis.
void evaluate_all(const math::Vector< double, 3 > &xi, std::vector< double > &values, std::vector< Gradient > &gradients, std::vector< Hessian > &hessians) const
Evaluate values, gradients, and Hessians together.
Definition BasisFunction.cpp:45
virtual std::size_t size() const noexcept=0
Return the number of basis functions and reference nodes.
virtual BasisType basis_type() const noexcept=0
Return the concrete basis family.
virtual int order() const noexcept=0
Return the polynomial order represented by this basis.
virtual void evaluate_hessians_to(const math::Vector< double, 3 > &xi, std::span< Hessian > hessians_out) const
Evaluate basis Hessians into caller-provided storage.
Definition BasisFunction.cpp:68
virtual void evaluate_values_to(const math::Vector< double, 3 > &xi, std::span< double > values_out) const =0
Evaluate basis values into caller-provided storage.
void evaluate_hessians(const math::Vector< double, 3 > &xi, std::vector< Hessian > &hessians) const
Evaluate basis Hessians at a reference coordinate.
Definition BasisFunction.cpp:39
void numerical_gradient(const math::Vector< double, 3 > &xi, std::vector< Gradient > &gradients, double eps=double(1e-6)) const
Approximate gradients by centered finite differences of values.
Definition BasisFunction.cpp:93
virtual int dimension() const noexcept=0
Return the reference-space dimension of the basis.
virtual void evaluate_all_to(const math::Vector< double, 3 > &xi, std::span< double > values_out, std::span< Gradient > gradients_out, std::span< Hessian > hessians_out) const
Evaluate any non-empty subset of values, gradients, and Hessians into caller-provided storage in a si...
Definition BasisFunction.cpp:78
BasisTopology
Reference-cell topology of a basis (the shape, independent of order).
Definition BasisTraits.h:28
BasisType
Basis function families.
Definition Types.h:247