6#include <range/v3/range/conversion.hpp>
7#include <range/v3/view/transform.hpp>
14template <
typename ShapeFunction>
16 boost::mp11::mp_identity<ShapeFunction>)
20 using MeshElement =
typename ShapeFunction::MeshElement;
22 auto const& integration_method =
26 using ShapeMatrixPolicy =
34 constexpr int dim = 3;
44 ranges::views::transform([](
auto& sm) {
return std::move(sm.N); }) |
45 ranges::to<std::vector>;
54 using Indices = mp_iota<mp_size<ETLs>>;
57 [
this, integration_order](
auto index)
59 using ETL = mp_at_c<ETLs, index>;
64 integration_order, mp_identity<ShapeFunctionHigherOrder>{});
70 integration_order, mp_identity<ShapeFunctionLowerOrder>{});
MeshElementType const element
boost::mp11::mp_at< ShapeFunctionsLowerOrder, boost::mp11::mp_find< MeshElements, MeshElement > > ShapeFunctionLowerOrder
ShapeMatrixCache(unsigned const integration_order)
boost::mp11::mp_at< ShapeFunctionsHigherOrder, boost::mp11::mp_find< MeshElements, MeshElement > > ShapeFunctionHigherOrder
ShapeMatrixVectorsLowerOrder_N Nss_lower_order_
ShapeMatrixVectorsHigherOrder_N Nss_higher_order_
GenericIntegrationMethod const & getIntegrationMethod(std::type_index const mesh_element_type, IntegrationOrder const order)
typename ElementTraitsLagrange::ShapeFunction GetShapeFunctionHigherOrder
typename ElementTraitsLagrange::LowerOrderShapeFunction GetShapeFunctionLowerOrder
ShapeMatrixPolicyType< ShapeFunction, 3 > GetShapeMatrixPolicy
std::vector< typename ShapeMatricesType::ShapeMatrices, Eigen::aligned_allocator< typename ShapeMatricesType::ShapeMatrices > > initShapeMatrices(MeshLib::Element const &e, bool const is_axially_symmetric, IntegrationMethod const &integration_method)
static auto initShapeMatrices(unsigned const integration_order, boost::mp11::mp_identity< ShapeFunction >)