KratosMultiphysics
KRATOS Multiphysics (Kratos) is a framework for building parallel, multi-disciplinary simulation software, aiming at modularity, extensibility, and high performance. Kratos is written in C++, and counts with an extensive Python interface.
divide_tetrahedra_3d_4.h
Go to the documentation of this file.
1 // | / |
2 // ' / __| _` | __| _ \ __|
3 // . \ | ( | | ( |\__ `
4 // _|\_\_| \__,_|\__|\___/ ____/
5 // Multi-Physics
6 //
7 // License: BSD License
8 // Kratos default license: kratos/license.txt
9 //
10 // Main authors: Ruben Zorrilla
11 //
12 
13 #if !defined(KRATOS_DIVIDE_TETRAHEDRA_3D_4_UTILS)
14 #define KRATOS_DIVIDE_TETRAHEDRA_3D_4_UTILS
15 
16 // System includes
17 #include <bitset>
18 
19 // External includes
20 
21 // Project includes
22 
26 
27 namespace Kratos
28 {
31 
35 
39 
43 template<class TPointType>
44 class KRATOS_API(KRATOS_CORE) DivideTetrahedra3D4 : public DivideGeometry<TPointType>
45 {
46 public:
49 
59 
62 
63  const std::vector<int> mEdgeNodeI = {0, 0, 0, 1, 1, 2};
64  const std::vector<int> mEdgeNodeJ = {1, 2, 3, 2, 3, 3};
65  std::vector<int> mSplitEdges = {0, 1, 2, 3, -1, -1, -1, -1, -1, -1, -1};
66 
70 
72  DivideTetrahedra3D4(const GeometryType& rInputGeometry, const Vector& rNodalDistances);
73 
76 
80 
84 
88 
90  std::string Info() const override;
91 
93  void PrintInfo(std::ostream& rOStream) const override;
94 
96  void PrintData(std::ostream& rOStream) const override;
97 
101 
105 
109  const std::vector<int>& GetEdgeIdsI() const override;
110 
114  const std::vector<int>& GetEdgeIdsJ() const override;
115 
119  std::vector<int>& GetSplitEdges() override;
120 
124  void GenerateDivision() override;
125 
129  void GenerateIntersectionsSkin() override;
130 
137  void GenerateExteriorFaces(
138  std::vector < IndexedPointGeometryPointerType > &rExteriorFacesVector,
139  std::vector < unsigned int > &rExteriorFacesParentSubdivisionsIdsVector,
140  const std::vector < IndexedPointGeometryPointerType > &rSubdivisionsContainer) override;
141 
150  void GenerateExteriorFaces(
151  std::vector < IndexedPointGeometryPointerType > &rExteriorFacesVector,
152  std::vector < unsigned int > &rExteriorFacesParentSubdivisionsIdsVector,
153  const std::vector < IndexedPointGeometryPointerType > &rSubdivisionsContainer,
154  const unsigned int FatherFaceId) override;
155 
157 
158 private:
161 
165 
166  std::bitset<4> mNodeIsCut{0x0};
167 
171 
175 
179 
183 
187 
188  bool NodeIsInterface(int NodeKey) const;
189 
193 
195  DivideTetrahedra3D4& operator=(DivideTetrahedra3D4 const& rOther);
196 
198  DivideTetrahedra3D4(DivideTetrahedra3D4 const& rOther)
199  : DivideGeometry<TPointType>(rOther.GetInputGeometry(), rOther.GetNodalDistances()) {};
200 
202 
203 };// class DivideTetrahedra3D4
204 
205 }
206 #endif /* KRATOS_DIVIDE_TETRAHEDRA_3D_4_UTILS defined */
PeriodicInterfaceProcess & operator=(const PeriodicInterfaceProcess &)=delete
std::string Info() const override
Turn back information as a string.
Definition: periodic_interface_process.hpp:93
Definition: divide_geometry.h:167
IndexedPoint::Pointer IndexedPointPointerType
Definition: divide_geometry.h:179
Geometry< IndexedPoint >::Pointer IndexedPointGeometryPointerType
Definition: divide_geometry.h:181
Definition: divide_tetrahedra_3d_4.h:45
Triangle3D3< IndexedPointType > IndexedPointTriangleType
Definition: divide_tetrahedra_3d_4.h:57
DivideGeometry< TPointType > BaseType
Definition: divide_tetrahedra_3d_4.h:50
BaseType::IndexedPointGeometryPointerType IndexedPointGeometryPointerType
Definition: divide_tetrahedra_3d_4.h:55
BaseType::IndexedPointPointerType IndexedPointPointerType
Definition: divide_tetrahedra_3d_4.h:53
Tetrahedra3D4< IndexedPointType > IndexedPointTetrahedraType
Definition: divide_tetrahedra_3d_4.h:58
KRATOS_CLASS_POINTER_DEFINITION(DivideTetrahedra3D4)
Pointer definition of DivideTetrahedra3D4.
BaseType::IndexedPointType IndexedPointType
Definition: divide_tetrahedra_3d_4.h:52
BaseType::IndexedPointGeometryType IndexedPointGeometryType
Definition: divide_tetrahedra_3d_4.h:54
BaseType::IndexedPointGeometryType::GeometriesArrayType IndexedGeometriesArrayType
Definition: divide_tetrahedra_3d_4.h:56
BaseType::GeometryType GeometryType
Definition: divide_tetrahedra_3d_4.h:51
Geometry base class.
Definition: geometry.h:71
Definition: divide_geometry.h:46
A four node tetrahedra geometry with linear shape functions.
Definition: tetrahedra_3d_4.h:59
A three node 3D triangle geometry with linear shape functions.
Definition: triangle_3d_3.h:77
typename GeometryType::GeometriesArrayType GeometriesArrayType
Definition: add_geometries_to_python.cpp:62
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21