OGS
ProcessLib::DeactivatedSubdomainDirichlet Class Referencefinal

Detailed Description

Definition at line 35 of file DeactivatedSubdomainDirichlet.h.

#include <DeactivatedSubdomainDirichlet.h>

Inheritance diagram for ProcessLib::DeactivatedSubdomainDirichlet:
[legend]
Collaboration diagram for ProcessLib::DeactivatedSubdomainDirichlet:
[legend]

Public Member Functions

 DeactivatedSubdomainDirichlet (MeshLib::PropertyVector< unsigned char > const &is_active, MathLib::PiecewiseLinearInterpolation time_interval, ParameterLib::Parameter< double > const &parameter, bool const set_outer_nodes_dirichlet_values, DeactivatedSubdomainMesh const &subdomain, NumLib::LocalToGlobalIndexMap const &dof_table_bulk, int const variable_id, int const component_id)
void getEssentialBCValues (const double t, GlobalVector const &x, NumLib::IndexValueVector< GlobalIndexType > &bc_values) const override
 Writes the values of essential BCs to bc_values.
Public Member Functions inherited from ProcessLib::BoundaryCondition
virtual void applyNaturalBC (const double, std::vector< GlobalVector * > const &, int const, GlobalMatrix *, GlobalVector &, GlobalMatrix *)
virtual void preTimestep (const double, std::vector< GlobalVector * > const &, int const)
virtual void postTimestep (const double, std::vector< GlobalVector * > const &, int const)
virtual ~BoundaryCondition ()=default

Private Member Functions

void config (NumLib::LocalToGlobalIndexMap const &dof_table_bulk)

Private Attributes

ParameterLib::Parameter< double > const & _parameter
DeactivatedSubdomainMesh const & _subdomain
std::unique_ptr< NumLib::LocalToGlobalIndexMap const > _dof_table_boundary
int const _variable_id
int const _component_id
MathLib::PiecewiseLinearInterpolation const _time_interval
MeshLib::PropertyVector< unsigned char > const & _is_active
bool const _set_outer_nodes_dirichlet_values

Constructor & Destructor Documentation

◆ DeactivatedSubdomainDirichlet()

ProcessLib::DeactivatedSubdomainDirichlet::DeactivatedSubdomainDirichlet ( MeshLib::PropertyVector< unsigned char > const & is_active,
MathLib::PiecewiseLinearInterpolation time_interval,
ParameterLib::Parameter< double > const & parameter,
bool const set_outer_nodes_dirichlet_values,
DeactivatedSubdomainMesh const & subdomain,
NumLib::LocalToGlobalIndexMap const & dof_table_bulk,
int const variable_id,
int const component_id )

Definition at line 15 of file DeactivatedSubdomainDirichlet.cpp.

23 : _parameter(parameter),
24 _subdomain(subdomain),
25 _variable_id(variable_id),
26 _component_id(component_id),
27 _time_interval(std::move(time_interval)),
28 _is_active(is_active),
29 _set_outer_nodes_dirichlet_values(set_outer_nodes_dirichlet_values)
30{
31 config(dof_table_bulk);
32}
MathLib::PiecewiseLinearInterpolation const _time_interval
ParameterLib::Parameter< double > const & _parameter
MeshLib::PropertyVector< unsigned char > const & _is_active
void config(NumLib::LocalToGlobalIndexMap const &dof_table_bulk)

References _component_id, _is_active, _parameter, _set_outer_nodes_dirichlet_values, _subdomain, _time_interval, _variable_id, and config().

Member Function Documentation

◆ config()

void ProcessLib::DeactivatedSubdomainDirichlet::config ( NumLib::LocalToGlobalIndexMap const & dof_table_bulk)
private

Definition at line 34 of file DeactivatedSubdomainDirichlet.cpp.

36{
39
40 std::vector<MeshLib::Node*> const& bc_nodes = _subdomain.mesh.getNodes();
41 MeshLib::MeshSubset subdomain_mesh_subset(_subdomain.mesh, bc_nodes);
42
43 // Create local DOF table from the BC mesh subset for the given variable
44 // and component id.
45 _dof_table_boundary = dof_table_bulk.deriveBoundaryConstrainedMap(
46 _variable_id, {_component_id}, std::move(subdomain_mesh_subset));
47}
std::unique_ptr< NumLib::LocalToGlobalIndexMap const > _dof_table_boundary
void checkParametersOfDirichletBoundaryCondition(MeshLib::Mesh const &bc_mesh, NumLib::LocalToGlobalIndexMap const &dof_table_bulk, int const variable_id, int const component_id)

References _component_id, _dof_table_boundary, _subdomain, _variable_id, ProcessLib::checkParametersOfDirichletBoundaryCondition(), and NumLib::LocalToGlobalIndexMap::deriveBoundaryConstrainedMap().

Referenced by DeactivatedSubdomainDirichlet().

◆ getEssentialBCValues()

