/** * \file * \copyright * Copyright (c) 2012-2023, OpenGeoSys Community (http://www.opengeosys.org) * Distributed under a Modified BSD License. * See accompanying file LICENSE.txt or * http://www.opengeosys.org/project/license * * Created on May 14, 2021, 2:38 PM */ #include "GetElementRotationMatrices.h" #include "GetSpaceDimension.h" #include "MeshLib/ElementCoordinatesMappingLocal.h" #include "MeshLib/Elements/Elements.h" #include "MeshLib/Mesh.h" namespace MeshLib { std::vector getElementRotationMatrices( int const space_dimension, int const mesh_dimension, std::vector const& elements) { std::vector element_rotation_matrices; element_rotation_matrices.reserve(elements.size()); for (auto const& element : elements) { int const element_dimension = static_cast(element->getDimension()); if (element_dimension == space_dimension) { element_rotation_matrices.emplace_back(Eigen::MatrixXd::Identity( element_dimension, element_dimension)); } else { MeshLib::ElementCoordinatesMappingLocal coordinates_mapping( *element, mesh_dimension); element_rotation_matrices.emplace_back( coordinates_mapping.getRotationMatrixToGlobal().topLeftCorner( space_dimension, element_dimension)); } } return element_rotation_matrices; } } // namespace MeshLib