Skip to content
Snippets Groups Projects
Commit f040c3f2 authored by Dmitri Naumov's avatar Dmitri Naumov
Browse files

[PL/DS] Set outer nodes Dirichlet value.

parent 370cfc0c
No related branches found
No related tags found
No related merge requests found
......@@ -21,6 +21,7 @@ DeactivatedSubdomainDirichlet::DeactivatedSubdomainDirichlet(
std::vector<std::size_t> const* const active_element_ids,
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)
......@@ -29,7 +30,8 @@ DeactivatedSubdomainDirichlet::DeactivatedSubdomainDirichlet(
_variable_id(variable_id),
_component_id(component_id),
_time_interval(std::move(time_interval)),
_active_element_ids(active_element_ids)
_active_element_ids(active_element_ids),
_set_outer_nodes_dirichlet_values(set_outer_nodes_dirichlet_values)
{
config(dof_table_bulk);
}
......@@ -74,6 +76,19 @@ void DeactivatedSubdomainDirichlet::getEssentialBCValues(
end(connected_elements), is_inactive);
});
if (_set_outer_nodes_dirichlet_values)
{
std::copy_if(begin(_subdomain.outer_nodes), end(_subdomain.outer_nodes),
back_inserter(inactive_nodes_in_bc_mesh),
[&](MeshLib::Node* const n) {
const auto& connected_elements = n->getElements();
return std::all_of(begin(connected_elements),
end(connected_elements),
is_inactive);
});
}
auto time_interval_contains = [&](double const t) {
return _time_interval.getSupportMin() <= t &&
t <= _time_interval.getSupportMax();
......
......@@ -44,6 +44,7 @@ public:
std::vector<std::size_t> const* active_element_ids,
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);
......@@ -66,5 +67,7 @@ private:
MathLib::PiecewiseLinearInterpolation const _time_interval;
std::vector<std::size_t> const* _active_element_ids = nullptr;
bool const _set_outer_nodes_dirichlet_values;
};
} // namespace ProcessLib
......@@ -241,9 +241,6 @@ void ProcessVariable::createBoundaryConditionsForDeactivatedSubDomains(
std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
std::vector<std::unique_ptr<BoundaryCondition>>& bcs)
{
auto& parameter = ParameterLib::findParameter<double>(
DeactivatedSubdomain::zero_parameter_name, parameters, 1);
for (auto const& deactivated_subdomain : _deactivated_subdomains)
{
auto const& deactivated_subdomain_meshes =
......@@ -251,6 +248,15 @@ void ProcessVariable::createBoundaryConditionsForDeactivatedSubDomains(
for (auto const& deactivated_subdomain_mesh :
deactivated_subdomain_meshes)
{
auto const* parameter = &ParameterLib::findParameter<double>(
DeactivatedSubdomain::zero_parameter_name, parameters, 1);
bool const set_outer_nodes_dirichlet_values =
deactivated_subdomain->boundary_value_parameter != nullptr;
if (set_outer_nodes_dirichlet_values)
{
parameter = deactivated_subdomain->boundary_value_parameter;
}
for (int component_id = 0;
component_id <
dof_table.getNumberOfVariableComponents(variable_id);
......@@ -258,7 +264,8 @@ void ProcessVariable::createBoundaryConditionsForDeactivatedSubDomains(
{
auto bc = std::make_unique<DeactivatedSubdomainDirichlet>(
&_ids_of_active_elements,
deactivated_subdomain->time_interval, parameter,
deactivated_subdomain->time_interval, *parameter,
set_outer_nodes_dirichlet_values,
*deactivated_subdomain_mesh, dof_table, variable_id,
component_id);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment