Go to the documentation of this file.
23 EFAElement3D(
unsigned int eid,
unsigned int n_nodes,
unsigned int n_faces);
50 std::vector<EFANode *> & master_nodes,
51 std::vector<double> & master_weights)
const;
59 unsigned int & neigh_face_id,
60 unsigned int & neigh_edge_id)
const;
65 virtual void initCrackTip(std::set<EFAElement *> & CrackTipElements);
74 virtual void updateFragments(
const std::set<EFAElement *> & CrackTipElements,
75 std::map<unsigned int, EFANode *> & EmbeddedNodes);
77 unsigned int n_old_frag_cuts)
const;
80 virtual void createChild(
const std::set<EFAElement *> & CrackTipElements,
81 std::map<unsigned int, EFAElement *> & Elements,
82 std::map<unsigned int, EFAElement *> & newChildElements,
83 std::vector<EFAElement *> & ChildElements,
84 std::vector<EFAElement *> & ParentElements,
85 std::map<unsigned int, EFANode *> & TempNodes);
89 std::map<unsigned int, EFANode *> & TempNodes,
90 std::map<
EFANode *, std::set<EFAElement *>> & InverseConnectivityMap,
91 bool merge_phantom_faces);
96 std::set<EFANode *>
getFaceNodes(
unsigned int face_id)
const;
108 std::vector<unsigned int> & face_id,
109 std::vector<unsigned int> & edge_id)
const;
111 unsigned int node_id,
114 unsigned int node_id,
124 bool getFragmentFaceID(
unsigned int elem_face_id,
unsigned int & frag_face_id)
const;
126 unsigned int ElemFaceEdgeID,
127 unsigned int & FragFaceID,
128 unsigned int & FragFaceEdgeID)
const;
130 isPhysicalEdgeCut(
unsigned int ElemFaceID,
unsigned int ElemFaceEdgeID,
double position)
const;
133 unsigned int numEdgeNeighbors(
unsigned int face_id,
unsigned int edge_id)
const;
136 getEdgeNeighbor(
unsigned int face_id,
unsigned int edge_id,
unsigned int neighbor_id)
const;
145 unsigned int edge_id,
148 std::map<unsigned int, EFANode *> & EmbeddedNodes,
149 bool add_to_neighbor,
150 bool add_to_adjacent);
152 unsigned int frag_edge_id,
154 std::map<unsigned int, EFANode *> & EmbeddedNodes,
155 bool add_to_neighbor,
156 bool add_to_adjacent);
162 unsigned int edge_id,
168 std::vector<double> & xi_2d,
169 std::vector<double> & xi_3d)
const;
virtual void updateFragmentNode()
bool overlaysElement(const EFAElement3D *other_elem) const
unsigned int getFaceID(EFAFace *face) const
bool fragmentFaceAlreadyCut(unsigned int ElemFaceID) const
std::vector< EFAFragment3D * > _fragments
EFAFace * getFragmentFace(unsigned int frag_id, unsigned int face_id) const
virtual bool isFinalCut() const
void removeEmbeddedNode(EFANode *emb_node, bool remove_for_neighbor)
virtual void neighborSanityCheck() const
EFAFragment3D * getFragment(unsigned int frag_id) const
bool getFragmentFaceID(unsigned int elem_face_id, unsigned int &frag_face_id) const
EFAVolumeNode * getInteriorNode(unsigned int interior_node_id) const
std::vector< std::vector< std::vector< EFAElement3D * > > > _face_edge_neighbors
unsigned int numEdgeNeighbors(unsigned int face_id, unsigned int edge_id) const
std::vector< unsigned int > getCommonFaceID(const EFAElement3D *other_elem) const
void mapParametricCoordinateFrom2DTo3D(unsigned int face_id, std::vector< double > &xi_2d, std::vector< double > &xi_3d) const
void setFace(unsigned int face_id, EFAFace *face)
virtual unsigned int getNeighborIndex(const EFAElement *neighbor_elem) const
std::vector< EFAFace * > _faces
void addFragFaceEdgeCut(unsigned int frag_face_id, unsigned int frag_edge_id, double position, std::map< unsigned int, EFANode * > &EmbeddedNodes, bool add_to_neighbor, bool add_to_adjacent)
std::vector< EFANode * > getCommonNodes(const EFAElement3D *other_elem) const
virtual bool willCrackTipExtend(std::vector< unsigned int > &split_neighbors) const
bool getFragmentFaceEdgeID(unsigned int ElemFaceID, unsigned int ElemFaceEdgeID, unsigned int &FragFaceID, unsigned int &FragFaceEdgeID) const
void checkNeighborFaceCut(unsigned int face_id, unsigned int edge_id, double position, EFANode *from_node, EFANode *embedded_node, EFANode *&local_embedded)
virtual void createChild(const std::set< EFAElement * > &CrackTipElements, std::map< unsigned int, EFAElement * > &Elements, std::map< unsigned int, EFAElement * > &newChildElements, std::vector< EFAElement * > &ChildElements, std::vector< EFAElement * > &ParentElements, std::map< unsigned int, EFANode * > &TempNodes)
virtual bool isPartial() const
virtual void connectNeighbors(std::map< unsigned int, EFANode * > &PermanentNodes, std::map< unsigned int, EFANode * > &TempNodes, std::map< EFANode *, std::set< EFAElement * >> &InverseConnectivityMap, bool merge_phantom_faces)
virtual void removePhantomEmbeddedNode()
virtual unsigned int getNumCuts() const
void setLocalCoordinates()
std::vector< unsigned int > getTipFaceIDs() const
bool getFaceNodeParametricCoordinates(EFANode *node, std::vector< double > &xi_3d) const
unsigned int numFaceNeighbors(unsigned int face_id) const
virtual void switchEmbeddedNode(EFANode *new_node, EFANode *old_node)
virtual void clearNeighbors()
std::set< EFANode * > getPhantomNodeOnFace(unsigned int face_id) const
std::vector< EFAVolumeNode * > _interior_nodes
EFAFace * getAdjacentFace(unsigned int face_id, unsigned int edge_id) const
std::set< EFANode * > getFaceNodes(unsigned int face_id) const
virtual void switchNode(EFANode *new_node, EFANode *old_node, bool descend_to_parent)
virtual void updateFragments(const std::set< EFAElement * > &CrackTipElements, std::map< unsigned int, EFANode * > &EmbeddedNodes)
EFAFace * getFace(unsigned int face_id) const
bool isFacePhantom(unsigned int face_id) const
void addFaceEdgeCut(unsigned int face_id, unsigned int edge_id, double position, EFANode *embedded_node, std::map< unsigned int, EFANode * > &EmbeddedNodes, bool add_to_neighbor, bool add_to_adjacent)
bool isPhysicalEdgeCut(unsigned int ElemFaceID, unsigned int ElemFaceEdgeID, double position) const
virtual void initCrackTip(std::set< EFAElement * > &CrackTipElements)
unsigned int getNeighborFaceEdgeID(unsigned int face_id, unsigned int edg_id, EFAElement3D *neighbor_elem) const
EFAElement3D * getFaceNeighbor(unsigned int face_id, unsigned int neighbor_id) const
bool fragmentHasTipFaces() const
virtual unsigned int numInteriorNodes() const
unsigned int numFaces() const
virtual void printElement(std::ostream &ostream)
std::vector< std::vector< EFAFace * > > _faces_adjacent_to_faces
virtual bool shouldDuplicateCrackTipSplitElement(const std::set< EFAElement * > &CrackTipElements)
virtual void getNeighborEdgeIndex(const EFAElement3D *neighbor_elem, unsigned int face_id, unsigned int edge_id, unsigned int &neigh_face_id, unsigned int &neigh_edge_id) const
virtual void getMasterInfo(EFANode *node, std::vector< EFANode * > &master_nodes, std::vector< double > &master_weights) const
EFAElement3D(unsigned int eid, unsigned int n_nodes, unsigned int n_faces)
virtual bool shouldDuplicateForCrackTip(const std::set< EFAElement * > &CrackTipElements)
unsigned int _num_interior_face_nodes
std::set< EFANode * > getTipEmbeddedNodes() const
virtual bool shouldDuplicateForPhantomCorner()
virtual void fragmentSanityCheck(unsigned int n_old_frag_faces, unsigned int n_old_frag_cuts) const
void findFacesAdjacentToFaces()
virtual unsigned int numFragments() const
unsigned int _num_vertices
virtual bool isCrackTipElement() const
bool faceContainsTip(unsigned int face_id) const
std::vector< std::vector< EFAElement3D * > > _face_neighbors
virtual void getNonPhysicalNodes(std::set< EFANode * > &non_physical_nodes) const
virtual void restoreFragment(const EFAElement *const from_elem)
unsigned int getNeighborFaceNodeID(unsigned int face_id, unsigned int node_id, EFAElement3D *neighbor_elem) const
EFAElement3D * getEdgeNeighbor(unsigned int face_id, unsigned int edge_id, unsigned int neighbor_id) const
std::vector< EFAPoint > _local_node_coor
unsigned int getNeighborFaceInteriorNodeID(unsigned int face_id, unsigned int node_id, EFAElement3D *neighbor_elem) const
virtual void setupNeighbors(std::map< EFANode *, std::set< EFAElement * >> &InverseConnectivityMap)
bool getCommonEdgeID(const EFAElement3D *other_elem, std::vector< unsigned int > &face_id, std::vector< unsigned int > &edge_id) const