www.mooseframework.org
ElementFragmentAlgorithm.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 #include <vector>
13 #include <map>
14 #include <set>
15 
16 #include "EFANode.h"
17 #include "EFAElement.h"
18 
20 {
21 public:
25  ElementFragmentAlgorithm(std::ostream & os);
26 
28 
29 private:
30  std::ostream & _ostream;
31  // unsigned int MaxElemId;
32  std::map<unsigned int, EFANode *> _permanent_nodes;
33  std::map<unsigned int, EFANode *> _embedded_nodes;
34  std::map<unsigned int, EFANode *> _temp_nodes;
35  std::map<unsigned int, EFANode *> _embedded_permanent_nodes;
36  std::map<unsigned int, EFAElement *> _elements;
37  // std::map< std::set< EFAnode* >, std::set< EFAelement* > > _merged_edge_map;
38  std::set<EFAElement *> _crack_tip_elements;
39  std::vector<EFANode *> _new_nodes;
40  std::vector<EFANode *> _deleted_nodes;
41  std::vector<EFAElement *> _child_elements;
42  std::vector<EFAElement *> _parent_elements;
43  std::map<EFANode *, std::set<EFAElement *>> _inverse_connectivity;
44 
45 public:
46  unsigned int add2DElements(std::vector<std::vector<unsigned int>> & quads);
47  EFAElement * add2DElement(std::vector<unsigned int> quad, unsigned int id);
48  EFAElement * add3DElement(std::vector<unsigned int> quad, unsigned int id);
49 
50  void updateEdgeNeighbors();
51  void initCrackTipTopology();
52  void addElemEdgeIntersection(unsigned int elemid, unsigned int edgeid, double position);
53  void addElemNodeIntersection(unsigned int elemid, unsigned int nodeid);
54  bool addFragEdgeIntersection(unsigned int elemid, unsigned int frag_edge_id, double position);
55  void addElemFaceIntersection(unsigned int elemid,
56  unsigned int faceid,
57  std::vector<unsigned int> edgeid,
58  std::vector<double> position);
59  void addFragFaceIntersection(unsigned int ElemID,
60  unsigned int FragFaceID,
61  std::vector<unsigned int> FragFaceEdgeID,
62  std::vector<double> position);
63 
65 
66  void updateTopology(bool mergeUncutVirtualEdges = true);
67  void reset();
68  void clearAncestry();
69  void restoreFragmentInfo(EFAElement * const elem, const EFAElement * const from_elem);
70 
71  void createChildElements();
72  void connectFragments(bool mergeUncutVirtualEdges);
73 
74  void sanityCheck();
76  void printMesh();
77  void error(const std::string & error_string);
78 
79  const std::vector<EFAElement *> & getChildElements() { return _child_elements; };
80  const std::vector<EFAElement *> & getParentElements() { return _parent_elements; };
81  const std::vector<EFANode *> & getNewNodes() { return _new_nodes; };
82  const std::set<EFAElement *> & getCrackTipElements() { return _crack_tip_elements; };
83  const std::map<unsigned int, EFANode *> & getPermanentNodes() { return _permanent_nodes; }
84  const std::map<unsigned int, EFANode *> & getTempNodes() { return _temp_nodes; }
85  const std::map<unsigned int, EFANode *> & getEmbeddedNodes() { return _embedded_nodes; }
86  EFAElement * getElemByID(unsigned int id);
87  unsigned int getElemIdByNodes(unsigned int * node_id);
89 };
90 
ElementFragmentAlgorithm::connectFragments
void connectFragments(bool mergeUncutVirtualEdges)
Definition: ElementFragmentAlgorithm.C:440
ElementFragmentAlgorithm::updatePhysicalLinksAndFragments
void updatePhysicalLinksAndFragments()
Definition: ElementFragmentAlgorithm.C:290
ElementFragmentAlgorithm::add2DElements
unsigned int add2DElements(std::vector< std::vector< unsigned int >> &quads)
Definition: ElementFragmentAlgorithm.C:64
ElementFragmentAlgorithm
Definition: ElementFragmentAlgorithm.h:19
ElementFragmentAlgorithm::error
void error(const std::string &error_string)
ElementFragmentAlgorithm::initCrackTipTopology
void initCrackTipTopology()
Definition: ElementFragmentAlgorithm.C:200
EFAElement
Definition: EFAElement.h:19
ElementFragmentAlgorithm::getNewNodes
const std::vector< EFANode * > & getNewNodes()
Definition: ElementFragmentAlgorithm.h:81
EFANode.h
EFAElement.h
ElementFragmentAlgorithm::clearPotentialIsolatedNodes
void clearPotentialIsolatedNodes()
Definition: ElementFragmentAlgorithm.C:622
ElementFragmentAlgorithm::add3DElement
EFAElement * add3DElement(std::vector< unsigned int > quad, unsigned int id)
Definition: ElementFragmentAlgorithm.C:133
ElementFragmentAlgorithm::_deleted_nodes
std::vector< EFANode * > _deleted_nodes
Definition: ElementFragmentAlgorithm.h:40
ElementFragmentAlgorithm::_child_elements
std::vector< EFAElement * > _child_elements
Definition: ElementFragmentAlgorithm.h:41
ElementFragmentAlgorithm::addFragFaceIntersection
void addFragFaceIntersection(unsigned int ElemID, unsigned int FragFaceID, std::vector< unsigned int > FragFaceEdgeID, std::vector< double > position)
Definition: ElementFragmentAlgorithm.C:281
ElementFragmentAlgorithm::updateTopology
void updateTopology(bool mergeUncutVirtualEdges=true)
Definition: ElementFragmentAlgorithm.C:302
ElementFragmentAlgorithm::sanityCheck
void sanityCheck()
Definition: ElementFragmentAlgorithm.C:462
ElementFragmentAlgorithm::clearAncestry
void clearAncestry()
Definition: ElementFragmentAlgorithm.C:367
ElementFragmentAlgorithm::addElemFaceIntersection
void addElemFaceIntersection(unsigned int elemid, unsigned int faceid, std::vector< unsigned int > edgeid, std::vector< double > position)
Definition: ElementFragmentAlgorithm.C:261
ElementFragmentAlgorithm::_elements
std::map< unsigned int, EFAElement * > _elements
Definition: ElementFragmentAlgorithm.h:36
ElementFragmentAlgorithm::_temp_nodes
std::map< unsigned int, EFANode * > _temp_nodes
Definition: ElementFragmentAlgorithm.h:34
ElementFragmentAlgorithm::printMesh
void printMesh()
Definition: ElementFragmentAlgorithm.C:504
ElementFragmentAlgorithm::addFragEdgeIntersection
bool addFragEdgeIntersection(unsigned int elemid, unsigned int frag_edge_id, double position)
Definition: ElementFragmentAlgorithm.C:245
ElementFragmentAlgorithm::_permanent_nodes
std::map< unsigned int, EFANode * > _permanent_nodes
Definition: ElementFragmentAlgorithm.h:32
ElementFragmentAlgorithm::getParentElements
const std::vector< EFAElement * > & getParentElements()
Definition: ElementFragmentAlgorithm.h:80
ElementFragmentAlgorithm::updateEdgeNeighbors
void updateEdgeNeighbors()
Definition: ElementFragmentAlgorithm.C:177
ElementFragmentAlgorithm::createChildElements
void createChildElements()
Definition: ElementFragmentAlgorithm.C:417
ElementFragmentAlgorithm::getChildElements
const std::vector< EFAElement * > & getChildElements()
Definition: ElementFragmentAlgorithm.h:79
ElementFragmentAlgorithm::getEmbeddedNodes
const std::map< unsigned int, EFANode * > & getEmbeddedNodes()
Definition: ElementFragmentAlgorithm.h:85
ElementFragmentAlgorithm::_inverse_connectivity
std::map< EFANode *, std::set< EFAElement * > > _inverse_connectivity
Definition: ElementFragmentAlgorithm.h:43
ElementFragmentAlgorithm::reset
void reset()
Definition: ElementFragmentAlgorithm.C:330
ElementFragmentAlgorithm::add2DElement
EFAElement * add2DElement(std::vector< unsigned int > quad, unsigned int id)
Definition: ElementFragmentAlgorithm.C:102
ElementFragmentAlgorithm::~ElementFragmentAlgorithm
~ElementFragmentAlgorithm()
Definition: ElementFragmentAlgorithm.C:32
ElementFragmentAlgorithm::_embedded_nodes
std::map< unsigned int, EFANode * > _embedded_nodes
Definition: ElementFragmentAlgorithm.h:33
ElementFragmentAlgorithm::_embedded_permanent_nodes
std::map< unsigned int, EFANode * > _embedded_permanent_nodes
Definition: ElementFragmentAlgorithm.h:35
ElementFragmentAlgorithm::_crack_tip_elements
std::set< EFAElement * > _crack_tip_elements
Definition: ElementFragmentAlgorithm.h:38
ElementFragmentAlgorithm::restoreFragmentInfo
void restoreFragmentInfo(EFAElement *const elem, const EFAElement *const from_elem)
Definition: ElementFragmentAlgorithm.C:410
ElementFragmentAlgorithm::_ostream
std::ostream & _ostream
Definition: ElementFragmentAlgorithm.h:30
ElementFragmentAlgorithm::getElemByID
EFAElement * getElemByID(unsigned int id)
Definition: ElementFragmentAlgorithm.C:590
ElementFragmentAlgorithm::getCrackTipElements
const std::set< EFAElement * > & getCrackTipElements()
Definition: ElementFragmentAlgorithm.h:82
ElementFragmentAlgorithm::getElemIdByNodes
unsigned int getElemIdByNodes(unsigned int *node_id)
Definition: ElementFragmentAlgorithm.C:599
ElementFragmentAlgorithm::_parent_elements
std::vector< EFAElement * > _parent_elements
Definition: ElementFragmentAlgorithm.h:42
ElementFragmentAlgorithm::ElementFragmentAlgorithm
ElementFragmentAlgorithm(std::ostream &os)
Constructor.
Definition: ElementFragmentAlgorithm.C:30
ElementFragmentAlgorithm::updateCrackTipElements
void updateCrackTipElements()
Definition: ElementFragmentAlgorithm.C:474
ElementFragmentAlgorithm::addElemEdgeIntersection
void addElemEdgeIntersection(unsigned int elemid, unsigned int edgeid, double position)
Definition: ElementFragmentAlgorithm.C:212
ElementFragmentAlgorithm::_new_nodes
std::vector< EFANode * > _new_nodes
Definition: ElementFragmentAlgorithm.h:39
ElementFragmentAlgorithm::addElemNodeIntersection
void addElemNodeIntersection(unsigned int elemid, unsigned int nodeid)
Definition: ElementFragmentAlgorithm.C:228
ElementFragmentAlgorithm::getTempNodes
const std::map< unsigned int, EFANode * > & getTempNodes()
Definition: ElementFragmentAlgorithm.h:84
ElementFragmentAlgorithm::getPermanentNodes
const std::map< unsigned int, EFANode * > & getPermanentNodes()
Definition: ElementFragmentAlgorithm.h:83