gmsh-TingyuanDoc  0.1
An Open-Source Timing-driven Analytical Mixed-size FPGA Placer
MTetrahedron.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 MTETRAHEDRON_H
7 #define MTETRAHEDRON_H
8 
9 #include "MElement.h"
10 
11 /*
12  * MTetrahedron
13  *
14  * v
15  * .
16  * ,/
17  * /
18  * 2
19  * ,/|`\
20  * ,/ | `\
21  * ,/ '. `\
22  * ,/ | `\
23  * ,/ | `\
24  * 0-----------'.--------1 --> u
25  * `\. | ,/
26  * `\. | ,/
27  * `\. '. ,/
28  * `\. |/
29  * `3
30  * `\.
31  * ` w
32  *
33  */
34 class MTetrahedron : public MElement {
35 protected:
36  MVertex *_v[4];
37  void _getEdgeVertices(const int num, std::vector<MVertex *> &v) const
38  {
39  v[0] = _v[edges_tetra(num, 0)];
40  v[1] = _v[edges_tetra(num, 1)];
41  }
42  void _getFaceVertices(const int num, std::vector<MVertex *> &v) const
43  {
44  v[0] = _v[faces_tetra(num, 0)];
45  v[1] = _v[faces_tetra(num, 1)];
46  v[2] = _v[faces_tetra(num, 2)];
47  }
48 
49 public:
50  MTetrahedron(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, int num = 0,
51  int part = 0)
52  : MElement(num, part)
53  {
54  _v[0] = v0;
55  _v[1] = v1;
56  _v[2] = v2;
57  _v[3] = v3;
58  }
59  MTetrahedron(const std::vector<MVertex *> &v, int num = 0, int part = 0)
60  : MElement(num, part)
61  {
62  for(int i = 0; i < 4; i++) _v[i] = v[i];
63  }
65  virtual int getDim() const { return 3; }
66  virtual std::size_t getNumVertices() const { return 4; }
67  virtual MVertex *getVertex(int num) { return _v[num]; }
68  virtual const MVertex *getVertex(int num) const { return _v[num]; }
69  virtual void setVertex(int num, MVertex *v) { _v[num] = v; }
70  virtual int getNumEdges() const { return 6; }
71  virtual MEdge getEdge(int num) const
72  {
73  return MEdge(_v[edges_tetra(num, 0)], _v[edges_tetra(num, 1)]);
74  }
75  virtual int numEdge2numVertex(int numEdge, int numVert) const
76  {
77  return edges_tetra(numEdge, numVert);
78  }
79  virtual int getNumEdgesRep(bool curved) { return 6; }
80  virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z,
81  SVector3 *n);
82  virtual void getEdgeVertices(const int num, std::vector<MVertex *> &v) const
83  {
84  v.resize(2);
85  _getEdgeVertices(num, v);
86  }
87  virtual int getNumFaces() { return 4; }
88  virtual MFace getFace(int num) const
89  {
90  return MFace(_v[faces_tetra(num, 0)], _v[faces_tetra(num, 1)],
91  _v[faces_tetra(num, 2)]);
92  }
93  virtual bool getFaceInfo(const MFace &face, int &ithFace, int &sign,
94  int &rot) const;
95  virtual int getNumFacesRep(bool curved) { return 4; }
96  virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z,
97  SVector3 *n)
98  {
99  _getFaceRep(_v[faces_tetra(num, 0)], _v[faces_tetra(num, 1)],
100  _v[faces_tetra(num, 2)], x, y, z, n);
101  }
102  virtual void getFaceVertices(const int num, std::vector<MVertex *> &v) const
103  {
104  v.resize(3);
105  _getFaceVertices(num, v);
106  }
107  virtual int getType() const { return TYPE_TET; }
108  virtual int getTypeForMSH() const { return MSH_TET_4; }
109  virtual int getTypeForUNV() const { return 111; } // solid linear tetrahedron
110  virtual int getTypeForVTK() const { return 10; }
111  virtual const char *getStringForPOS() const { return "SS"; }
112  virtual const char *getStringForBDF() const { return "CTETRA"; }
113  virtual const char *getStringForDIFF() const { return "ElmT4n3D"; }
114  virtual const char *getStringForINP() const { return "C3D4"; }
115  virtual const char *getStringForKEY() const { return "_SOLID"; }
116  virtual const char *getStringForRAD() const { return "/TETRA4"; }
117  virtual const char *getStringForTOCHNOG() const { return "-tet4"; }
118  virtual void reverse()
119  {
120  MVertex *tmp = _v[0];
121  _v[0] = _v[1];
122  _v[1] = tmp;
123  }
124  void getMat(double mat[3][3]) const
125  {
126  mat[0][0] = _v[1]->x() - _v[0]->x();
127  mat[0][1] = _v[2]->x() - _v[0]->x();
128  mat[0][2] = _v[3]->x() - _v[0]->x();
129  mat[1][0] = _v[1]->y() - _v[0]->y();
130  mat[1][1] = _v[2]->y() - _v[0]->y();
131  mat[1][2] = _v[3]->y() - _v[0]->y();
132  mat[2][0] = _v[1]->z() - _v[0]->z();
133  mat[2][1] = _v[2]->z() - _v[0]->z();
134  mat[2][2] = _v[3]->z() - _v[0]->z();
135  }
136  virtual double getVolume();
137  virtual int getVolumeSign() { return (getVolume() >= 0) ? 1 : -1; }
138  virtual double gammaShapeMeasure();
139  virtual double getInnerRadius();
140  virtual double getOuterRadius();
141  virtual double etaShapeMeasure();
142  virtual void xyz2uvw(double xyz[3], double uvw[3]) const;
143  virtual void getNode(int num, double &u, double &v, double &w) const
144  {
145  switch(num) {
146  case 0:
147  u = 0.;
148  v = 0.;
149  w = 0.;
150  break;
151  case 1:
152  u = 1.;
153  v = 0.;
154  w = 0.;
155  break;
156  case 2:
157  u = 0.;
158  v = 1.;
159  w = 0.;
160  break;
161  case 3:
162  u = 0.;
163  v = 0.;
164  w = 1.;
165  break;
166  default:
167  u = 0.;
168  v = 0.;
169  w = 0.;
170  break;
171  }
172  }
173  virtual SPoint3 barycenterUVW() const { return SPoint3(.25, .25, .25); }
174  virtual bool isInside(double u, double v, double w) const
175  {
176  double tol = getTolerance();
177  if(u < (-tol) || v < (-tol) || w < (-tol) || u > ((1. + tol) - v - w))
178  return false;
179  return true;
180  }
181  virtual void getIntegrationPoints(int pOrder, int *npts, IntPt **pts);
182  virtual SPoint3 circumcenter();
183  static int edges_tetra(const int edge, const int vert)
184  {
185  static const int e[6][2] = {{0, 1}, {1, 2}, {2, 0}, {3, 0}, {3, 2}, {3, 1}};
186  return e[edge][vert];
187  }
188  static int faces_tetra(const int face, const int vert)
189  {
190  static const int f[4][3] = {{0, 2, 1}, {0, 1, 3}, {0, 3, 2}, {3, 1, 2}};
191  return f[face][vert];
192  }
193  static int faces2edge_tetra(const int face, const int edge)
194  {
195  // return -iedge - 1 if edge is inverted
196  // iedge + 1 otherwise
197  static const int e[4][3] = {
198  {-3, -2, -1}, {1, -6, 4}, {-4, 5, 3}, {6, 2, -5}};
199  return e[face][edge];
200  }
201  virtual int numCommonNodesInDualGraph(const MElement *const other) const;
202  virtual MEdge getEdgeSolin(int num)
203  {
204  static const int eSolin[6][2] = {{0, 1}, {1, 2}, {2, 0},
205  {0, 3}, {2, 3}, {1, 3}};
206  return MEdge(_v[eSolin[num][0]], _v[eSolin[num][1]]);
207  }
208  virtual MFace getFaceSolin(int num)
209  {
210  static const int fSolin[4][3] = {
211  {0, 1, 2}, {0, 1, 3}, {0, 2, 3}, {1, 2, 3}};
212  return MFace(_v[fSolin[num][0]], _v[fSolin[num][1]], _v[fSolin[num][2]]);
213  }
214 };
215 
216 /*
217  * MTetrahedron10
218  *
219  * 2
220  * ,/|`\
221  * ,/ | `\
222  * ,6 '. `5
223  * ,/ 8 `\
224  * ,/ | `\
225  * 0--------4--'.--------1
226  * `\. | ,/
227  * `\. | ,9
228  * `7. '. ,/
229  * `\. |/
230  * `3
231  *
232  */
233 class MTetrahedron10 : public MTetrahedron {
234 protected:
236 
237 public:
239  MVertex *v4, MVertex *v5, MVertex *v6, MVertex *v7,
240  MVertex *v8, MVertex *v9, int num = 0, int part = 0)
241  : MTetrahedron(v0, v1, v2, v3, num, part)
242  {
243  _vs[0] = v4;
244  _vs[1] = v5;
245  _vs[2] = v6;
246  _vs[3] = v7;
247  _vs[4] = v8;
248  _vs[5] = v9;
249  for(int i = 0; i < 6; i++) _vs[i]->setPolynomialOrder(2);
250  }
251  MTetrahedron10(const std::vector<MVertex *> &v, int num = 0, int part = 0)
252  : MTetrahedron(v, num, part)
253  {
254  for(int i = 0; i < 6; i++) _vs[i] = v[4 + i];
255  for(int i = 0; i < 6; i++) _vs[i]->setPolynomialOrder(2);
256  }
258  virtual int getPolynomialOrder() const { return 2; }
259  virtual std::size_t getNumVertices() const { return 10; }
260  virtual MVertex *getVertex(int num)
261  {
262  return num < 4 ? _v[num] : _vs[num - 4];
263  }
264  virtual const MVertex *getVertex(int num) const
265  {
266  return num < 4 ? _v[num] : _vs[num - 4];
267  }
268  virtual void setVertex(int num, MVertex *v)
269  {
270  if(num < 4)
271  _v[num] = v;
272  else
273  _vs[num - 4] = v;
274  }
275  virtual MVertex *getVertexUNV(int num)
276  {
277  static const int map[10] = {0, 4, 1, 5, 2, 6, 7, 9, 8, 3};
278  return getVertex(map[num]);
279  }
280  virtual MVertex *getVertexBDF(int num)
281  {
282  static const int map[10] = {0, 1, 2, 3, 4, 5, 6, 7, 9, 8};
283  return getVertex(map[num]);
284  }
285  virtual MVertex *getVertexVTK(int num)
286  {
287  static const int map[10] = {0, 1, 2, 3, 4, 5, 6, 7, 9, 8};
288  return getVertex(map[num]);
289  }
290  virtual MVertex *getVertexDIFF(int num) { return getVertexBDF(num); }
291  virtual MVertex *getVertexINP(int num) { return getVertexBDF(num); }
292  virtual MVertex *getVertexKEY(int num) { return getVertexBDF(num); }
293  virtual MVertex *getVertexRAD(int num) { return getVertexBDF(num); }
294  virtual int getNumEdgeVertices() const { return 6; }
295  virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z,
296  SVector3 *n);
297  virtual int getNumEdgesRep(bool curved);
298  virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z,
299  SVector3 *n);
300  virtual int getNumFacesRep(bool curved);
301  virtual void getEdgeVertices(const int num, std::vector<MVertex *> &v) const
302  {
303  v.resize(3);
305  v[2] = _vs[num];
306  }
307  virtual void getFaceVertices(const int num, std::vector<MVertex *> &v) const
308  {
309  v.resize(6);
311  static const int f[4][3] = {{2, 1, 0}, {0, 5, 3}, {3, 4, 2}, {5, 1, 4}};
312  v[3] = _vs[f[num][0]];
313  v[4] = _vs[f[num][1]];
314  v[5] = _vs[f[num][2]];
315  }
316  virtual int getTypeForMSH() const { return MSH_TET_10; }
317  virtual int getTypeForUNV() const
318  {
319  return 118;
320  } // solid parabolic tetrahedron
321  virtual int getTypeForVTK() const { return 24; }
322  virtual const char *getStringForPOS() const { return "SS2"; }
323  virtual const char *getStringForBDF() const { return "CTETRA"; }
324  virtual const char *getStringForDIFF() const { return "ElmT10n3D"; }
325  virtual const char *getStringForINP() const { return "C3D10"; }
326  virtual const char *getStringForKEY() const { return "_SOLID"; }
327  virtual const char *getStringForRAD() const { return "/TETRA10"; }
328  virtual const char *getStringForTOCHNOG() const { return "-tet10"; }
329  virtual void reverse()
330  {
331  MVertex *tmp;
332  tmp = _v[0];
333  _v[0] = _v[1];
334  _v[1] = tmp;
335  tmp = _vs[1];
336  _vs[1] = _vs[2];
337  _vs[2] = tmp;
338  tmp = _vs[5];
339  _vs[5] = _vs[3];
340  _vs[3] = tmp;
341  }
342  virtual void getNode(int num, double &u, double &v, double &w) const
343  {
344  num < 4 ? MTetrahedron::getNode(num, u, v, w) :
345  MElement::getNode(num, u, v, w);
346  }
347  void xyz2uvw(double xyz[3], double uvw[3]) const
348  {
349  return MElement::xyz2uvw(xyz, uvw);
350  }
351 };
352 
353 /* tet order 3 FIXME: check the plot
354  *
355  * 2
356  * ,/|`\
357  * ,8 | `7 E = order - 1
358  * ,/ 13 `\ C = 4 + 6*E
359  * ,9 | `6 F = ((order - 1)*(order - 2))/2
360  * ,/ | `\ N = total number of vertices
361  * 0-----4-----'.--5-----1
362  * `\. | ,/ Interior vertex numbers
363  * 11. 12 ,15 for edge 0 <= i <= 5: 4+i*E to 4+(i+1)*E-1
364  * `\. '. 14 for face 0 <= j <= 3: C+j*F to C+(j+1)*F-1
365  * 10\.|/ in volume : C+4*F to N-1
366  * `3
367  *
368  */
369 
370 typedef std::vector<int> IndicesReversed;
371 
372 class MTetrahedronN : public MTetrahedron {
373  static std::map<int, IndicesReversed> _order2indicesReversedTet;
374 
375 protected:
376  std::vector<MVertex *> _vs;
377  const char _order;
378 
379 public:
381  const std::vector<MVertex *> &v, char order, int num = 0,
382  int part = 0)
383  : MTetrahedron(v0, v1, v2, v3, num, part), _vs(v), _order(order)
384  {
385  for(std::size_t i = 0; i < _vs.size(); i++)
386  _vs[i]->setPolynomialOrder(_order);
387  }
388  MTetrahedronN(const std::vector<MVertex *> &v, char order, int num = 0,
389  int part = 0)
390  : MTetrahedron(v[0], v[1], v[2], v[3], num, part), _order(order)
391  {
392  for(std::size_t i = 4; i < v.size(); i++) _vs.push_back(v[i]);
393  for(std::size_t i = 0; i < _vs.size(); i++)
394  _vs[i]->setPolynomialOrder(_order);
395  }
397  virtual int getPolynomialOrder() const { return _order; }
398  virtual std::size_t getNumVertices() const { return 4 + _vs.size(); }
399  virtual MVertex *getVertex(int num)
400  {
401  return num < 4 ? _v[num] : _vs[num - 4];
402  }
403  virtual const MVertex *getVertex(int num) const
404  {
405  return num < 4 ? _v[num] : _vs[num - 4];
406  }
407  virtual void setVertex(int num, MVertex *v)
408  {
409  if(num < 4)
410  _v[num] = v;
411  else
412  _vs[num - 4] = v;
413  }
414  virtual int getNumEdgeVertices() const { return 6 * (_order - 1); }
415  virtual int getNumFaceVertices() const
416  {
418  return 0;
419  else
420  return 4 * ((_order - 1) * (_order - 2)) / 2;
421  }
422  virtual void getEdgeVertices(const int num, std::vector<MVertex *> &v) const
423  {
424  v.resize(_order + 1);
426  int j = 2;
427  const int ie = (num + 1) * (_order - 1);
428  for(int i = num * (_order - 1); i != ie; ++i) v[j++] = _vs[i];
429  }
430  virtual void getFaceVertices(const int num, std::vector<MVertex *> &v) const
431  {
432  if(getIsAssimilatedSerendipity()) { v.resize(3 * _order); }
433  else {
434  v.resize((_order + 1) * (_order + 2) / 2);
435  }
436 
438  int count = 2;
439 
440  int n = _order - 1;
441  for(int i = 0; i < 3; i++) {
442  if(faces2edge_tetra(num, i) > 0) {
443  int edge_num = faces2edge_tetra(num, i) - 1;
444  for(int j = 0; j < n; j++) v[++count] = _vs[n * edge_num + j];
445  }
446  else {
447  int edge_num = -faces2edge_tetra(num, i) - 1;
448  for(int j = n - 1; j >= 0; j--) v[++count] = _vs[n * edge_num + j];
449  }
450  }
451 
452  if((int)v.size() > count + 1) {
453  int start = 6 * n + num * (n - 1) * n / 2;
454  for(int i = 0; i < (n - 1) * n / 2; i++) { v[++count] = _vs[start + i]; }
455  }
456  }
457  virtual int getNumVolumeVertices() const
458  {
460  return 0;
461  else
462  return ((_order - 1) * (_order - 2) * (_order - 3)) / 6;
463  }
464  virtual int getTypeForMSH() const
465  {
466  // (p+1)*(p+2)*(p+3)/6
467  if(_order == 1 && _vs.size() + 4 == 4) return MSH_TET_4;
468  if(_order == 2 && _vs.size() + 4 == 10) return MSH_TET_10;
469  if(_order == 3 && _vs.size() + 4 == 20) return MSH_TET_20;
470  if(_order == 4 && _vs.size() + 4 == 35) return MSH_TET_35;
471  if(_order == 5 && _vs.size() + 4 == 56) return MSH_TET_56;
472  if(_order == 6 && _vs.size() + 4 == 84) return MSH_TET_84;
473  if(_order == 7 && _vs.size() + 4 == 120) return MSH_TET_120;
474  if(_order == 8 && _vs.size() + 4 == 165) return MSH_TET_165;
475  if(_order == 9 && _vs.size() + 4 == 220) return MSH_TET_220;
476  if(_order == 10 && _vs.size() + 4 == 286) return MSH_TET_286;
477 
478  if(_order == 3 && _vs.size() + 4 == 16) return MSH_TET_16;
479  if(_order == 4 && _vs.size() + 4 == 22) return MSH_TET_22;
480  if(_order == 5 && _vs.size() + 4 == 28) return MSH_TET_28;
481  if(_order == 6 && _vs.size() + 4 == 34) return MSH_TET_34;
482  if(_order == 7 && _vs.size() + 4 == 40) return MSH_TET_40;
483  if(_order == 8 && _vs.size() + 4 == 46) return MSH_TET_46;
484  if(_order == 9 && _vs.size() + 4 == 52) return MSH_TET_52;
485  if(_order == 10 && _vs.size() + 4 == 58) return MSH_TET_58;
486  Msg::Error("No MSH type found for P%d tetrahedron with %d nodes", _order,
487  4 + _vs.size());
488  return 0;
489  }
490  virtual void reverse();
491  virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z,
492  SVector3 *n);
493  virtual int getNumEdgesRep(bool curved);
494  virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z,
495  SVector3 *n);
496  virtual int getNumFacesRep(bool curved);
497  virtual void getNode(int num, double &u, double &v, double &w) const
498  {
499  num < 4 ? MTetrahedron::getNode(num, u, v, w) :
500  MElement::getNode(num, u, v, w);
501  }
502  void xyz2uvw(double xyz[3], double uvw[3]) const
503  {
504  return MElement::xyz2uvw(xyz, uvw);
505  }
506 };
507 
508 #endif
MTetrahedron::getStringForPOS
virtual const char * getStringForPOS() const
Definition: MTetrahedron.h:111
MTetrahedron::getTypeForMSH
virtual int getTypeForMSH() const
Definition: MTetrahedron.h:108
MTetrahedronN
Definition: MTetrahedron.h:372
MTetrahedronN::_order2indicesReversedTet
static std::map< int, IndicesReversed > _order2indicesReversedTet
Definition: MTetrahedron.h:373
MTetrahedron10::getStringForTOCHNOG
virtual const char * getStringForTOCHNOG() const
Definition: MTetrahedron.h:328
MTetrahedronN::getNumVolumeVertices
virtual int getNumVolumeVertices() const
Definition: MTetrahedron.h:457
MTetrahedron10::getEdgeVertices
virtual void getEdgeVertices(const int num, std::vector< MVertex * > &v) const
Definition: MTetrahedron.h:301
MElement::xyz2uvw
virtual void xyz2uvw(double xyz[3], double uvw[3]) const
Definition: MElement.cpp:1128
MTetrahedronN::getFaceRep
virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n)
Definition: MTetrahedron.cpp:314
MTetrahedronN::getFaceVertices
virtual void getFaceVertices(const int num, std::vector< MVertex * > &v) const
Definition: MTetrahedron.h:430
MTetrahedron::xyz2uvw
virtual void xyz2uvw(double xyz[3], double uvw[3]) const
Definition: MTetrahedron.cpp:121
MTetrahedron::getType
virtual int getType() const
Definition: MTetrahedron.h:107
MTetrahedron10::getVertexUNV
virtual MVertex * getVertexUNV(int num)
Definition: MTetrahedron.h:275
MTetrahedron10::getStringForINP
virtual const char * getStringForINP() const
Definition: MTetrahedron.h:325
MSH_TET_286
#define MSH_TET_286
Definition: GmshDefines.h:155
MEdge
Definition: MEdge.h:14
MTetrahedron::setVertex
virtual void setVertex(int num, MVertex *v)
Definition: MTetrahedron.h:69
MTetrahedronN::setVertex
virtual void setVertex(int num, MVertex *v)
Definition: MTetrahedron.h:407
MTetrahedronN::MTetrahedronN
MTetrahedronN(const std::vector< MVertex * > &v, char order, int num=0, int part=0)
Definition: MTetrahedron.h:388
MTetrahedron::getStringForDIFF
virtual const char * getStringForDIFF() const
Definition: MTetrahedron.h:113
MTetrahedron::MTetrahedron
MTetrahedron(const std::vector< MVertex * > &v, int num=0, int part=0)
Definition: MTetrahedron.h:59
MTetrahedron10::getStringForBDF
virtual const char * getStringForBDF() const
Definition: MTetrahedron.h:323
MTetrahedronN::getNumEdgeVertices
virtual int getNumEdgeVertices() const
Definition: MTetrahedron.h:414
MTetrahedron::getOuterRadius
virtual double getOuterRadius()
Definition: MTetrahedron.cpp:61
MTetrahedron
Definition: MTetrahedron.h:34
MTetrahedron::getEdge
virtual MEdge getEdge(int num) const
Definition: MTetrahedron.h:71
MTetrahedron::getNumEdgesRep
virtual int getNumEdgesRep(bool curved)
Definition: MTetrahedron.h:79
MTetrahedron::MTetrahedron
MTetrahedron(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, int num=0, int part=0)
Definition: MTetrahedron.h:50
MSH_TET_58
#define MSH_TET_58
Definition: GmshDefines.h:161
MTetrahedronN::_order
const char _order
Definition: MTetrahedron.h:377
MTetrahedron::faces_tetra
static int faces_tetra(const int face, const int vert)
Definition: MTetrahedron.h:188
MTetrahedronN::getEdgeVertices
virtual void getEdgeVertices(const int num, std::vector< MVertex * > &v) const
Definition: MTetrahedron.h:422
MTetrahedron10::getStringForDIFF
virtual const char * getStringForDIFF() const
Definition: MTetrahedron.h:324
MTetrahedronN::getNode
virtual void getNode(int num, double &u, double &v, double &w) const
Definition: MTetrahedron.h:497
MTetrahedron::getEdgeSolin
virtual MEdge getEdgeSolin(int num)
Definition: MTetrahedron.h:202
MTetrahedron10::getNumEdgesRep
virtual int getNumEdgesRep(bool curved)
Definition: MTetrahedron.cpp:141
MSH_TET_35
#define MSH_TET_35
Definition: GmshDefines.h:109
MTetrahedron::circumcenter
virtual SPoint3 circumcenter()
Definition: MTetrahedron.cpp:49
MVertex
Definition: MVertex.h:24
MTetrahedron10::getVertexINP
virtual MVertex * getVertexINP(int num)
Definition: MTetrahedron.h:291
Msg::Error
static void Error(const char *fmt,...)
Definition: GmshMessage.cpp:482
MVertex::z
double z() const
Definition: MVertex.h:62
MTetrahedron10::getNode
virtual void getNode(int num, double &u, double &v, double &w) const
Definition: MTetrahedron.h:342
IndicesReversed
std::vector< int > IndicesReversed
Definition: MTetrahedron.h:370
SPoint3
Definition: SPoint3.h:14
LegendrePolynomials::f
void f(int n, double u, double *val)
Definition: orthogonalBasis.cpp:77
MTetrahedron::~MTetrahedron
~MTetrahedron()
Definition: MTetrahedron.h:64
MTetrahedron::getFaceVertices
virtual void getFaceVertices(const int num, std::vector< MVertex * > &v) const
Definition: MTetrahedron.h:102
MTetrahedron10::getPolynomialOrder
virtual int getPolynomialOrder() const
Definition: MTetrahedron.h:258
MTetrahedronN::~MTetrahedronN
~MTetrahedronN()
Definition: MTetrahedron.h:396
MTetrahedron10::getTypeForMSH
virtual int getTypeForMSH() const
Definition: MTetrahedron.h:316
SVector3
Definition: SVector3.h:16
MTetrahedron10::getTypeForUNV
virtual int getTypeForUNV() const
Definition: MTetrahedron.h:317
MTetrahedron::_v
MVertex * _v[4]
Definition: MTetrahedron.h:36
MTetrahedron::reverse
virtual void reverse()
Definition: MTetrahedron.h:118
MTetrahedron::getInnerRadius
virtual double getInnerRadius()
Definition: MTetrahedron.cpp:75
MTetrahedron10
Definition: MTetrahedron.h:233
MTetrahedron::numEdge2numVertex
virtual int numEdge2numVertex(int numEdge, int numVert) const
Definition: MTetrahedron.h:75
MTetrahedron10::getNumEdgeVertices
virtual int getNumEdgeVertices() const
Definition: MTetrahedron.h:294
MTetrahedron10::getVertexBDF
virtual MVertex * getVertexBDF(int num)
Definition: MTetrahedron.h:280
MTetrahedron::getEdgeVertices
virtual void getEdgeVertices(const int num, std::vector< MVertex * > &v) const
Definition: MTetrahedron.h:82
MTetrahedron10::getFaceVertices
virtual void getFaceVertices(const int num, std::vector< MVertex * > &v) const
Definition: MTetrahedron.h:307
MTetrahedron10::xyz2uvw
void xyz2uvw(double xyz[3], double uvw[3]) const
Definition: MTetrahedron.h:347
MTetrahedron::getNumVertices
virtual std::size_t getNumVertices() const
Definition: MTetrahedron.h:66
MTetrahedron10::getVertex
virtual const MVertex * getVertex(int num) const
Definition: MTetrahedron.h:264
MTetrahedronN::_vs
std::vector< MVertex * > _vs
Definition: MTetrahedron.h:376
MSH_TET_40
#define MSH_TET_40
Definition: GmshDefines.h:158
MSH_TET_16
#define MSH_TET_16
Definition: GmshDefines.h:223
MTetrahedron::getMat
void getMat(double mat[3][3]) const
Definition: MTetrahedron.h:124
MTetrahedron10::MTetrahedron10
MTetrahedron10(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, MVertex *v4, MVertex *v5, MVertex *v6, MVertex *v7, MVertex *v8, MVertex *v9, int num=0, int part=0)
Definition: MTetrahedron.h:238
MSH_TET_22
#define MSH_TET_22
Definition: GmshDefines.h:111
MTetrahedron::getEdgeRep
virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n)
Definition: MTetrahedron.cpp:23
MTetrahedron::getNumFacesRep
virtual int getNumFacesRep(bool curved)
Definition: MTetrahedron.h:95
MTetrahedron::getStringForBDF
virtual const char * getStringForBDF() const
Definition: MTetrahedron.h:112
MTetrahedron10::getVertexKEY
virtual MVertex * getVertexKEY(int num)
Definition: MTetrahedron.h:292
MFace
Definition: MFace.h:20
MTetrahedronN::getVertex
virtual const MVertex * getVertex(int num) const
Definition: MTetrahedron.h:403
MTetrahedron10::~MTetrahedron10
~MTetrahedron10()
Definition: MTetrahedron.h:257
MSH_TET_84
#define MSH_TET_84
Definition: GmshDefines.h:151
MTetrahedron10::reverse
virtual void reverse()
Definition: MTetrahedron.h:329
MTetrahedronN::getPolynomialOrder
virtual int getPolynomialOrder() const
Definition: MTetrahedron.h:397
MTetrahedron::numCommonNodesInDualGraph
virtual int numCommonNodesInDualGraph(const MElement *const other) const
Definition: MTetrahedron.cpp:131
MTetrahedron10::setVertex
virtual void setVertex(int num, MVertex *v)
Definition: MTetrahedron.h:268
MSH_TET_28
#define MSH_TET_28
Definition: GmshDefines.h:112
MTetrahedron::getVertex
virtual MVertex * getVertex(int num)
Definition: MTetrahedron.h:67
MSH_TET_220
#define MSH_TET_220
Definition: GmshDefines.h:154
MTetrahedron::getIntegrationPoints
virtual void getIntegrationPoints(int pOrder, int *npts, IntPt **pts)
Definition: MTetrahedron.cpp:332
MTetrahedron::getFaceInfo
virtual bool getFaceInfo(const MFace &face, int &ithFace, int &sign, int &rot) const
Definition: MTetrahedron.cpp:338
MTetrahedron::getTypeForVTK
virtual int getTypeForVTK() const
Definition: MTetrahedron.h:110
MTetrahedron10::getVertexRAD
virtual MVertex * getVertexRAD(int num)
Definition: MTetrahedron.h:293
MTetrahedronN::getNumFacesRep
virtual int getNumFacesRep(bool curved)
Definition: MTetrahedron.cpp:204
MTetrahedron::_getEdgeVertices
void _getEdgeVertices(const int num, std::vector< MVertex * > &v) const
Definition: MTetrahedron.h:37
MElement::getIsAssimilatedSerendipity
virtual bool getIsAssimilatedSerendipity() const
Definition: MElement.h:81
MTetrahedron::getStringForRAD
virtual const char * getStringForRAD() const
Definition: MTetrahedron.h:116
MTetrahedron::getStringForKEY
virtual const char * getStringForKEY() const
Definition: MTetrahedron.h:115
MSH_TET_34
#define MSH_TET_34
Definition: GmshDefines.h:157
MElement
Definition: MElement.h:30
MTetrahedron10::getTypeForVTK
virtual int getTypeForVTK() const
Definition: MTetrahedron.h:321
MTetrahedron::getVolumeSign
virtual int getVolumeSign()
Definition: MTetrahedron.h:137
MSH_TET_165
#define MSH_TET_165
Definition: GmshDefines.h:153
MSH_TET_10
#define MSH_TET_10
Definition: GmshDefines.h:90
MTetrahedron::barycenterUVW
virtual SPoint3 barycenterUVW() const
Definition: MTetrahedron.h:173
MTetrahedron::getVolume
virtual double getVolume()
Definition: MTetrahedron.cpp:114
MTetrahedron10::MTetrahedron10
MTetrahedron10(const std::vector< MVertex * > &v, int num=0, int part=0)
Definition: MTetrahedron.h:251
MTetrahedron10::getStringForRAD
virtual const char * getStringForRAD() const
Definition: MTetrahedron.h:327
MTetrahedron::getNumEdges
virtual int getNumEdges() const
Definition: MTetrahedron.h:70
MTetrahedron::getNumFaces
virtual int getNumFaces()
Definition: MTetrahedron.h:87
MTetrahedron::edges_tetra
static int edges_tetra(const int edge, const int vert)
Definition: MTetrahedron.h:183
MTetrahedronN::getNumFaceVertices
virtual int getNumFaceVertices() const
Definition: MTetrahedron.h:415
MElement::getTolerance
double getTolerance() const
Definition: MElement.cpp:61
MTetrahedronN::getVertex
virtual MVertex * getVertex(int num)
Definition: MTetrahedron.h:399
MSH_TET_120
#define MSH_TET_120
Definition: GmshDefines.h:152
MElement::_getFaceRep
void _getFaceRep(MVertex *v0, MVertex *v1, MVertex *v2, double *x, double *y, double *z, SVector3 *n)
Definition: MElement.cpp:146
MTetrahedronN::xyz2uvw
void xyz2uvw(double xyz[3], double uvw[3]) const
Definition: MTetrahedron.h:502
MTetrahedronN::getTypeForMSH
virtual int getTypeForMSH() const
Definition: MTetrahedron.h:464
MTetrahedron10::getFaceRep
virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n)
Definition: MTetrahedron.cpp:323
IntPt
Definition: GaussIntegration.h:12
MSH_TET_4
#define MSH_TET_4
Definition: GmshDefines.h:83
MTetrahedron::getVertex
virtual const MVertex * getVertex(int num) const
Definition: MTetrahedron.h:68
MTetrahedron::gammaShapeMeasure
virtual double gammaShapeMeasure()
Definition: MTetrahedron.cpp:94
z
const double z
Definition: GaussQuadratureQuad.cpp:56
MTetrahedronN::MTetrahedronN
MTetrahedronN(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, const std::vector< MVertex * > &v, char order, int num=0, int part=0)
Definition: MTetrahedron.h:380
MSH_TET_52
#define MSH_TET_52
Definition: GmshDefines.h:160
MTetrahedron::getDim
virtual int getDim() const
Definition: MTetrahedron.h:65
MElement.h
MTetrahedron::faces2edge_tetra
static int faces2edge_tetra(const int face, const int edge)
Definition: MTetrahedron.h:193
MTetrahedron::getTypeForUNV
virtual int getTypeForUNV() const
Definition: MTetrahedron.h:109
MSH_TET_46
#define MSH_TET_46
Definition: GmshDefines.h:159
MElement::getNode
virtual void getNode(int num, double &u, double &v, double &w) const
Definition: MElement.cpp:448
TYPE_TET
#define TYPE_TET
Definition: GmshDefines.h:68
MTetrahedron::_getFaceVertices
void _getFaceVertices(const int num, std::vector< MVertex * > &v) const
Definition: MTetrahedron.h:42
MTetrahedron10::getNumVertices
virtual std::size_t getNumVertices() const
Definition: MTetrahedron.h:259
MSH_TET_20
#define MSH_TET_20
Definition: GmshDefines.h:108
MTetrahedronN::reverse
virtual void reverse()
Definition: MTetrahedron.cpp:366
MTetrahedronN::getNumEdgesRep
virtual int getNumEdgesRep(bool curved)
Definition: MTetrahedron.cpp:146
MTetrahedron::getStringForINP
virtual const char * getStringForINP() const
Definition: MTetrahedron.h:114
MVertex::y
double y() const
Definition: MVertex.h:61
MTetrahedron10::getStringForPOS
virtual const char * getStringForPOS() const
Definition: MTetrahedron.h:322
MTetrahedron10::getVertex
virtual MVertex * getVertex(int num)
Definition: MTetrahedron.h:260
MTetrahedron::getNode
virtual void getNode(int num, double &u, double &v, double &w) const
Definition: MTetrahedron.h:143
MTetrahedron::etaShapeMeasure
virtual double etaShapeMeasure()
Definition: MTetrahedron.cpp:104
MTetrahedron10::getEdgeRep
virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n)
Definition: MTetrahedron.cpp:186
MTetrahedron10::getStringForKEY
virtual const char * getStringForKEY() const
Definition: MTetrahedron.h:326
MTetrahedron::isInside
virtual bool isInside(double u, double v, double w) const
Definition: MTetrahedron.h:174
MTetrahedron::getStringForTOCHNOG
virtual const char * getStringForTOCHNOG() const
Definition: MTetrahedron.h:117
MTetrahedron::getFaceSolin
virtual MFace getFaceSolin(int num)
Definition: MTetrahedron.h:208
MTetrahedron::getFaceRep
virtual void getFaceRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n)
Definition: MTetrahedron.h:96
MTetrahedron::getFace
virtual MFace getFace(int num) const
Definition: MTetrahedron.h:88
MTetrahedron10::_vs
MVertex * _vs[6]
Definition: MTetrahedron.h:235
MTetrahedron10::getVertexVTK
virtual MVertex * getVertexVTK(int num)
Definition: MTetrahedron.h:285
MTetrahedronN::getEdgeRep
virtual void getEdgeRep(bool curved, int num, double *x, double *y, double *z, SVector3 *n)
Definition: MTetrahedron.cpp:195
MTetrahedron10::getVertexDIFF
virtual MVertex * getVertexDIFF(int num)
Definition: MTetrahedron.h:290
MTetrahedron10::getNumFacesRep
virtual int getNumFacesRep(bool curved)
Definition: MTetrahedron.cpp:209
MVertex::x
double x() const
Definition: MVertex.h:60
MTetrahedronN::getNumVertices
virtual std::size_t getNumVertices() const
Definition: MTetrahedron.h:398
MSH_TET_56
#define MSH_TET_56
Definition: GmshDefines.h:110