OGS
ConstraintDirichletBoundaryCondition.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
6#include "BoundaryCondition.h"
11
12namespace ProcessLib
13{
19{
20public:
45 ParameterLib::Parameter<double> const& parameter,
46 NumLib::LocalToGlobalIndexMap const& dof_table_bulk,
47 int const variable_id, int const component_id,
48 MeshLib::Mesh const& bc_mesh, unsigned const integration_order,
49 MeshLib::Mesh const& bulk_mesh, double const constraint_threshold,
50 bool const lower,
51 std::function<Eigen::Vector3d(std::size_t const,
52 MathLib::Point3d const&, double const,
53 std::vector<GlobalVector*> const&)>
54 getFlux);
55
56 void preTimestep(double const t, std::vector<GlobalVector*> const& x,
57 int const process_id) override;
58
60 const double t, const GlobalVector& x,
61 NumLib::IndexValueVector<GlobalIndexType>& bc_values) const override;
62
63private:
65
68 std::unique_ptr<NumLib::LocalToGlobalIndexMap> _dof_table_boundary;
69
70 int const _variable_id;
71 int const _component_id;
72
76
78 unsigned const _integration_order;
79
83 std::vector<std::pair<std::size_t, unsigned>> _bulk_ids;
84
86 std::vector<double> _flux_values;
87
89 std::vector<std::unique_ptr<
92
96
101 bool const _lower;
102
106
108 std::function<Eigen::Vector3d(std::size_t const, MathLib::Point3d const&,
109 double const,
110 std::vector<GlobalVector*> const&)>
112};
113
122
125
128std::unique_ptr<ConstraintDirichletBoundaryCondition>
131 MeshLib::Mesh const& bc_mesh,
132 NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id,
133 unsigned const integration_order, int const component_id,
134 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
135 Process const& constraining_process);
136} // namespace ProcessLib
MathLib::EigenVector GlobalVector
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::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::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::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(ConstraintDirichletBoundaryConditionConfig 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)
ConstraintDirichletBoundaryConditionConfig parseConstraintDirichletBoundaryCondition(BaseLib::ConfigTree const &config)