BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
cl_Element_QUAD9TS.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 CL_ELEMENT_QUAD9TS_HPP
13#define CL_ELEMENT_QUAD9TS_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 2 ;
39 }
40
41//------------------------------------------------------------------------------
42
43 template <>
44 bool
46 {
47 return true ;
48 }
49
50
51//------------------------------------------------------------------------------
52
53 template <>
54 void
56 {
57 // allocate the node container
58 aNodes.set_size( 3, nullptr );
59
60 switch( aFacetIndex )
61 {
62 case 0 :
63 {
64 aNodes( 0 ) = mNodes[ 0 ];
65 aNodes( 1 ) = mNodes[ 1 ];
66 aNodes( 2 ) = mNodes[ 4 ];
67 break;
68 }
69 case 1 :
70 {
71 aNodes( 0 ) = mNodes[ 1 ];
72 aNodes( 1 ) = mNodes[ 2 ];
73 aNodes( 2 ) = mNodes[ 5 ];
74 break;
75 }
76 case 2 :
77 {
78 aNodes( 0 ) = mNodes[ 2 ];
79 aNodes( 1 ) = mNodes[ 3 ];
80 aNodes( 2 ) = mNodes[ 6 ];
81 break;
82 }
83 case 3 :
84 {
85 aNodes( 0 ) = mNodes[ 3 ];
86 aNodes( 1 ) = mNodes[ 0 ];
87 aNodes( 2 ) = mNodes[ 7 ];
88 break;
89 }
90 default:
91 {
92 this->throw_facet_error( aFacetIndex );
93 }
94 }
95 }
96
97//------------------------------------------------------------------------------
98
99 template <>
100 void
102 {
103 // allocate the node container
104 aNodes.set_size( 2, nullptr );
105
106 switch( aFacetIndex )
107 {
108 case 0 :
109 {
110 aNodes( 0 ) = mNodes[ 0 ];
111 aNodes( 1 ) = mNodes[ 1 ];
112 break;
113 }
114 case 1 :
115 {
116 aNodes( 0 ) = mNodes[ 1 ];
117 aNodes( 1 ) = mNodes[ 2 ];
118 break;
119 }
120 case 2 :
121 {
122 aNodes( 0 ) = mNodes[ 2 ];
123 aNodes( 1 ) = mNodes[ 3 ];
124 break;
125 }
126 case 3 :
127 {
128 aNodes( 0 ) = mNodes[ 3 ];
129 aNodes( 1 ) = mNodes[ 0 ];
130 break;
131 }
132 default:
133 {
134 this->throw_facet_error( aFacetIndex );
135 }
136 }
137 }
138
139//------------------------------------------------------------------------------
140
141 template <>
142 void
144 const uint aFacetIndex, Cell< Edge * > & aEdges )
145 {
146 switch( aFacetIndex )
147 {
148 case 0 :
149 {
150 // bottom facet uses the bottom curve edge (mEdges[0])
151 aEdges.set_size( 1, nullptr );
152 aEdges( 0 ) = mEdges[ 0 ];
153 break ;
154 }
155 case 2 :
156 {
157 // top facet uses the top curve edge (mEdges[1]).
158 // mEdges[1] is stored with tangent parallel to mEdges[0];
159 // fem::Element::compute_edge_directions resolves the local sign.
160 aEdges.set_size( 1, nullptr );
161 aEdges( 0 ) = mEdges[ 1 ];
162 break ;
163 }
164 // Side facets 1 and 3 have no Nédélec edge in the thin-shell
165 // reduction (mEdges[2] is the center/mid curve, not a side).
166 default:
167 {
168 this->throw_facet_error( aFacetIndex );
169 }
170 }
171 }
172
173//------------------------------------------------------------------------------
174 } /* namespace mesh */
175} /* namespace belfem */
176
177#endif //CL_ELEMENT_QUAD9TS_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_facet(const uint aFacetIndex, Cell< Node * > &aNodes) override
Definition cl_ElementTemplate.hpp:896
bool is_thinshell() const override
Definition cl_ElementTemplate.hpp:1018
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
@ QUAD9TS
Definition Mesh_Enums.hpp:59