29 const ShapeMatrix& shape_matrix_N,
30 double& interpolated_value,
31 ScalarTypes&... interpolated_values)
33 auto const num_nodes = shape_matrix_N.size();
36 for (
auto n =
decltype(num_nodes){0}; n < num_nodes; ++n)
38 iv += nodal_values[DOFOffset * num_nodes + n] * shape_matrix_N[n];
41 interpolated_value = iv;
44 interpolated_values...);
74 const ShapeMatrix& shape_matrix_N,
75 double& interpolated_value,
76 ScalarTypes&... interpolated_values)
78 auto const num_nodal_dof =
sizeof...(interpolated_values) + 1;
79 auto const num_nodes = shape_matrix_N.size();
81 assert(num_nodes * num_nodal_dof ==
82 static_cast<std::size_t
>(nodal_values.size()));
88 interpolated_values...);
102 Eigen::MatrixBase<EigenMatrixType>
const& node_values,
105 assert(
dynamic_cast<HigherOrderMeshElementType const*
>(&element));
106 assert(node_values.cols() == 1);
108 using SF = LowerOrderShapeFunction;
115 for (
int n = 0; n < number_base_nodes; ++n)
117 std::size_t
const global_index = getNodeIndex(element, n);
118 interpolated_values_global_vector[global_index] = node_values[n];
125 int const number_higher_order_nodes = number_all_nodes - number_base_nodes;
126 std::vector<MathLib::Point3d> higher_order_nodes;
127 higher_order_nodes.reserve(number_higher_order_nodes);
128 for (
int n = 0; n < number_higher_order_nodes; ++n)
130 higher_order_nodes.emplace_back(
132 [number_base_nodes + n]);
136 auto const shape_matrices =
141 for (
int n = 0; n < number_higher_order_nodes; ++n)
143 std::size_t
const global_index =
144 getNodeIndex(element, number_base_nodes + n);
145 interpolated_values_global_vector[global_index] =
146 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)