6#include <Eigen/Geometry>
19inline std::vector<Node*>
getBaseNodes(std::vector<Element*>
const& elements)
21 std::vector<Node*> base_nodes;
22 base_nodes.reserve(elements.size() * 2);
24 for (
auto*
const e : elements)
26 std::copy(e->getNodes(), e->getNodes() + e->getNumberOfBaseNodes(),
27 std::back_inserter(base_nodes));
32 base_nodes.shrink_to_fit();
40 Eigen::Vector3d surface_element_normal;
45 surface_element_normal =
50 auto const bulk_element_normal =
54 Eigen::Vector3d
const edge_vector = v1 - v0;
55 surface_element_normal = -bulk_element_normal.cross(edge_vector);
77 surface_element_normal = a + b - 2 * x;
81 surface_element_normal.normalize();
86 surface_element_normal *= -1;
88 return surface_element_normal;
Eigen::Vector3d const & asEigenVector3d() const
virtual CellType getCellType() const =0
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)
std::vector< Node * > getBaseNodes(std::vector< Element * > const &elements)
bool idsComparator(T const a, T const b)
Eigen::Vector3d calculateNormalizedSurfaceNormal(MeshLib::Element const &surface_element, MeshLib::Element const &bulk_element)