From 7c22fbaadadd08c2e9a971c31df9bf6437461b60 Mon Sep 17 00:00:00 2001 From: Wenqing Wang <wenqing.wang@ufz.de> Date: Wed, 28 Nov 2018 10:27:30 +0100 Subject: [PATCH] [TimeInterval] Added a creator --- NumLib/TimeStepping/TimeInterval.cpp | 36 +++++++++++++++++++ NumLib/TimeStepping/TimeInterval.h | 8 +++++ ...letBoundaryConditionWithinTimeInterval.cpp | 20 ++++------- ...chletBoundaryConditionWithinTimeInterval.h | 2 +- .../TimeIntervalDirichletBC.prj | 6 ++-- 5 files changed, 55 insertions(+), 17 deletions(-) create mode 100644 NumLib/TimeStepping/TimeInterval.cpp diff --git a/NumLib/TimeStepping/TimeInterval.cpp b/NumLib/TimeStepping/TimeInterval.cpp new file mode 100644 index 00000000000..19ec782c50f --- /dev/null +++ b/NumLib/TimeStepping/TimeInterval.cpp @@ -0,0 +1,36 @@ +/** + * \copyright + * Copyright (c) 2012-2018, OpenGeoSys Community (http://www.opengeosys.org) + * Distributed under a Modified BSD License. + * See accompanying file LICENSE.txt or + * http://www.opengeosys.org/project/license + * + * File: TimeInterval.cpp + * + * Created on November 27, 2018, 5:06 PM + * + */ + +#include "TimeInterval.h" + +#include "BaseLib/ConfigTree.h" + +namespace NumLib +{ +std::unique_ptr<TimeInterval> createTimeInterval( + BaseLib::ConfigTree const& config) +{ + //! \ogs_file_param{prj__time_loop__processes__process__time_interval} + auto const& time_interval_config = config.getConfigSubtree("time_interval"); + + const double start_time = + //! \ogs_file_param{prj__time_loop__processes__process__time_interval__start_time} + time_interval_config.getConfigParameter<double>("start_time"); + + const double end_time = + //! \ogs_file_param{prj__time_loop__processes__process__time_interval__end_time} + time_interval_config.getConfigParameter<double>("end_time"); + + return std::make_unique<NumLib::TimeInterval>(start_time, end_time); +} +} // end of namespace diff --git a/NumLib/TimeStepping/TimeInterval.h b/NumLib/TimeStepping/TimeInterval.h index 0bf7658e102..16f9992b787 100644 --- a/NumLib/TimeStepping/TimeInterval.h +++ b/NumLib/TimeStepping/TimeInterval.h @@ -12,6 +12,11 @@ */ #pragma once +namespace BaseLib +{ +class ConfigTree; +} + namespace NumLib { /*! @@ -36,4 +41,7 @@ private: const double _end_time; }; +std::unique_ptr<TimeInterval> createTimeInterval( + BaseLib::ConfigTree const& config); + } // end of namespace diff --git a/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.cpp b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.cpp index a1a338a5e69..4e51b27e171 100644 --- a/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.cpp +++ b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.cpp @@ -25,14 +25,13 @@ namespace ProcessLib { DirichletBoundaryConditionWithinTimeInterval:: DirichletBoundaryConditionWithinTimeInterval( - double const start_time, double const end_time, + std::unique_ptr<NumLib::TimeInterval> time_interval, Parameter<double> const& parameter, MeshLib::Mesh const& bc_mesh, NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id, int const component_id) : DirichletBoundaryCondition(parameter, bc_mesh, dof_table_bulk, variable_id, component_id), - _time_interval( - std::make_unique<NumLib::TimeInterval>(start_time, end_time)) + _time_interval(std::move(time_interval)) { } @@ -48,8 +47,6 @@ void DirichletBoundaryConditionWithinTimeInterval::getEssentialBCValues( bc_values.ids.clear(); bc_values.values.clear(); - - return; } std::unique_ptr<DirichletBoundaryCondition> @@ -86,17 +83,12 @@ createDirichletBoundaryConditionWithinTimeInterval( } #endif // USE_PETSC - const double start_time = - //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__DirichletWithinTimeInterval__start_time} - config.getConfigParameter<double>("start_time"); - - const double end_time = - //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__DirichletWithinTimeInterval__end_time} - config.getConfigParameter<double>("end_time"); + //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__DirichletWithinTimeInterval__time_interval} + config.peekConfigParameter<std::string>("time_interval"); return std::make_unique<DirichletBoundaryConditionWithinTimeInterval>( - start_time, end_time, param, bc_mesh, dof_table_bulk, variable_id, - component_id); + NumLib::createTimeInterval(config), param, bc_mesh, + dof_table_bulk, variable_id, component_id); } } // namespace ProcessLib diff --git a/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.h b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.h index beeaa23928c..b96932fb5bd 100644 --- a/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.h +++ b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionWithinTimeInterval.h @@ -28,7 +28,7 @@ class DirichletBoundaryConditionWithinTimeInterval final { public: DirichletBoundaryConditionWithinTimeInterval( - double const start_time, double const end_time, + std::unique_ptr<NumLib::TimeInterval> time_interval, Parameter<double> const& parameter, MeshLib::Mesh const& bc_mesh, NumLib::LocalToGlobalIndexMap const& dof_table_bulk, int const variable_id, int const component_id); diff --git a/Tests/Data/Parabolic/LiquidFlow/TimeIntervalDirichletBC/TimeIntervalDirichletBC.prj b/Tests/Data/Parabolic/LiquidFlow/TimeIntervalDirichletBC/TimeIntervalDirichletBC.prj index b8f595f32ec..bad9a1db661 100644 --- a/Tests/Data/Parabolic/LiquidFlow/TimeIntervalDirichletBC/TimeIntervalDirichletBC.prj +++ b/Tests/Data/Parabolic/LiquidFlow/TimeIntervalDirichletBC/TimeIntervalDirichletBC.prj @@ -136,8 +136,10 @@ <geometry>bottom</geometry> <type>DirichletWithinTimeInterval</type> <parameter>bc_bottom</parameter> - <start_time> 0.0 </start_time> - <end_time> 10.0 </end_time> + <time_interval> + <start_time> 0.0 </start_time> + <end_time> 10.0 </end_time> + </time_interval> </boundary_condition> </boundary_conditions> </process_variable> -- GitLab