21 double const& integral_measure,
22 double const& integration_weight,
43 std::vector<GlobalVector*>
const& x,
double const t,
44 std::function<Eigen::Vector3d(
46 std::vector<GlobalVector*>
const&)>
const& getFlux) = 0;
49template <
typename ShapeFunction,
int GlobalDim>
70 bool const is_axially_symmetric,
MeshLib::Mesh const& bulk_mesh,
71 std::vector<std::pair<std::size_t, unsigned>> bulk_ids)
78 auto const shape_matrices =
86 auto const n_integration_points =
88 _ip_data.reserve(n_integration_points);
90 for (
unsigned ip = 0; ip < n_integration_points; ++ip)
93 auto bulk_element_point =
95 _ip_data.emplace_back(shape_matrices[ip].detJ,
96 shape_matrices[ip].integralMeasure,
98 std::move(bulk_element_point));
109 std::vector<GlobalVector*>
const& x,
double const t,
110 std::function<Eigen::Vector3d(
112 std::vector<GlobalVector*>
const&)>
const& getFlux)
override
114 auto const n_integration_points =
118 double integrated_value = 0;
119 for (
unsigned ip = 0; ip < n_integration_points; ip++)
121 auto const bulk_flux = getFlux(
125 double const bulk_grad_times_normal(
126 Eigen::Map<Eigen::RowVectorXd const>(bulk_flux.data(),
131 bulk_grad_times_normal *
132 _ip_data[ip].detJ_times_integralMeasure_times_weight;
134 return integrated_value;
EigenFixedShapeMatrixPolicy< ShapeFunction, GlobalDim > ShapeMatrixPolicyType
const Element * getElement(std::size_t idx) const
Get the element with the given index.
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