31   MFEM_VERIFY(el != NULL, 
"Only VectorTensorFiniteElement is supported!");
 
   35      MFEM_ABORT(
"Unknown kernel.");
 
   42   const int dims = el->
GetDim();
 
   43   MFEM_VERIFY(dims == 2, 
"");
 
   47   MFEM_VERIFY(
dim == 2, 
"");
 
   77      MFEM_ABORT(
"Unsupported dimension!");
 
 
   91      MFEM_ABORT(
"Unsupported dimension!");
 
 
  106      MFEM_ABORT(
"Unsupported dimension!");
 
 
  120   MFEM_VERIFY(trial_el != NULL, 
"Only VectorTensorFiniteElement is supported!");
 
  124   MFEM_VERIFY(test_el != NULL, 
"Only VectorTensorFiniteElement is supported!");
 
  129   const int dims = trial_el->
GetDim();
 
  130   MFEM_VERIFY(dims == 3, 
"");
 
  134   MFEM_VERIFY(dim == 3, 
"");
 
  138   ne = trial_fes.
GetNE();
 
  144   dofs1D = mapsC->
ndof;
 
  145   quad1D = mapsC->
nqpt;
 
  146   dofs1Dtest = mapsCtest->
ndof;
 
  148   MFEM_VERIFY(dofs1D == mapsO->
ndof + 1 && quad1D == mapsO->
nqpt, 
"");
 
  153   const int symmDims = (dims * (dims + 1)) / 2; 
 
  154   coeffDim = (
DQ ? 3 : 1);
 
  159   const int ndata = curlSpaces ? (coeffDim == 1 ? 1 : 9) : symmDims;
 
  173         internal::PAHcurlL2Setup3D(nq, coeffDim, ne, ir->
GetWeights(), coeff, pa_data);
 
  177         internal::PAHcurlHdivMassSetup3D(quad1D, coeffDim, ne, 
false, ir->
GetWeights(),
 
  178                                          geom->
J, coeff, pa_data);
 
  185      internal::PACurlCurlSetup3D(quad1D, coeffDim, ne, ir->
GetWeights(), geom->
J,
 
  190      MFEM_ABORT(
"Unknown kernel.");
 
 
  199      const int ndata = coeffDim == 1 ? 1 : 9;
 
  203         const int ID = (dofs1D << 4) | quad1D;
 
  207               return internal::SmemPAHcurlL2Apply3D<2,3>(
 
  208                         dofs1D, quad1D, ndata, ne,
 
  209                         mapsO->
B, mapsC->
B, mapsC->
G,
 
  212               return internal::SmemPAHcurlL2Apply3D<3,4>(
 
  213                         dofs1D, quad1D, ndata, ne,
 
  214                         mapsO->
B, mapsC->
B, mapsC->
G,
 
  217               return internal::SmemPAHcurlL2Apply3D<4,5>(
 
  218                         dofs1D, quad1D, ndata, ne,
 
  219                         mapsO->
B, mapsC->
B, mapsC->
G,
 
  222               return internal::SmemPAHcurlL2Apply3D<5,6>(
 
  223                         dofs1D, quad1D, ndata, ne,
 
  224                         mapsO->
B, mapsC->
B, mapsC->
G,
 
  227               return internal::SmemPAHcurlL2Apply3D(
 
  228                         dofs1D, quad1D, ndata, ne,
 
  229                         mapsO->
B, mapsC->
B, mapsC->
G,
 
  235         internal::PAHcurlL2Apply3D(dofs1D, quad1D, ndata, ne, mapsO->
B, mapsC->
B,
 
  236                                    mapsO->
Bt, mapsC->
Bt, mapsC->
G, pa_data, x, y);
 
  242      internal::PAHcurlHdivApply3D(dofs1D, dofs1Dtest, quad1D, ne, mapsO->
B,
 
  243                                   mapsC->
B, mapsOtest->
Bt, mapsCtest->
Bt, mapsC->
G,
 
  248      MFEM_ABORT(
"Unsupported dimension or space!");
 
 
  258      internal::PAHcurlHdivApplyTranspose3D(dofs1D, dofs1Dtest, quad1D, ne, mapsO->
B,
 
  259                                            mapsC->
B, mapsOtest->
Bt, mapsCtest->
Bt,
 
  260                                            mapsC->
Gt, pa_data, x, y);
 
  264      MFEM_ABORT(
"Unsupported dimension or space!");
 
 
  279   MFEM_VERIFY(trial_el != NULL, 
"Only VectorTensorFiniteElement is supported!");
 
  283   MFEM_VERIFY(test_el != NULL, 
"Only VectorTensorFiniteElement is supported!");
 
  288   const int dims = trial_el->
GetDim();
 
  289   MFEM_VERIFY(dims == 3, 
"");
 
  293   MFEM_VERIFY(dim == 3, 
"");
 
  297   ne = trial_fes.
GetNE();
 
  301   dofs1D = mapsC->
ndof;
 
  302   quad1D = mapsC->
nqpt;
 
  304   MFEM_VERIFY(dofs1D == mapsO->
ndof + 1 && quad1D == mapsO->
nqpt, 
"");
 
  312   const int symmDims = (dims * (dims + 1)) / 2; 
 
  314   coeffDim = 
DQ ? 3 : 1;
 
  315   const int ndata = curlSpaces ? (
DQ ? 9 : 1) : symmDims;
 
  329         internal::PAHcurlL2Setup3D(nq, coeffDim, ne, ir->
GetWeights(), coeff, pa_data);
 
  333         internal::PAHcurlHdivMassSetup3D(quad1D, coeffDim, ne, 
false, ir->
GetWeights(),
 
  334                                          geom->
J, coeff, pa_data);
 
  340      internal::PACurlCurlSetup3D(quad1D, coeffDim, ne, ir->
GetWeights(), geom->
J,
 
  345      MFEM_ABORT(
"Unknown kernel.");
 
 
  354      const int ndata = coeffDim == 1 ? 1 : 9;
 
  357         const int ID = (dofs1D << 4) | quad1D;
 
  361               return internal::SmemPAHcurlL2ApplyTranspose3D<2,3>(
 
  362                         dofs1D, quad1D, ndata,
 
  363                         ne, mapsO->
B, mapsC->
B,
 
  364                         mapsC->
G, pa_data, x, y);
 
  366               return internal::SmemPAHcurlL2ApplyTranspose3D<3,4>(
 
  367                         dofs1D, quad1D, ndata,
 
  368                         ne, mapsO->
B, mapsC->
B,
 
  369                         mapsC->
G, pa_data, x, y);
 
  371               return internal::SmemPAHcurlL2ApplyTranspose3D<4,5>(
 
  372                         dofs1D, quad1D, ndata,
 
  373                         ne, mapsO->
B, mapsC->
B,
 
  374                         mapsC->
G, pa_data, x, y);
 
  376               return internal::SmemPAHcurlL2ApplyTranspose3D<5,6>(
 
  377                         dofs1D, quad1D, ndata,
 
  378                         ne, mapsO->
B, mapsC->
B,
 
  379                         mapsC->
G, pa_data, x, y);
 
  381               return internal::SmemPAHcurlL2ApplyTranspose3D(
 
  382                         dofs1D, quad1D, ndata, ne,
 
  384                         mapsC->
G, pa_data, x, y);
 
  389         internal::PAHcurlL2ApplyTranspose3D(dofs1D, quad1D, ndata, ne, mapsO->
B,
 
  390                                             mapsC->
B, mapsO->
Bt, mapsC->
Bt, mapsC->
Gt,
 
  397      internal::PAHcurlHdivApplyTranspose3D(dofs1D, dofs1D, quad1D, ne, mapsO->
B,
 
  398                                            mapsC->
B, mapsO->
Bt, mapsC->
Bt,
 
  399                                            mapsC->
Gt, pa_data, x, y);
 
  403      MFEM_ABORT(
"Unsupported dimension or space!");
 
 
  413      internal::PAHcurlHdivApply3D(dofs1D, dofs1D, quad1D, ne, mapsO->
B,
 
  414                                   mapsC->
B, mapsO->
Bt, mapsC->
Bt, mapsC->
G,
 
  419      MFEM_ABORT(
"Unsupported dimension or space!");
 
 
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.
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.
Array< real_t > G
Gradients/divergences/curls of basis functions evaluated at quadrature points.
@ 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.
Array< real_t > Gt
Transpose of G.
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.
const DofToQuad * mapsO
Not owned. DOF-to-quad map, open.
const DofToQuad * mapsC
Not owned. DOF-to-quad map, closed.
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
void AssemblePA(const FiniteElementSpace &trial_fes, const FiniteElementSpace &test_fes) override
void AddMultPA(const Vector &, Vector &) const override
Method for partially assembled action.
void AddMultTransposePA(const Vector &, Vector &) const override
Method for partially assembled transposed action.
void AddMultPA(const Vector &, Vector &) const override
Method for partially assembled action.
void AssemblePA(const FiniteElementSpace &trial_fes, const FiniteElementSpace &test_fes) override
DiagonalMatrixCoefficient * DQ
void AddMultPA(const Vector &, Vector &) const override
Method for partially assembled action.
void AddMultTransposePA(const Vector &, Vector &) const override
Method for partially assembled transposed action.
void AssemblePA(const FiniteElementSpace &trial_fes, const FiniteElementSpace &test_fes) override
Class representing the storage layout of a QuadratureFunction.
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.
@ FULL
Store the coefficient as a full QuadratureFunction.
@ DEVICE_MASK
Biwise-OR of all device backends.