79 template<
unsigned int dim>
82 OLD_ASSERT(nid < n_nodes,
"Vertex number is out of range!");
94 template<
unsigned int dim>
97 OLD_ASSERT(nid < n_nodes,
"Vertex number is out of range!");
114 OLD_ASSERT(sid < n_sides,
"Side number is out of range!");
116 return node_coords(sid) - node_coords(1-sid);
122 OLD_ASSERT(sid < n_sides,
"Side number is out of range!");
123 vec::fixed<2> barycenter, bar_side, n, t;
126 t = node_coords(side_nodes[sid][1]) - node_coords(side_nodes[sid][0]);
128 barycenter.fill(1./3);
130 bar_side = node_coords(side_nodes[sid][0]) - barycenter;
136 if (dot(n,bar_side) < 0) n *= -1;
144 OLD_ASSERT(sid < n_sides,
"Side number is out of range!");
145 vec::fixed<3> barycenter, bar_side, n, t1, t2;
148 t1 = node_coords(side_nodes[sid][1]) - node_coords(side_nodes[sid][0]);
149 t2 = node_coords(side_nodes[sid][2]) - node_coords(side_nodes[sid][0]);
151 barycenter.fill(0.25);
153 bar_side = node_coords(side_nodes[sid][0]) - barycenter;
158 if (dot(n,bar_side) < 0) n = -n;
167 OLD_ASSERT(sid < n_sides,
"Side number is out of range!");
176 OLD_ASSERT(sid < n_sides,
"Side number is out of range!");
178 return norm(node_coords(side_nodes[sid][1]) - node_coords(side_nodes[sid][0]),2);
185 OLD_ASSERT(sid < n_sides,
"Side number is out of range!");
187 return 0.5*norm(cross(node_coords(side_nodes[sid][1]) - node_coords(side_nodes[sid][0]),
188 node_coords(side_nodes[sid][2]) - node_coords(side_nodes[sid][0])),2);
197 while (side_lines[f1][i] != side_lines[f2][j])
198 if (side_lines[f1][i] < side_lines[f2][j]) i++;
200 return side_lines[f1][i];
205 template<
unsigned int dim>
209 for (index = 0; index < n_side_permutations; index++)
210 if (equal(p, p + n_nodes_per_side, side_permutations[index]))
static arma::vec::fixed< dim > normal_vector(unsigned int sid)
static arma::vec::fixed< dim > node_coords(unsigned int nid)
static unsigned int permutation_index(unsigned int p[n_nodes_per_side])
static unsigned int line_between_faces(unsigned int f1, unsigned int f2)
Global macros to enhance readability and debugging, general constants.
static double side_measure(unsigned int sid)
Class RefElement defines numbering of vertices, sides, calculation of normal vectors etc...
static arma::vec::fixed< dim+1 > node_barycentric_coords(unsigned int nid)