diff --git a/NumLib/TimeStepping/TimeInterval.cpp b/NumLib/TimeStepping/TimeInterval.cpp new file mode 100644 index 0000000000000000000000000000000000000000..19ec782c50f74a4101b9c300438176c5c1b26fec --- /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 0bf7658e102e52635c8002292dc49c2bd4fac9ea..16f9992b787580e3875e4ef3eca5159e1005bf85 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 a1a338a5e69c7d3916fd3999c8a5d0ed93e8af0d..4e51b27e171549340d1202bb7f5343979cbbcea1 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 beeaa23928cb7ba9d2e6c2bb5e0c6a746755aa1d..b96932fb5bd7aeef10d08afd6707fba74016ec46 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 b8f595f32ec379d25536041f47b305cc53be9916..bad9a1db66128d8848a7cf30cd8fecca15e87362 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>