OGS
ProcessLib::VariableDependentNeumannBoundaryConditionLocalAssembler< ShapeFunction, IntegrationMethod, GlobalDim > Class Template Referencefinal

Detailed Description

template<typename ShapeFunction, typename IntegrationMethod, int GlobalDim>
class ProcessLib::VariableDependentNeumannBoundaryConditionLocalAssembler< ShapeFunction, IntegrationMethod, GlobalDim >

Definition at line 32 of file VariableDependentNeumannBoundaryConditionLocalAssembler.h.

#include <VariableDependentNeumannBoundaryConditionLocalAssembler.h>

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

Public Member Functions

 VariableDependentNeumannBoundaryConditionLocalAssembler (MeshLib::Element const &e, std::size_t const local_matrix_size, bool const is_axially_symmetric, unsigned const integration_order, VariableDependentNeumannBoundaryConditionData 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, IntegrationMethod, GlobalDim >
 GenericNaturalBoundaryConditionLocalAssembler (MeshLib::Element const &e, bool is_axially_symmetric, unsigned const integration_order)
 
- Public Member Functions inherited from ProcessLib::GenericNaturalBoundaryConditionLocalAssemblerInterface
virtual ~GenericNaturalBoundaryConditionLocalAssemblerInterface ()=default
 

Private Types

using Base = GenericNaturalBoundaryConditionLocalAssembler< ShapeFunction, IntegrationMethod, GlobalDim >
 
using NodalVectorType = typename Base::NodalVectorType
 
using NodalMatrixType = typename Base::NodalMatrixType
 

Private Attributes

VariableDependentNeumannBoundaryConditionData const & _data
 
std::size_t const _local_matrix_size
 

Additional Inherited Members

- Protected Types inherited from ProcessLib::GenericNaturalBoundaryConditionLocalAssembler< ShapeFunction, IntegrationMethod, GlobalDim >
using ShapeMatricesType = ShapeMatrixPolicyType< ShapeFunction, GlobalDim >
 
using NodalMatrixType = typename ShapeMatricesType::NodalMatrixType
 
using NodalVectorType = typename ShapeMatricesType::NodalVectorType
 
- Protected Attributes inherited from ProcessLib::GenericNaturalBoundaryConditionLocalAssembler< ShapeFunction, IntegrationMethod, GlobalDim >
IntegrationMethod 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 , typename IntegrationMethod , int GlobalDim>
using ProcessLib::VariableDependentNeumannBoundaryConditionLocalAssembler< ShapeFunction, IntegrationMethod, GlobalDim >::Base = GenericNaturalBoundaryConditionLocalAssembler< ShapeFunction, IntegrationMethod, GlobalDim>
private

◆ NodalMatrixType

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

◆ NodalVectorType

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

Constructor & Destructor Documentation

◆ VariableDependentNeumannBoundaryConditionLocalAssembler()

template<typename ShapeFunction , typename IntegrationMethod , int GlobalDim>
ProcessLib::VariableDependentNeumannBoundaryConditionLocalAssembler< ShapeFunction, IntegrationMethod, GlobalDim >::VariableDependentNeumannBoundaryConditionLocalAssembler ( MeshLib::Element const &  e,
std::size_t const  local_matrix_size,
bool const  is_axially_symmetric,
unsigned const  integration_order,
VariableDependentNeumannBoundaryConditionData const &  data 
)
inline

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

Definition at line 44 of file VariableDependentNeumannBoundaryConditionLocalAssembler.h.

50  : Base(e, is_axially_symmetric, integration_order),
51  _data(data),
52  _local_matrix_size(local_matrix_size)
53  {
54  }
GenericNaturalBoundaryConditionLocalAssembler< ShapeFunction, IntegrationMethod, GlobalDim > Base

Member Function Documentation

◆ assemble()

template<typename ShapeFunction , typename IntegrationMethod , int GlobalDim>
void ProcessLib::VariableDependentNeumannBoundaryConditionLocalAssembler< ShapeFunction, IntegrationMethod, 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 56 of file VariableDependentNeumannBoundaryConditionLocalAssembler.h.

61  {
63  _local_rhs.setZero();
64  // Get element nodes for the interpolation from nodes to
65  // integration point.
66  NodalVectorType const constant_node_values =
68  .template topRows<ShapeFunction::MeshElement::n_all_nodes>();
69  NodalVectorType const coefficient_current_variable_node_values =
72  .template topRows<ShapeFunction::MeshElement::n_all_nodes>();
73  NodalVectorType const coefficient_other_variable_node_values =
76  .template topRows<ShapeFunction::MeshElement::n_all_nodes>();
77  NodalVectorType const coefficient_mixed_variables_node_values =
80  .template topRows<ShapeFunction::MeshElement::n_all_nodes>();
81  unsigned const n_integration_points =
82  Base::_integration_method.getNumberOfPoints();
83 
84  auto const indices_current_variable =
85  NumLib::getIndices(mesh_item_id, dof_table_boundary);
86  auto const indices_other_variable = NumLib::getIndices(
88  std::vector<double> const local_current_variable =
89  x[process_id]->get(indices_current_variable);
90  std::vector<double> const local_other_variable =
91  x[process_id]->get(indices_other_variable);
92 
93  for (unsigned ip = 0; ip < n_integration_points; ip++)
94  {
95  auto const& n_and_weight = Base::_ns_and_weights[ip];
96  auto const& N = n_and_weight.N;
97  auto const& w = n_and_weight.weight;
98 
99  double current_variable_int_pt = 0.0;
100  double other_variable_int_pt = 0.0;
101 
102  NumLib::shapeFunctionInterpolate(local_current_variable, N,
103  current_variable_int_pt);
104  NumLib::shapeFunctionInterpolate(local_other_variable, N,
105  other_variable_int_pt);
106  NodalVectorType const neumann_node_values =
107  constant_node_values +
108  coefficient_current_variable_node_values *
109  current_variable_int_pt +
110  coefficient_other_variable_node_values * other_variable_int_pt +
111  coefficient_mixed_variables_node_values *
112  current_variable_int_pt * other_variable_int_pt;
113  _local_rhs.noalias() += N * neumann_node_values.dot(N) * w;
114  }
115 
116  b.add(indices_current_variable, _local_rhs);
117  }
void add(IndexType rowId, double v)
add entry
Definition: EigenVector.h:80
std::vector< NAndWeight, Eigen::aligned_allocator< NAndWeight > > const _ns_and_weights
void shapeFunctionInterpolate(const NodalValues &nodal_values, const ShapeMatrix &shape_matrix_N, double &interpolated_value, ScalarTypes &... interpolated_values)
Definition: Interpolation.h:79
std::vector< GlobalIndexType > getIndices(std::size_t const mesh_item_id, NumLib::LocalToGlobalIndexMap const &dof_table)
virtual Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > getNodalValuesOnElement(MeshLib::Element const &element, double const t) const
Returns a matrix of values for all nodes of the given element.
Definition: Parameter.h:163

References ProcessLib::VariableDependentNeumannBoundaryConditionLocalAssembler< ShapeFunction, IntegrationMethod, GlobalDim >::_data, ProcessLib::GenericNaturalBoundaryConditionLocalAssembler< ShapeFunction, IntegrationMethod, GlobalDim >::_element, ProcessLib::GenericNaturalBoundaryConditionLocalAssembler< ShapeFunction, IntegrationMethod, GlobalDim >::_integration_method, ProcessLib::VariableDependentNeumannBoundaryConditionLocalAssembler< ShapeFunction, IntegrationMethod, GlobalDim >::_local_matrix_size, ProcessLib::GenericNaturalBoundaryConditionLocalAssembler< ShapeFunction, IntegrationMethod, GlobalDim >::_ns_and_weights, MathLib::EigenVector::add(), ProcessLib::VariableDependentNeumannBoundaryConditionData::coefficient_current_variable, ProcessLib::VariableDependentNeumannBoundaryConditionData::coefficient_mixed_variables, ProcessLib::VariableDependentNeumannBoundaryConditionData::coefficient_other_variable, ProcessLib::VariableDependentNeumannBoundaryConditionData::constant, ProcessLib::VariableDependentNeumannBoundaryConditionData::dof_table_boundary_other_variable, NumLib::getIndices(), ParameterLib::Parameter< T >::getNodalValuesOnElement(), and NumLib::shapeFunctionInterpolate().

Member Data Documentation

◆ _data

◆ _local_matrix_size

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

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