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.