https://mooseframework.inl.gov
Loading...
Searching...
No Matches
EFAFragment3D.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 "EFAFragment.h"
13
14#include <limits>
15
16class EFAEdge;
17class EFAFace;
18class EFAElement3D;
19
21{
22public:
24 bool create_faces,
25 const EFAElement3D * from_host,
26 unsigned int frag_id = std::numeric_limits<unsigned int>::max());
28
29private:
31 std::vector<EFAFace *> _faces;
32 std::vector<std::vector<EFAFace *>> _faces_adjacent_to_faces;
33
34public:
35 // override pure virtual methods
36 virtual void switchNode(EFANode * new_node, EFANode * old_node);
37 virtual bool containsNode(EFANode * node) const;
38 virtual unsigned int getNumCuts() const;
39 virtual unsigned int getNumCutNodes() const;
40 virtual std::set<EFANode *> getAllNodes() const;
41 virtual bool isConnected(EFAFragment * other_fragment) const;
42 virtual bool isEdgeConnected(EFAFragment * other_fragment) const;
43 virtual void removeInvalidEmbeddedNodes(std::map<unsigned int, EFANode *> & EmbeddedNodes);
44
45 // EFAfragment3D specific methods
46 void combine_tip_faces();
47 bool isFaceInterior(unsigned int face_id) const;
48 std::vector<unsigned int> get_interior_face_id() const;
49 bool isThirdInteriorFace(unsigned int face_id) const;
50 unsigned int numFaces() const;
51 EFAFace * getFace(unsigned int face_id) const;
52 unsigned int getFaceID(EFAFace * face) const;
53 void addFace(EFAFace * new_face);
54 std::set<EFANode *> getFaceNodes(unsigned int face_id) const;
56 std::vector<EFAFragment3D *> split();
58 EFAFace * getAdjacentFace(unsigned int face_id, unsigned int edge_id) const;
59 void removeEmbeddedNode(EFANode * emb_node);
60 bool hasFaceWithOneCut() const;
61 void getNodeInfo(std::vector<std::vector<unsigned int>> & face_node_indices,
62 std::vector<EFANode *> & nodes) const;
63
64private:
66 unsigned int startOldFaceID,
67 std::vector<std::vector<EFAFace *>> & subfaces);
68 EFAEdge * loneEdgeOnFace(unsigned int face_id) const;
69 void combine_two_faces(unsigned int face_id1, unsigned int face_id2, const EFAFace * elem_face);
70};
virtual void removeInvalidEmbeddedNodes(std::map< unsigned int, EFANode * > &EmbeddedNodes)
std::vector< EFAFace * > _faces
virtual unsigned int getNumCuts() const
bool isFaceInterior(unsigned int face_id) const
virtual bool containsNode(EFANode *node) const
EFAEdge * loneEdgeOnFace(unsigned int face_id) const
unsigned int numFaces() const
void getNodeInfo(std::vector< std::vector< unsigned int > > &face_node_indices, std::vector< EFANode * > &nodes) const
virtual std::set< EFANode * > getAllNodes() const
EFAElement3D * getHostElement() const
void addFace(EFAFace *new_face)
bool hasFaceWithOneCut() const
void combine_two_faces(unsigned int face_id1, unsigned int face_id2, const EFAFace *elem_face)
EFAElement3D * _host_elem
bool isThirdInteriorFace(unsigned int face_id) const
unsigned int getFaceID(EFAFace *face) const
void removeEmbeddedNode(EFANode *emb_node)
EFAFragment3D * connectSubfaces(EFAFace *start_face, unsigned int startOldFaceID, std::vector< std::vector< EFAFace * > > &subfaces)
virtual void switchNode(EFANode *new_node, EFANode *old_node)
std::vector< std::vector< EFAFace * > > _faces_adjacent_to_faces
EFAFace * getFace(unsigned int face_id) const
virtual bool isConnected(EFAFragment *other_fragment) const
virtual unsigned int getNumCutNodes() const
EFAFace * getAdjacentFace(unsigned int face_id, unsigned int edge_id) const
void findFacesAdjacentToFaces()
std::vector< unsigned int > get_interior_face_id() const
std::set< EFANode * > getFaceNodes(unsigned int face_id) const
std::vector< EFAFragment3D * > split()
void combine_tip_faces()
virtual bool isEdgeConnected(EFAFragment *other_fragment) const