https://mooseframework.inl.gov
Loading...
Searching...
No Matches
ElementFragmentAlgorithm.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
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{
21public:
25 ElementFragmentAlgorithm(std::ostream & os);
26
28
29private:
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::set<EFAElement *> _crack_tip_elements;
38 std::vector<EFANode *> _new_nodes;
39 std::vector<EFANode *> _deleted_nodes;
40 std::vector<EFAElement *> _child_elements;
41 std::vector<EFAElement *> _parent_elements;
42 std::map<EFANode *, std::set<EFAElement *>> _inverse_connectivity;
43
44public:
45 unsigned int add2DElements(std::vector<std::vector<unsigned int>> & quads);
46 EFAElement * add2DElement(const std::vector<unsigned int> & quad, unsigned int id);
47 EFAElement * add3DElement(const std::vector<unsigned int> & quad, unsigned int id);
48
51 void addElemEdgeIntersection(unsigned int elemid, unsigned int edgeid, double position);
52 void addElemNodeIntersection(unsigned int elemid, unsigned int nodeid);
53 bool addFragEdgeIntersection(unsigned int elemid, unsigned int frag_edge_id, double position);
54 void addElemFaceIntersection(unsigned int elemid,
55 unsigned int faceid,
56 const std::vector<unsigned int> & edgeid,
57 const std::vector<double> & position);
58 void addFragFaceIntersection(unsigned int ElemID,
59 unsigned int FragFaceID,
60 const std::vector<unsigned int> & FragFaceEdgeID,
61 const std::vector<double> & position);
62
64
65 void updateTopology(bool mergeUncutVirtualEdges = true);
66 void reset();
67 void clearAncestry();
68 void restoreFragmentInfo(EFAElement * const elem, const EFAElement * const from_elem);
69
71 void connectFragments(bool mergeUncutVirtualEdges);
72
73 void sanityCheck();
75 void printMesh();
76 void error(const std::string & error_string);
77
78 const std::vector<EFAElement *> & getChildElements() { return _child_elements; };
79 const std::vector<EFAElement *> & getParentElements() { return _parent_elements; };
80 const std::vector<EFANode *> & getNewNodes() { return _new_nodes; };
81 const std::set<EFAElement *> & getCrackTipElements() { return _crack_tip_elements; };
82 const std::map<unsigned int, EFANode *> & getPermanentNodes() { return _permanent_nodes; }
83 const std::map<unsigned int, EFANode *> & getTempNodes() { return _temp_nodes; }
84 const std::map<unsigned int, EFANode *> & getEmbeddedNodes() { return _embedded_nodes; }
85 EFAElement * getElemByID(unsigned int id);
86 unsigned int getElemIdByNodes(unsigned int * node_id);
88};
std::map< unsigned int, EFAElement * > _elements
const std::map< unsigned int, EFANode * > & getEmbeddedNodes()
void addElemNodeIntersection(unsigned int elemid, unsigned int nodeid)
const std::vector< EFANode * > & getNewNodes()
EFAElement * add3DElement(const std::vector< unsigned int > &quad, unsigned int id)
EFAElement * getElemByID(unsigned int id)
std::vector< EFAElement * > _child_elements
std::vector< EFANode * > _new_nodes
void addFragFaceIntersection(unsigned int ElemID, unsigned int FragFaceID, const std::vector< unsigned int > &FragFaceEdgeID, const std::vector< double > &position)
unsigned int getElemIdByNodes(unsigned int *node_id)
const std::vector< EFAElement * > & getChildElements()
std::map< unsigned int, EFANode * > _embedded_permanent_nodes
std::set< EFAElement * > _crack_tip_elements
const std::map< unsigned int, EFANode * > & getTempNodes()
std::map< unsigned int, EFANode * > _embedded_nodes
void addElemFaceIntersection(unsigned int elemid, unsigned int faceid, const std::vector< unsigned int > &edgeid, const std::vector< double > &position)
std::map< unsigned int, EFANode * > _permanent_nodes
void error(const std::string &error_string)
unsigned int add2DElements(std::vector< std::vector< unsigned int > > &quads)
void restoreFragmentInfo(EFAElement *const elem, const EFAElement *const from_elem)
void addElemEdgeIntersection(unsigned int elemid, unsigned int edgeid, double position)
std::map< unsigned int, EFANode * > _temp_nodes
std::map< EFANode *, std::set< EFAElement * > > _inverse_connectivity
const std::set< EFAElement * > & getCrackTipElements()
EFAElement * add2DElement(const std::vector< unsigned int > &quad, unsigned int id)
void connectFragments(bool mergeUncutVirtualEdges)
bool addFragEdgeIntersection(unsigned int elemid, unsigned int frag_edge_id, double position)
void updateTopology(bool mergeUncutVirtualEdges=true)
const std::vector< EFAElement * > & getParentElements()
const std::map< unsigned int, EFANode * > & getPermanentNodes()
std::vector< EFANode * > _deleted_nodes
std::vector< EFAElement * > _parent_elements