BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
cl_Element_TET4.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_TET4_HPP
13#define BELFEM_CL_ELEMENT_TET4_HPP
14
15#include "typedefs.hpp"
16#include "Mesh_Enums.hpp"
18
19namespace belfem
20{
21 namespace mesh
22 {
23//------------------------------------------------------------------------------
24
25 template <>
31
32//------------------------------------------------------------------------------
33
34 template <>
35 uint
37 {
38 return 3 ;
39 }
40
41//------------------------------------------------------------------------------
42
43 template <>
44 void
46 {
47 // allocate the node container
48 aNodes.set_size( 3, nullptr );
49
50 switch( aFacetIndex )
51 {
52 case( 0 ):
53 {
54 aNodes( 0 ) = mNodes[ 0 ];
55 aNodes( 1 ) = mNodes[ 1 ];
56 aNodes( 2 ) = mNodes[ 3 ];
57 break;
58 }
59 case( 1 ):
60 {
61 aNodes( 0 ) = mNodes[ 1 ];
62 aNodes( 1 ) = mNodes[ 2 ];
63 aNodes( 2 ) = mNodes[ 3 ];
64 break;
65 }
66 case( 2 ):
67 {
68 aNodes( 0 ) = mNodes[ 0 ];
69 aNodes( 1 ) = mNodes[ 3 ];
70 aNodes( 2 ) = mNodes[ 2 ];
71 break;
72 }
73 case( 3 ):
74 {
75 aNodes( 0 ) = mNodes[ 0 ];
76 aNodes( 1 ) = mNodes[ 2 ];
77 aNodes( 2 ) = mNodes[ 1 ];
78 break;
79 }
80 default:
81 {
82 this->throw_facet_error( aFacetIndex );
83 }
84 }
85 }
86
87//------------------------------------------------------------------------------
88
89 template <>
90 void
92 {
93 this->get_nodes_of_facet( aFacetIndex, aNodes );
94 }
95
96//------------------------------------------------------------------------------
97
98 template <>
99 void
101 {
102 // allocate the node container
103 aNodes.set_size( 2, nullptr );
104
105 switch ( aEdgeIndex )
106 {
107 case ( 0 ):
108 {
109 aNodes( 0 ) = mNodes[ 0 ];
110 aNodes( 1 ) = mNodes[ 1 ];
111 break;
112 }
113 case ( 1 ):
114 {
115 aNodes( 0 ) = mNodes[ 1 ];
116 aNodes( 1 ) = mNodes[ 2 ];
117 break;
118 }
119 case ( 2 ):
120 {
121 aNodes( 0 ) = mNodes[ 2 ];
122 aNodes( 1 ) = mNodes[ 0 ];
123 break;
124 }
125 case ( 3 ):
126 {
127 aNodes( 0 ) = mNodes[ 0 ];
128 aNodes( 1 ) = mNodes[ 3 ];
129 break;
130 }
131 case ( 4 ):
132 {
133 aNodes( 0 ) = mNodes[ 1 ];
134 aNodes( 1 ) = mNodes[ 3 ];
135 break;
136 }
137 case ( 5 ):
138 {
139 aNodes( 0 ) = mNodes[ 2 ];
140 aNodes( 1 ) = mNodes[ 3 ];
141 break;
142 }
143 default:
144 {
145 this->throw_edge_error( aEdgeIndex );
146 }
147 }
148 }
149
150//------------------------------------------------------------------------------
151
152 template <>
153 void
155 const uint aFacetIndex, Cell< Edge * > & aEdges )
156 {
157 // allocate the node container
158 aEdges.set_size( 3, nullptr );
159
160 switch( aFacetIndex )
161 {
162 case( 0 ):
163 {
164 aEdges( 0 ) = mEdges[ 0 ];
165 aEdges( 1 ) = mEdges[ 4 ];
166 aEdges( 2 ) = mEdges[ 3 ];
167 break;
168 }
169 case( 1 ):
170 {
171 aEdges( 0 ) = mEdges[ 1 ];
172 aEdges( 1 ) = mEdges[ 5 ];
173 aEdges( 2 ) = mEdges[ 4 ];
174 break;
175 }
176 case( 2 ):
177 {
178 aEdges( 0 ) = mEdges[ 3 ];
179 aEdges( 1 ) = mEdges[ 5 ];
180 aEdges( 2 ) = mEdges[ 2 ];
181 break;
182 }
183 case( 3 ):
184 {
185 aEdges( 0 ) = mEdges[ 2 ];
186 aEdges( 1 ) = mEdges[ 1 ];
187 aEdges( 2 ) = mEdges[ 0 ];
188 break;
189 }
190 default:
191 {
192 this->throw_facet_error( aFacetIndex );
193 }
194 }
195 }
196
197//------------------------------------------------------------------------------
198 } /* namespace mesh */
199} /* namespace belfem */
200#endif //BELFEM_CL_ELEMENT_TET4_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
@ TET4
Definition Mesh_Enums.hpp:32