diff --git a/dumux/common/parameters.hh b/dumux/common/parameters.hh index 5423665c4b7c3ddff25c1f88325745f744107808..141a75a1762e4fc2a761a491cddbbc812cea4ce8 100644 --- a/dumux/common/parameters.hh +++ b/dumux/common/parameters.hh @@ -83,7 +83,7 @@ public: * \param parameterFileName the file name of the input file * \param usage the usage function to print if the help option was passed on the command line * \note the default parameter tree is initialized in the following way - * 1) global defaults (see member function globalDefaultParameters_) + * 1) global defaults (see member function applyGlobalDefaults_) * 2) user provided defaults (overwrite global defaults) * the parameter tree is initialized in the following way * 1) parameters from the input file @@ -112,8 +112,8 @@ public: } // apply the default parameters - globalDefaultParameters_(defaultParamTree_()); defaultParams(defaultParamTree_()); + applyGlobalDefaults_(defaultParamTree_()); // parse paramters from the command line const auto commandLineArgs = parseCommandLine(argc, argv); @@ -184,8 +184,8 @@ public: // apply the parameters params(paramTree_()); // apply the default parameters - globalDefaultParameters_(defaultParamTree_()); defaultParams(defaultParamTree_()); + applyGlobalDefaults_(defaultParamTree_()); } /*! @@ -211,8 +211,8 @@ public: Dune::ParameterTreeParser::readINITree(parameterFileName, paramTree_(), inputFileOverwritesParams); // apply the default parameters - globalDefaultParameters_(defaultParamTree_()); defaultParams(defaultParamTree_()); + applyGlobalDefaults_(defaultParamTree_()); } //! prints all used and unused parameters @@ -338,53 +338,59 @@ private: //! This method puts all default arguments into the parameter tree //! we do this once per simulation on call to Parameters::init(); - static void globalDefaultParameters_(Dune::ParameterTree& params) + static void applyGlobalDefaults_(Dune::ParameterTree& params) { + // global defaults + Dune::ParameterTree defaultParams; + // parameters in the implicit group - params["Flux.UpwindWeight"] = "1.0"; - params["Implicit.EnableJacobianRecycling"] = "false"; + defaultParams["Flux.UpwindWeight"] = "1.0"; + defaultParams["Implicit.EnableJacobianRecycling"] = "false"; // parameters in the assembly group - params["Assembly.NumericDifferenceMethod"] = "1"; + defaultParams["Assembly.NumericDifferenceMethod"] = "1"; // parameters in the linear solver group - params["LinearSolver.GMResRestart"] = "10"; - params["LinearSolver.MaxIterations"] = "250"; - params["LinearSolver.PreconditionerIterations"] = "1"; - params["LinearSolver.PreconditionerRelaxation"] = "1.0"; - params["LinearSolver.ResidualReduction"] = "1e-13"; - params["LinearSolver.Verbosity"] = "0"; + defaultParams["LinearSolver.GMResRestart"] = "10"; + defaultParams["LinearSolver.MaxIterations"] = "250"; + defaultParams["LinearSolver.PreconditionerIterations"] = "1"; + defaultParams["LinearSolver.PreconditionerRelaxation"] = "1.0"; + defaultParams["LinearSolver.ResidualReduction"] = "1e-13"; + defaultParams["LinearSolver.Verbosity"] = "0"; // parameters in the problem group - params["Problem.EnableGravity"] = "true"; - params["Problem.EnableInertiaTerms"] = "true"; + defaultParams["Problem.EnableGravity"] = "true"; + defaultParams["Problem.EnableInertiaTerms"] = "true"; // parameters in the Newton group // MinSteps = 2 makes Newton more robust if converge criterion is not perfect - params["Newton.MinSteps"] = "2"; - params["Newton.MaxSteps"] = "18"; - params["Newton.TargetSteps"] = "10"; - params["Newton.UseLineSearch"] = "false"; - params["Newton.EnableChop"] = "false"; - params["Newton.EnableShiftCriterion"] = "true"; - params["Newton.MaxRelativeShift"] = "1e-8"; - params["Newton.EnableResidualCriterion"] = "false"; - params["Newton.ResidualReduction"] = "1e-5"; - params["Newton.EnableAbsoluteResidualCriterion"] = "false"; - params["Newton.MaxAbsoluteResidual"] = "1e-5"; - params["Newton.SatisfyResidualAndShiftCriterion"] = "false"; - params["Newton.EnablePartialReassembly"] = "false"; + defaultParams["Newton.MinSteps"] = "2"; + defaultParams["Newton.MaxSteps"] = "18"; + defaultParams["Newton.TargetSteps"] = "10"; + defaultParams["Newton.UseLineSearch"] = "false"; + defaultParams["Newton.EnableChop"] = "false"; + defaultParams["Newton.EnableShiftCriterion"] = "true"; + defaultParams["Newton.MaxRelativeShift"] = "1e-8"; + defaultParams["Newton.EnableResidualCriterion"] = "false"; + defaultParams["Newton.ResidualReduction"] = "1e-5"; + defaultParams["Newton.EnableAbsoluteResidualCriterion"] = "false"; + defaultParams["Newton.MaxAbsoluteResidual"] = "1e-5"; + defaultParams["Newton.SatisfyResidualAndShiftCriterion"] = "false"; + defaultParams["Newton.EnablePartialReassembly"] = "false"; // parameters in the time loop group - params["TimeLoop.MaxTimeStepSize"] = "1e300"; - params["TimeLoop.MaxTimeStepDivisions"] = "10"; + defaultParams["TimeLoop.MaxTimeStepSize"] = "1e300"; + defaultParams["TimeLoop.MaxTimeStepDivisions"] = "10"; // parameters in the vtk group - params["Vtk.AddVelocity"] = "false"; - params["Vtk.AddProcessRank"] = "true"; + defaultParams["Vtk.AddVelocity"] = "false"; + defaultParams["Vtk.AddProcessRank"] = "true"; // parameters in the mpfa group - params["Mpfa.Q"] = "0.0"; + defaultParams["Mpfa.Q"] = "0.0"; + + // merge the global default tree but do not overwrite if the parameter already exists + mergeTree_(params, defaultParams, false); } //! merge source into target tree