OGS
BoundaryConditionCollection.h
Go to the documentation of this file.
1 
11 #pragma once
12 
13 #include "BoundaryCondition.h"
16 
17 namespace ProcessLib
18 {
20 {
21 public:
23  std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
24  parameters)
25  : _parameters(parameters)
26  {
27  }
28 
29  void applyNaturalBC(const double t, std::vector<GlobalVector*> const& x,
30  int const process_id, GlobalMatrix& K, GlobalVector& b,
31  GlobalMatrix* Jac) const;
32 
33  std::vector<NumLib::IndexValueVector<GlobalIndexType>> const*
34  getKnownSolutions(double const t, GlobalVector const& x) const
35  {
36  auto const n_bcs = _boundary_conditions.size();
37  for (std::size_t i = 0; i < n_bcs; ++i)
38  {
39  auto const& bc = *_boundary_conditions[i];
40  auto& dirichlet_storage = _dirichlet_bcs[i];
41  bc.getEssentialBCValues(t, x, dirichlet_storage);
42  }
43  return &_dirichlet_bcs;
44  }
45 
47  std::vector<std::reference_wrapper<ProcessVariable>> const&
48  process_variables,
49  NumLib::LocalToGlobalIndexMap const& dof_table,
50  unsigned const integration_order, Process const& process);
51 
52  void addBoundaryCondition(std::unique_ptr<BoundaryCondition>&& bc)
53  {
54  _boundary_conditions.push_back(std::move(bc));
55  }
56 
57  void preTimestep(const double t, std::vector<GlobalVector*> const& x,
58  int const process_id) const
59  {
60  for (auto const& bc_ptr : _boundary_conditions)
61  {
62  bc_ptr->preTimestep(t, x, process_id);
63  }
64  }
65 
66  void postTimestep(const double t, std::vector<GlobalVector*> const& x,
67  int const process_id) const
68  {
69  for (auto const& bc_ptr : _boundary_conditions)
70  {
71  bc_ptr->postTimestep(t, x, process_id);
72  }
73  }
74 
75 private:
76  mutable std::vector<NumLib::IndexValueVector<GlobalIndexType>>
78  std::vector<std::unique_ptr<BoundaryCondition>> _boundary_conditions;
79  std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
81 };
82 
83 } // namespace ProcessLib
Global vector based on Eigen vector.
Definition: EigenVector.h:26
void applyNaturalBC(const double t, std::vector< GlobalVector * > const &x, int const process_id, GlobalMatrix &K, GlobalVector &b, GlobalMatrix *Jac) const
BoundaryConditionCollection(std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const &parameters)
std::vector< NumLib::IndexValueVector< GlobalIndexType > > _dirichlet_bcs
void addBCsForProcessVariables(std::vector< std::reference_wrapper< ProcessVariable >> const &process_variables, NumLib::LocalToGlobalIndexMap const &dof_table, unsigned const integration_order, Process const &process)
void postTimestep(const double t, std::vector< GlobalVector * > const &x, int const process_id) const
void addBoundaryCondition(std::unique_ptr< BoundaryCondition > &&bc)
std::vector< std::unique_ptr< BoundaryCondition > > _boundary_conditions
std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const & _parameters
std::vector< NumLib::IndexValueVector< GlobalIndexType > > const * getKnownSolutions(double const t, GlobalVector const &x) const
void preTimestep(const double t, std::vector< GlobalVector * > const &x, int const process_id) const