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

[PL/DS] Parse and store boundary value parameter.

Allowing not only a zero value to be applied to the inactive
nodes but also heterogeneous, time-dependent values.
parent 5ad524d2
No related branches found
No related tags found
No related merge requests found
\copydoc ProcessLib::DeactivatedSubdomain::boundary_value_parameter
......@@ -17,6 +17,8 @@
#include "MeshLib/Mesh.h"
#include "MeshLib/MeshEditing/DuplicateMeshComponents.h"
#include "MeshLib/Node.h"
#include "ParameterLib/Parameter.h"
#include "ParameterLib/Utils.h"
namespace ProcessLib
{
......@@ -170,6 +172,7 @@ static std::pair<Eigen::Vector3d, Eigen::Vector3d> parseLineSegment(
std::unique_ptr<DeactivatedSubdomain const> createDeactivatedSubdomain(
BaseLib::ConfigTree const& config, MeshLib::Mesh const& mesh,
std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
std::map<std::string,
std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
curves)
......@@ -212,6 +215,17 @@ std::unique_ptr<DeactivatedSubdomain const> createDeactivatedSubdomain(
line_segment = parseLineSegment(*line_segment_config);
}
ParameterLib::Parameter<double>* boundary_value_parameter = nullptr;
auto boundary_value_parameter_name =
//! \ogs_file_param{prj__process_variables__process_variable__deactivated_subdomains__deactivated_subdomain__boundary_parameter}
config.getConfigParameterOptional<std::string>("boundary_parameter");
if (boundary_value_parameter_name)
{
DBUG("Using parameter {:s}", *boundary_value_parameter_name);
boundary_value_parameter = &ParameterLib::findParameter<double>(
*boundary_value_parameter_name, parameters, 1, &mesh);
}
auto deactivated_subdomain_material_ids =
//! \ogs_file_param{prj__process_variables__process_variable__deactivated_subdomains__deactivated_subdomain__material_ids}
config.getConfigParameter("material_ids", std::vector<int>{});
......@@ -250,13 +264,15 @@ std::unique_ptr<DeactivatedSubdomain const> createDeactivatedSubdomain(
std::move(time_interval),
line_segment,
std::move(deactivated_subdomain_material_ids),
std::move(deactivated_subdomain_meshes));
std::move(deactivated_subdomain_meshes),
boundary_value_parameter);
}
std::vector<std::unique_ptr<DeactivatedSubdomain const>>
createDeactivatedSubdomains(
BaseLib::ConfigTree const& config,
MeshLib::Mesh const& mesh,
std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
std::map<std::string,
std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
curves)
......@@ -277,7 +293,7 @@ createDeactivatedSubdomains(
begin(deactivated_subdomain_configs),
end(deactivated_subdomain_configs),
back_inserter(deactivated_subdomains), [&](auto const& config) {
return createDeactivatedSubdomain(config, mesh, curves);
return createDeactivatedSubdomain(config, mesh, parameters, curves);
});
}
return deactivated_subdomains;
......
......@@ -30,6 +30,11 @@ class Mesh;
class Node;
} // namespace MeshLib
namespace ParameterLib
{
struct ParameterBase;
}
namespace ProcessLib
{
struct DeactivatedSubdomain;
......@@ -40,6 +45,7 @@ std::vector<std::unique_ptr<DeactivatedSubdomain const>>
createDeactivatedSubdomains(
BaseLib::ConfigTree const& config,
MeshLib::Mesh const& mesh,
std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
std::map<std::string,
std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
curves);
......
......@@ -16,6 +16,7 @@
#include "MeshLib/Elements/Element.h"
#include "MeshLib/Mesh.h"
#include "MeshLib/Node.h"
#include "ParameterLib/Parameter.h"
namespace ProcessLib
{
......@@ -38,11 +39,13 @@ DeactivatedSubdomain::DeactivatedSubdomain(
line_segment,
std::vector<int>&& materialIDs_,
std::vector<std::unique_ptr<DeactivatedSubdomainMesh>>&&
deactivated_subdomain_meshes_)
deactivated_subdomain_meshes_,
ParameterLib::Parameter<double> const* const boundary_value_parameter)
: time_interval(std::move(time_interval_)),
line_segment(line_segment),
materialIDs(std::move(materialIDs_)),
deactivated_subdomain_meshes(std::move(deactivated_subdomain_meshes_))
deactivated_subdomain_meshes(std::move(deactivated_subdomain_meshes_)),
boundary_value_parameter(boundary_value_parameter)
{
}
......
......@@ -26,6 +26,12 @@ class Mesh;
class Node;
} // namespace MeshLib
namespace ParameterLib
{
template <typename T>
struct Parameter;
}
namespace ProcessLib
{
struct DeactivatedSubdomainMesh
......@@ -67,7 +73,8 @@ struct DeactivatedSubdomain
line_segment,
std::vector<int>&& materialIDs_,
std::vector<std::unique_ptr<DeactivatedSubdomainMesh>>&&
deactivated_subdomain_meshes_);
deactivated_subdomain_meshes_,
ParameterLib::Parameter<double> const* boundary_value_parameter);
bool includesTimeOf(double const t) const;
......@@ -89,6 +96,10 @@ struct DeactivatedSubdomain
std::vector<std::unique_ptr<DeactivatedSubdomainMesh>> const
deactivated_subdomain_meshes;
/// A pararameter for the optional Dirichlet boundary condition applied on
/// the surface of the deactivated subdomain/excavation.
ParameterLib::Parameter<double> const* const boundary_value_parameter;
static const std::string zero_parameter_name;
};
} // namespace ProcessLib
......@@ -105,7 +105,7 @@ ProcessVariable::ProcessVariable(
//! \ogs_file_param{prj__process_variables__process_variable__order}
_shapefunction_order(config.getConfigParameter<unsigned>("order")),
_deactivated_subdomains(
createDeactivatedSubdomains(config, mesh, curves)),
createDeactivatedSubdomains(config, mesh, parameters, curves)),
_initial_condition(ParameterLib::findParameter<double>(
//! \ogs_file_param{prj__process_variables__process_variable__initial_condition}
config.getConfigParameter<std::string>("initial_condition"),
......
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