37   MFEM_VERIFY(trial_el != NULL, 
"Only VectorTensorFiniteElement is supported!");
 
   42   MFEM_VERIFY(test_el != NULL, 
"Only VectorTensorFiniteElement is supported!");
 
   47   const int dims = trial_el->
GetDim();
 
   48   MFEM_VERIFY(dims == 2 || dims == 3, 
"");
 
   50   const int symmDims = (dims * (dims + 1)) / 2; 
 
   53   MFEM_VERIFY(
dim == 2 || 
dim == 3, 
"");
 
   56   MFEM_VERIFY(
ne == test_fes.
GetNE(),
 
   57               "Different meshes for test and trial spaces");
 
   85   const int coeff_dim = coeff.
GetVDim();
 
   88   if ((trial_curl && test_div) || (trial_div && test_curl))
 
   98   if (trial_curl && test_curl && 
dim == 3)
 
  103   else if (trial_curl && test_curl && 
dim == 2)
 
  108   else if (trial_div && test_div && 
dim == 3)
 
  113   else if (trial_div && test_div && 
dim == 2)
 
  118   else if (((trial_curl && test_div) || (trial_div && test_curl)) &&
 
  127         const bool tr = (trial_div && test_curl);
 
  142      MFEM_ABORT(
"Unknown kernel.");
 
 
  158                  return internal::SmemPAHcurlMassAssembleDiagonal3D<2,3>(
 
  162                  return internal::SmemPAHcurlMassAssembleDiagonal3D<3,4>(
 
  166                  return internal::SmemPAHcurlMassAssembleDiagonal3D<4,5>(
 
  170                  return internal::SmemPAHcurlMassAssembleDiagonal3D<5,6>(
 
  174                  return internal::SmemPAHcurlMassAssembleDiagonal3D(
 
  193         MFEM_ABORT(
"Unknown kernel.");
 
  211         MFEM_ABORT(
"Unknown kernel.");
 
 
  225      if (trial_curl && test_curl)
 
  233                  return internal::SmemPAHcurlMassApply3D<2,3>(
 
  238                  return internal::SmemPAHcurlMassApply3D<3,4>(
 
  243                  return internal::SmemPAHcurlMassApply3D<4,5>(
 
  248                  return internal::SmemPAHcurlMassApply3D<5,6>(
 
  253                  return internal::SmemPAHcurlMassApply3D(
 
  265      else if (trial_div && test_div)
 
  270      else if (trial_curl && test_div)
 
  272         const bool scalarCoeff = !(
DQ || 
MQ);
 
  277      else if (trial_div && test_curl)
 
  279         const bool scalarCoeff = !(
DQ || 
MQ);
 
  286         MFEM_ABORT(
"Unknown kernel.");
 
  291      if (trial_curl && test_curl)
 
  296      else if (trial_div && test_div)
 
  302      else if ((trial_curl && test_div) || (trial_div && test_curl))
 
  304         const bool scalarCoeff = !(
DQ || 
MQ);
 
  311         MFEM_ABORT(
"Unknown kernel.");
 
 
  324   bool symmetricSpaces = 
true;
 
  325   if (
dim == 3 && ((trial_div && test_curl) || (trial_curl && test_div)))
 
  327      const bool scalarCoeff = !(
DQ || 
MQ);
 
  331      symmetricSpaces = 
false;
 
  333   else if (
dim == 2 && ((trial_curl && test_div) || (trial_div && test_curl)))
 
  335      const bool scalarCoeff = !(
DQ || 
MQ);
 
  339      symmetricSpaces = 
false;
 
  345         MFEM_ABORT(
"VectorFEMassIntegrator transpose not implemented for asymmetric MatrixCoefficient");
 
 
Class to represent a coefficient evaluated at quadrature points.
void SetConstant(real_t constant)
Set this vector to the given constant.
void Project(Coefficient &coeff)
Evaluate the given Coefficient at the quadrature points defined by qs.
int GetVDim() const
Return the number of values per quadrature point.
void ProjectTranspose(MatrixCoefficient &coeff)
Project the transpose of coeff.
static MemoryType GetMemoryType()
(DEPRECATED) Equivalent to GetDeviceMemoryType().
static bool Allows(unsigned long b_mask)
Return true if any of the backends in the backend mask, b_mask, are allowed.
@ TENSOR
Tensor product representation using 1D matrices/tensors with dimensions using 1D number of quadrature...
Array< real_t > B
Basis functions evaluated at quadrature points.
int ndof
Number of degrees of freedom = number of basis functions. When mode is TENSOR, this is the 1D number.
int nqpt
Number of quadrature points. When mode is TENSOR, this is the 1D number.
Array< real_t > Bt
Transpose of B.
Class FiniteElementSpace - responsible for providing FEM view of the mesh, mainly managing the set of...
int GetNE() const
Returns number of elements in the mesh.
Mesh * GetMesh() const
Returns the mesh.
const FiniteElement * GetTypicalFE() const
Return GetFE(0) if the local mesh is not empty; otherwise return a typical FE based on the Geometry t...
Abstract class for all finite elements.
int GetOrder() const
Returns the order of the finite element. In the case of anisotropic orders, returns the maximum order...
int GetDerivType() const
Returns the FiniteElement::DerivType of the element describing the spatial derivative method implemen...
int GetDim() const
Returns the reference space dimension for the finite element.
@ DIV
Implements CalcDivShape methods.
@ CURL
Implements CalcCurlShape methods.
Vector J
Jacobians of the element transformations at all quadrature points.
Class for an integration rule - an Array of IntegrationPoint.
int GetNPoints() const
Returns the number of the points in the integration rule.
const Array< real_t > & GetWeights() const
Return the quadrature weights in a contiguous array.
const IntegrationRule * IntRule
static const IntegrationRule & GetRule(const FiniteElement &trial_fe, const FiniteElement &test_fe, const ElementTransformation &Trans)
int Dimension() const
Dimension of the reference space used within the elements.
ElementTransformation * GetTypicalElementTransformation()
If the local mesh is not empty return GetElementTransformation(0); otherwise, return the identity tra...
const GeometricFactors * GetGeometricFactors(const IntegrationRule &ir, const int flags, MemoryType d_mt=MemoryType::DEFAULT)
Return the mesh geometric factors corresponding to the given integration rule.
Class representing the storage layout of a QuadratureFunction.
Base class for symmetric matrix coefficients that optionally depend on time and space.
void AddMultPA(const Vector &x, Vector &y) const override
Method for partially assembled action.
void AssembleDiagonalPA(Vector &diag) override
Assemble diagonal and add it to Vector diag.
const DofToQuad * mapsO
Not owned. DOF-to-quad map, open.
const DofToQuad * mapsOtest
Not owned. DOF-to-quad map, open.
void AssemblePA(const FiniteElementSpace &fes) override
Method defining partial assembly.
bool symmetric
False if using a nonsymmetric matrix coefficient.
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
DiagonalMatrixCoefficient * DQ
const DofToQuad * mapsCtest
Not owned. DOF-to-quad map, closed.
const GeometricFactors * geom
Not owned.
const DofToQuad * mapsC
Not owned. DOF-to-quad map, closed.
const DofToQuad & GetDofToQuadOpen(const IntegrationRule &ir, DofToQuad::Mode mode) const
const DofToQuad & GetDofToQuad(const IntegrationRule &ir, DofToQuad::Mode mode) const override
Return a DofToQuad structure corresponding to the given IntegrationRule using the given DofToQuad::Mo...
void SetSize(int s)
Resize the vector to size s.
@ SYMMETRIC
Store the triangular part of symmetric matrices.
@ DEVICE_MASK
Biwise-OR of all device backends.