Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TetElement.cpp
Go to the documentation of this file.
1 
2 
3 #include "TetElement.hpp"
4 #include "TriFace.hpp"
5 #include "Mesh.hpp"
6 
8 Element( e_tet ){
9 
10  d_nodes = new Node*[getNumNodes()];
11  d_faces = new Face*[getNumFaces()];
12 
13 }
14 
15 
17 Element( e_tet ){
18 
19  d_nodes = new Node*[getNumNodes()];
20  d_faces = new Face*[getNumFaces()];
21  setFromNodes( thenodes );
22 
23 }
24 
26 
27  int numn = getNumNodes();
28  int i;
29  for( i = 0; i < numn; i++ ){
30  d_nodes[i]->removeElement( this );
31  }
32  int numf = getNumFaces();
33  for( i = 0; i < numf; i++ ){
34  d_faces[i]->removeElement( this );
35  }
36 }
37 
39 { return 4; }
40 
42 { return 4; }
43 
44 
45 void TetElement::setFaceFromNodes(int num, Node** nodes){
46 
47  // find if face exist (if not creates it)
48  Face* face = nodes[0]->sharedFace( nodes[1], nodes[2] );
49  if( !face ){
50  face = new TriFace( nodes );
51  s_mesh->addFace( face );
52  }
53  setFace( num, face );
54 }
55 
56 
58 
59  // !!! check ordering
60 
61  Node *nodes[3];
62  nodes[0] = d_nodes[1];
63  nodes[1] = d_nodes[3];
64  nodes[2] = d_nodes[2];
65  setFaceFromNodes( 0, nodes );
66 
67  nodes[0] = d_nodes[2];
68  nodes[1] = d_nodes[3];
69  nodes[2] = d_nodes[0];
70  setFaceFromNodes( 1, nodes );
71 
72  nodes[0] = d_nodes[0];
73  nodes[1] = d_nodes[3];
74  nodes[2] = d_nodes[1];
75  setFaceFromNodes( 2, nodes );
76 
77  nodes[0] = d_nodes[0];
78  nodes[1] = d_nodes[1];
79  nodes[2] = d_nodes[2];
80  setFaceFromNodes( 3, nodes );
81 
82 }
83 
85 
86  double minEdge = 1E+25;
87  double currentLength;
88  MVec pos[4];
89 
90  //there are six edge lengths to check:
91  //0 -> 1, 0 -> 2, 0 -> 3
92  //1 -> 2, 1 -> 3, 2 -> 3
93  // for nodes numbered 0, 1, 2, 3
94 
95  for (int i=0; i<4; i++) {
96  pos[i] = d_nodes[i]->getPosition();
97  }
98 
99  currentLength = pos[0].distance_between(pos[1]);
100  if (currentLength < minEdge) minEdge = currentLength;
101  currentLength = pos[0].distance_between(pos[2]);
102  if (currentLength < minEdge) minEdge = currentLength;
103  currentLength = pos[0].distance_between(pos[3]);
104  if (currentLength < minEdge) minEdge = currentLength;
105  currentLength = pos[1].distance_between(pos[2]);
106  if (currentLength < minEdge) minEdge = currentLength;
107  currentLength = pos[1].distance_between(pos[2]);
108  if (currentLength < minEdge) minEdge = currentLength;
109  currentLength = pos[2].distance_between(pos[3]);
110  if (currentLength < minEdge) minEdge = currentLength;
111 
112  assert(minEdge < 1E+24);
113 
114  return(minEdge);
115 
116 }
117 
Face ** d_faces
Definition: Element.hpp:87
void addFace(Face *face)
Definition: Mesh.cpp:96
This class encapsulate a node over a window manifold.
Definition: Manifold_2.h:370
Face * sharedFace(Node *n2, Node *n3, Node *n4=0)
Definition: Node.cpp:118
Definition: face.h:90
Definition: MVec.hpp:8
Node ** d_nodes
Definition: Element.hpp:86
virtual double getMinEdgeLength()
Definition: TetElement.cpp:84
MVec getPosition()
Definition: Node.hpp:125
virtual void setFromNodes(Node **thenodes)
Definition: Element.cpp:59
virtual void setFaceFromNodes(int num, Node **nodes)
Definition: TetElement.cpp:45
blockLoc i
Definition: read.cpp:79
virtual void setFromMyNodes()
Definition: TetElement.cpp:57
void removeElement(Element *theElement)
Definition: Face.cpp:81
virtual int getNumFaces() const
Definition: TetElement.cpp:41
static Mesh * s_mesh
Definition: Element.hpp:91
virtual int getNumNodes() const
Definition: TetElement.cpp:38
void setFace(int num, Face *face)
Definition: Element.hpp:127
double distance_between(MVec &end) const
Definition: MVec.hpp:90
The Face class is an abstract base class that supplies implemented general methods, as well as a vew virtual interface methods to child classes.
Definition: Face.hpp:19
void removeElement(Element *elem)
Definition: Node.cpp:102