void ProcessLib::DeactivatedSubdomainDirichlet::getEssentialBCValues ( const double ,
GlobalVector const & ,
NumLib::IndexValueVector< GlobalIndexType > &  ) const
overridevirtual

Writes the values of essential BCs to bc_values.

Reimplemented from ProcessLib::BoundaryCondition.

Definition at line 49 of file DeactivatedSubdomainDirichlet.cpp.

52{
53 [[maybe_unused]] auto const& bulk_node_ids =
55 [[maybe_unused]] auto const& bulk_element_ids =
57
58 auto is_inactive_id = [&](std::size_t const bulk_element_id)
59 { return _is_active[bulk_element_id] == 0; };
60
61 auto is_inactive_element = [&](MeshLib::Element const* const e)
62 { return is_inactive_id(bulk_element_ids[e->getID()]); };
63
64 std::vector<std::size_t> inactive_nodes_in_bc_mesh;
65 std::copy_if(begin(_subdomain.inner_nodes), end(_subdomain.inner_nodes),
66 back_inserter(inactive_nodes_in_bc_mesh),
67 [&](std::size_t const n)
68 {
69 const auto& connected_elements =
70 _subdomain.mesh.getElementsConnectedToNode(n);
71
72 return std::all_of(begin(connected_elements),
73 end(connected_elements),
74 is_inactive_element);
75 });
76
78 {
79 std::copy_if(begin(_subdomain.outer_nodes), end(_subdomain.outer_nodes),
80 back_inserter(inactive_nodes_in_bc_mesh),
81 [&](std::size_t const n)
82 {
83 const auto& connected_elements =
84 _subdomain.mesh.getElementsConnectedToNode(n);
85
86 return std::all_of(begin(connected_elements),
87 end(connected_elements),
88 is_inactive_element);
89 });
90 }
91 else
92 {
93 for (std::size_t i = 0; i < _subdomain.outer_nodes.size(); ++i)
94 {
95 auto const& connected_elements = _subdomain.outer_nodes_elements[i];
96 if (std::all_of(begin(connected_elements), end(connected_elements),
97 is_inactive_id))
98 {
99 inactive_nodes_in_bc_mesh.push_back(_subdomain.outer_nodes[i]);
100 }
101 }
102 }
103
104 auto time_interval_contains = [&](double const t)
105 {
106 return _time_interval.getSupportMin() <= t &&
107 t <= _time_interval.getSupportMax();
108 };
109 if (time_interval_contains(t))
110 {
112 _parameter, _subdomain.mesh, inactive_nodes_in_bc_mesh,
114 return;
115 }
116
117 bc_values.ids.clear();
118 bc_values.values.clear();
119}
PropertyVector< std::size_t > const * bulkElementIDs(Mesh const &mesh)
Definition Mesh.cpp:290
PropertyVector< std::size_t > const * bulkNodeIDs(Mesh const &mesh)
Definition Mesh.cpp:282
void getEssentialBCValuesLocal(ParameterLib::Parameter< double > const &parameter, MeshLib::Mesh const &bc_mesh, std::vector< std::size_t > const &nodes_in_bc_mesh, NumLib::LocalToGlobalIndexMap const &dof_table_boundary, int const variable_id, int const component_id, const double t, GlobalVector const &, NumLib::IndexValueVector< GlobalIndexType > &bc_values)

References _component_id, _dof_table_boundary, _is_active, _parameter, _set_outer_nodes_dirichlet_values, _subdomain, _time_interval, _variable_id, MeshLib::bulkElementIDs(), MeshLib::bulkNodeIDs(), ProcessLib::getEssentialBCValuesLocal(), NumLib::IndexValueVector< IndexType >::ids, and NumLib::IndexValueVector< IndexType >::values.

Member Data Documentation

◆ _component_id

int const ProcessLib::DeactivatedSubdomainDirichlet::_component_id
private

◆ _dof_table_boundary

std::unique_ptr<NumLib::LocalToGlobalIndexMap const> ProcessLib::DeactivatedSubdomainDirichlet::_dof_table_boundary
private

Definition at line 59 of file DeactivatedSubdomainDirichlet.h.

Referenced by config(), and getEssentialBCValues().

◆ _is_active

MeshLib::PropertyVector<unsigned char> const& ProcessLib::DeactivatedSubdomainDirichlet::_is_active
private

◆ _parameter

ParameterLib::Parameter<double> const& ProcessLib::DeactivatedSubdomainDirichlet::_parameter
private

◆ _set_outer_nodes_dirichlet_values

bool const ProcessLib::DeactivatedSubdomainDirichlet::_set_outer_nodes_dirichlet_values
private

◆ _subdomain

DeactivatedSubdomainMesh const& ProcessLib::DeactivatedSubdomainDirichlet::_subdomain
private

◆ _time_interval

MathLib::PiecewiseLinearInterpolation const ProcessLib::DeactivatedSubdomainDirichlet::_time_interval
private

◆ _variable_id

int const ProcessLib::DeactivatedSubdomainDirichlet::_variable_id
private

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