OGS
ProcessLib::HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim > Class Template Referencefinal

Detailed Description

template<typename ShapeFunction, int GlobalDim>
class ProcessLib::HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim >

Definition at line 32 of file HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler.h.

#include <HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler.h>

Inheritance diagram for ProcessLib::HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim >:
[legend]
Collaboration diagram for ProcessLib::HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim >:
[legend]

Public Member Functions

 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)
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
Public Member Functions inherited from ProcessLib::GenericNaturalBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim >
 GenericNaturalBoundaryConditionLocalAssembler (MeshLib::Element const &e, bool is_axially_symmetric, NumLib::GenericIntegrationMethod const &integration_method)
Public Member Functions inherited from ProcessLib::GenericNaturalBoundaryConditionLocalAssemblerInterface
virtual ~GenericNaturalBoundaryConditionLocalAssemblerInterface ()=default

Private Types

using Base
using NodalVectorType = typename Base::NodalVectorType
using NodalMatrixType = typename Base::NodalMatrixType

Private Member Functions

Eigen::Vector3d getOrientedSurfaceNormal (MeshLib::Element const &e) const

Private Attributes

HCNonAdvectiveFreeComponentFlowBoundaryConditionData const & _data
std::size_t const _local_matrix_size
Eigen::Vector3d const _surface_normal

Additional Inherited Members

Protected Types inherited from ProcessLib::GenericNaturalBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim >
using ShapeMatricesType = ShapeMatrixPolicyType<ShapeFunction, GlobalDim>
using NodalMatrixType = typename ShapeMatricesType::NodalMatrixType
using NodalVectorType = typename ShapeMatricesType::NodalVectorType
Protected Attributes inherited from ProcessLib::GenericNaturalBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim >
NumLib::GenericIntegrationMethod const & _integration_method
std::vector< NAndWeight, Eigen::aligned_allocator< NAndWeight > > const _ns_and_weights
MeshLib::Element const & _element

Member Typedef Documentation

◆ Base

template<typename ShapeFunction, int GlobalDim>
using ProcessLib::HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim >::Base
private
Initial value:
GenericNaturalBoundaryConditionLocalAssembler(MeshLib::Element const &e, bool is_axially_symmetric, NumLib::GenericIntegrationMethod const &integration_method)

Definition at line 36 of file HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler.h.

◆ NodalMatrixType

template<typename ShapeFunction, int GlobalDim>
using ProcessLib::HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim >::NodalMatrixType = typename Base::NodalMatrixType
private

◆ NodalVectorType

template<typename ShapeFunction, int GlobalDim>
using ProcessLib::HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim >::NodalVectorType = typename Base::NodalVectorType
private

Constructor & Destructor Documentation

◆ HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler()

template<typename ShapeFunction, int GlobalDim>
ProcessLib::HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim >::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 )
inline

The neumann_bc_term factor is directly integrated into the local element matrix.

Definition at line 44 of file HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler.h.

References _data, _local_matrix_size, _surface_normal, and getOrientedSurfaceNormal().

Member Function Documentation

◆ assemble()

template<typename ShapeFunction, int GlobalDim>
void ProcessLib::HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim >::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 *  )
inlineoverridevirtual

Implements ProcessLib::GenericNaturalBoundaryConditionLocalAssemblerInterface.

Definition at line 57 of file HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler.h.

62 {
64 // Get element nodes for the interpolation from nodes to
65 // integration point.
67 _data.boundary_permeability.getNodalValuesOnElement(Base::_element,
68 t);
69 unsigned const n_integration_points =
70 Base::_integration_method.getNumberOfPoints();
71
72 auto const indices =
76 _data.bulk_element_ids[Base::_element.getID()];
78 _data.bulk_face_ids[Base::_element.getID()];
79 auto const& bulk_element =
80 *_data.process.getMesh().getElement(bulk_element_id);
81
82 for (unsigned ip = 0; ip < n_integration_points; ip++)
83 {
85 auto const& N = n_and_weight.N;
86 auto const& w = n_and_weight.weight;
87 auto const& wp = Base::_integration_method.getWeightedPoint(ip);
88
89 auto const bulk_element_point =
91
92 double int_pt_value = 0.0;
94
97 _data.process.getFlux(bulk_element_id, bulk_element_point, t, x)
98 .dot(_surface_normal);
99 _local_rhs.noalias() += N * neumann_node_values.dot(N) * w;
100 }
101
102 b.add(indices, _local_rhs);
103 }
std::vector< NAndWeight, Eigen::aligned_allocator< NAndWeight > > const _ns_and_weights
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)

References _data, ProcessLib::GenericNaturalBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim >::_element, ProcessLib::GenericNaturalBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim >::_integration_method, _local_matrix_size, ProcessLib::GenericNaturalBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim >::_ns_and_weights, _surface_normal, MathLib::EigenVector::add(), MeshLib::getBulkElementPoint(), NumLib::getIndices(), and NumLib::detail::shapeFunctionInterpolate().

◆ getOrientedSurfaceNormal()

template<typename ShapeFunction, int GlobalDim>
Eigen::Vector3d ProcessLib::HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim >::getOrientedSurfaceNormal ( MeshLib::Element const & e) const
inlineprivate

Definition at line 106 of file HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler.h.

107 {
108 // At the moment (2016-09-28) the surface normal is not oriented
109 // according to the right hand rule
110 // for correct results it is necessary to multiply the normal with -1
113 auto const zeros_size = 3 - _data.process.getMesh().getDimension();
114 surface_normal.tail(zeros_size).setZero();
115 return surface_normal;
116 }
static Eigen::Vector3d getSurfaceNormal(Element const &e)
Returns the surface normal of a 2D element.
Definition FaceRule.cpp:40

References _data, and MeshLib::FaceRule::getSurfaceNormal().

Referenced by HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler().

Member Data Documentation

◆ _data

◆ _local_matrix_size

template<typename ShapeFunction, int GlobalDim>
std::size_t const ProcessLib::HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim >::_local_matrix_size
private

◆ _surface_normal

template<typename ShapeFunction, int GlobalDim>
Eigen::Vector3d const ProcessLib::HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler< ShapeFunction, GlobalDim >::_surface_normal
private

The documentation for this class was generated from the following file: