BELFEM
0.9.0
Berkeley Lab Finite Element Framework
Toggle main menu visibility
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
"
17
namespace
belfem
18
{
19
// can change the order of a mesh, eg create
20
// second order form a linear mesh
21
class
OrderConverter
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
40
Map< index_t, index_t >
mEdgeMap;
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
188
ElementType
189
upgrade_type(
const
ElementType
& aType );
190
191
//------------------------------------------------------------------------------
192
};
193
}
194
#endif
//BELFEM_CL_MESH_ORDERCONVERTER_HPP
cl_Matrix.hpp
cl_Mesh.hpp
belfem::Cell
Cell is a wrapper around the standard vector.
Definition
cl_Cell.hpp:42
belfem::Map< index_t, index_t >
belfem::Matrix< index_t >
belfem::Mesh
Top-level container for all mesh entities.
Definition
cl_Mesh.hpp:60
belfem::OrderConverter::OrderConverter
OrderConverter(Mesh *aInMesh, Mesh *aOutMesh=nullptr)
Definition
cl_Mesh_OrderConverter.cpp:23
belfem::OrderConverter::~OrderConverter
~OrderConverter()=default
belfem::Vector< uint >
belfem
USER GUIDES:
Definition
cl_Capacitor.cpp:16
belfem::uint
unsigned int uint
Definition
typedefs.hpp:30
belfem::id_t
unsigned int id_t
Definition
typedefs.hpp:41
belfem::ElementType
ElementType
Element types.
Definition
Mesh_Enums.hpp:27
mesh.Element
Definition
Element.py:1
mesh
Definition
__init__.py:1
src
mesh
cl_Mesh_OrderConverter.hpp
Generated by
1.18.0