OGS
AverageGradShapeFunction.h
Go to the documentation of this file.
1
12#pragma once
13
14#include <Eigen/Core>
15#include <vector>
16
20
21namespace NumLib
22{
36template <int DisplacementDim,
37 typename ShapeFunction,
38 typename ShapeMatricesType,
39 typename IpData>
41 int const local_node_id,
42 MeshLib::Element const& element,
43 NumLib::GenericIntegrationMethod const& integration_method,
44 std::vector<IpData, Eigen::aligned_allocator<IpData>> const& ip_data,
45 const bool is_axially_symmetric)
46{
47 Eigen::Vector3d bar_gradN = Eigen::Vector3d::Zero();
48 unsigned const n_integration_points =
49 integration_method.getNumberOfPoints();
50 assert(n_integration_points == ip_data.size());
51 for (unsigned ip = 0; ip < n_integration_points; ip++)
52 {
53 auto const& N = ip_data[ip].N_u;
54 auto const& dNdx = ip_data[ip].dNdx_u;
55
56 auto const dNidx = dNdx.col(local_node_id);
57
58 auto const& w = ip_data[ip].integration_weight;
59 bar_gradN.template segment<DisplacementDim>(0) += dNidx * w;
60
61 if (is_axially_symmetric)
62 {
63 auto const x_coord =
65 ShapeMatricesType>(element, N);
66 bar_gradN[2] += w * N(local_node_id) / x_coord;
67 }
68 }
69 return bar_gradN;
70}
71} // namespace NumLib
Definition of the Element class.
double interpolateXCoordinate(MeshLib::Element const &e, typename ShapeMatricesType::ShapeMatrices::ShapeType const &N)
Eigen::Vector3d averageGradShapeFunction(int const local_node_id, MeshLib::Element const &element, NumLib::GenericIntegrationMethod const &integration_method, std::vector< IpData, Eigen::aligned_allocator< IpData > > const &ip_data, const bool is_axially_symmetric)