Skip to content

Commit 0936e36

Browse files
committed
Add Elem::n_nodes_on_side
1 parent 0786c9f commit 0936e36

35 files changed

+211
-2
lines changed

include/geom/cell_hex20.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,15 +238,19 @@ class Hex20 final : public Hex
238238

239239
ElemType side_type (const unsigned int s) const override final;
240240

241+
/**
242+
* \returns 8. Every side has eight nodes.
243+
*/
244+
virtual unsigned int n_nodes_on_side(const unsigned short s) const override final
245+
{ return this->_n_nodes_on_side_constant<Hex20>(s); }
246+
241247
protected:
242248

243249
/**
244250
* Data for links to nodes.
245251
*/
246252
Node * _nodelinks_data[num_nodes];
247253

248-
249-
250254
#ifdef LIBMESH_ENABLE_AMR
251255

252256
/**

include/geom/cell_hex27.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,12 @@ class Hex27 final : public Hex
256256

257257
ElemType side_type (const unsigned int s) const override final;
258258

259+
/**
260+
* \returns 9. Every side has eight nodes.
261+
*/
262+
virtual unsigned int n_nodes_on_side(const unsigned short s) const override final
263+
{ return this->_n_nodes_on_side_constant<Hex27>(s); }
264+
259265
protected:
260266

261267

include/geom/cell_hex8.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,12 @@ class Hex8 final : public Hex
213213

214214
ElemType side_type (const unsigned int s) const override final;
215215

216+
/**
217+
* \returns 4. Every side has four nodes.
218+
*/
219+
virtual unsigned int n_nodes_on_side(const unsigned short s) const override final
220+
{ return this->_n_nodes_on_side_constant<Hex8>(s); }
221+
216222
protected:
217223

218224
/**

include/geom/cell_inf_hex.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,19 @@ class InfHex : public InfCell
198198
*/
199199
static const unsigned int edge_sides_map[8][2];
200200

201+
/**
202+
* Helper for n_nodes_on_side() for InfHex-derived classes.
203+
*
204+
* That is, returns InfHex::nodes_per_side - \p remove_num
205+
* for sides 1-4, and InfHex::nodes_per_side for side 0.
206+
*/
207+
template <class InfHexClass, unsigned short remove_num>
208+
unsigned int _n_nodes_on_side(const unsigned short s) const
209+
{
210+
static_assert(std::is_base_of<InfHex, InfHexClass>::value, "Not a InfHex");
211+
return this->_n_nodes_on_side_constant<InfHexClass>(s) - ((s == 0) ? 0 : remove_num);
212+
}
213+
201214
protected:
202215

203216
/**

include/geom/cell_inf_hex16.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,9 @@ class InfHex16 final : public InfHex
236236

237237
ElemType side_type (const unsigned int s) const override final;
238238

239+
virtual unsigned int n_nodes_on_side(const unsigned short s) const override final
240+
{ return this->_n_nodes_on_side<InfHex16, 2>(s); }
241+
239242
protected:
240243

241244
/**

include/geom/cell_inf_hex18.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,9 @@ class InfHex18 final : public InfHex
251251

252252
ElemType side_type (const unsigned int s) const override final;
253253

254+
virtual unsigned int n_nodes_on_side(const unsigned short s) const override final
255+
{ return this->_n_nodes_on_side<InfHex18, 3>(s); }
256+
254257
protected:
255258

256259
/**

include/geom/cell_inf_hex8.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,12 @@ class InfHex8 final : public InfHex
186186

187187
ElemType side_type (const unsigned int s) const override final;
188188

189+
/**
190+
* \returns 4. Every side has four nodes.
191+
*/
192+
virtual unsigned int n_nodes_on_side(const unsigned short s) const override final
193+
{ return this->_n_nodes_on_side_constant<InfHex8>(s); }
194+
189195
protected:
190196

191197
/**

include/geom/cell_inf_prism12.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,12 @@ class InfPrism12 final : public InfPrism
224224

225225
ElemType side_type (const unsigned int s) const override final;
226226

227+
/**
228+
* \returns 6. Every side has six nodes.
229+
*/
230+
virtual unsigned int n_nodes_on_side(const unsigned short s) const override final
231+
{ return this->_n_nodes_on_side_constant<InfPrism12>(s); }
232+
227233
protected:
228234

229235
/**

include/geom/cell_inf_prism6.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,9 @@ class InfPrism6 final : public InfPrism
185185

186186
ElemType side_type (const unsigned int s) const override final;
187187

188+
virtual unsigned int n_nodes_on_side(const unsigned short s) const override final
189+
{ return this->_n_nodes_on_side_constant<InfPrism6>(s) - ((s == 0) ? 1 : 0); }
190+
188191
protected:
189192

190193
/**

include/geom/cell_prism.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,19 @@ class Prism : public Cell
161161

162162
protected:
163163

164+
/**
165+
* Helper for n_nodes_on_side() for Prism-derived classes.
166+
*
167+
* That is, returns \p PrismClass::nodes_per_side for sides 1-3, and
168+
* the same value minus \p remove_num for sides 0 and 4.
169+
*/
170+
template <class PrismClass, unsigned short remove_num>
171+
unsigned int _n_nodes_on_side(const unsigned short s) const
172+
{
173+
static_assert(std::is_base_of<Prism, PrismClass>::value, "Not a Prism");
174+
return this->_n_nodes_on_side_constant<PrismClass>(s) - ((s == 0 || s == 4) ? remove_num : 0);
175+
}
176+
164177
/**
165178
* Data for links to parent/neighbor/interior_parent elements.
166179
*/

0 commit comments

Comments
 (0)