OGS
ConstraintDirichletBoundaryCondition.h
Go to the documentation of this file.
1
11#pragma once
12
13#include "BoundaryCondition.h"
18
19namespace ProcessLib
20{
26{
27public:
52 ParameterLib::Parameter<double> const& parameter,
53 NumLib::LocalToGlobalIndexMap const& dof_table_bulk,
54 int const variable_id, int const component_id,
55 MeshLib::Mesh const& bc_mesh, unsigned const integration_order,
56 MeshLib::Mesh const& bulk_mesh, double const constraint_threshold,
57 bool const lower,
58 std::function<Eigen::Vector3d(std::size_t const,
59 MathLib::Point3d const&, double const,
60 std::vector<GlobalVector*> const&)>
61 getFlux);
62
63 void preTimestep(double const t, std::vector<GlobalVector*> const& x,
64 int const process_id) override;
65
67 const double t, const GlobalVector& x,
68 NumLib::IndexValueVector<GlobalIndexType>& bc_values) const override;
69
70private:
72
75 std::unique_ptr<NumLib::LocalToGlobalIndexMap> _dof_table_boundary;
76
77 int const _variable_id;
78 int const _component_id;
79
83
85 unsigned const _integration_order;
86
90 std::vector<std::pair<std::size_t, unsigned>> _bulk_ids;
91
93 std::vector<double> _flux_values;
94
96 std::vector<std::unique_ptr<
99
103
108 bool const _lower;
109
113
115 std::function<Eigen::Vector3d(std::size_t const, MathLib::Point3d const&,
116 double const,
117 std::vector<GlobalVector*> const&)>
119};
120
123std::unique_ptr<ConstraintDirichletBoundaryCondition>
125 BaseLib::ConfigTree const& config, MeshLib::Mesh const& bc_mesh,
126 NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id,
127 unsigned const integration_order, int const component_id,
128 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
129 Process const& constraining_process);
130} // namespace ProcessLib
Global vector based on Eigen vector.
Definition EigenVector.h:25
void getEssentialBCValues(const double t, const GlobalVector &x, NumLib::IndexValueVector< GlobalIndexType > &bc_values) const override
Writes the values of essential BCs to bc_values.
std::vector< std::unique_ptr< ConstraintDirichletBoundaryConditionLocalAssemblerInterface > > _local_assemblers
Local assemblers for each boundary element.
std::unique_ptr< NumLib::LocalToGlobalIndexMap > _dof_table_boundary
void preTimestep(double const t, std::vector< GlobalVector * > const &x, int const process_id) override
std::function< Eigen::Vector3d(std::size_t const, MathLib::Point3d const &, double const, std::vector< GlobalVector * > const &) _getFlux)
The function _getFlux calculates the flux through the boundary element.
std::vector< std::pair< std::size_t, unsigned > > _bulk_ids
std::vector< double > _flux_values
Stores the results of the flux computations per boundary element.
ConstraintDirichletBoundaryCondition(ParameterLib::Parameter< double > const &parameter, NumLib::LocalToGlobalIndexMap const &dof_table_bulk, int const variable_id, int const component_id, MeshLib::Mesh const &bc_mesh, unsigned const integration_order, MeshLib::Mesh const &bulk_mesh, double const constraint_threshold, bool const lower, std::function< Eigen::Vector3d(std::size_t const, MathLib::Point3d const &, double const, std::vector< GlobalVector * > const &)> getFlux)
unsigned const _integration_order
Integration order for integration over the lower-dimensional elements.
std::unique_ptr< ConstraintDirichletBoundaryCondition > createConstraintDirichletBoundaryCondition(BaseLib::ConfigTree const &config, MeshLib::Mesh const &bc_mesh, NumLib::LocalToGlobalIndexMap const &dof_table_bulk, int const variable_id, unsigned const integration_order, int const component_id, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, Process const &constraining_process)