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

Detailed Description

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

Definition at line 25 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 29 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 37 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 50 of file HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler.h.

55 {
57 // Get element nodes for the interpolation from nodes to
58 // integration point.
60 _data.boundary_permeability.getNodalValuesOnElement(Base::_element,
61 t);
62 unsigned const n_integration_points =
63 Base::_integration_method.getNumberOfPoints();
64
65 auto const indices =
69 _data.bulk_element_ids[Base::_element.getID()];
71 _data.bulk_face_ids[Base::_element.getID()];
72 auto const& bulk_element =
73 *_data.process.getMesh().getElement(bulk_element_id);
74
75 for (unsigned ip = 0; ip < n_integration_points; ip++)
76 {
78 auto const& N = n_and_weight.N;
79 auto const& w = n_and_weight.weight;
80 auto const& wp = Base::_integration_method.getWeightedPoint(ip);
81
82 auto const bulk_element_point =
84
85 double int_pt_value = 0.0;
87
90 _data.process.getFlux(bulk_element_id, bulk_element_point, t, x)
91 .dot(_surface_normal);
92 _local_rhs.noalias() += N * neumann_node_values.dot(N) * w;
93 }
94
95 b.add(indices, _local_rhs);
96 }
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 99 of file HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler.h.

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

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

Referenced by HCNonAdvectiveFreeComponentFlowBoundaryConditionLocalAssembler().

Member Data Documentation

◆ _data

◆ _local_matrix_size

◆ _surface_normal


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