24template <
typename ShapeFunction,
int GlobalDim>
39 std::size_t
const local_matrix_size,
41 bool const is_axially_symmetric,
43 :
Base(e, is_axially_symmetric, integration_method),
52 double const t, std::vector<GlobalVector*>
const& x,
62 unsigned const n_integration_points =
67 std::vector<double>
const local_values = x[process_id]->get(indices);
68 std::size_t
const bulk_element_id =
70 std::size_t
const bulk_face_id =
72 auto const& bulk_element =
73 *
_data.process.getMesh().getElement(bulk_element_id);
75 for (
unsigned ip = 0; ip < n_integration_points; ip++)
78 auto const& N = n_and_weight.N;
79 auto const& w = n_and_weight.weight;
82 auto const bulk_element_point =
85 double int_pt_value = 0.0;
89 -boundary_permeability_node_values * int_pt_value *
90 _data.process.getFlux(bulk_element_id, bulk_element_point, t, x)
92 _local_rhs.noalias() += N * neumann_node_values.dot(N) * w;
95 b.
add(indices, _local_rhs);
104 Eigen::Vector3d surface_normal =
106 auto const zeros_size = 3 -
_data.process.getMesh().getDimension();
107 surface_normal.tail(zeros_size).setZero();
108 return surface_normal;
MathLib::EigenMatrix GlobalMatrix
MathLib::EigenVector GlobalVector
void add(IndexType rowId, double v)
add entry
static Eigen::Vector3d getSurfaceNormal(Element const &e)
Returns the surface normal of a 2D element.
GenericNaturalBoundaryConditionLocalAssembler(MeshLib::Element const &e, bool is_axially_symmetric, NumLib::GenericIntegrationMethod const &integration_method)
MeshLib::Element const & _element
NumLib::GenericIntegrationMethod const & _integration_method
std::vector< NAndWeight, Eigen::aligned_allocator< NAndWeight > > const _ns_and_weights
typename ShapeMatricesType::NodalMatrixType NodalMatrixType
typename ShapeMatricesType::NodalVectorType NodalVectorType
typename Base::NodalVectorType NodalVectorType
GenericNaturalBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim > Base
std::size_t const _local_matrix_size
HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler(MeshLib::Element const &e, std::size_t const local_matrix_size, NumLib::GenericIntegrationMethod const &integration_method, bool const is_axially_symmetric, HCNonAdvectiveFreeComponentFlowBoundaryConditionData const &data)
Eigen::Vector3d const _surface_normal
Eigen::Vector3d getOrientedSurfaceNormal(MeshLib::Element const &e) const
HCNonAdvectiveFreeComponentFlowBoundaryConditionData const & _data
void assemble(std::size_t const mesh_item_id, NumLib::LocalToGlobalIndexMap const &dof_table_boundary, double const t, std::vector< GlobalVector * > const &x, int const process_id, GlobalMatrix *, GlobalVector &b, GlobalMatrix *) override
typename Base::NodalMatrixType NodalMatrixType
MathLib::Point3d getBulkElementPoint(MeshLib::CellType const bulk_element_cell_type, std::size_t const bulk_face_id, MathLib::WeightedPoint const &point_on_face)
void shapeFunctionInterpolate(const NodalValues &, const ShapeMatrix &)
std::vector< GlobalIndexType > getIndices(std::size_t const mesh_item_id, NumLib::LocalToGlobalIndexMap const &dof_table)
ParameterLib::Parameter< double > const & boundary_permeability
MeshLib::PropertyVector< std::size_t > const bulk_element_ids
MeshLib::PropertyVector< std::size_t > const bulk_face_ids