OGS
BoundaryConditionCollection.cpp
Go to the documentation of this file.
1
12
13#include <typeinfo>
14
16#include "ReleaseNodalForce.h"
17
18namespace ProcessLib
19{
20
22 GlobalVector const* r_neq) const
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}
38
40 const double t, std::vector<GlobalVector*> const& x, int const process_id,
41 GlobalMatrix* K, GlobalVector& b, GlobalMatrix* Jac) const
42{
43 for (auto const& bc : _boundary_conditions)
44 {
45 bc->applyNaturalBC(t, x, process_id, K, b, Jac);
46 }
47}
48
50 std::vector<std::reference_wrapper<ProcessVariable>> const&
51 process_variables,
52 NumLib::LocalToGlobalIndexMap const& dof_table,
53 unsigned const integration_order, Process const& process,
54 std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media)
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}
74} // namespace ProcessLib
Global vector based on Eigen vector.
Definition EigenVector.h:26
std::vector< NumLib::IndexValueVector< GlobalIndexType > > _dirichlet_bcs
std::vector< std::unique_ptr< BoundaryCondition > > _boundary_conditions
void applyNaturalBC(const double t, std::vector< GlobalVector * > const &x, int const process_id, GlobalMatrix *K, GlobalVector &b, GlobalMatrix *Jac) const
std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const & _parameters
void setReleaseNodalForces(GlobalVector const *r_neq) 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)
std::vector< std::unique_ptr< BoundaryCondition > > createBoundaryConditions(const NumLib::LocalToGlobalIndexMap &dof_table, const int variable_id, unsigned const integration_order, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, Process const &process, std::vector< std::reference_wrapper< ProcessVariable > > const &all_process_variables_for_this_process, std::map< int, std::shared_ptr< MaterialPropertyLib::Medium > > const &media)
Boundary condition for simulating excavation using the release nodal force approach.
void set(GlobalVector const *r_neq)
void setLocalAccessibleVector(PETScVector const &x)
Definition LinAlg.cpp:27