36 const ShapeMatrix& shape_matrix_N,
37 double& interpolated_value,
38 ScalarTypes&... interpolated_values)
40 auto const num_nodes = shape_matrix_N.size();
43 for (
auto n =
decltype(num_nodes){0}; n < num_nodes; ++n)
45 iv += nodal_values[DOFOffset * num_nodes + n] * shape_matrix_N[n];
48 interpolated_value = iv;
50 shapeFunctionInterpolate<DOFOffset + 1>(nodal_values, shape_matrix_N,
51 interpolated_values...);
81 const ShapeMatrix& shape_matrix_N,
82 double& interpolated_value,
83 ScalarTypes&... interpolated_values)
85 auto const num_nodal_dof =
sizeof...(interpolated_values) + 1;
86 auto const num_nodes = shape_matrix_N.size();
88 assert(num_nodes * num_nodal_dof ==
89 static_cast<std::size_t
>(nodal_values.size()));
93 detail::shapeFunctionInterpolate<0>(nodal_values, shape_matrix_N,
95 interpolated_values...);
109 Eigen::MatrixBase<EigenMatrixType>
const& node_values,
112 assert(
dynamic_cast<HigherOrderMeshElementType const*
>(&element));
113 assert(node_values.cols() == 1);
115 using SF = LowerOrderShapeFunction;
122 for (
int n = 0; n < number_base_nodes; ++n)
124 std::size_t
const global_index = getNodeIndex(element, n);
125 interpolated_values_global_vector[global_index] = node_values[n];
132 int const number_higher_order_nodes = number_all_nodes - number_base_nodes;
133 std::vector<MathLib::Point3d> higher_order_nodes;
134 higher_order_nodes.reserve(number_higher_order_nodes);
135 for (
int n = 0; n < number_higher_order_nodes; ++n)
137 higher_order_nodes.emplace_back(
139 [number_base_nodes + n]);
143 auto const shape_matrices =
148 for (
int n = 0; n < number_higher_order_nodes; ++n)
150 std::size_t
const global_index =
151 getNodeIndex(element, number_base_nodes + n);
152 interpolated_values_global_vector[global_index] =
153 shape_matrices[n].N * node_values;
std::vector< typename ShapeMatricesType::ShapeMatrices, Eigen::aligned_allocator< typename ShapeMatricesType::ShapeMatrices > > computeShapeMatrices(MeshLib::Element const &e, bool const is_axially_symmetric, PointContainer const &points)