Skip to content

Commit 3e2871c

Browse files
committed
Add Elem::n_nodes_on_side
1 parent c6e905f commit 3e2871c

35 files changed

Lines changed: 211 additions & 2 deletions

include/geom/cell_hex20.h

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

241241
ElemType side_type (const unsigned int s) const override final;
242242

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

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

250-
251-
252256
#ifdef LIBMESH_ENABLE_AMR
253257

254258
/**

include/geom/cell_hex27.h

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

259259
ElemType side_type (const unsigned int s) const override final;
260260

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

263269

include/geom/cell_hex8.h

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

216216
ElemType side_type (const unsigned int s) const override final;
217217

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

220226
/**

include/geom/cell_inf_hex.h

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

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

205218
/**

include/geom/cell_inf_hex16.h

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

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

241+
virtual unsigned int n_nodes_on_side(const unsigned short s) const override final
242+
{ return this->_n_nodes_on_side<InfHex16, 2>(s); }
243+
241244
protected:
242245

243246
/**

include/geom/cell_inf_hex18.h

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

254254
ElemType side_type (const unsigned int s) const override final;
255255

256+
virtual unsigned int n_nodes_on_side(const unsigned short s) const override final
257+
{ return this->_n_nodes_on_side<InfHex18, 3>(s); }
258+
256259
protected:
257260

258261
/**

include/geom/cell_inf_hex8.h

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

189189
ElemType side_type (const unsigned int s) const override final;
190190

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

193199
/**

include/geom/cell_inf_prism12.h

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

227227
ElemType side_type (const unsigned int s) const override final;
228228

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

231237
/**

include/geom/cell_inf_prism6.h

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

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

190+
virtual unsigned int n_nodes_on_side(const unsigned short s) const override final
191+
{ return this->_n_nodes_on_side_constant<InfPrism6>(s) - ((s == 0) ? 1 : 0); }
192+
190193
protected:
191194

192195
/**

include/geom/cell_prism.h

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

164164
protected:
165165

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

0 commit comments

Comments
 (0)