gmsh-TingyuanDoc  0.1
An Open-Source Timing-driven Analytical Mixed-size FPGA Placer
MHexahedron.h
Go to the documentation of this file.
1 // Gmsh - Copyright (C) 1997-2022 C. Geuzaine, J.-F. Remacle
2 //
3 // See the LICENSE.txt file in the Gmsh root directory for license information.
4 // Please report all issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
5 
6 #ifndef MHEXAHEDRON_H
7 #define MHEXAHEDRON_H
8 
9 #include "MElement.h"
10 
11 /*
12  * MHexahedron
13  *
14  * v
15  * 3----------2
16  * |\ ^ |\
17  * | \ | | \
18  * | \ | | \
19  * | 7------+---6
20  * | | +-- |-- | -> u
21  * 0---+---\--1 |
22  * \ | \ \ |
23  * \ | \ \ |
24  * \| w \|
25  * 4----------5
26  *
27  */
28 class MHexahedron : public MElement {
29 protected:
30  MVertex *_v[8];
31  void _getEdgeVertices(const int num, std::vector<MVertex *> &v) const
32  {
33  v[0] = _v[edges_hexa(num, 0)];
34  v[1] = _v[edges_hexa(num, 1)];
35  }
36  void _getFaceVertices(const int num, std::vector<MVertex *> &v) const
37  {
38  v[0] = _v[faces_hexa(num, 0)];
39  v[1] = _v[faces_hexa(num, 1)];
40  v[2] = _v[faces_hexa(num, 2)];
41  v[3] = _v[faces_hexa(num, 3)];
42  }
43 
44 public:
45  MHexahedron(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, MVertex *v4,
46  MVertex *v5, MVertex *v6, MVertex *v7, int num = 0, int part = 0)
47  : MElement(num, part)
48  {
49  _v[0] = v0;
50  _v[1] = v1;
51  _v[2] = v2;
52  _v[3] = v3;
53  _v[4] = v4;
54  _v[5] = v5;
55  _v[6] = v6;
56  _v[7] = v7;
57  }
58  MHexahedron(const std::vector<MVertex *> &v, int num = 0, int part = 0)
59  : MElement(num, part)
60  {
61  for(int i = 0; i < 8; i++) _v[i] = v[i];
62  }
64  virtual int getDim() const { return 3; }
65  virtual std::size_t getNumVertices() const { return 8; }
66  virtual MVertex *getVertex(int num) { return _v[num]; }
67  virtual const MVertex *getVertex(int num) const { return _v[num]; }
68  virtual void setVertex(int num, MVertex *v) { _v[num] = v; }
69  virtual MVertex *getVertexDIFF(int num)
70  {
71  static const int map[8] = {2, 3, 7, 6, 0, 1, 5, 4};
72  return getVertex(map[num]);
73  }
74  virtual int getNumEdges() const { return 12; }
75  virtual MEdge getEdge(int num) const
76  {
77  return MEdge(_v[edges_hexa(num, 0)], _v[edges_hexa(num, 1)]);
78  }
79  virtual int numEdge2numVertex(int numEdge, int numVert) const
80  {
81  return edges_hexa(numEdge, numVert);
82  }
83  virtual int getNumEdgesRep(bool curved) { return 12; }
84  virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z,
85  SVector3 *n);
86  virtual void getEdgeVertices(const int num, std::vector<MVertex *> &v) const
87  {
88  v.resize(2);
89  _getEdgeVertices(num, v);
90  }
91  virtual int getNumFaces() { return 6; }
92  virtual MFace getFace(int num) const
93  {
94  return MFace(_v[faces_hexa(num, 0)], _v[faces_hexa(num, 1)],
95  _v[faces_hexa(num, 2)], _v[faces_hexa(num, 3)]);
96  }
97  virtual double getInnerRadius();
98  virtual double angleShapeMeasure();
99  virtual bool getFaceInfo(const MFace &face, int &ithFace, int &sign,
100  int &rot) const;
101  virtual int getNumFacesRep(bool curved);
102  virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z,
103  SVector3 *n);
104  virtual void getFaceVertices(const int num, std::vector<MVertex *> &v) const
105  {
106  v.resize(4);
107  _getFaceVertices(num, v);
108  }
109  virtual int getType() const { return TYPE_HEX; }
110  virtual int getTypeForMSH() const { return MSH_HEX_8; }
111  virtual int getTypeForUNV() const { return 115; } // solid linear brick
112  virtual int getTypeForVTK() const { return 12; }
113  virtual const char *getStringForPOS() const { return "SH"; }
114  virtual const char *getStringForBDF() const { return "CHEXA"; }
115  virtual const char *getStringForDIFF() const { return "ElmB8n3D"; }
116  virtual const char *getStringForINP() const { return "C3D8"; }
117  virtual const char *getStringForKEY() const { return "_SOLID"; }
118  virtual const char *getStringForRAD() const { return "/BRICK"; }
119  virtual const char *getStringForTOCHNOG() const { return "-hex8"; }
120  virtual void reverse()
121  {
122  MVertex *tmp;
123  tmp = _v[0];
124  _v[0] = _v[2];
125  _v[2] = tmp;
126  tmp = _v[4];
127  _v[4] = _v[6];
128  _v[6] = tmp;
129  }
130  virtual int getVolumeSign();
131  virtual void getNode(int num, double &u, double &v, double &w) const
132  {
133  switch(num) {
134  case 0:
135  u = -1.;
136  v = -1.;
137  w = -1.;
138  break;
139  case 1:
140  u = 1.;
141  v = -1.;
142  w = -1.;
143  break;
144  case 2:
145  u = 1.;
146  v = 1.;
147  w = -1.;
148  break;
149  case 3:
150  u = -1.;
151  v = 1.;
152  w = -1.;
153  break;
154  case 4:
155  u = -1.;
156  v = -1.;
157  w = 1.;
158  break;
159  case 5:
160  u = 1.;
161  v = -1.;
162  w = 1.;
163  break;
164  case 6:
165  u = 1.;
166  v = 1.;
167  w = 1.;
168  break;
169  case 7:
170  u = -1.;
171  v = 1.;
172  w = 1.;
173  break;
174  default:
175  u = 0.;
176  v = 0.;
177  w = 0.;
178  break;
179  }
180  }
181  virtual SPoint3 barycenterUVW() const { return SPoint3(0., 0., 0.); }
182  virtual bool isInside(double u, double v, double w) const
183  {
184  double tol = getTolerance();
185  if(u < -(1. + tol) || v < -(1. + tol) || w < -(1. + tol) ||
186  u > (1. + tol) || v > (1. + tol) || w > (1. + tol))
187  return false;
188  return true;
189  }
190  virtual void getIntegrationPoints(int pOrder, int *npts, IntPt **pts);
191  static int edges_hexa(const int edge, const int vert)
192  {
193  static const int e[12][2] = {{0, 1}, {0, 3}, {0, 4}, {1, 2},
194  {1, 5}, {2, 3}, {2, 6}, {3, 7},
195  {4, 5}, {4, 7}, {5, 6}, {6, 7}};
196  return e[edge][vert];
197  }
198  static int faces_hexa(const int face, const int vert)
199  {
200  static const int f[6][4] = {{0, 3, 2, 1}, {0, 1, 5, 4}, {0, 4, 7, 3},
201  {1, 2, 6, 5}, {2, 3, 7, 6}, {4, 5, 6, 7}};
202  return f[face][vert];
203  }
204  static int faces2edge_hexa(const int face, const int edge)
205  {
206  // return -iedge - 1 if edge is inverted
207  // iedge + 1 otherwise
208  static const int e[6][4] = {{2, -6, -4, -1}, {1, 5, -9, -3},
209  {3, 10, -8, -2}, {4, 7, -11, -5},
210  {6, 8, -12, -7}, {9, 11, 12, -10}};
211  return e[face][edge];
212  }
213  virtual int numCommonNodesInDualGraph(const MElement *const other) const;
214  virtual MEdge getEdgeSolin(int num)
215  {
216  static const int eSolin[12][2] = {{0, 1}, {0, 3}, {0, 4}, {1, 2},
217  {1, 5}, {3, 2}, {2, 6}, {3, 7},
218  {4, 5}, {4, 7}, {5, 6}, {7, 6}};
219  return MEdge(_v[eSolin[num][0]], _v[eSolin[num][1]]);
220  }
221  virtual MFace getFaceSolin(int num)
222  {
223  static const int fSolin[6][4] = {{0, 1, 3, 2}, {0, 1, 4, 5}, {0, 3, 4, 7},
224  {1, 2, 5, 6}, {3, 2, 7, 6}, {4, 5, 7, 6}};
225  return MFace(_v[fSolin[num][0]], _v[fSolin[num][1]],
226  _v[fSolin[num][2]], _v[fSolin[num][3]]);
227  }
228  virtual MVertex *getVertexNEU(int num)
229  {
230  static const int map[8] = {0, 1, 3, 2, 4, 5, 7, 6};
231  return getVertex(map[num]);
232  }
233 };
234 
235 /*
236  * MHexahedron20
237  *
238  * 3----13----2
239  * |\ |\
240  * | 15 | 14
241  * 9 \ 11 \
242  * | 7----19+---6
243  * | | | |
244  * 0---+-8----1 |
245  * \ 17 \ 18
246  * 10 | 12|
247  * \| \|
248  * 4----16----5
249  *
250  */
251 class MHexahedron20 : public MHexahedron {
252 protected:
253  MVertex *_vs[12];
254 
255 public:
257  MVertex *v5, MVertex *v6, MVertex *v7, MVertex *v8, MVertex *v9,
258  MVertex *v10, MVertex *v11, MVertex *v12, MVertex *v13,
259  MVertex *v14, MVertex *v15, MVertex *v16, MVertex *v17,
260  MVertex *v18, MVertex *v19, int num = 0, int part = 0)
261  : MHexahedron(v0, v1, v2, v3, v4, v5, v6, v7, num, part)
262  {
263  _vs[0] = v8;
264  _vs[1] = v9;
265  _vs[2] = v10;
266  _vs[3] = v11;
267  _vs[4] = v12;
268  _vs[5] = v13;
269  _vs[6] = v14;
270  _vs[7] = v15;
271  _vs[8] = v16;
272  _vs[9] = v17;
273  _vs[10] = v18;
274  _vs[11] = v19;
275  for(int i = 0; i < 12; i++) _vs[i]->setPolynomialOrder(2);
276  }
277  MHexahedron20(const std::vector<MVertex *> &v, int num = 0, int part = 0)
278  : MHexahedron(v, num, part)
279  {
280  for(int i = 0; i < 12; i++) _vs[i] = v[8 + i];
281  for(int i = 0; i < 12; i++) _vs[i]->setPolynomialOrder(2);
282  }
284  virtual int getPolynomialOrder() const { return 2; }
285  virtual std::size_t getNumVertices() const { return 20; }
286  virtual MVertex *getVertex(int num)
287  {
288  return num < 8 ? _v[num] : _vs[num - 8];
289  }
290  virtual const MVertex *getVertex(int num) const
291  {
292  return num < 8 ? _v[num] : _vs[num - 8];
293  }
294  virtual void setVertex(int num, MVertex *v)
295  {
296  if(num < 8)
297  _v[num] = v;
298  else
299  _vs[num - 8] = v;
300  }
301  virtual MVertex *getVertexUNV(int num)
302  {
303  static const int map[20] = {0, 8, 1, 11, 2, 13, 3, 9, 10, 12,
304  14, 15, 4, 16, 5, 18, 6, 19, 7, 17};
305  return getVertex(map[num]);
306  }
307  virtual MVertex *getVertexBDF(int num)
308  {
309  static const int map[20] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 11,
310  13, 9, 10, 12, 14, 15, 16, 18, 19, 17};
311  return getVertex(map[num]);
312  }
313  virtual MVertex *getVertexINP(int num)
314  {
315  static const int map[20] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 11,
316  13, 9, 16, 18, 19, 17, 10, 12, 14, 15};
317  return getVertex(map[num]);
318  }
319  virtual MVertex *getVertexKEY(int num)
320  {
321  static const int map[20] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 11,
322  13, 9, 16, 18, 19, 17, 10, 12, 14, 15};
323  return getVertex(map[num]);
324  }
325  virtual MVertex *getVertexRAD(int num)
326  {
327  static const int map[20] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 11,
328  13, 9, 16, 18, 19, 17, 10, 12, 14, 15};
329  return getVertex(map[num]);
330  }
331  virtual MVertex *getVertexDIFF(int num)
332  {
333  static const int map[20] = {2, 3, 7, 6, 0, 1, 5, 4, 9, 18,
334  12, 19, 14, 11, 15, 13, 8, 16, 17, 10};
335  return getVertex(map[num]);
336  }
337  virtual MVertex *getVertexVTK(int num)
338  {
339  static const int map[20] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 11,
340  13, 9, 16, 18, 19, 17, 10, 12, 14, 15};
341  return getVertex(map[num]);
342  }
343  virtual int getNumEdgeVertices() const { return 12; }
344  virtual int getNumEdgesRep(bool curved);
345  virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z,
346  SVector3 *n);
347  virtual void getEdgeVertices(const int num, std::vector<MVertex *> &v) const
348  {
349  v.resize(3);
351  v[2] = _vs[num];
352  }
353  virtual int getNumFacesRep(bool curved);
354  virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z,
355  SVector3 *n);
356  virtual void getFaceVertices(const int num, std::vector<MVertex *> &v) const
357  {
358  v.resize(8);
360  static const int f[6][4] = {{1, 5, 3, 0}, {0, 4, 8, 2}, {2, 9, 7, 1},
361  {3, 6, 10, 4}, {5, 7, 11, 6}, {8, 10, 11, 9}};
362  v[4] = _vs[f[num][0]];
363  v[5] = _vs[f[num][1]];
364  v[6] = _vs[f[num][2]];
365  v[7] = _vs[f[num][3]];
366  }
367  virtual int getTypeForMSH() const { return MSH_HEX_20; }
368  virtual int getTypeForUNV() const { return 116; } // solid parabolic brick
369  virtual int getTypeForVTK() const { return 25; }
370  virtual const char *getStringForBDF() const { return "CHEXA"; }
371  virtual const char *getStringForINP() const { return "C3D20"; }
372  virtual const char *getStringForKEY() const { return "_SOLID_H20"; }
373  virtual const char *getStringForRAD() const { return "/BRIC20"; }
374  virtual const char *getStringForDIFF() const { return "ElmB20n3D"; }
375  virtual void reverse()
376  {
377  MVertex *tmp;
378  tmp = _v[0];
379  _v[0] = _v[2];
380  _v[2] = tmp;
381  tmp = _v[4];
382  _v[4] = _v[6];
383  _v[6] = tmp;
384  MVertex *old[12];
385  for(int i = 0; i < 12; i++) old[i] = _vs[i];
386  _vs[0] = old[3];
387  _vs[3] = old[0];
388  _vs[1] = old[5];
389  _vs[5] = old[1];
390  _vs[2] = old[6];
391  _vs[6] = old[2];
392  _vs[8] = old[10];
393  _vs[10] = old[8];
394  _vs[9] = old[11];
395  _vs[11] = old[9];
396  }
397  virtual void getNode(int num, double &u, double &v, double &w) const
398  {
399  num < 8 ? MHexahedron::getNode(num, u, v, w) :
400  MElement::getNode(num, u, v, w);
401  }
402 };
403 
404 /*
405  * MHexahedron27
406  *
407  * 3----13----2
408  * |\ |\
409  * |15 24 | 14
410  * 9 \ 20 11 \
411  * | 7----19+---6
412  * |22 | 26 | 23|
413  * 0---+-8----1 |
414  * \ 17 25 \ 18
415  * 10 | 21 12|
416  * \| \|
417  * 4----16----5
418  *
419  */
420 class MHexahedron27 : public MHexahedron {
421 protected:
422  MVertex *_vs[19];
423 
424 public:
426  MVertex *v5, MVertex *v6, MVertex *v7, MVertex *v8, MVertex *v9,
427  MVertex *v10, MVertex *v11, MVertex *v12, MVertex *v13,
428  MVertex *v14, MVertex *v15, MVertex *v16, MVertex *v17,
429  MVertex *v18, MVertex *v19, MVertex *v20, MVertex *v21,
430  MVertex *v22, MVertex *v23, MVertex *v24, MVertex *v25,
431  MVertex *v26, int num = 0, int part = 0)
432  : MHexahedron(v0, v1, v2, v3, v4, v5, v6, v7, num, part)
433  {
434  _vs[0] = v8;
435  _vs[1] = v9;
436  _vs[2] = v10;
437  _vs[3] = v11;
438  _vs[4] = v12;
439  _vs[5] = v13;
440  _vs[6] = v14;
441  _vs[7] = v15;
442  _vs[8] = v16;
443  _vs[9] = v17;
444  _vs[10] = v18;
445  _vs[11] = v19;
446  _vs[12] = v20;
447  _vs[13] = v21;
448  _vs[14] = v22;
449  _vs[15] = v23;
450  _vs[16] = v24;
451  _vs[17] = v25;
452  _vs[18] = v26;
453  for(int i = 0; i < 19; i++) _vs[i]->setPolynomialOrder(2);
454  }
455  MHexahedron27(const std::vector<MVertex *> &v, int num = 0, int part = 0)
456  : MHexahedron(v, num, part)
457  {
458  for(int i = 0; i < 19; i++) _vs[i] = v[8 + i];
459  for(int i = 0; i < 19; i++) _vs[i]->setPolynomialOrder(2);
460  }
462  virtual int getPolynomialOrder() const { return 2; }
463  virtual std::size_t getNumVertices() const { return 27; }
464  virtual MVertex *getVertex(int num)
465  {
466  return num < 8 ? _v[num] : _vs[num - 8];
467  }
468  virtual const MVertex *getVertex(int num) const
469  {
470  return num < 8 ? _v[num] : _vs[num - 8];
471  }
472  virtual void setVertex(int num, MVertex *v)
473  {
474  if(num < 8)
475  _v[num] = v;
476  else
477  _vs[num - 8] = v;
478  }
479  virtual MVertex *getVertexINP(int num)
480  {
481  static const int map[27] = {0, 1, 2, 3, 4, 5, 6, 7, 8,
482  11, 13, 9, 16, 18, 19, 17, 10, 12,
483  14, 15, 26, 20, 25, 21, 23, 24, 22};
484  return getVertex(map[num]);
485  }
486  virtual MVertex *getVertexKEY(int num)
487  {
488  static const int map[27] = {0, 1, 2, 3, 4, 5, 6, 7, 8,
489  11, 13, 9, 16, 18, 19, 17, 10, 12,
490  14, 15, 26, 20, 25, 21, 23, 24, 22};
491  return getVertex(map[num]);
492  }
493  virtual MVertex *getVertexDIFF(int num)
494  {
495  static const int map[27] = {6, 8, 26, 24, 0, 2, 20, 18, 7,
496  15, 3, 17, 5, 25, 23, 21, 1, 9,
497  11, 19, 16, 4, 12, 14, 22, 10, 13};
498  return getVertex(map[num]);
499  }
500  virtual MVertex *getVertexVTK(int num)
501  {
502  static const int map[27] = {0, 1, 2, 3, 4, 5, 6, 7, 8,
503  11, 13, 9, 16, 18, 19, 17, 10, 12,
504  14, 15, 22, 23, 21, 24, 20, 25, 26};
505  return getVertex(map[num]);
506  }
507  virtual int getNumEdgeVertices() const { return 12; }
508  virtual int getNumFaceVertices() const { return 6; }
509  virtual int getNumVolumeVertices() const { return 1; }
510  virtual int getNumEdgesRep(bool curved);
511  virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z,
512  SVector3 *n);
513  virtual void getEdgeVertices(const int num, std::vector<MVertex *> &v) const
514  {
515  v.resize(3);
517  v[2] = _vs[num];
518  }
519  virtual int getNumFacesRep(bool curved);
520  virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z,
521  SVector3 *n);
522  virtual void getFaceVertices(const int num, std::vector<MVertex *> &v) const
523  {
524  v.resize(9);
526  static const int f[6][4] = {{1, 5, 3, 0}, {0, 4, 8, 2}, {2, 9, 7, 1},
527  {3, 6, 10, 4}, {5, 7, 11, 6}, {8, 10, 11, 9}};
528  v[4] = _vs[f[num][0]];
529  v[5] = _vs[f[num][1]];
530  v[6] = _vs[f[num][2]];
531  v[7] = _vs[f[num][3]];
532  v[8] = _vs[12 + num];
533  }
534  virtual int getTypeForMSH() const { return MSH_HEX_27; }
535  virtual int getTypeForVTK() const { return 29; }
536  virtual const char *getStringForPOS() const { return "SH2"; }
537  virtual const char *getStringForDIFF() const { return "ElmB27n3D"; }
538  virtual const char *getStringForINP() const { return "C3D27"; }
539  virtual const char *getStringForKEY() const { return "_SOLID_H27"; }
540  virtual const char *getStringForRAD() const { return "/BRIC20"; }
541  virtual const char *getStringForTOCHNOG() const { return "-hex27"; }
542  virtual void reverse()
543  {
544  MVertex *tmp;
545  tmp = _v[0];
546  _v[0] = _v[2];
547  _v[2] = tmp;
548  tmp = _v[4];
549  _v[4] = _v[6];
550  _v[6] = tmp;
551  MVertex *old[19];
552  for(int i = 0; i < 19; i++) old[i] = _vs[i];
553  // edge vertices
554  _vs[0] = old[3];
555  _vs[3] = old[0];
556  _vs[1] = old[5];
557  _vs[5] = old[1];
558  _vs[2] = old[6];
559  _vs[6] = old[2];
560  _vs[8] = old[10];
561  _vs[10] = old[8];
562  _vs[9] = old[11];
563  _vs[11] = old[9];
564  // face vertices
565  _vs[13] = old[15];
566  _vs[15] = old[13];
567  _vs[14] = old[16];
568  _vs[16] = old[14];
569  }
570  virtual void getNode(int num, double &u, double &v, double &w) const
571  {
572  num < 8 ? MHexahedron::getNode(num, u, v, w) :
573  MElement::getNode(num, u, v, w);
574  }
575 };
576 
577 /*
578  * MHexahedronN
579  *
580  * 3----13----2
581  * |\ |\
582  * |15 24 | 14
583  * 9 \ 20 11 \
584  * | 7----19+---6
585  * |22 | 26 | 23|
586  * 0---+-8----1 |
587  * \ 17 25 \ 18
588  * 10 | 21 12|
589  * \| \|
590  * 4----16----5
591  *
592  * N = 0RDER - 1
593  * 8 := 8 --> 8 + N
594  * 9 := 8 + N + 1 --> 8 + 2 * N
595  * :
596  * 19 := 8 + 11 * N + 1 --> 8 + 12 * N
597  * 20 := 8 + 12 * N + 1 --> 8 + 12 * N + N^2
598  * 21 := 8 + 12 * N + N^2 --> 8 + 12 * N + 2 * N^2
599  * :
600  * 25 := 8 + 12 * N + 5 * N^2 + 1 --> 8 + 12 * N + 6 * N^2
601  * 26 := 8 + 12 * N + 6 * N^2 + 1 --> 8 + 12 * N + 6 * N^2 + N^3
602  *
603  */
604 
605 typedef std::vector<int> IndicesReversed;
606 // typedef std::vector<int> IndicesHighOrderFace;
607 // typedef std::pair<std::pair<int,int>, std::pair<int,int> >
608 // TupleHighOrderFace;
609 
610 class MHexahedronN : public MHexahedron {
611  static std::map<int, IndicesReversed> _order2indicesReversedHex;
612  // static std::map<TupleHighOrderFace, IndicesHighOrderFace>
613  // _tuple2indicesHighOrderFace;
614 
615 protected:
616  const char _order;
617  std::vector<MVertex *> _vs;
618 
619 public:
621  MVertex *v5, MVertex *v6, MVertex *v7,
622  const std::vector<MVertex *> &v, char order, int num = 0,
623  int part = 0)
624  : MHexahedron(v0, v1, v2, v3, v4, v5, v6, v7, num, part), _order(order),
625  _vs(v)
626  {
627  for(std::size_t i = 0; i < _vs.size(); i++)
628  _vs[i]->setPolynomialOrder(_order);
629  }
630  MHexahedronN(const std::vector<MVertex *> &v, char order, int num = 0,
631  int part = 0)
632  : MHexahedron(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], num, part),
633  _order(order)
634  {
635  for(std::size_t i = 8; i < v.size(); i++) _vs.push_back(v[i]);
636  for(std::size_t i = 0; i < _vs.size(); i++)
637  _vs[i]->setPolynomialOrder(_order);
638  }
640  virtual int getPolynomialOrder() const { return (int)_order; }
641  virtual std::size_t getNumVertices() const { return 8 + _vs.size(); }
642  virtual MVertex *getVertex(int num)
643  {
644  return num < 8 ? _v[num] : _vs[num - 8];
645  }
646  virtual const MVertex *getVertex(int num) const
647  {
648  return num < 8 ? _v[num] : _vs[num - 8];
649  }
650  virtual void setVertex(int num, MVertex *v)
651  {
652  if(num < 8)
653  _v[num] = v;
654  else
655  _vs[num - 8] = v;
656  }
657  virtual int getNumEdgeVertices() const { return 12 * (_order - 1); }
658  virtual int getNumFaceVertices() const
659  {
661  return 0;
662  else
663  return 6 * (_order - 1) * (_order - 1);
664  }
665  virtual int getNumVolumeVertices() const
666  {
668  return 0;
669  else
670  return (_order - 1) * (_order - 1) * (_order - 1);
671  }
672  virtual int getNumEdgesRep(bool curved);
673  virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z,
674  SVector3 *n);
675  virtual void getEdgeVertices(const int num, std::vector<MVertex *> &v) const
676  {
677  v.resize(_order + 1);
679  for(int i = 0; i < _order - 1; i++) v[2 + i] = _vs[(_order - 1) * num + i];
680  }
681  virtual void getFaceVertices(const int num, std::vector<MVertex *> &v) const
682  {
683  if(getIsAssimilatedSerendipity()) { v.resize(4 * _order); }
684  else {
685  v.resize((_order + 1) * (_order + 1));
686  }
687 
689  int count = 3;
690 
691  int n = _order - 1;
692  for(int i = 0; i < 4; i++) {
693  if(faces2edge_hexa(num, i) > 0) {
694  int edge_num = faces2edge_hexa(num, i) - 1;
695  for(int j = 0; j < n; j++) v[++count] = _vs[n * edge_num + j];
696  }
697  else {
698  int edge_num = -faces2edge_hexa(num, i) - 1;
699  for(int j = n - 1; j >= 0; j--) v[++count] = _vs[n * edge_num + j];
700  }
701  }
702 
703  if((int)v.size() > count + 1) {
704  int start = 12 * n + num * n * n;
705  for(int i = 0; i < n * n; i++) { v[++count] = _vs[start + i]; }
706  }
707  }
708  virtual int getTypeForMSH() const
709  {
710  // (p+1)^3
711  if(_order == 1 && _vs.size() + 8 == 8) return MSH_HEX_8;
712  if(_order == 2 && _vs.size() + 8 == 27) return MSH_HEX_27;
713  if(_order == 3 && _vs.size() + 8 == 64) return MSH_HEX_64;
714  if(_order == 4 && _vs.size() + 8 == 125) return MSH_HEX_125;
715  if(_order == 5 && _vs.size() + 8 == 216) return MSH_HEX_216;
716  if(_order == 6 && _vs.size() + 8 == 343) return MSH_HEX_343;
717  if(_order == 7 && _vs.size() + 8 == 512) return MSH_HEX_512;
718  if(_order == 8 && _vs.size() + 8 == 729) return MSH_HEX_729;
719  if(_order == 9 && _vs.size() + 8 == 1000) return MSH_HEX_1000;
720 
721  if(_order == 2 && _vs.size() + 8 == 20) return MSH_HEX_20;
722  if(_order == 3 && _vs.size() + 8 == 32) return MSH_HEX_32;
723  if(_order == 4 && _vs.size() + 8 == 44) return MSH_HEX_44;
724  if(_order == 5 && _vs.size() + 8 == 56) return MSH_HEX_56;
725  if(_order == 6 && _vs.size() + 8 == 68) return MSH_HEX_68;
726  if(_order == 7 && _vs.size() + 8 == 80) return MSH_HEX_80;
727  if(_order == 8 && _vs.size() + 8 == 92) return MSH_HEX_92;
728  if(_order == 9 && _vs.size() + 8 == 104) return MSH_HEX_104;
729 
730  Msg::Error("No MSH type found for P%d hexahedron with %d nodes", _order,
731  8 + _vs.size());
732  return 0;
733  }
734  virtual int getNumFacesRep(bool curved);
735  virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z,
736  SVector3 *n);
737  virtual void reverse();
738  virtual void getNode(int num, double &u, double &v, double &w) const
739  {
740  num < 8 ? MHexahedron::getNode(num, u, v, w) :
741  MElement::getNode(num, u, v, w);
742  }
743 };
744 
745 #endif
MHexahedron20::getVertexDIFF
virtual MVertex * getVertexDIFF(int num)
Definition: MHexahedron.h:331
MHexahedron27::getFaceRep
virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n)
Definition: MHexahedron.cpp:383
MHexahedron::setVertex
virtual void setVertex(int num, MVertex *v)
Definition: MHexahedron.h:68
MHexahedron::MHexahedron
MHexahedron(const std::vector< MVertex * > &v, int num=0, int part=0)
Definition: MHexahedron.h:58
MHexahedronN
Definition: MHexahedron.h:610
MSH_HEX_729
#define MSH_HEX_729
Definition: GmshDefines.h:177
MSH_HEX_8
#define MSH_HEX_8
Definition: GmshDefines.h:84
MHexahedron::getStringForRAD
virtual const char * getStringForRAD() const
Definition: MHexahedron.h:118
MHexahedron27::getVertexVTK
virtual MVertex * getVertexVTK(int num)
Definition: MHexahedron.h:500
MHexahedronN::getNumEdgesRep
virtual int getNumEdgesRep(bool curved)
Definition: MHexahedron.cpp:189
MEdge
Definition: MEdge.h:14
MHexahedronN::getNumVertices
virtual std::size_t getNumVertices() const
Definition: MHexahedron.h:641
MHexahedron27::~MHexahedron27
~MHexahedron27()
Definition: MHexahedron.h:461
MSH_HEX_80
#define MSH_HEX_80
Definition: GmshDefines.h:184
MHexahedron::angleShapeMeasure
virtual double angleShapeMeasure()
Definition: MHexahedron.cpp:74
MHexahedron::getEdgeRep
virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n)
Definition: MHexahedron.cpp:21
MHexahedron20::_vs
MVertex * _vs[12]
Definition: MHexahedron.h:253
MHexahedronN::getTypeForMSH
virtual int getTypeForMSH() const
Definition: MHexahedron.h:708
MHexahedron20::getNumVertices
virtual std::size_t getNumVertices() const
Definition: MHexahedron.h:285
MHexahedronN::_order
const char _order
Definition: MHexahedron.h:616
MHexahedron::getStringForTOCHNOG
virtual const char * getStringForTOCHNOG() const
Definition: MHexahedron.h:119
MHexahedron20::~MHexahedron20
~MHexahedron20()
Definition: MHexahedron.h:283
MHexahedronN::MHexahedronN
MHexahedronN(const std::vector< MVertex * > &v, char order, int num=0, int part=0)
Definition: MHexahedron.h:630
MHexahedron::edges_hexa
static int edges_hexa(const int edge, const int vert)
Definition: MHexahedron.h:191
MSH_HEX_64
#define MSH_HEX_64
Definition: GmshDefines.h:172
MHexahedron27::setVertex
virtual void setVertex(int num, MVertex *v)
Definition: MHexahedron.h:472
MVertex
Definition: MVertex.h:24
MHexahedron::getEdgeSolin
virtual MEdge getEdgeSolin(int num)
Definition: MHexahedron.h:214
MHexahedron::getEdge
virtual MEdge getEdge(int num) const
Definition: MHexahedron.h:75
MHexahedron::barycenterUVW
virtual SPoint3 barycenterUVW() const
Definition: MHexahedron.h:181
Msg::Error
static void Error(const char *fmt,...)
Definition: GmshMessage.cpp:482
MHexahedron27::getEdgeRep
virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n)
Definition: MHexahedron.cpp:161
MHexahedronN::reverse
virtual void reverse()
Definition: MHexahedron.cpp:448
SPoint3
Definition: SPoint3.h:14
LegendrePolynomials::f
void f(int n, double u, double *val)
Definition: orthogonalBasis.cpp:77
MHexahedron27::getStringForRAD
virtual const char * getStringForRAD() const
Definition: MHexahedron.h:540
MHexahedron::getTypeForMSH
virtual int getTypeForMSH() const
Definition: MHexahedron.h:110
SVector3
Definition: SVector3.h:16
MHexahedron20::getVertex
virtual MVertex * getVertex(int num)
Definition: MHexahedron.h:286
MHexahedronN::getEdgeRep
virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n)
Definition: MHexahedron.cpp:170
MHexahedron27::getNumVolumeVertices
virtual int getNumVolumeVertices() const
Definition: MHexahedron.h:509
MHexahedron::reverse
virtual void reverse()
Definition: MHexahedron.h:120
MHexahedron::_v
MVertex * _v[8]
Definition: MHexahedron.h:30
MHexahedron20::getPolynomialOrder
virtual int getPolynomialOrder() const
Definition: MHexahedron.h:284
MSH_HEX_104
#define MSH_HEX_104
Definition: GmshDefines.h:186
MHexahedron::getFace
virtual MFace getFace(int num) const
Definition: MHexahedron.h:92
MSH_HEX_32
#define MSH_HEX_32
Definition: GmshDefines.h:180
MSH_HEX_512
#define MSH_HEX_512
Definition: GmshDefines.h:176
MHexahedron::getNumFacesRep
virtual int getNumFacesRep(bool curved)
Definition: MHexahedron.cpp:401
MSH_HEX_44
#define MSH_HEX_44
Definition: GmshDefines.h:181
MHexahedron27::getVertex
virtual const MVertex * getVertex(int num) const
Definition: MHexahedron.h:468
MSH_HEX_125
#define MSH_HEX_125
Definition: GmshDefines.h:173
MHexahedronN::getVertex
virtual MVertex * getVertex(int num)
Definition: MHexahedron.h:642
MSH_HEX_343
#define MSH_HEX_343
Definition: GmshDefines.h:175
MHexahedron::~MHexahedron
~MHexahedron()
Definition: MHexahedron.h:63
MHexahedron27::getStringForDIFF
virtual const char * getStringForDIFF() const
Definition: MHexahedron.h:537
MHexahedron20::getTypeForVTK
virtual int getTypeForVTK() const
Definition: MHexahedron.h:369
MHexahedronN::getNumVolumeVertices
virtual int getNumVolumeVertices() const
Definition: MHexahedron.h:665
MHexahedron20::getFaceVertices
virtual void getFaceVertices(const int num, std::vector< MVertex * > &v) const
Definition: MHexahedron.h:356
MHexahedron::getStringForBDF
virtual const char * getStringForBDF() const
Definition: MHexahedron.h:114
MHexahedron20::getStringForKEY
virtual const char * getStringForKEY() const
Definition: MHexahedron.h:372
MHexahedron::faces_hexa
static int faces_hexa(const int face, const int vert)
Definition: MHexahedron.h:198
MHexahedron27::MHexahedron27
MHexahedron27(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, MVertex *v4, MVertex *v5, MVertex *v6, MVertex *v7, MVertex *v8, MVertex *v9, MVertex *v10, MVertex *v11, MVertex *v12, MVertex *v13, MVertex *v14, MVertex *v15, MVertex *v16, MVertex *v17, MVertex *v18, MVertex *v19, MVertex *v20, MVertex *v21, MVertex *v22, MVertex *v23, MVertex *v24, MVertex *v25, MVertex *v26, int num=0, int part=0)
Definition: MHexahedron.h:425
MHexahedron20::MHexahedron20
MHexahedron20(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, MVertex *v4, MVertex *v5, MVertex *v6, MVertex *v7, MVertex *v8, MVertex *v9, MVertex *v10, MVertex *v11, MVertex *v12, MVertex *v13, MVertex *v14, MVertex *v15, MVertex *v16, MVertex *v17, MVertex *v18, MVertex *v19, int num=0, int part=0)
Definition: MHexahedron.h:256
MHexahedron27::getVertex
virtual MVertex * getVertex(int num)
Definition: MHexahedron.h:464
MHexahedron20::getVertexVTK
virtual MVertex * getVertexVTK(int num)
Definition: MHexahedron.h:337
MFace
Definition: MFace.h:20
MHexahedron20::getEdgeRep
virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n)
Definition: MHexahedron.cpp:152
MHexahedron::getStringForINP
virtual const char * getStringForINP() const
Definition: MHexahedron.h:116
MHexahedronN::getNode
virtual void getNode(int num, double &u, double &v, double &w) const
Definition: MHexahedron.h:738
MHexahedron27::getStringForKEY
virtual const char * getStringForKEY() const
Definition: MHexahedron.h:539
MHexahedron::getStringForPOS
virtual const char * getStringForPOS() const
Definition: MHexahedron.h:113
MHexahedron::getNumVertices
virtual std::size_t getNumVertices() const
Definition: MHexahedron.h:65
MHexahedron20::getStringForINP
virtual const char * getStringForINP() const
Definition: MHexahedron.h:371
MHexahedron::MHexahedron
MHexahedron(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, MVertex *v4, MVertex *v5, MVertex *v6, MVertex *v7, int num=0, int part=0)
Definition: MHexahedron.h:45
MHexahedron20::getTypeForMSH
virtual int getTypeForMSH() const
Definition: MHexahedron.h:367
MHexahedron20::getNumFacesRep
virtual int getNumFacesRep(bool curved)
Definition: MHexahedron.cpp:412
MHexahedron::getVertexNEU
virtual MVertex * getVertexNEU(int num)
Definition: MHexahedron.h:228
MHexahedron20::getVertexINP
virtual MVertex * getVertexINP(int num)
Definition: MHexahedron.h:313
MHexahedronN::getPolynomialOrder
virtual int getPolynomialOrder() const
Definition: MHexahedron.h:640
MHexahedron20::getNumEdgesRep
virtual int getNumEdgesRep(bool curved)
Definition: MHexahedron.cpp:179
MHexahedron27::getNumFaceVertices
virtual int getNumFaceVertices() const
Definition: MHexahedron.h:508
MHexahedronN::getNumFaceVertices
virtual int getNumFaceVertices() const
Definition: MHexahedron.h:658
MHexahedron::getFaceSolin
virtual MFace getFaceSolin(int num)
Definition: MHexahedron.h:221
MHexahedron::getNumEdges
virtual int getNumEdges() const
Definition: MHexahedron.h:74
MHexahedron20::getFaceRep
virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n)
Definition: MHexahedron.cpp:374
MHexahedron::getType
virtual int getType() const
Definition: MHexahedron.h:109
MHexahedron::getFaceVertices
virtual void getFaceVertices(const int num, std::vector< MVertex * > &v) const
Definition: MHexahedron.h:104
MHexahedron20::getStringForDIFF
virtual const char * getStringForDIFF() const
Definition: MHexahedron.h:374
MHexahedron27::getStringForTOCHNOG
virtual const char * getStringForTOCHNOG() const
Definition: MHexahedron.h:541
MHexahedron::numEdge2numVertex
virtual int numEdge2numVertex(int numEdge, int numVert) const
Definition: MHexahedron.h:79
MSH_HEX_1000
#define MSH_HEX_1000
Definition: GmshDefines.h:178
MHexahedron::getEdgeVertices
virtual void getEdgeVertices(const int num, std::vector< MVertex * > &v) const
Definition: MHexahedron.h:86
MHexahedron20::getStringForRAD
virtual const char * getStringForRAD() const
Definition: MHexahedron.h:373
MHexahedron20::getVertexRAD
virtual MVertex * getVertexRAD(int num)
Definition: MHexahedron.h:325
MHexahedron27::getTypeForMSH
virtual int getTypeForMSH() const
Definition: MHexahedron.h:534
MHexahedron20::setVertex
virtual void setVertex(int num, MVertex *v)
Definition: MHexahedron.h:294
MHexahedron::getVertex
virtual MVertex * getVertex(int num)
Definition: MHexahedron.h:66
MHexahedron::_getEdgeVertices
void _getEdgeVertices(const int num, std::vector< MVertex * > &v) const
Definition: MHexahedron.h:31
MHexahedron27::getNode
virtual void getNode(int num, double &u, double &v, double &w) const
Definition: MHexahedron.h:570
MHexahedronN::_vs
std::vector< MVertex * > _vs
Definition: MHexahedron.h:617
MHexahedron20::getVertex
virtual const MVertex * getVertex(int num) const
Definition: MHexahedron.h:290
MSH_HEX_20
#define MSH_HEX_20
Definition: GmshDefines.h:96
MElement::getIsAssimilatedSerendipity
virtual bool getIsAssimilatedSerendipity() const
Definition: MElement.h:81
MHexahedron
Definition: MHexahedron.h:28
MHexahedronN::getFaceRep
virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n)
Definition: MHexahedron.cpp:392
MElement
Definition: MElement.h:30
MHexahedron::getStringForDIFF
virtual const char * getStringForDIFF() const
Definition: MHexahedron.h:115
MHexahedron::numCommonNodesInDualGraph
virtual int numCommonNodesInDualGraph(const MElement *const other) const
Definition: MHexahedron.cpp:104
MHexahedron::getTypeForVTK
virtual int getTypeForVTK() const
Definition: MHexahedron.h:112
MSH_HEX_68
#define MSH_HEX_68
Definition: GmshDefines.h:183
MHexahedronN::getVertex
virtual const MVertex * getVertex(int num) const
Definition: MHexahedron.h:646
MHexahedron27::getVertexKEY
virtual MVertex * getVertexKEY(int num)
Definition: MHexahedron.h:486
MElement::getTolerance
double getTolerance() const
Definition: MElement.cpp:61
MHexahedronN::getNumEdgeVertices
virtual int getNumEdgeVertices() const
Definition: MHexahedron.h:657
MHexahedronN::MHexahedronN
MHexahedronN(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, MVertex *v4, MVertex *v5, MVertex *v6, MVertex *v7, const std::vector< MVertex * > &v, char order, int num=0, int part=0)
Definition: MHexahedron.h:620
MHexahedronN::~MHexahedronN
~MHexahedronN()
Definition: MHexahedron.h:639
MHexahedron::getNumFaces
virtual int getNumFaces()
Definition: MHexahedron.h:91
MSH_HEX_56
#define MSH_HEX_56
Definition: GmshDefines.h:182
MHexahedron::getTypeForUNV
virtual int getTypeForUNV() const
Definition: MHexahedron.h:111
MHexahedron27::getVertexDIFF
virtual MVertex * getVertexDIFF(int num)
Definition: MHexahedron.h:493
MHexahedron27
Definition: MHexahedron.h:420
MHexahedron27::MHexahedron27
MHexahedron27(const std::vector< MVertex * > &v, int num=0, int part=0)
Definition: MHexahedron.h:455
MHexahedron27::reverse
virtual void reverse()
Definition: MHexahedron.h:542
MHexahedron::faces2edge_hexa
static int faces2edge_hexa(const int face, const int edge)
Definition: MHexahedron.h:204
MHexahedron::getStringForKEY
virtual const char * getStringForKEY() const
Definition: MHexahedron.h:117
MHexahedron::getIntegrationPoints
virtual void getIntegrationPoints(int pOrder, int *npts, IntPt **pts)
Definition: MHexahedron.cpp:68
IntPt
Definition: GaussIntegration.h:12
MHexahedronN::_order2indicesReversedHex
static std::map< int, IndicesReversed > _order2indicesReversedHex
Definition: MHexahedron.h:611
MHexahedron20::getNode
virtual void getNode(int num, double &u, double &v, double &w) const
Definition: MHexahedron.h:397
MHexahedron27::getPolynomialOrder
virtual int getPolynomialOrder() const
Definition: MHexahedron.h:462
MHexahedron20
Definition: MHexahedron.h:251
z
const double z
Definition: GaussQuadratureQuad.cpp:56
MHexahedron27::getStringForINP
virtual const char * getStringForINP() const
Definition: MHexahedron.h:538
MSH_HEX_27
#define MSH_HEX_27
Definition: GmshDefines.h:91
MHexahedron20::getVertexBDF
virtual MVertex * getVertexBDF(int num)
Definition: MHexahedron.h:307
MHexahedron::getVertex
virtual const MVertex * getVertex(int num) const
Definition: MHexahedron.h:67
MHexahedron::getDim
virtual int getDim() const
Definition: MHexahedron.h:64
MHexahedron::getNode
virtual void getNode(int num, double &u, double &v, double &w) const
Definition: MHexahedron.h:131
MElement.h
MHexahedron27::getNumFacesRep
virtual int getNumFacesRep(bool curved)
Definition: MHexahedron.cpp:418
MHexahedron27::getStringForPOS
virtual const char * getStringForPOS() const
Definition: MHexahedron.h:536
MHexahedron20::getEdgeVertices
virtual void getEdgeVertices(const int num, std::vector< MVertex * > &v) const
Definition: MHexahedron.h:347
MHexahedron20::getStringForBDF
virtual const char * getStringForBDF() const
Definition: MHexahedron.h:370
TYPE_HEX
#define TYPE_HEX
Definition: GmshDefines.h:71
MHexahedron27::getNumVertices
virtual std::size_t getNumVertices() const
Definition: MHexahedron.h:463
MHexahedron20::getVertexUNV
virtual MVertex * getVertexUNV(int num)
Definition: MHexahedron.h:301
MHexahedron::_getFaceVertices
void _getFaceVertices(const int num, std::vector< MVertex * > &v) const
Definition: MHexahedron.h:36
MElement::getNode
virtual void getNode(int num, double &u, double &v, double &w) const
Definition: MElement.cpp:448
MHexahedron20::reverse
virtual void reverse()
Definition: MHexahedron.h:375
MHexahedron::isInside
virtual bool isInside(double u, double v, double w) const
Definition: MHexahedron.h:182
MHexahedronN::getNumFacesRep
virtual int getNumFacesRep(bool curved)
Definition: MHexahedron.cpp:424
MHexahedron::getNumEdgesRep
virtual int getNumEdgesRep(bool curved)
Definition: MHexahedron.h:83
MHexahedron::getFaceInfo
virtual bool getFaceInfo(const MFace &face, int &ithFace, int &sign, int &rot) const
Definition: MHexahedron.cpp:94
MHexahedron20::getTypeForUNV
virtual int getTypeForUNV() const
Definition: MHexahedron.h:368
MHexahedron27::getNumEdgesRep
virtual int getNumEdgesRep(bool curved)
Definition: MHexahedron.cpp:184
MHexahedron27::getFaceVertices
virtual void getFaceVertices(const int num, std::vector< MVertex * > &v) const
Definition: MHexahedron.h:522
MHexahedron27::_vs
MVertex * _vs[19]
Definition: MHexahedron.h:422
MHexahedron20::getNumEdgeVertices
virtual int getNumEdgeVertices() const
Definition: MHexahedron.h:343
MHexahedronN::getEdgeVertices
virtual void getEdgeVertices(const int num, std::vector< MVertex * > &v) const
Definition: MHexahedron.h:675
MHexahedron::getFaceRep
virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n)
Definition: MHexahedron.cpp:347
MHexahedron20::MHexahedron20
MHexahedron20(const std::vector< MVertex * > &v, int num=0, int part=0)
Definition: MHexahedron.h:277
MHexahedron::getVolumeSign
virtual int getVolumeSign()
Definition: MHexahedron.cpp:47
MHexahedron::getInnerRadius
virtual double getInnerRadius()
Definition: MHexahedron.cpp:82
MSH_HEX_216
#define MSH_HEX_216
Definition: GmshDefines.h:174
MHexahedron20::getVertexKEY
virtual MVertex * getVertexKEY(int num)
Definition: MHexahedron.h:319
MHexahedron::getVertexDIFF
virtual MVertex * getVertexDIFF(int num)
Definition: MHexahedron.h:69
MHexahedron27::getEdgeVertices
virtual void getEdgeVertices(const int num, std::vector< MVertex * > &v) const
Definition: MHexahedron.h:513
MHexahedron27::getVertexINP
virtual MVertex * getVertexINP(int num)
Definition: MHexahedron.h:479
MHexahedronN::getFaceVertices
virtual void getFaceVertices(const int num, std::vector< MVertex * > &v) const
Definition: MHexahedron.h:681
MHexahedron27::getNumEdgeVertices
virtual int getNumEdgeVertices() const
Definition: MHexahedron.h:507
MHexahedronN::setVertex
virtual void setVertex(int num, MVertex *v)
Definition: MHexahedron.h:650
MSH_HEX_92
#define MSH_HEX_92
Definition: GmshDefines.h:185
MHexahedron27::getTypeForVTK
virtual int getTypeForVTK() const
Definition: MHexahedron.h:535
IndicesReversed
std::vector< int > IndicesReversed
Definition: MHexahedron.h:605