4 #if defined(MFEM_USE_ALGOIM) && defined(MFEM_USE_BLITZ)
28 MFEM_ABORT(
"Currently MFEM + Algoim supports only quads and hexes.");
42 if (vir!=
nullptr) {
return vir;}
45 int np1d=int_order/2+1;
48 LevelSet2D ls(pe,lsvec);
49 auto q = Algoim::quadGen<2>(ls,Algoim::BoundingBox<double,2>(0.0,1.0),
54 for (
size_t i=0; i<q.nodes.size(); i++)
57 ip.
Set2w(q.nodes[i].x(0),q.nodes[i].x(1),q.nodes[i].w);
62 LevelSet3D ls(pe,lsvec);
63 auto q = Algoim::quadGen<3>(ls,Algoim::BoundingBox<double,3>(0.0,1.0),
68 for (
size_t i=0; i<q.nodes.size(); i++)
71 ip.
Set(q.nodes[i].x(0),q.nodes[i].x(1),q.nodes[i].x(2),q.nodes[i].w);
80 if (sir!=
nullptr) {
return sir;}
82 int np1d=int_order/2+1;
86 LevelSet2D ls(pe,lsvec);
87 auto q = Algoim::quadGen<2>(ls,Algoim::BoundingBox<double,2>(0.0,1.0),
92 for (
size_t i=0; i<q.nodes.size(); i++)
95 ip.
Set2w(q.nodes[i].x(0),q.nodes[i].x(1),q.nodes[i].w);
100 LevelSet3D ls(pe,lsvec);
101 auto q = Algoim::quadGen<3>(ls,Algoim::BoundingBox<double,3>(0.0,1.0),
106 for (
size_t i=0; i<q.nodes.size(); i++)
109 ip.
Set(q.nodes[i].x(0),q.nodes[i].x(1),q.nodes[i].x(2),q.nodes[i].w);
Abstract class for all finite elements.
void Set(const double *p, const int dim)
int GetDim() const
Returns the reference space dimension for the finite element.
void trans(const Vector &u, Vector &x)
Class for an integration rule - an Array of IntegrationPoint.
const IntegrationRule * GetSurfaceIntegrationRule()
void SetSize(int s)
Resize the vector to size s.
int GetOrder() const
Returns the order of the finite element. In the case of anisotropic orders, returns the maximum order...
const IntegrationRule * GetVolumeIntegrationRule()
Data type dense matrix using column-major storage.
Geometry::Type GetGeomType() const
Returns the Geometry::Type of the reference element.
int GetDof() const
Returns the number of degrees of freedom in the finite element.
Arbitrary order H1 elements in 3D utilizing the Bernstein basis on a cube.
void SetOrder(const int order)
Sets the order of the integration rule. This is only for keeping order information, it does not alter any data in the IntegrationRule.
Class for integration point with weight.
AlgoimIntegrationRule(int o, const FiniteElement &el, ElementTransformation &trans, const Vector &lsfun)
Arbitrary order H1 elements in 2D utilizing the Bernstein basis on a square.
void Set2w(const double x1, const double x2, const double w)
virtual void Project(Coefficient &coeff, ElementTransformation &Trans, Vector &dofs) const
Given a coefficient and a transformation, compute its projection (approximation) in the local finite ...