/** * \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 * */ #pragma once #include #include "NumLib/Fem/CoordinatesMapping/NaturalNodeCoordinates.h" namespace NumLib { template class ReferenceElement { static std::vector createReferenceElementNodes() { constexpr auto natural_node_coordss = NumLib::NaturalCoordinates::coordinates; return {natural_node_coordss.begin(), natural_node_coordss.end()}; } static MeshElementType createElement( std::vector const& nodes) { constexpr unsigned num_nodes = MeshElementType::n_all_nodes; std::array node_ptrs{}; for (std::size_t i = 0; i < num_nodes; ++i) { node_ptrs[i] = const_cast(&(nodes[i])); } return MeshElementType(node_ptrs); } std::vector const nodes = createReferenceElementNodes(); public: MeshElementType const element = createElement(nodes); }; } // namespace NumLib