35 std::vector<EFAElement *>
40 unsigned int id()
const;
77 std::vector<EFANode *> & master_nodes,
78 std::vector<double> & master_weights)
const = 0;
87 virtual void initCrackTip(std::set<EFAElement *> & CrackTipElements) = 0;
92 virtual bool willCrackTipExtend(std::vector<unsigned int> & split_neighbors)
const = 0;
97 virtual void updateFragments(
const std::set<EFAElement *> & CrackTipElements,
98 std::map<unsigned int, EFANode *> & EmbeddedNodes) = 0;
100 unsigned int n_old_frag_cuts)
const = 0;
103 virtual void createChild(
const std::set<EFAElement *> & CrackTipElements,
104 std::map<unsigned int, EFAElement *> & Elements,
105 std::map<unsigned int, EFAElement *> & newChildElements,
106 std::vector<EFAElement *> & ChildElements,
107 std::vector<EFAElement *> & ParentElements,
108 std::map<unsigned int, EFANode *> & TempNodes) = 0;
112 std::map<unsigned int, EFANode *> & TempNodes,
113 std::map<
EFANode *, std::set<EFAElement *>> & InverseConnectivityMap,
114 bool merge_phantom_edges) = 0;
115 virtual void printElement(std::ostream & ostream)
const = 0;
120 EFANode *& childOfNeighborNode,
122 std::map<unsigned int, EFANode *> & PermanentNodes,
123 std::map<unsigned int, EFANode *> & TempNodes);
void clearParentAndChildren()
bool isCrackTipSplit() const
virtual void printElement(std::ostream &ostream) const =0
virtual void getNonPhysicalNodes(std::set< EFANode *> &non_physical_nodes) const =0
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_edges)=0
unsigned int numChildren() const
unsigned int numCrackTipNeighbors() const
virtual unsigned int numInteriorNodes() const =0
virtual unsigned int getNeighborIndex(const EFAElement *neighbor_elem) const =0
virtual bool isPartial() const =0
virtual bool isCrackTipElement() const =0
EFAElement(unsigned int eid, unsigned int n_nodes)
void addChild(EFAElement *child)
unsigned int numGeneralNeighbors() const
bool containsNode(EFANode *node) const
EFANode * getGlobalNodeFromLocalNode(const EFANode *local_node) const
EFAElement * getChild(unsigned int child_id) const
virtual void neighborSanityCheck() const =0
virtual void updateFragmentNode()=0
const dof_id_type n_nodes
std::vector< EFANode * > _nodes
unsigned int getCrackTipNeighbor(unsigned int index) const
virtual unsigned int numFragments() const =0
void printNodes(std::ostream &ostream) const
void setParent(EFAElement *parent)
void findGeneralNeighbors(const std::map< EFANode *, std::set< EFAElement *>> &InverseConnectivity)
virtual void setupNeighbors(std::map< EFANode *, std::set< EFAElement *>> &InverseConnectivityMap)=0
virtual bool shouldDuplicateCrackTipSplitElement(const std::set< EFAElement *> &CrackTipElements)=0
virtual void switchEmbeddedNode(EFANode *new_node, EFANode *old_node)=0
virtual void switchNode(EFANode *new_node, EFANode *old_node, bool descend_to_parent)=0
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)=0
EFANode * getNode(unsigned int node_id) const
virtual void restoreFragment(const EFAElement *const from_elem)=0
EFAElement * getGeneralNeighbor(unsigned int index) const
virtual void clearNeighbors()=0
void mergeNodes(EFANode *&childNode, EFANode *&childOfNeighborNode, EFAElement *childOfNeighborElem, std::map< unsigned int, EFANode *> &PermanentNodes, std::map< unsigned int, EFANode *> &TempNodes)
virtual unsigned int getNumCuts() const =0
virtual void getMasterInfo(EFANode *node, std::vector< EFANode *> &master_nodes, std::vector< double > &master_weights) const =0
unsigned int getLocalNodeIndex(EFANode *node) const
virtual bool shouldDuplicateForCrackTip(const std::set< EFAElement *> &CrackTipElements)=0
virtual void updateFragments(const std::set< EFAElement *> &CrackTipElements, std::map< unsigned int, EFANode *> &EmbeddedNodes)=0
virtual void removePhantomEmbeddedNode()=0
EFANode * createLocalNodeFromGlobalNode(const EFANode *global_node) const
unsigned int numNodes() const
void addCrackTipNeighbor(EFAElement *neighbor_elem)
virtual void initCrackTip(std::set< EFAElement *> &CrackTipElements)=0
virtual bool willCrackTipExtend(std::vector< unsigned int > &split_neighbors) const =0
const std::vector< EFANode * > & getNodes() const
virtual bool shouldDuplicateForPhantomCorner()=0
std::vector< EFAElement * > _general_neighbors
std::vector< EFAElement * > _children
virtual bool isFinalCut() const =0
EFAElement * getParent() const
bool _crack_tip_split_element
virtual void fragmentSanityCheck(unsigned int n_old_frag_edges, unsigned int n_old_frag_cuts) const =0
std::vector< unsigned int > _crack_tip_neighbors
void setNode(unsigned int node_id, EFANode *node)
std::vector< EFANode * > _local_nodes