OGS
ProcessLib::BoundaryConditionCollection Class Referencefinal

Detailed Description

Definition at line 20 of file BoundaryConditionCollection.h.

#include <BoundaryConditionCollection.h>

Public Member Functions

 BoundaryConditionCollection (std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters)
 
void setReleaseNodalForces (GlobalVector const *r_neq) const
 
void applyNaturalBC (const double t, std::vector< GlobalVector * > const &x, int const process_id, GlobalMatrix *K, GlobalVector &b, GlobalMatrix *Jac) const
 
std::vector< NumLib::IndexValueVector< GlobalIndexType > > const * getKnownSolutions (double const t, GlobalVector const &x) const
 
void addBCsForProcessVariables (std::vector< std::reference_wrapper< ProcessVariable > > const &process_variables, NumLib::LocalToGlobalIndexMap const &dof_table, unsigned const integration_order, Process const &process, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const &media)
 
void addBoundaryCondition (std::unique_ptr< BoundaryCondition > &&bc)
 
void preTimestep (const double t, std::vector< GlobalVector * > const &x, int const process_id) const
 
void postTimestep (const double t, std::vector< GlobalVector * > const &x, int const process_id) const
 

Private Attributes

std::vector< NumLib::IndexValueVector< GlobalIndexType > > _dirichlet_bcs
 
std::vector< std::unique_ptr< BoundaryCondition > > _boundary_conditions
 
std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const & _parameters
 

Constructor & Destructor Documentation

◆ BoundaryConditionCollection()

ProcessLib::BoundaryConditionCollection::BoundaryConditionCollection ( std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const & parameters)
inlineexplicit

Definition at line 23 of file BoundaryConditionCollection.h.

26 : _parameters(parameters)
27 {
28 }
std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const & _parameters

Member Function Documentation

◆ addBCsForProcessVariables()

void ProcessLib::BoundaryConditionCollection::addBCsForProcessVariables ( std::vector< std::reference_wrapper< ProcessVariable > > const & process_variables,
NumLib::LocalToGlobalIndexMap const & dof_table,
unsigned const integration_order,
Process const & process,
std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const & media )

Definition at line 49 of file BoundaryConditionCollection.cpp.

55{
56 for (int variable_id = 0;
57 variable_id < static_cast<int>(process_variables.size());
58 ++variable_id)
59 {
60 ProcessVariable& pv = process_variables[variable_id];
61 auto bcs = pv.createBoundaryConditions(
62 dof_table, variable_id, integration_order, _parameters, process,
63 process_variables, media);
64
65 std::move(bcs.begin(), bcs.end(),
66 std::back_inserter(_boundary_conditions));
67 }
68
69 // For each BC there will be storage for Dirichlet BC. This storage will be
70 // uninitialized by default, and has to be filled by the respective BC
71 // object if needed.
73}
std::vector< NumLib::IndexValueVector< GlobalIndexType > > _dirichlet_bcs
std::vector< std::unique_ptr< BoundaryCondition > > _boundary_conditions

References _boundary_conditions, _dirichlet_bcs, _parameters, and ProcessLib::ProcessVariable::createBoundaryConditions().

◆ addBoundaryCondition()

void ProcessLib::BoundaryConditionCollection::addBoundaryCondition ( std::unique_ptr< BoundaryCondition > && bc)
inline

Definition at line 57 of file BoundaryConditionCollection.h.

58 {
59 _boundary_conditions.push_back(std::move(bc));
60 }

References _boundary_conditions.

◆ applyNaturalBC()

void ProcessLib::BoundaryConditionCollection::applyNaturalBC ( const double t,
std::vector< GlobalVector * > const & x,
int const process_id,
GlobalMatrix * K,
GlobalVector & b,
GlobalMatrix * Jac ) const

Definition at line 39 of file BoundaryConditionCollection.cpp.

42{
43 for (auto const& bc : _boundary_conditions)
44 {
45 bc->applyNaturalBC(t, x, process_id, K, b, Jac);
46 }
47}

References _boundary_conditions.

◆ getKnownSolutions()

std::vector< NumLib::IndexValueVector< GlobalIndexType > > const * ProcessLib::BoundaryConditionCollection::getKnownSolutions ( double const t,
GlobalVector const & x ) const
inline

Definition at line 37 of file BoundaryConditionCollection.h.

38 {
39 auto const n_bcs = _boundary_conditions.size();
40 for (std::size_t i = 0; i < n_bcs; ++i)
41 {
42 auto const& bc = *_boundary_conditions[i];
43 auto& dirichlet_storage = _dirichlet_bcs[i];
44 bc.getEssentialBCValues(t, x, dirichlet_storage);
45 }
46 return &_dirichlet_bcs;
47 }

References _boundary_conditions, and _dirichlet_bcs.

◆ postTimestep()

void ProcessLib::BoundaryConditionCollection::postTimestep ( const double t,
std::vector< GlobalVector * > const & x,
int const process_id ) const
inline

Definition at line 71 of file BoundaryConditionCollection.h.

73 {
74 for (auto const& bc_ptr : _boundary_conditions)
75 {
76 bc_ptr->postTimestep(t, x, process_id);
77 }
78 }

References _boundary_conditions.

◆ preTimestep()

void ProcessLib::BoundaryConditionCollection::preTimestep ( const double t,
std::vector< GlobalVector * > const & x,
int const process_id ) const
inline

Definition at line 62 of file BoundaryConditionCollection.h.

64 {
65 for (auto const& bc_ptr : _boundary_conditions)
66 {
67 bc_ptr->preTimestep(t, x, process_id);
68 }
69 }

References _boundary_conditions.

◆ setReleaseNodalForces()

void ProcessLib::BoundaryConditionCollection::setReleaseNodalForces ( GlobalVector const * r_neq) const

Definition at line 21 of file BoundaryConditionCollection.cpp.

23{
25
26 for (auto const& bc : _boundary_conditions)
27 {
28 auto* release_nodal_forces = dynamic_cast<ReleaseNodalForce*>(bc.get());
29 if (!release_nodal_forces)
30 {
31 continue;
32 }
33 // For ReleasedNodalForce, we need to set the non-equilibrium
34 // initial residuum vector.
35 release_nodal_forces->set(r_neq);
36 }
37}
void setLocalAccessibleVector(PETScVector const &x)
Definition LinAlg.cpp:27

References _boundary_conditions, ProcessLib::ReleaseNodalForce::set(), and MathLib::LinAlg::setLocalAccessibleVector().

Member Data Documentation

◆ _boundary_conditions

std::vector<std::unique_ptr<BoundaryCondition> > ProcessLib::BoundaryConditionCollection::_boundary_conditions
private

◆ _dirichlet_bcs

std::vector<NumLib::IndexValueVector<GlobalIndexType> > ProcessLib::BoundaryConditionCollection::_dirichlet_bcs
mutableprivate

Definition at line 82 of file BoundaryConditionCollection.h.

Referenced by addBCsForProcessVariables(), and getKnownSolutions().

◆ _parameters

std::vector<std::unique_ptr<ParameterLib::ParameterBase> > const& ProcessLib::BoundaryConditionCollection::_parameters
private

Definition at line 85 of file BoundaryConditionCollection.h.

Referenced by addBCsForProcessVariables().


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