28 double const& integral_measure,
29 double const& integration_weight,
50 std::vector<GlobalVector*>
const& x,
double const t,
51 std::function<Eigen::Vector3d(
53 std::vector<GlobalVector*>
const&)>
const& getFlux) = 0;
56template <
typename ShapeFunction,
int GlobalDim>
77 bool const is_axially_symmetric,
MeshLib::Mesh const& bulk_mesh,
78 std::vector<std::pair<std::size_t, unsigned>> bulk_ids)
85 auto const shape_matrices =
93 auto const n_integration_points =
95 _ip_data.reserve(n_integration_points);
97 for (
unsigned ip = 0; ip < n_integration_points; ++ip)
100 auto bulk_element_point =
102 _ip_data.emplace_back(shape_matrices[ip].detJ,
103 shape_matrices[ip].integralMeasure,
105 std::move(bulk_element_point));
116 std::vector<GlobalVector*>
const& x,
double const t,
117 std::function<Eigen::Vector3d(
119 std::vector<GlobalVector*>
const&)>
const& getFlux)
override
121 auto const n_integration_points =
125 double integrated_value = 0;
126 for (
unsigned ip = 0; ip < n_integration_points; ip++)
128 auto const bulk_flux = getFlux(
132 double const bulk_grad_times_normal(
133 Eigen::Map<Eigen::RowVectorXd const>(bulk_flux.data(),
138 bulk_grad_times_normal *
139 _ip_data[ip].detJ_times_integralMeasure_times_weight;
141 return integrated_value;
std::size_t getID() const
Returns the ID of the element.
const Element * getElement(std::size_t idx) const
Get the element with the given index.
MathLib::WeightedPoint const & getWeightedPoint(unsigned const igp) const
unsigned getNumberOfPoints() const
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
std::vector< IntegrationPointData > _ip_data
MeshLib::Element const & _surface_element
std::size_t const _bulk_element_id
Eigen::Vector3d const _surface_element_normal
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
typename ShapeMatricesType::NodalMatrixType NodalMatrixType
typename ShapeMatricesType::NodalVectorType NodalVectorType
ShapeMatrixPolicyType< ShapeFunction, GlobalDim > ShapeMatricesType
ConstraintDirichletBoundaryConditionLocalAssembler(MeshLib::Element const &surface_element, std::size_t, NumLib::GenericIntegrationMethod const &integration_method, bool const is_axially_symmetric, MeshLib::Mesh const &bulk_mesh, std::vector< std::pair< std::size_t, unsigned > > bulk_ids)
NumLib::GenericIntegrationMethod const & _integration_method
MathLib::Point3d getBulkElementPoint(MeshLib::CellType const bulk_element_cell_type, std::size_t const bulk_face_id, MathLib::WeightedPoint const &point_on_face)
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