From 5fb965b3546b433fc359240a17a9a9e7975d24ff Mon Sep 17 00:00:00 2001 From: Wenqing Wang <wenqing.wang@ufz.de> Date: Tue, 10 Jul 2018 12:03:50 +0200 Subject: [PATCH] [Material] Moved createNewtonRaphsonSolverParameters to new files to avoid code duplication --- .../nonlinear_solver/i_nonlinear_solver.md | 2 - .../nonlinear_solver/t_error_tolerance.md | 1 - .../nonlinear_solver/t_maximum_iterations.md | 1 - .../nonlinear_solver/i_nonlinear_solver.md | 0 .../nonlinear_solver/t_error_tolerance.md | 0 .../nonlinear_solver/t_maximum_iterations.md | 0 MaterialLib/SolidModels/CreateEhlers.h | 25 +---------- MaterialLib/SolidModels/CreateLubby2.h | 25 +---------- .../CreateNewtonRaphsonSolverParameters.cpp | 43 +++++++++++++++++++ .../CreateNewtonRaphsonSolverParameters.h | 28 ++++++++++++ 10 files changed, 75 insertions(+), 50 deletions(-) delete mode 100644 Documentation/ProjectFile/material/solid/constitutive_relation/Lubby2/nonlinear_solver/i_nonlinear_solver.md delete mode 100644 Documentation/ProjectFile/material/solid/constitutive_relation/Lubby2/nonlinear_solver/t_error_tolerance.md delete mode 100644 Documentation/ProjectFile/material/solid/constitutive_relation/Lubby2/nonlinear_solver/t_maximum_iterations.md rename Documentation/ProjectFile/material/solid/constitutive_relation/{Ehlers => }/nonlinear_solver/i_nonlinear_solver.md (100%) rename Documentation/ProjectFile/material/solid/constitutive_relation/{Ehlers => }/nonlinear_solver/t_error_tolerance.md (100%) rename Documentation/ProjectFile/material/solid/constitutive_relation/{Ehlers => }/nonlinear_solver/t_maximum_iterations.md (100%) create mode 100644 MaterialLib/SolidModels/CreateNewtonRaphsonSolverParameters.cpp create mode 100644 MaterialLib/SolidModels/CreateNewtonRaphsonSolverParameters.h diff --git a/Documentation/ProjectFile/material/solid/constitutive_relation/Lubby2/nonlinear_solver/i_nonlinear_solver.md b/Documentation/ProjectFile/material/solid/constitutive_relation/Lubby2/nonlinear_solver/i_nonlinear_solver.md deleted file mode 100644 index f6d09b0017c..00000000000 --- a/Documentation/ProjectFile/material/solid/constitutive_relation/Lubby2/nonlinear_solver/i_nonlinear_solver.md +++ /dev/null @@ -1,2 +0,0 @@ -Local nonlinear solver configuration used in the constitutive relation -computation. The nonlinear solver is the NumLib::NewtonRaphson solver. diff --git a/Documentation/ProjectFile/material/solid/constitutive_relation/Lubby2/nonlinear_solver/t_error_tolerance.md b/Documentation/ProjectFile/material/solid/constitutive_relation/Lubby2/nonlinear_solver/t_error_tolerance.md deleted file mode 100644 index ccae39ea3ad..00000000000 --- a/Documentation/ProjectFile/material/solid/constitutive_relation/Lubby2/nonlinear_solver/t_error_tolerance.md +++ /dev/null @@ -1 +0,0 @@ -\copydoc NumLib::NewtonRaphson::_tolerance_squared diff --git a/Documentation/ProjectFile/material/solid/constitutive_relation/Lubby2/nonlinear_solver/t_maximum_iterations.md b/Documentation/ProjectFile/material/solid/constitutive_relation/Lubby2/nonlinear_solver/t_maximum_iterations.md deleted file mode 100644 index c9b32edcfe5..00000000000 --- a/Documentation/ProjectFile/material/solid/constitutive_relation/Lubby2/nonlinear_solver/t_maximum_iterations.md +++ /dev/null @@ -1 +0,0 @@ -\copydoc NumLib::NewtonRaphson::_maximum_iterations diff --git a/Documentation/ProjectFile/material/solid/constitutive_relation/Ehlers/nonlinear_solver/i_nonlinear_solver.md b/Documentation/ProjectFile/material/solid/constitutive_relation/nonlinear_solver/i_nonlinear_solver.md similarity index 100% rename from Documentation/ProjectFile/material/solid/constitutive_relation/Ehlers/nonlinear_solver/i_nonlinear_solver.md rename to Documentation/ProjectFile/material/solid/constitutive_relation/nonlinear_solver/i_nonlinear_solver.md diff --git a/Documentation/ProjectFile/material/solid/constitutive_relation/Ehlers/nonlinear_solver/t_error_tolerance.md b/Documentation/ProjectFile/material/solid/constitutive_relation/nonlinear_solver/t_error_tolerance.md similarity index 100% rename from Documentation/ProjectFile/material/solid/constitutive_relation/Ehlers/nonlinear_solver/t_error_tolerance.md rename to Documentation/ProjectFile/material/solid/constitutive_relation/nonlinear_solver/t_error_tolerance.md diff --git a/Documentation/ProjectFile/material/solid/constitutive_relation/Ehlers/nonlinear_solver/t_maximum_iterations.md b/Documentation/ProjectFile/material/solid/constitutive_relation/nonlinear_solver/t_maximum_iterations.md similarity index 100% rename from Documentation/ProjectFile/material/solid/constitutive_relation/Ehlers/nonlinear_solver/t_maximum_iterations.md rename to Documentation/ProjectFile/material/solid/constitutive_relation/nonlinear_solver/t_maximum_iterations.md diff --git a/MaterialLib/SolidModels/CreateEhlers.h b/MaterialLib/SolidModels/CreateEhlers.h index 3969fef891a..7d181c1d85e 100644 --- a/MaterialLib/SolidModels/CreateEhlers.h +++ b/MaterialLib/SolidModels/CreateEhlers.h @@ -9,6 +9,7 @@ #pragma once +#include "CreateNewtonRaphsonSolverParameters.h" #include "ProcessLib/Utils/ProcessUtils.h" // required for findParameter #include "Ehlers.h" @@ -18,25 +19,6 @@ namespace Solids { namespace Ehlers { -inline NumLib::NewtonRaphsonSolverParameters -createNewtonRaphsonSolverParameters(BaseLib::ConfigTree const& config) -{ - DBUG("Create local nonlinear solver parameters."); - auto const maximum_iterations = - //! \ogs_file_param{material__solid__constitutive_relation__Ehlers__nonlinear_solver__maximum_iterations} - config.getConfigParameter<int>("maximum_iterations"); - - DBUG("\tmaximum_iterations: %d.", maximum_iterations); - - auto const error_tolerance = - //! \ogs_file_param{material__solid__constitutive_relation__Ehlers__nonlinear_solver__error_tolerance} - config.getConfigParameter<double>("error_tolerance"); - - DBUG("\terror_tolerance: %g.", error_tolerance); - - return {maximum_iterations, error_tolerance}; -} - inline std::unique_ptr<DamagePropertiesParameters> createDamageProperties( std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters, BaseLib::ConfigTree const& config) @@ -184,11 +166,8 @@ std::unique_ptr<SolidEhlers<DisplacementDim>> createEhlers( createDamageProperties(parameters, *ehlers_damage_config); } - auto const& nonlinear_solver_config = - //! \ogs_file_param{material__solid__constitutive_relation__Ehlers__nonlinear_solver} - config.getConfigSubtree("nonlinear_solver"); auto const nonlinear_solver_parameters = - createNewtonRaphsonSolverParameters(nonlinear_solver_config); + createNewtonRaphsonSolverParameters(config); return std::make_unique<SolidEhlers<DisplacementDim>>( nonlinear_solver_parameters, mp, std::move(ehlers_damage_properties)); diff --git a/MaterialLib/SolidModels/CreateLubby2.h b/MaterialLib/SolidModels/CreateLubby2.h index 145d17e970a..569d546e380 100644 --- a/MaterialLib/SolidModels/CreateLubby2.h +++ b/MaterialLib/SolidModels/CreateLubby2.h @@ -9,6 +9,7 @@ #pragma once +#include "CreateNewtonRaphsonSolverParameters.h" #include "ProcessLib/Utils/ProcessUtils.h" // required for findParameter #include "Lubby2.h" @@ -19,25 +20,6 @@ namespace Solids { namespace Lubby2 { -inline NumLib::NewtonRaphsonSolverParameters -createNewtonRaphsonSolverParameters(BaseLib::ConfigTree const& config) -{ - DBUG("Create local nonlinear solver parameters."); - auto const maximum_iterations = - //! \ogs_file_param{material__solid__constitutive_relation__Lubby2__nonlinear_solver__maximum_iterations} - config.getConfigParameter<int>("maximum_iterations"); - - DBUG("\tmaximum_iterations: %d.", maximum_iterations); - - auto const error_tolerance = - //! \ogs_file_param{material__solid__constitutive_relation__Lubby2__nonlinear_solver__error_tolerance} - config.getConfigParameter<double>("error_tolerance"); - - DBUG("\terror_tolerance: %g.", error_tolerance); - - return {maximum_iterations, error_tolerance}; -} - template <int DisplacementDim> std::unique_ptr<Lubby2<DisplacementDim>> createLubby2( std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters, @@ -117,11 +99,8 @@ std::unique_ptr<Lubby2<DisplacementDim>> createLubby2( maxwell_viscosity, dependency_parameter_mK, dependency_parameter_mvK, dependency_parameter_mvM}; - auto const& nonlinear_solver_config = - //! \ogs_file_param{material__solid__constitutive_relation__Lubby2__nonlinear_solver} - config.getConfigSubtree("nonlinear_solver"); auto const nonlinear_solver_parameters = - createNewtonRaphsonSolverParameters(nonlinear_solver_config); + createNewtonRaphsonSolverParameters(config); return std::unique_ptr<Lubby2<DisplacementDim>>{ new Lubby2<DisplacementDim>{nonlinear_solver_parameters, mp}}; diff --git a/MaterialLib/SolidModels/CreateNewtonRaphsonSolverParameters.cpp b/MaterialLib/SolidModels/CreateNewtonRaphsonSolverParameters.cpp new file mode 100644 index 00000000000..2ffd162f6fa --- /dev/null +++ b/MaterialLib/SolidModels/CreateNewtonRaphsonSolverParameters.cpp @@ -0,0 +1,43 @@ +/** + * \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 CreateNewtonRaphsonSolverParameters.cpp + * Created on July 10, 2018, 11:32 AM + */ + +#include "CreateNewtonRaphsonSolverParameters.h" + +#include "BaseLib/ConfigTree.h" +#include "BaseLib/Error.h" + +#include "NumLib/NewtonRaphson.h" + +namespace MaterialLib +{ +NumLib::NewtonRaphsonSolverParameters createNewtonRaphsonSolverParameters( + BaseLib::ConfigTree const& config) +{ + DBUG("Create local nonlinear solver parameters."); + auto const& nonlinear_solver_config = + //! \ogs_file_param{material__solid__constitutive_relation__nonlinear_solver} + config.getConfigSubtree("nonlinear_solver"); + + auto const maximum_iterations = + //! \ogs_file_param{material__solid__constitutive_relation__nonlinear_solver__maximum_iterations} + nonlinear_solver_config.getConfigParameter<int>("maximum_iterations"); + + DBUG("\tmaximum_iterations: %d.", maximum_iterations); + + auto const error_tolerance = + //! \ogs_file_param{material__solid__constitutive_relation__nonlinear_solver__error_tolerance} + nonlinear_solver_config.getConfigParameter<double>("error_tolerance"); + + DBUG("\terror_tolerance: %g.", error_tolerance); + + return {maximum_iterations, error_tolerance}; +} +} diff --git a/MaterialLib/SolidModels/CreateNewtonRaphsonSolverParameters.h b/MaterialLib/SolidModels/CreateNewtonRaphsonSolverParameters.h new file mode 100644 index 00000000000..6ecfb79d875 --- /dev/null +++ b/MaterialLib/SolidModels/CreateNewtonRaphsonSolverParameters.h @@ -0,0 +1,28 @@ +/** + * \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 CreateNewtonRaphsonSolverParameters.h + * Created on July 10, 2018, 11:32 AM + */ + +#pragma once + +namespace BaseLib +{ +class ConfigTree; +} + +namespace NumLib +{ +struct NewtonRaphsonSolverParameters; +} + +namespace MaterialLib +{ +NumLib::NewtonRaphsonSolverParameters createNewtonRaphsonSolverParameters( + BaseLib::ConfigTree const& config); +} -- GitLab