diff --git a/Documentation/ProjectFile/prj/process_variables/process_variable/deactivated_subdomains/deactivated_subdomain/t_boundary_parameter.md b/Documentation/ProjectFile/prj/process_variables/process_variable/deactivated_subdomains/deactivated_subdomain/t_boundary_parameter.md new file mode 100644 index 0000000000000000000000000000000000000000..8cd8c4cec7cfa389e8d1b5ae47f7e72326165be5 --- /dev/null +++ b/Documentation/ProjectFile/prj/process_variables/process_variable/deactivated_subdomains/deactivated_subdomain/t_boundary_parameter.md @@ -0,0 +1 @@ +\copydoc ProcessLib::DeactivatedSubdomain::boundary_value_parameter diff --git a/ProcessLib/CreateDeactivatedSubdomain.cpp b/ProcessLib/CreateDeactivatedSubdomain.cpp index 362a6fa41fec34b5b6d944af7d3597b1525c412d..602fbbb863f7d3ec41236a0aea91a6960720ab86 100644 --- a/ProcessLib/CreateDeactivatedSubdomain.cpp +++ b/ProcessLib/CreateDeactivatedSubdomain.cpp @@ -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; diff --git a/ProcessLib/CreateDeactivatedSubdomain.h b/ProcessLib/CreateDeactivatedSubdomain.h index 0769baadf7f2ed02bf3e339a985050df37462115..af34e746eeda3d7e3ff3e78a671a42abfc741e2b 100644 --- a/ProcessLib/CreateDeactivatedSubdomain.h +++ b/ProcessLib/CreateDeactivatedSubdomain.h @@ -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); diff --git a/ProcessLib/DeactivatedSubdomain.cpp b/ProcessLib/DeactivatedSubdomain.cpp index 85a8438a3f1a080231e94215e432fe8438d99f8a..8ddd1edfbd5213fe41d76574281f19264444245c 100644 --- a/ProcessLib/DeactivatedSubdomain.cpp +++ b/ProcessLib/DeactivatedSubdomain.cpp @@ -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) { } diff --git a/ProcessLib/DeactivatedSubdomain.h b/ProcessLib/DeactivatedSubdomain.h index e7075ef8970495efddcbb51178ad942fe83472c2..df1327167ba1d13c1af810b7dfb0db3a201bf628 100644 --- a/ProcessLib/DeactivatedSubdomain.h +++ b/ProcessLib/DeactivatedSubdomain.h @@ -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 diff --git a/ProcessLib/ProcessVariable.cpp b/ProcessLib/ProcessVariable.cpp index 34719e831336c4ec39de40a3fd10f2774d06ae8d..7d48d033c841e71947222897bcc7ded31a77e69b 100644 --- a/ProcessLib/ProcessVariable.cpp +++ b/ProcessLib/ProcessVariable.cpp @@ -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"),