15 #include "../config/config.hpp"
16 #include "../general/hash.hpp"
17 #include "../linalg/densemat.hpp"
20 #include "../fem/geom.hpp"
28 class IsoparametricTransformation;
29 class FiniteElementSpace;
162 if (!ret)
delete this;
176 {
pos[0] = x,
pos[1] = y, pos[2] = z; }
298 int fattr0,
int fattr1,
int fattr2,
299 int fattr3,
int fattr4,
int fattr5);
303 int eattr0,
int eattr1,
int eattr2,
int eattr3);
306 int attr,
int eattr0,
int eattr1,
int eattr2);
315 Node* mid[4] = NULL );
320 Node* mid12,
Node* mid34,
int level = 0);
347 : dof(dof), coef(coef) {}
409 for (
int i = 0; i <
dim; i++)
416 for (
int i = 0; i <
dim; i++)
424 for (
int i = 0; i <
dim; i++)
457 FineTransform *transforms,
const PointMatrix &pm);
464 int& h_level,
int& v_level);
void ReorderFacePointMat(Node *v0, Node *v1, Node *v2, Node *v3, Element *elem, DenseMatrix &pm)
void LimitNCLevel(int max_level)
int Size() const
Logical size of the array.
Element * NewHexahedron(Node *n0, Node *n1, Node *n2, Node *n3, Node *n4, Node *n5, Node *n6, Node *n7, int attr, int fattr0, int fattr1, int fattr2, int fattr3, int fattr4, int fattr5)
DepList dep_list
list of other DOFs this DOF depends on
void GetVerticesElementsBoundary(Array< mfem::Vertex > &vertices, Array< mfem::Element * > &elements, Array< mfem::Element * > &boundary)
int index
edge number in the Mesh
Array< Element * > coarse_elements
bool finalized
true if cP matrix row is known for this DOF
FiniteElementSpace * space
PointMatrix(const Point &p0, const Point &p1, const Point &p2)
FineTransform * GetFineTransforms()
SparseMatrix * GetInterpolation(FiniteElementSpace *space, SparseMatrix **cR_ptr=NULL)
Dependency(int dof, double coef)
Point(const Point &p0, const Point &p1)
Node * PeekAltParents(Node *v1, Node *v2)
void SetEdgeIndicesFromMesh(Mesh *mesh)
PointMatrix(const Point &p0, const Point &p1, const Point &p2, const Point &p3)
PointMatrix(const Point &p0, const Point &p1, const Point &p2, const Point &p3, const Point &p4, const Point &p5, const Point &p6, const Point &p7)
Array< RefStackItem > ref_stack
stack of scheduled refinements
int attribute
boundary element attribute, -1 if internal edge
void RefElementNodes(Element *elem)
static int find_node(Element *elem, Node *node)
void GetLeafElements(Element *e)
int index
vertex number in the Mesh
void ConstrainEdge(Node *v0, Node *v1, double t0, double t1, Array< int > &master_dofs, int level)
const Point & operator()(int i) const
bool DofFinalizable(DofData &vd)
Point & operator()(int i)
void ProcessMasterEdge(Node *node[2], Node *edge)
Vertex * NewVertex(Node *v1, Node *v2)
bool NodeSetY1(Node *node, Node **n)
void ClearCoarseLevel()
Free the internally stored array of coarse leaf elements.
Array< int > vertex_nodeId
int attribute
boundary element attribute, -1 if internal face
int index
Mesh element number.
Element * NewQuadrilateral(Node *n0, Node *n1, Node *n2, Node *n3, int attr, int eattr0, int eattr1, int eattr2, int eattr3)
Array< Dependency > DepList
Point(const Point &p0, const Point &p1, const Point &p2, const Point &p3)
Vertex(double x, double y, double z)
void ConstrainFace(Node *v0, Node *v1, Node *v2, Node *v3, const PointMatrix &pm, Array< int > &master_dofs, int level)
Refinement(int index, int type=7)
int index
face number in the Mesh
void ProcessMasterFace(Node *node[4], Face *face)
Element * elem[2]
up to 2 elements sharing the face
void GetMatrix(DenseMatrix &point_matrix) const
void CheckAnisoFace(Node *v1, Node *v2, Node *v3, Node *v4, Node *mid12, Node *mid34, int level=0)
DofData * dof_data
DOF temporary data.
void RegisterElement(Element *e)
void AddDependencies(Array< int > &master_dofs, Array< int > &slave_dofs, DenseMatrix &I)
Element(int geom, int attr)
int CountElements(Element *elem)
A class for non-conforming AMR on higher-order hexahedral, quadrilateral or triangular meshes...
bool NodeSetX1(Node *node, Node **n)
void RegisterFaces(Element *elem)
void DeleteHierarchy(Element *elem)
RefStackItem(Element *elem, int type)
Point(double x, double y, double z)
double * Data() const
Returns vector of the elements.
void UnrefEdge(HashTable< Node > &nodes)
void ForceRefinement(Node *v1, Node *v2, Node *v3, Node *v4)
Abstract finite element space.
Array< Element * > leaf_elements
void CountSplits(Element *elem, int splits[3])
void UpdateLeafElements()
bool NodeSetZ1(Node *node, Node **n)
Node * GetMidEdgeVertexSimple(Node *v1, Node *v2)
void UnrefElementNodes(Element *elem)
void CheckIsoFace(Node *v1, Node *v2, Node *v3, Node *v4, Node *e1, Node *e2, Node *e3, Node *e4, Node *midf)
int FaceSplitType(Node *v1, Node *v2, Node *v3, Node *v4, Node *mid[4]=NULL)
Node * GetMidFaceVertex(Node *e1, Node *e2, Node *e3, Node *e4)
bool NodeSetZ2(Node *node, Node **n)
bool NodeSetX2(Node *node, Node **n)
void SetFaceIndicesFromMesh(Mesh *mesh)
Element * NewTriangle(Node *n0, Node *n1, Node *n2, int attr, int eattr0, int eattr1, int eattr2)
Point(double x, double y)
Array< Element * > root_elements
Node * GetMidEdgeVertex(Node *v1, Node *v2)
Element * GetSingleElement() const
void ForgetElement(Element *e)
bool NodeSetY2(Node *node, Node **n)
int ref_type
refinement XYZ bit mask (7 = full isotropic)
Abstract data type element.
Point & operator=(const Point &src)
void FaceSplitLevel(Node *v1, Node *v2, Node *v3, Node *v4, int &h_level, int &v_level)
void Refine(const Array< Refinement > &refinements)
int GetEdgeMaster(int v1, int v2) const
void UnrefVertex(HashTable< Node > &nodes)