12#ifndef MFEM_QUADINTERP
13#define MFEM_QUADINTERP
136 void Mult(
const Vector &e_vec,
unsigned eval_flags,
169 const int vdim,
const int nd,
174 const int s_dim,
const int v_dim,
175 const int nd,
const int nq);
179 const int sdim,
const int vdim,
183 real_t *q_det,
const int nd,
const int nq,
190 const int eval_flags);
196 const int vdim,
const int nd,
233 IntTensorEvalKernels::Specialization<
DIM, Q_LAYOUT, VDIM, D1D,
234 Q1D>::template Opt<NBZ>::Add();
235 TensorEvalKernels::Specialization<
DIM, Q_LAYOUT, VDIM, D1D,
236 Q1D>::template Opt<NBZ>::Add();
238 else if constexpr (NBZ == 0)
240 IntTensorEvalKernels::Specialization<
DIM, Q_LAYOUT, VDIM, D1D,
242 TensorEvalKernels::Specialization<
DIM, Q_LAYOUT, VDIM, D1D,
248 template <
int DIM,
int VDIM,
int ND,
int NQ>
251 IntEvalKernels::Specialization<DIM, VDIM, ND, NQ>::Add();
252 EvalKernels::Specialization<DIM, VDIM, ND, NQ>::Add();
256 template <
int DIM,
QVectorLayout Q_LAYOUT,
bool GRAD_PHYS,
int VDIM,
int D1D,
257 int Q1D,
int NBZ = 0>
262 GradKernels::Specialization<
DIM, Q_LAYOUT, GRAD_PHYS, VDIM, D1D,
263 Q1D>::template Opt<NBZ>::Add();
265 else if constexpr (NBZ == 0)
267 GradKernels::Specialization<
DIM, Q_LAYOUT, GRAD_PHYS, VDIM, D1D,
273 template <
int DIM,
QVectorLayout Q_LAYOUT,
bool GRAD_PHYS,
int VDIM,
int D1D,
279 CollocatedGradKernels::Specialization<
DIM, Q_LAYOUT, GRAD_PHYS, VDIM,
280 D1D>::template Opt<NBZ>::Add();
282 else if constexpr (NBZ == 0)
284 CollocatedGradKernels::Specialization<
DIM, Q_LAYOUT, GRAD_PHYS, VDIM,
290 template <
int DIM,
int SDIM,
int D1D,
int Q1D>
293 DetKernels::Specialization<DIM, SDIM, D1D, Q1D>::Add();
Structure representing the matrices/tensors needed to evaluate (in reference space) the values,...
Class FiniteElementSpace - responsible for providing FEM view of the mesh, mainly managing the set of...
Structure for storing mesh geometric factors: coordinates, Jacobians, and determinants of the Jacobia...
Class for an integration rule - an Array of IntegrationPoint.
A class that performs interpolation from an E-vector to quadrature point values and/or derivatives (Q...
static const int MAX_NQ2D
bool use_tensor_products
Tensor product evaluation mode.
@ VALUES
Evaluate the values at quadrature points.
@ DERIVATIVES
Evaluate the derivatives at quadrature points.
@ PHYSICAL_DERIVATIVES
Evaluate the physical derivatives.
@ DETERMINANTS
Assuming the derivative at quadrature points form a matrix, this flag can be used to compute and stor...
MFEM_REGISTER_KERNELS(TensorEvalKernels, TensorEvalKernelType,(int, QVectorLayout, int, int, int),(int))
QuadratureInterpolator(const FiniteElementSpace &fes, const IntegrationRule &ir)
static void AddCollocatedGradSpecializations()
Adds specializations for CollocatedGradKernels.
MFEM_REGISTER_KERNELS(TensorEvalHDivKernels, TensorEvalHDivKernelType,(int, QVectorLayout, unsigned, int, int))
void Mult(const Vector &e_vec, unsigned eval_flags, Vector &q_val, Vector &q_der, Vector &q_det) const
Interpolate the E-vector e_vec to quadrature points.
void(*)(const int NE, const real_t *B, const real_t *G, const real_t *e_vec, real_t *q_det, const int nd, const int nq, Vector *d_buffer) DetKernelType
void SetOutputLayout(QVectorLayout layout) const
Set the desired output Q-vector layout. The default value is QVectorLayout::byNODES.
void(*)(const int ne, const real_t *B, const real_t *e_vec, real_t *q_val, const int vdim, const int nd, const int nq) TensorEvalKernelType
void Determinants(const Vector &e_vec, Vector &q_det) const
Compute the determinants of the derivatives (with respect to reference coordinates) of the E-vector e...
bool UsesTensorProducts() const
Query the current tensor product evaluation mode.
void(*)(const int ne, const real_t *B, const real_t *G, const real_t *J, const real_t *e_vec, real_t *q_der, const int s_dim, const int v_dim, const int nd, const int nq) GradKernelType
void MultTranspose(unsigned eval_flags, const Vector &q_val, const Vector &q_der, Vector &e_vec) const
Perform the transpose operation of Mult(). (TODO)
void DisableTensorProducts(bool disable=true) const
Disable the use of tensor product evaluations, for tensor-product elements, e.g. quads and hexes....
void EnableTensorProducts() const
Enable the use of tensor product evaluations, for tensor-product elements, e.g. quads and hexes....
MFEM_REGISTER_KERNELS(EvalKernels, EvalKernelType,(int, int, int, int))
void(*)(const int NE, const int vdim, const QVectorLayout q_layout, const GeometricFactors *geom, const DofToQuad &maps, const Vector &e_vec, Vector &q_val, Vector &q_der, Vector &q_det, const int eval_flags) EvalKernelType
void(*)(const int NE, const int vdim, const QVectorLayout q_layout, const real_t *detJ, const GeometricFactors *geom, const DofToQuad &maps, const Vector &e_vec, Vector &q_val, Vector &q_der, Vector &q_det, const int eval_flags) IntEvalKernelType
void Values(const Vector &e_vec, Vector &q_val) const
Interpolate the values of the E-vector e_vec at quadrature points.
void(*)(const int, const real_t *, const real_t *, const real_t *, const real_t *, real_t *, const int, const int) TensorEvalHDivKernelType
void PhysValues(const Vector &e_vec, Vector &q_val) const
Interpolate the physical values of the E-vector e_vec at quadrature points.
MFEM_REGISTER_KERNELS(IntEvalKernels, IntEvalKernelType,(int, int, int, int))
void Derivatives(const Vector &e_vec, Vector &q_der) const
Interpolate the derivatives (with respect to reference coordinates) of the E-vector e_vec at quadratu...
static const int MAX_NQ3D
MFEM_REGISTER_KERNELS(IntTensorEvalKernels, IntTensorEvalKernelType,(int, QVectorLayout, int, int, int),(int))
static void AddGradSpecializations()
Adds specializations for GradKernels.
static const int MAX_VDIM3D
QVectorLayout q_layout
Output Q-vector layout.
QVectorLayout GetOutputLayout() const
Query the current output Q-vector layout. The default value is QVectorLayout::byNODES.
static const int MAX_ND2D
void PhysDerivatives(const Vector &e_vec, Vector &q_der) const
Interpolate the derivatives in physical space of the E-vector e_vec at quadrature points.
static bool SupportsFESpace(const FiniteElementSpace &fespace)
Returns true if the given finite element space is supported by QuadratureInterpolator.
static void AddEvalSpecializations()
Adds specializations for EvalKernels.
static void AddDetSpecializations()
Adds specializations for DetKernels.
static const int MAX_VDIM2D
const IntegrationRule * IntRule
Not owned.
void(*)(const int ne, const real_t *B, const real_t *detJ, const real_t *e_vec, real_t *q_val, const int vdim, const int nd, const int nq) IntTensorEvalKernelType
MFEM_REGISTER_KERNELS(DetKernels, DetKernelType,(int, int, int, int))
Vector d_buffer
Auxiliary device buffer.
const FiniteElementSpace * fespace
Not owned.
MFEM_REGISTER_KERNELS(CollocatedGradKernels, CollocatedGradKernelType,(int, QVectorLayout, bool, int, int),(int))
const QuadratureSpace * qspace
Not owned.
void MultHDiv(const Vector &e_vec, unsigned eval_flags, Vector &q_val, Vector &q_div) const
Auxiliary method called by Mult() when using H(div)-conforming space.
void(*)(const int ne, const real_t *G, const real_t *J, const real_t *e_vec, real_t *q_der, const int sdim, const int vdim, const int d1d) CollocatedGradKernelType
MFEM_REGISTER_KERNELS(GradKernels, GradKernelType,(int, QVectorLayout, bool, int, int, int),(int))
static const int MAX_ND3D
static void AddTensorEvalSpecializations()
Adds specializations for TensorEvalKernels.
Class representing the storage layout of a QuadratureFunction.
QVectorLayout
Type describing possible layouts for Q-vectors.
void Add(const DenseMatrix &A, const DenseMatrix &B, real_t alpha, DenseMatrix &C)
C = A + alpha*B.