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( ...@@ -21,6 +21,7 @@ DeactivatedSubdomainDirichlet::DeactivatedSubdomainDirichlet(
std::vector<std::size_t> const* const active_element_ids, std::vector<std::size_t> const* const active_element_ids,
MathLib::PiecewiseLinearInterpolation time_interval, MathLib::PiecewiseLinearInterpolation time_interval,
ParameterLib::Parameter<double> const& parameter, ParameterLib::Parameter<double> const& parameter,
bool const set_outer_nodes_dirichlet_values,
DeactivatedSubdomainMesh const& subdomain, DeactivatedSubdomainMesh const& subdomain,
NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id, NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id,
int const component_id) int const component_id)
...@@ -29,7 +30,8 @@ DeactivatedSubdomainDirichlet::DeactivatedSubdomainDirichlet( ...@@ -29,7 +30,8 @@ DeactivatedSubdomainDirichlet::DeactivatedSubdomainDirichlet(
_variable_id(variable_id), _variable_id(variable_id),
_component_id(component_id), _component_id(component_id),
_time_interval(std::move(time_interval)), _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); config(dof_table_bulk);
} }
...@@ -74,6 +76,19 @@ void DeactivatedSubdomainDirichlet::getEssentialBCValues( ...@@ -74,6 +76,19 @@ void DeactivatedSubdomainDirichlet::getEssentialBCValues(
end(connected_elements), is_inactive); 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) { auto time_interval_contains = [&](double const t) {
return _time_interval.getSupportMin() <= t && return _time_interval.getSupportMin() <= t &&
t <= _time_interval.getSupportMax(); t <= _time_interval.getSupportMax();
......
...@@ -44,6 +44,7 @@ public: ...@@ -44,6 +44,7 @@ public:
std::vector<std::size_t> const* active_element_ids, std::vector<std::size_t> const* active_element_ids,
MathLib::PiecewiseLinearInterpolation time_interval, MathLib::PiecewiseLinearInterpolation time_interval,
ParameterLib::Parameter<double> const& parameter, ParameterLib::Parameter<double> const& parameter,
bool const set_outer_nodes_dirichlet_values,
DeactivatedSubdomainMesh const& subdomain, DeactivatedSubdomainMesh const& subdomain,
NumLib::LocalToGlobalIndexMap const& dof_table_bulk, NumLib::LocalToGlobalIndexMap const& dof_table_bulk,
int const variable_id, int const component_id); int const variable_id, int const component_id);
...@@ -66,5 +67,7 @@ private: ...@@ -66,5 +67,7 @@ private:
MathLib::PiecewiseLinearInterpolation const _time_interval; MathLib::PiecewiseLinearInterpolation const _time_interval;
std::vector<std::size_t> const* _active_element_ids = nullptr; std::vector<std::size_t> const* _active_element_ids = nullptr;
bool const _set_outer_nodes_dirichlet_values;
}; };
} // namespace ProcessLib } // namespace ProcessLib
...@@ -241,9 +241,6 @@ void ProcessVariable::createBoundaryConditionsForDeactivatedSubDomains( ...@@ -241,9 +241,6 @@ void ProcessVariable::createBoundaryConditionsForDeactivatedSubDomains(
std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters, std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
std::vector<std::unique_ptr<BoundaryCondition>>& bcs) 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) for (auto const& deactivated_subdomain : _deactivated_subdomains)
{ {
auto const& deactivated_subdomain_meshes = auto const& deactivated_subdomain_meshes =
...@@ -251,6 +248,15 @@ void ProcessVariable::createBoundaryConditionsForDeactivatedSubDomains( ...@@ -251,6 +248,15 @@ void ProcessVariable::createBoundaryConditionsForDeactivatedSubDomains(
for (auto const& deactivated_subdomain_mesh : for (auto const& deactivated_subdomain_mesh :
deactivated_subdomain_meshes) 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; for (int component_id = 0;
component_id < component_id <
dof_table.getNumberOfVariableComponents(variable_id); dof_table.getNumberOfVariableComponents(variable_id);
...@@ -258,7 +264,8 @@ void ProcessVariable::createBoundaryConditionsForDeactivatedSubDomains( ...@@ -258,7 +264,8 @@ void ProcessVariable::createBoundaryConditionsForDeactivatedSubDomains(
{ {
auto bc = std::make_unique<DeactivatedSubdomainDirichlet>( auto bc = std::make_unique<DeactivatedSubdomainDirichlet>(
&_ids_of_active_elements, &_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, *deactivated_subdomain_mesh, dof_table, variable_id,
component_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