diff --git a/ProcessLib/BoundaryCondition/BoundaryCondition.cpp b/ProcessLib/BoundaryCondition/BoundaryCondition.cpp index 7a50c929523747892c395dbd3ade4959a7678cb3..8232c573869b02239985f977a36a49e28b42b552 100644 --- a/ProcessLib/BoundaryCondition/BoundaryCondition.cpp +++ b/ProcessLib/BoundaryCondition/BoundaryCondition.cpp @@ -38,7 +38,8 @@ std::unique_ptr<BoundaryCondition> createBoundaryCondition( const NumLib::LocalToGlobalIndexMap& dof_table, const MeshLib::Mesh& mesh, const int variable_id, - const unsigned integration_order) + const unsigned integration_order, + std::vector<std::unique_ptr<ParameterBase>> const& parameters) { MeshGeoToolsLib::MeshNodeSearcher& mesh_node_searcher = MeshGeoToolsLib::MeshNodeSearcher::getMeshNodeSearcher(mesh); @@ -66,7 +67,7 @@ std::unique_ptr<BoundaryCondition> createBoundaryCondition( config.config, getClonedElements(boundary_element_searcher, config.geometry), dof_table, variable_id, config.component_id, integration_order, - mesh.getDimension()); + mesh.getDimension(), parameters); } else if (type == "UniformRobin") { return createUniformRobinBoundaryCondition( diff --git a/ProcessLib/BoundaryCondition/BoundaryCondition.h b/ProcessLib/BoundaryCondition/BoundaryCondition.h index d13ff3e8a9ce669760d53f16e69bab172023d411..ea15b454fee7bb1e2fa6feb8b3fd447d2f85e097 100644 --- a/ProcessLib/BoundaryCondition/BoundaryCondition.h +++ b/ProcessLib/BoundaryCondition/BoundaryCondition.h @@ -25,6 +25,7 @@ class LocalToGlobalIndexMap; namespace ProcessLib { struct BoundaryConditionConfig; +struct ParameterBase; class BoundaryCondition { @@ -39,10 +40,9 @@ public: std::unique_ptr<BoundaryCondition> createBoundaryCondition( const BoundaryConditionConfig& config, - const NumLib::LocalToGlobalIndexMap& dof_table, - const MeshLib::Mesh& mesh, - const int variable_id, - const unsigned integration_order); + const NumLib::LocalToGlobalIndexMap& dof_table, const MeshLib::Mesh& mesh, + const int variable_id, const unsigned integration_order, + const std::vector<std::unique_ptr<ProcessLib::ParameterBase>>& parameters); } // ProcessLib diff --git a/ProcessLib/BoundaryCondition/BoundaryConditionCollection.cpp b/ProcessLib/BoundaryCondition/BoundaryConditionCollection.cpp index 0b88492f4ea1cb94abecea5430deafc67a3da602..df611ca5715f53a017e7e7810851e8e4dbf65dec 100644 --- a/ProcessLib/BoundaryCondition/BoundaryConditionCollection.cpp +++ b/ProcessLib/BoundaryCondition/BoundaryConditionCollection.cpp @@ -46,7 +46,7 @@ void BoundaryConditionCollection::addBCsForProcessVariables( { ProcessVariable& pv = process_variables[variable_id]; auto bcs = pv.createBoundaryConditions(dof_table, variable_id, - integration_order); + integration_order, _parameters); std::move(bcs.begin(), bcs.end(), std::back_inserter(_boundary_conditions)); diff --git a/ProcessLib/BoundaryCondition/BoundaryConditionCollection.h b/ProcessLib/BoundaryCondition/BoundaryConditionCollection.h index a8f4a3cc7808ceaae1153b2e7779216cc6685b34..646aa2ce751f84c130aa113d4c9124b77686eade 100644 --- a/ProcessLib/BoundaryCondition/BoundaryConditionCollection.h +++ b/ProcessLib/BoundaryCondition/BoundaryConditionCollection.h @@ -19,6 +19,12 @@ namespace ProcessLib class BoundaryConditionCollection final { public: + BoundaryConditionCollection( + std::vector<std::unique_ptr<ParameterBase>> const& parameters) + : _parameters(parameters) + { + } + void apply(const double t, GlobalVector const& x, GlobalMatrix& K, GlobalVector& b); @@ -38,6 +44,7 @@ public: private: std::vector<NumLib::IndexValueVector<GlobalIndexType>> _dirichlet_bcs; std::vector<std::unique_ptr<BoundaryCondition>> _boundary_conditions; + std::vector<std::unique_ptr<ParameterBase>> const& _parameters; }; diff --git a/ProcessLib/GroundwaterFlow/CreateGroundwaterFlowProcess.cpp b/ProcessLib/GroundwaterFlow/CreateGroundwaterFlowProcess.cpp index bb7919629c5d01e9f2f18985f6f4462fb4fd83ff..71728cf8ea658e8bc723cc357faa2e5b1a2dabcf 100644 --- a/ProcessLib/GroundwaterFlow/CreateGroundwaterFlowProcess.cpp +++ b/ProcessLib/GroundwaterFlow/CreateGroundwaterFlowProcess.cpp @@ -62,7 +62,7 @@ std::unique_ptr<Process> createGroundwaterFlowProcess( ProcessOutput process_output{config.getConfigSubtree("output")}; return std::unique_ptr<Process>{new GroundwaterFlowProcess{ - mesh, nonlinear_solver, std::move(time_discretization), + parameters, mesh, nonlinear_solver, std::move(time_discretization), std::move(convergence_criterion), std::move(process_variables), std::move(process_data), std::move(secondary_variables), std::move(process_output), std::move(named_function_caller)}}; diff --git a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp index f8345c265566f76d6efc53de745cbfe2f0d0beb6..46af91c86c16e7a5455a82d397de4604d68a232b 100644 --- a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp +++ b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.cpp @@ -18,6 +18,7 @@ namespace ProcessLib namespace GroundwaterFlow { GroundwaterFlowProcess::GroundwaterFlowProcess( + std::vector<std::unique_ptr<ParameterBase>> const& parameters, MeshLib::Mesh& mesh, Base::NonlinearSolver& nonlinear_solver, std::unique_ptr<Base::TimeDiscretization>&& time_discretization, @@ -27,7 +28,7 @@ GroundwaterFlowProcess::GroundwaterFlowProcess( SecondaryVariableCollection&& secondary_variables, ProcessOutput&& process_output, NumLib::NamedFunctionCaller&& named_function_caller) - : Process(mesh, nonlinear_solver, std::move(time_discretization), + : Process(parameters, mesh, nonlinear_solver, std::move(time_discretization), std::move(convergence_criterion), std::move(process_variables), std::move(secondary_variables), std::move(process_output), std::move(named_function_caller)), diff --git a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h index 8856d8213c6cbb54f2f9f15af4f8c334427d14cb..b0e2365c3c893d7ec89a7060fe526217a2c86c89 100644 --- a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h +++ b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h @@ -26,6 +26,7 @@ class GroundwaterFlowProcess final : public Process public: GroundwaterFlowProcess( + std::vector<std::unique_ptr<ParameterBase>> const& parameters, MeshLib::Mesh& mesh, Base::NonlinearSolver& nonlinear_solver, std::unique_ptr<Base::TimeDiscretization>&& time_discretization, diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp index 857e24c9689f68ffc691b585f9d3d637a6506224..8c42836da929cf8a07fa7cc5898f1b09a3a4fca9 100644 --- a/ProcessLib/Process.cpp +++ b/ProcessLib/Process.cpp @@ -19,6 +19,7 @@ namespace ProcessLib { Process::Process( + std::vector<std::unique_ptr<ParameterBase>> const& parameters, MeshLib::Mesh& mesh, NonlinearSolver& nonlinear_solver, std::unique_ptr<TimeDiscretization>&& time_discretization, @@ -34,7 +35,8 @@ Process::Process( _nonlinear_solver(nonlinear_solver), _time_discretization(std::move(time_discretization)), _convergence_criterion(std::move(convergence_criterion)), - _process_variables(std::move(process_variables)) + _process_variables(std::move(process_variables)), + _boundary_conditions(parameters) { } diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h index 1f04c0707da1716d7b78009f9d9ceff607c7b9ad..870960a97465c575c7790b481d275248480044ca 100644 --- a/ProcessLib/Process.h +++ b/ProcessLib/Process.h @@ -39,6 +39,7 @@ public: using TimeDiscretization = NumLib::TimeDiscretization; Process( + std::vector<std::unique_ptr<ParameterBase>> const& parameters, MeshLib::Mesh& mesh, NonlinearSolver& nonlinear_solver, std::unique_ptr<TimeDiscretization>&& time_discretization, diff --git a/ProcessLib/ProcessVariable.cpp b/ProcessLib/ProcessVariable.cpp index 6043cf3ee133c4460fa14fdf7f13b656d3bbb8f8..9ec3550201849ce563af204bf89e2fd5f16597ec 100644 --- a/ProcessLib/ProcessVariable.cpp +++ b/ProcessLib/ProcessVariable.cpp @@ -133,13 +133,14 @@ std::vector<std::unique_ptr<BoundaryCondition>> ProcessVariable::createBoundaryConditions( const NumLib::LocalToGlobalIndexMap& dof_table, const int variable_id, - unsigned const integration_order) + unsigned const integration_order, + std::vector<std::unique_ptr<ParameterBase>> const& parameters) { std::vector<std::unique_ptr<BoundaryCondition>> bcs; for (auto& config : _bc_configs) bcs.emplace_back(createBoundaryCondition( - config, dof_table, _mesh, variable_id, integration_order)); + config, dof_table, _mesh, variable_id, integration_order, parameters)); return bcs; } diff --git a/ProcessLib/ProcessVariable.h b/ProcessLib/ProcessVariable.h index 2a29dabc3fb860b7aa825dca4f22eca9d0e1dc8a..f722056647948abf92949eba77f084b54d9c762a 100644 --- a/ProcessLib/ProcessVariable.h +++ b/ProcessLib/ProcessVariable.h @@ -43,9 +43,9 @@ public: int getNumberOfComponents() const { return _n_components; } std::vector<std::unique_ptr<BoundaryCondition>> createBoundaryConditions( - const NumLib::LocalToGlobalIndexMap& dof_table, - const int variable_id, - unsigned const integration_order); + const NumLib::LocalToGlobalIndexMap& dof_table, const int variable_id, + unsigned const integration_order, + std::vector<std::unique_ptr<ParameterBase>> const& parameters); Parameter<double> const& getInitialCondition() const { diff --git a/ProcessLib/TES/CreateTESProcess.cpp b/ProcessLib/TES/CreateTESProcess.cpp index 43d7e8ccd8d9b9ccfac9e9150004f7988387dded..41748152207489528d9573349544ea59f2b1a4a2 100644 --- a/ProcessLib/TES/CreateTESProcess.cpp +++ b/ProcessLib/TES/CreateTESProcess.cpp @@ -22,7 +22,7 @@ std::unique_ptr<Process> createTESProcess( std::unique_ptr<Process::TimeDiscretization>&& time_discretization, std::unique_ptr<NumLib::ConvergenceCriterion>&& convergence_criterion, std::vector<ProcessVariable> const& variables, - std::vector<std::unique_ptr<ParameterBase>> const& /*parameters*/, + std::vector<std::unique_ptr<ParameterBase>> const& parameters, BaseLib::ConfigTree const& config) { //! \ogs_file_param{process__type} @@ -46,7 +46,7 @@ std::unique_ptr<Process> createTESProcess( ProcessOutput process_output{config.getConfigSubtree("output")}; return std::unique_ptr<Process>{new TESProcess{ - mesh, nonlinear_solver, std::move(time_discretization), + parameters, mesh, nonlinear_solver, std::move(time_discretization), std::move(convergence_criterion), std::move(process_variables), std::move(secondary_variables), std::move(process_output), std::move(named_function_caller), config}}; diff --git a/ProcessLib/TES/TESProcess.cpp b/ProcessLib/TES/TESProcess.cpp index 77493a774f4666587d4cfb25f69969e3691f661f..73affd4a52555b31f6f34307172fa015439617e5 100644 --- a/ProcessLib/TES/TESProcess.cpp +++ b/ProcessLib/TES/TESProcess.cpp @@ -54,6 +54,7 @@ namespace ProcessLib namespace TES { TESProcess::TESProcess( + std::vector<std::unique_ptr<ParameterBase>> const& parameters, MeshLib::Mesh& mesh, Process::NonlinearSolver& nonlinear_solver, std::unique_ptr<Process::TimeDiscretization>&& time_discretization, @@ -63,7 +64,7 @@ TESProcess::TESProcess( ProcessOutput&& process_output, NumLib::NamedFunctionCaller&& named_function_caller, const BaseLib::ConfigTree& config) - : Process(mesh, nonlinear_solver, std::move(time_discretization), + : Process(parameters, mesh, nonlinear_solver, std::move(time_discretization), std::move(convergence_criterion), std::move(process_variables), std::move(secondary_variables), std::move(process_output), std::move(named_function_caller)) diff --git a/ProcessLib/TES/TESProcess.h b/ProcessLib/TES/TESProcess.h index 33a0f883b181f67dd5915c3b9732a84cff1002c0..1546937f0b30b3f42feba22df206ce025a18a97f 100644 --- a/ProcessLib/TES/TESProcess.h +++ b/ProcessLib/TES/TESProcess.h @@ -32,6 +32,7 @@ class TESProcess final : public Process { public: TESProcess( + std::vector<std::unique_ptr<ParameterBase>> const& parameters, MeshLib::Mesh& mesh, Process::NonlinearSolver& nonlinear_solver, std::unique_ptr<Process::TimeDiscretization>&& time_discretization,