BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
cl_Mesh_OrderConverter.hpp
Go to the documentation of this file.
1/*
2 * BELFEM -- The Berkeley Lab Finite Element Framework
3 * Copyright (c) 2026, The Regents of the University of California,
4 * through Lawrence Berkeley National Laboratory (subject to receipt of any required
5 * approvals from the U.S. Dept. of Energy). All rights reserved.
6 *
7 * Developers: Christian Messe, Gregory Giard
8 *
9 * See the top-level LICENSE file for the complete license and disclaimer.
10 */
11
12#ifndef BELFEM_CL_MESH_ORDERCONVERTER_HPP
13#define BELFEM_CL_MESH_ORDERCONVERTER_HPP
14
15#include "cl_Mesh.hpp"
16#include "cl_Matrix.hpp"
17namespace belfem
18{
19 // can change the order of a mesh, eg create
20 // second order form a linear mesh
22 {
23 Mesh * mInMesh;
24 Mesh * mMesh = nullptr;
25
26 // 0: Master index
27 // 1: Slave index
28 // 2: Facet index on master
29 // 3: Facet index on slave
30 Matrix< index_t > mSharedFacetTable;
31
32 // 0: Master index
33 // 1: Facet index on master
34 Matrix< index_t > mUniqueFacetTable;
35
36 // contains indices of first and second node
37 Matrix< index_t > mEdges;
38
39 // maps the packed node-index pair of an edge to its column in mEdges
41
42 Cell< mesh::Node * > mOriginalNodes;
43 Cell< mesh::Node * > mEdgeNodes;
44 Cell< mesh::Node * > mFacetNodes;
45 Cell< mesh::Node * > mCenterNodes;
46
47 Matrix< index_t > mFacesPerElement;
48
49 id_t mNodeID;
50
51//------------------------------------------------------------------------------
52 public:
53//------------------------------------------------------------------------------
54
55 OrderConverter( Mesh * aInMesh, Mesh * aOutMesh = nullptr );
56
57//------------------------------------------------------------------------------
58
59 ~OrderConverter() = default;
60
61//------------------------------------------------------------------------------
62
63 Mesh *
64 mesh();
65
66//------------------------------------------------------------------------------
67 private:
68//------------------------------------------------------------------------------
69
70 bool
71 check_input_mesh();
72
73//------------------------------------------------------------------------------
74
75 void
76 create_shared_facets();
77
78//------------------------------------------------------------------------------
79
80 void
81 create_unique_facets();
82
83//------------------------------------------------------------------------------
84
85 uint
86 count_common_nodes( mesh::Element * aElementA, mesh::Element * aElementB );
87
88//------------------------------------------------------------------------------
89
90 void
91 get_facet_nodes(
92 mesh::Element * aElementA,
93 mesh::Element * aElementB,
94 Cell< mesh::Node * > & aNodes );
95
96//------------------------------------------------------------------------------
97
98 uint
99 get_facet_index( mesh::Element * aElement, Cell< mesh::Node * > & aNodes );
100
101//------------------------------------------------------------------------------
102
103 void
104 create_edges();
105
106//------------------------------------------------------------------------------
107
108 void
109 get_max_node_id();
110
111//------------------------------------------------------------------------------
112
113 void
114 copy_nodes();
115
116//------------------------------------------------------------------------------
117
118 void
119 create_edge_nodes();
120
121//------------------------------------------------------------------------------
122
123 void
124 create_facet_nodes_2d();
125
126//------------------------------------------------------------------------------
127
128 void
129 create_facet_nodes_3d();
130
131//------------------------------------------------------------------------------
132
133 void
134 create_center_nodes_2d();
135
136//------------------------------------------------------------------------------
137
138 void
139 create_center_nodes_3d();
140
141//------------------------------------------------------------------------------
142
143 void
144 create_nodes();
145
146//------------------------------------------------------------------------------
147
148 void
149 create_elements();
150
151//------------------------------------------------------------------------------
152
153 void
154 link_edge_nodes();
155
156//------------------------------------------------------------------------------
157
158 void
159 link_facet_nodes();
160
161//------------------------------------------------------------------------------
162
163 void
164 link_center_nodes_2d();
165
166//------------------------------------------------------------------------------
167
168 void
169 link_center_nodes_3d();
170
171//------------------------------------------------------------------------------
172
173 void
174 facet_table( const ElementType & aType, Vector< uint > & aTable );
175
176//------------------------------------------------------------------------------
177
178 void
179 create_blocks();
180
181//------------------------------------------------------------------------------
182
183 void
184 create_sidesets();
185
186//------------------------------------------------------------------------------
187
189 upgrade_type( const ElementType & aType );
190
191//------------------------------------------------------------------------------
192 };
193}
194#endif //BELFEM_CL_MESH_ORDERCONVERTER_HPP
Cell is a wrapper around the standard vector.
Definition cl_Cell.hpp:42
Top-level container for all mesh entities.
Definition cl_Mesh.hpp:60
OrderConverter(Mesh *aInMesh, Mesh *aOutMesh=nullptr)
Definition cl_Mesh_OrderConverter.cpp:23
USER GUIDES:
Definition cl_Capacitor.cpp:16
unsigned int uint
Definition typedefs.hpp:30
unsigned int id_t
Definition typedefs.hpp:41
ElementType
Element types.
Definition Mesh_Enums.hpp:27
Definition Element.py:1
Definition __init__.py:1