From d95314d2631c95ad9ceadb224ecd3fbfff401de2 Mon Sep 17 00:00:00 2001 From: Andreas Lauser <and@poware.org> Date: Mon, 15 Aug 2011 10:16:38 +0000 Subject: [PATCH] parameters: some bug fixes, better reporting of unused parameters git-svn-id: svn://svn.iws.uni-stuttgart.de/DUMUX/dumux/trunk@6486 2fb0f335-1f38-0410-981e-8018bf24f1b0 --- dumux/common/parameters.hh | 51 ++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/dumux/common/parameters.hh b/dumux/common/parameters.hh index b6edfae177..29908e9801 100644 --- a/dumux/common/parameters.hh +++ b/dumux/common/parameters.hh @@ -70,6 +70,40 @@ NEW_PROP_TAG(ModelParameterGroup); } // namespace Properties namespace Parameters { + +template <class TypeTag> +void findUnusedKeys_(std::list<std::string> &unusedParams, + const Dune::ParameterTree &tree, + const std::string prefix="") +{ + typedef typename GET_PROP(TypeTag, PTAG(ParameterTree)) Params; + const Dune::ParameterTree &rt = Params::runTimeParams(); + + // loop over all keys of the current tree + const Dune::ParameterTree::KeyVector &keys = + tree.getValueKeys(); + for (int i = 0; i < keys.size(); ++i) { + std::string canonicalName = prefix + keys[i]; + + // check whether the key was accessed + if (rt.hasKey(canonicalName)) + continue; + unusedParams.push_back(canonicalName); + } + + // loop over all subtrees + const Dune::ParameterTree::KeyVector &subKeys = + tree.getSubKeys(); + for (int i = 0; i < subKeys.size(); ++i) { + std::string newPrefix = prefix + subKeys[i] + "."; + + findUnusedKeys_<TypeTag>(unusedParams, + tree.sub(subKeys[i]), + newPrefix); + } + +} + template <class TypeTag> void print(std::ostream &os = std::cout) { @@ -89,16 +123,7 @@ void print(std::ostream &os = std::cout) ct.report(os); std::list<std::string> unusedParams; - int n = 0; - const Dune::ParameterTree::KeyVector &keys = - Params::tree().getValueKeys(); - for (int i = 0; i < keys.size(); ++i) { - // check wheter the key was accessed - if (rt.hasKey(keys[i])) - continue; - ++n; - unusedParams.push_back(keys[i]); - } + findUnusedKeys_<TypeTag>(unusedParams, tree); if (unusedParams.size() > 0) { os << "###############################\n"; @@ -154,7 +179,7 @@ private: static const ParamType &retrieve_(const char *groupOrParamName, const char *paramNameOrNil = 0) { const char *paramName, *groupName; - if (paramNameOrNil) { + if (paramNameOrNil && strlen(paramNameOrNil) > 0) { groupName = groupOrParamName; paramName = paramNameOrNil; } @@ -172,7 +197,7 @@ private: // [Newton] // WriteConvergence = true std::string finalName(paramName); - if (groupName) { + if (groupName && strlen(groupName) > 0) { finalName.insert(0, "."); finalName.insert(0, groupName); } @@ -189,7 +214,7 @@ private: finalName.insert(0, "."); finalName.insert(0, modelParamGroup); } - + // retrieve actual parameter from the parameter tree ParamType defaultValue = GET_PROP_VALUE(TypeTag, PropTag); static ParamType value = Params::tree().template get<ParamType>(finalName, defaultValue); -- GitLab