26 inline std::vector<Node*>
getBaseNodes(std::vector<Element*>
const& elements)
28 std::vector<Node*> base_nodes;
29 base_nodes.reserve(elements.size() * 2);
31 for (
auto*
const e : elements)
33 std::copy(e->getNodes(), e->getNodes() + e->getNumberOfBaseNodes(),
34 std::back_inserter(base_nodes));
48 Eigen::Vector3d surface_element_normal;
51 auto const bulk_element_normal =
53 auto const v0 = Eigen::Map<Eigen::Vector3d const>(
55 auto const v1 = Eigen::Map<Eigen::Vector3d const>(
57 Eigen::Vector3d
const edge_vector = v1 - v0;
58 surface_element_normal = bulk_element_normal.cross(edge_vector);
62 surface_element_normal =
66 surface_element_normal.normalize();
71 surface_element_normal *= -1;
73 return surface_element_normal;
Definition of the Element class.
Definition of the Node class.
std::size_t getID() const
const T * getCoords() const
virtual const Node * getNode(unsigned idx) const =0
virtual constexpr unsigned getDimension() const =0
Get dimension of the mesh element.
static Eigen::Vector3d getSurfaceNormal(Element const &e)
Returns the surface normal of a 2D element.
void makeVectorUnique(std::vector< T > &v)
void copy(PETScVector const &x, PETScVector &y)
Eigen::Vector3d calculateNormalizedSurfaceNormal(MeshLib::Element const &surface_element, MeshLib::Element const &bulk_element)
std::vector< Node * > getBaseNodes(std::vector< Element * > const &elements)