27 double const& integral_measure,
28 double const& integration_weight,
49 std::vector<GlobalVector*>
const& x,
double const t,
50 std::function<Eigen::Vector3d(
52 std::vector<GlobalVector*>
const&)>
const& getFlux) = 0;
55 template <
typename ShapeFunction,
typename IntegrationMethod,
int GlobalDim>
74 std::size_t ,
bool const is_axially_symmetric,
75 unsigned const integration_order,
MeshLib::Mesh const& bulk_mesh,
76 std::vector<std::pair<std::size_t, unsigned>> bulk_ids)
83 auto const shape_matrices =
90 auto const n_integration_points =
92 _ip_data.reserve(n_integration_points);
94 for (
unsigned ip = 0; ip < n_integration_points; ++ip)
99 _ip_data.emplace_back(shape_matrices[ip].detJ,
100 shape_matrices[ip].integralMeasure,
102 std::move(bulk_element_point));
113 std::vector<GlobalVector*>
const& x,
double const t,
114 std::function<Eigen::Vector3d(
116 std::vector<GlobalVector*>
const&)>
const& getFlux)
override
118 auto const n_integration_points =
122 double integrated_value = 0;
123 for (
unsigned ip = 0; ip < n_integration_points; ip++)
125 auto const bulk_flux = getFlux(
129 double const bulk_grad_times_normal(
130 Eigen::Map<Eigen::RowVectorXd const>(bulk_flux.data(),
135 bulk_grad_times_normal *
136 _ip_data[ip].detJ_times_integralMeasure_times_weight;
138 return integrated_value;
virtual std::size_t getID() const final
Returns the ID of the element.
virtual ~ConstraintDirichletBoundaryConditionLocalAssemblerInterface()=default
virtual double integrate(std::vector< GlobalVector * > const &x, double const t, std::function< Eigen::Vector3d(std::size_t const, MathLib::Point3d const &, double const, std::vector< GlobalVector * > const &)> const &getFlux)=0
Eigen::Vector3d const _surface_element_normal
ConstraintDirichletBoundaryConditionLocalAssembler(MeshLib::Element const &surface_element, std::size_t, bool const is_axially_symmetric, unsigned const integration_order, MeshLib::Mesh const &bulk_mesh, std::vector< std::pair< std::size_t, unsigned >> bulk_ids)
double integrate(std::vector< GlobalVector * > const &x, double const t, std::function< Eigen::Vector3d(std::size_t const, MathLib::Point3d const &, double const, std::vector< GlobalVector * > const &)> const &getFlux) override
ShapeMatrixPolicyType< ShapeFunction, GlobalDim > ShapeMatricesType
std::vector< IntegrationPointData > _ip_data
IntegrationMethod const _integration_method
std::size_t const _bulk_element_id
MeshLib::Element const & _surface_element
typename ShapeMatricesType::NodalVectorType NodalVectorType
typename ShapeMatricesType::NodalMatrixType NodalMatrixType
MathLib::Point3d getBulkElementPoint(Tri const &, std::size_t const face_id, MathLib::WeightedPoint1D const &wp)
Eigen::Vector3d calculateNormalizedSurfaceNormal(MeshLib::Element const &surface_element, MeshLib::Element const &bulk_element)
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)
@ N_J
calculates N, dNdr, J, and detJ
MatrixType< ShapeFunction::NPOINTS, ShapeFunction::NPOINTS > NodalMatrixType
VectorType< ShapeFunction::NPOINTS > NodalVectorType
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
IntegrationPointData(double const &detJ, double const &integral_measure, double const &integration_weight, MathLib::Point3d &&bulk_element_point_)
MathLib::Point3d bulk_element_point
double const detJ_times_integralMeasure_times_weight