BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
cl_Element_PYRA5.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_ELEMENT_PYRA5_HPP
13#define BELFEM_CL_ELEMENT_PYRA5_HPP
14#include "typedefs.hpp"
15#include "Mesh_Enums.hpp"
17
18namespace belfem
19{
20 namespace mesh
21 {
22//------------------------------------------------------------------------------
23
24 template <>
30
31//------------------------------------------------------------------------------
32
33 template <>
34 uint
36 {
37 return 3 ;
38 }
39
40//------------------------------------------------------------------------------
41
42 template <>
43 void
45 {
46 switch( aFacetIndex )
47 {
48 case( 0 ):
49 {
50 aNodes.set_size( 3, nullptr );
51 aNodes( 0 ) = mNodes[ 0 ];
52 aNodes( 1 ) = mNodes[ 1 ];
53 aNodes( 2 ) = mNodes[ 4 ];
54 break;
55 }
56 case( 1 ):
57 {
58 aNodes.set_size( 3, nullptr );
59 aNodes( 0 ) = mNodes[ 1 ];
60 aNodes( 1 ) = mNodes[ 2 ];
61 aNodes( 2 ) = mNodes[ 4 ];
62 break;
63 }
64 case( 2 ):
65 {
66 aNodes.set_size( 3, nullptr );
67 aNodes( 0 ) = mNodes[ 2 ];
68 aNodes( 1 ) = mNodes[ 3 ];
69 aNodes( 2 ) = mNodes[ 4 ];
70 break;
71 }
72 case( 3 ):
73 {
74 aNodes.set_size( 3, nullptr );
75 aNodes( 0 ) = mNodes[ 3 ];
76 aNodes( 1 ) = mNodes[ 0 ];
77 aNodes( 2 ) = mNodes[ 4 ];
78 break;
79 }
80 case( 4 ):
81 {
82 aNodes.set_size( 4, nullptr );
83 aNodes( 0 ) = mNodes[ 0 ];
84 aNodes( 1 ) = mNodes[ 3 ];
85 aNodes( 2 ) = mNodes[ 2 ];
86 aNodes( 3 ) = mNodes[ 1 ];
87 break;
88 }
89 default:
90 {
91 this->throw_facet_error( aFacetIndex );
92 }
93 }
94 }
95
96//------------------------------------------------------------------------------
97
98 template <>
99 void
101 {
102 this->get_nodes_of_facet( aFacetIndex, aNodes );
103 }
104
105//------------------------------------------------------------------------------
106
107 template <>
108 void
110 {
111 // allocate the node container
112 aNodes.set_size( 2, nullptr );
113
114 switch ( aEdgeIndex )
115 {
116 case ( 0 ):
117 {
118 aNodes( 0 ) = mNodes[ 0 ];
119 aNodes( 1 ) = mNodes[ 1 ];
120 break;
121 }
122 case ( 1 ):
123 {
124 aNodes( 0 ) = mNodes[ 1 ];
125 aNodes( 1 ) = mNodes[ 2 ];
126 break;
127 }
128 case ( 2 ):
129 {
130 aNodes( 0 ) = mNodes[ 2 ];
131 aNodes( 1 ) = mNodes[ 3 ];
132 break;
133 }
134 case ( 3 ):
135 {
136 aNodes( 0 ) = mNodes[ 3 ];
137 aNodes( 1 ) = mNodes[ 0 ];
138 break;
139 }
140 case ( 4 ):
141 {
142 aNodes( 0 ) = mNodes[ 0 ];
143 aNodes( 1 ) = mNodes[ 4 ];
144 break;
145 }
146 case ( 5 ):
147 {
148 aNodes( 0 ) = mNodes[ 1 ];
149 aNodes( 1 ) = mNodes[ 4 ];
150 break;
151 }
152 case ( 6 ):
153 {
154 aNodes( 0 ) = mNodes[ 2 ];
155 aNodes( 1 ) = mNodes[ 4 ];
156 break;
157 }
158 case ( 7 ):
159 {
160 aNodes( 0 ) = mNodes[ 3 ];
161 aNodes( 1 ) = mNodes[ 4 ];
162 break;
163 }
164 default:
165 {
166 this->throw_edge_error( aEdgeIndex );
167 }
168 }
169 }
170
171//------------------------------------------------------------------------------
172
173 template <>
174 void
176 const uint aFacetIndex, Cell< Edge * > & aEdges )
177 {
178 switch( aFacetIndex )
179 {
180 case( 0 ):
181 {
182 aEdges.set_size( 3, nullptr );
183 aEdges( 0 ) = mEdges[ 0 ];
184 aEdges( 1 ) = mEdges[ 5 ];
185 aEdges( 2 ) = mEdges[ 4 ];
186 break;
187 }
188 case( 1 ):
189 {
190 aEdges.set_size( 3, nullptr );
191 aEdges( 0 ) = mEdges[ 1 ];
192 aEdges( 1 ) = mEdges[ 6 ];
193 aEdges( 2 ) = mEdges[ 5 ];
194 break;
195 }
196 case( 2 ):
197 {
198 aEdges.set_size( 3, nullptr );
199 aEdges( 0 ) = mEdges[ 3 ];
200 aEdges( 1 ) = mEdges[ 7 ];
201 aEdges( 2 ) = mEdges[ 6 ];
202 break;
203 }
204 case( 3 ):
205 {
206 aEdges.set_size( 3, nullptr );
207 aEdges( 0 ) = mEdges[ 3 ];
208 aEdges( 1 ) = mEdges[ 4 ];
209 aEdges( 2 ) = mEdges[ 7 ];
210 break;
211 }
212 case( 4 ):
213 {
214 aEdges.set_size( 4, nullptr );
215 aEdges( 0 ) = mEdges[ 3 ];
216 aEdges( 1 ) = mEdges[ 2 ];
217 aEdges( 2 ) = mEdges[ 1 ];
218 aEdges( 3 ) = mEdges[ 0 ];
219 break;
220 }
221 default:
222 {
223 this->throw_facet_error( aFacetIndex );
224 }
225 }
226 }
227
228//------------------------------------------------------------------------------
229 } /* namespace mesh */
230} /* namespace belfem */
231#endif //BELFEM_CL_ELEMENT_PYRA5_HPP
Cell is a wrapper around the standard vector.
Definition cl_Cell.hpp:42
void set_size(const size_t aSize)
Definition cl_Cell.hpp:189
void get_nodes_of_edge(const uint aEdgeIndex, Cell< Node * > &aNodes) override
Definition cl_ElementTemplate.hpp:930
void get_nodes_of_facet(const uint aFacetIndex, Cell< Node * > &aNodes) override
Definition cl_ElementTemplate.hpp:896
void get_corner_nodes_of_facet(const uint aFacetIndex, Cell< Node * > &aNodes) override
Definition cl_ElementTemplate.hpp:907
uint dimension() const override
Definition cl_ElementTemplate.hpp:978
ElementType type() const override
return the type of the element
Definition cl_ElementTemplate.hpp:470
void get_edges_of_facet(const uint aFacetIndex, Cell< Edge * > &aEdges) override
Definition cl_ElementTemplate.hpp:918
Definition cl_EF_EdgeFunction.hpp:17
USER GUIDES:
Definition cl_Capacitor.cpp:16
unsigned int uint
Definition typedefs.hpp:30
ElementType
Element types.
Definition Mesh_Enums.hpp:27
@ PYRA5
Definition Mesh_Enums.hpp:35