diff --git a/test/porousmediumflow/2p/sequential/test_3d2p.cc b/test/porousmediumflow/2p/sequential/test_3d2p.cc index 404d1f82d77abfb9b23e3434e5a6f270c4d87435..ba5e520b9374238e44e2681db25aba7480082f73 100644 --- a/test/porousmediumflow/2p/sequential/test_3d2p.cc +++ b/test/porousmediumflow/2p/sequential/test_3d2p.cc @@ -25,8 +25,11 @@ #if HAVE_DUNE_ALUGRID -#include "test_3d2pproblem.hh" #include <dumux/common/start.hh> +#include <dumux/common/defaultusagemessage.hh> +#include <dumux/common/parameterparser.hh> + +#include "test_3d2pproblem.hh" //////////////////////// // the main function @@ -62,110 +65,105 @@ void usage(const char *progName, const std::string &errorMsg) int main(int argc, char** argv) { - Dune::ParameterTree paramTree; - std::string s(Dumux::readOptions_(argc, argv, paramTree)); - if (s.empty()) - { - if (paramTree.hasKey("ModelType")) + using namespace Dumux; + + try { + + Dune::ParameterTree paramTree; + // if the user just wanted to see the help / usage message show usage and stop program + if(!ParameterParser::parseCommandLineArguments(argc, argv, paramTree, usage)) { - std::string modelType(paramTree.get<std::string>("ModelType")); + usage(argv[0], defaultUsageMessage(argv[0])); + return 0; + } + + const std::string modelType(paramTree.get<std::string>("ModelType", "MPFAL")); - if (modelType == "FV") - { - typedef TTAG(FVTwoPTestProblem) ProblemTypeTag; - typedef GET_PROP(ProblemTypeTag, ParameterTree) ParamTree; - Dune::ParameterTree &rt = ParamTree::runTimeParams(); - rt["ModelType"]=modelType; - int startReturn = Dumux::start<ProblemTypeTag>(argc, argv, usage); - std::cout<<"######################################################\n"; - std::cout<<"Used standard finite volume model\n"; - return startReturn; - } - else if (modelType == "FVAdaptive") - { - typedef TTAG(FVAdaptiveTwoPTestProblem) ProblemTypeTag; - typedef GET_PROP(ProblemTypeTag, ParameterTree) ParamTree; - Dune::ParameterTree &rt = ParamTree::runTimeParams(); - rt["ModelType"]=modelType; - int startReturn = Dumux::start<ProblemTypeTag>(argc, argv, usage); - std::cout<<"######################################################\n"; - std::cout<<"Used adaptive finite volume model\n"; - return startReturn; - } - else if (modelType == "MPFAL") - { - typedef TTAG(MPFALTwoPTestProblem) ProblemTypeTag; - typedef GET_PROP(ProblemTypeTag, ParameterTree) ParamTree; - Dune::ParameterTree &rt = ParamTree::runTimeParams(); - rt["ModelType"]=modelType; - int startReturn = Dumux::start<ProblemTypeTag>(argc, argv, usage); - std::cout<<"######################################################\n"; - std::cout<<"Used finite volume MPFA l-method model\n"; - return startReturn; - } - else if (modelType == "MPFALAdaptive") - { - typedef TTAG(MPFALAdaptiveTwoPTestProblem) ProblemTypeTag; - typedef GET_PROP(ProblemTypeTag, ParameterTree) ParamTree; - Dune::ParameterTree &rt = ParamTree::runTimeParams(); - rt["ModelType"]=modelType; - int startReturn = Dumux::start<ProblemTypeTag>(argc, argv, usage); - std::cout<<"######################################################\n"; - std::cout<<"Used adaptive finite volume MPFA l-method model\n"; - return startReturn; - } + if (modelType == "FV") + { + using ProblemTypeTag = TTAG(FVTwoPTestProblem); + // avoid unused parameter message + GET_PROP(ProblemTypeTag, ParameterTree)::runTimeParams()["ModelType"] = modelType; + std::cout<<"##########################################" << std::endl; + std::cout<<"Standard finite volume TPFA model" << std::endl; + std::cout<<"##########################################" << std::endl; + return start<ProblemTypeTag>(argc, argv, usage); + } + else if (modelType == "FVAdaptive") + { + using ProblemTypeTag = TTAG(FVAdaptiveTwoPTestProblem); + // avoid unused parameter message + GET_PROP(ProblemTypeTag, ParameterTree)::runTimeParams()["ModelType"] = modelType; + std::cout<<"##########################################" << std::endl; + std::cout<<"Adapative finite volume TPFA model" << std::endl; + std::cout<<"##########################################" << std::endl; + return start<ProblemTypeTag>(argc, argv, usage); + } + else if (modelType == "MPFAL") + { + using ProblemTypeTag = TTAG(MPFALTwoPTestProblem); + // avoid unused parameter message + GET_PROP(ProblemTypeTag, ParameterTree)::runTimeParams()["ModelType"] = modelType; + std::cout<<"##########################################" << std::endl; + std::cout<<"Standard finite volume MPFA-L model" << std::endl; + std::cout<<"##########################################" << std::endl; + return start<ProblemTypeTag>(argc, argv, usage); + } + else if (modelType == "MPFALAdaptive") + { + using ProblemTypeTag = TTAG(MPFALAdaptiveTwoPTestProblem); + // avoid unused parameter message + GET_PROP(ProblemTypeTag, ParameterTree)::runTimeParams()["ModelType"] = modelType; + std::cout<<"##########################################" << std::endl; + std::cout<<"Adapative finite volume MPFA-L model" << std::endl; + std::cout<<"##########################################" << std::endl; + return start<ProblemTypeTag>(argc, argv, usage); + } #if PROBLEM != 1 - else if (modelType == "Mimetic") - { - typedef TTAG(MimeticTwoPTestProblem) ProblemTypeTag; - typedef GET_PROP(ProblemTypeTag, ParameterTree) ParamTree; - Dune::ParameterTree &rt = ParamTree::runTimeParams(); - rt["ModelType"]=modelType; - int startReturn = Dumux::start<ProblemTypeTag>(argc, argv, usage); - std::cout<<"######################################################\n"; - std::cout<<"Used mimetic finite difference model\n"; - return startReturn; - } - else if (modelType == "MimeticAdaptive") - { - typedef TTAG(MimeticAdaptiveTwoPTestProblem) ProblemTypeTag; - typedef GET_PROP(ProblemTypeTag, ParameterTree) ParamTree; - Dune::ParameterTree &rt = ParamTree::runTimeParams(); - rt["ModelType"]=modelType; - int startReturn = Dumux::start<ProblemTypeTag>(argc, argv, usage); - std::cout<<"######################################################\n"; - std::cout<<"Used adaptive mimetic finite difference model\n"; - return startReturn; - } -#endif - else - { - typedef TTAG(MPFALTwoPTestProblem) ProblemTypeTag; - int startReturn = Dumux::start<ProblemTypeTag>(argc, argv, usage); - std::cout<<"######################################################\n"; - std::cout<<"Unknwon model type "<<modelType<<" specified\n"; - std::cout<<"Default to finite volume MPFA l-method model\n"; - return startReturn; - } + else if (modelType == "Mimetic") + { + using ProblemTypeTag = TTAG(MimeticTwoPTestProblem); + // avoid unused parameter message + GET_PROP(ProblemTypeTag, ParameterTree)::runTimeParams()["ModelType"] = modelType; + std::cout<<"##########################################" << std::endl; + std::cout<<"Standard mimetic finite difference model" << std::endl; + std::cout<<"##########################################" << std::endl; + return start<ProblemTypeTag>(argc, argv, usage); } + else if (modelType == "MimeticAdaptive") + { + using ProblemTypeTag = TTAG(MimeticAdaptiveTwoPTestProblem); + // avoid unused parameter message + GET_PROP(ProblemTypeTag, ParameterTree)::runTimeParams()["ModelType"] = modelType; + std::cout<<"##########################################" << std::endl; + std::cout<<"Adaptive mimetic finite difference model" << std::endl; + std::cout<<"##########################################" << std::endl; + return start<ProblemTypeTag>(argc, argv, usage); + } +#endif else { - typedef TTAG(MPFALTwoPTestProblem) ProblemTypeTag; - int startReturn = Dumux::start<ProblemTypeTag>(argc, argv, usage); - std::cout<<"######################################################\n"; - std::cout<<"No model type specified\n"; - std::cout<<"Default to finite volume MPFA l-method model\n"; - return startReturn; + using ProblemTypeTag = TTAG(MPFALTwoPTestProblem); + // avoid unused parameter message + GET_PROP(ProblemTypeTag, ParameterTree)::runTimeParams()["ModelType"] = modelType; + std::cout<<"##########################################" << std::endl; + std::cout<<"Unknown model type " << modelType << ", default to" << std::endl; + std::cout<<"Standard finite volume MPFA-L model" << std::endl; + std::cout<<"##########################################" << std::endl; + return start<ProblemTypeTag>(argc, argv, usage); } } - else - { - typedef TTAG(MPFALTwoPTestProblem) ProblemTypeTag; - int startReturn = Dumux::start<ProblemTypeTag>(argc, argv, usage); - std::cout<<"######################################################\n"; - std::cout<<s<<" is not a valid model type specification!\n"; - std::cout<<"Default to finite volume MPFA l-method model\n"; - return startReturn; + catch (ParameterException &e) { + std::cerr << std::endl << e << ". Abort!" << std::endl; + return 1; + } + catch (Dune::Exception &e) { + std::cerr << "Dune reported error: " << e << std::endl; + return 3; + } + catch (...) { + std::cerr << "Unknown exception thrown!\n"; + return 4; } return 0; diff --git a/test/porousmediumflow/2p/sequential/test_mpfa2p.cc b/test/porousmediumflow/2p/sequential/test_mpfa2p.cc index 01b4cf25e99d29df01ba8c2f811537fd36f37ec4..6dea810ad3459e7a0ed5a575c01d1a9bb300d148 100644 --- a/test/porousmediumflow/2p/sequential/test_mpfa2p.cc +++ b/test/porousmediumflow/2p/sequential/test_mpfa2p.cc @@ -25,8 +25,11 @@ #if HAVE_UG -#include "test_mpfa2pproblem.hh" #include <dumux/common/start.hh> +#include <dumux/common/defaultusagemessage.hh> +#include <dumux/common/parameterparser.hh> + +#include "test_mpfa2pproblem.hh" //////////////////////// // the main function @@ -53,98 +56,97 @@ void usage(const char *progName, const std::string &errorMsg) int main(int argc, char** argv) { - Dune::ParameterTree paramTree; - std::string s(Dumux::readOptions_(argc, argv, paramTree)); - if (s.empty()) - { - if (paramTree.hasKey("ModelType")) + using namespace Dumux; + + try { + + Dune::ParameterTree paramTree; + // if the user just wanted to see the help / usage message show usage and stop program + if(!ParameterParser::parseCommandLineArguments(argc, argv, paramTree, usage)) { - std::string modelType(paramTree.get<std::string>("ModelType")); + usage(argv[0], defaultUsageMessage(argv[0])); + return 0; + } + + const std::string modelType(paramTree.get<std::string>("ModelType", "MPFAL")); - if (modelType == "FV") - { - typedef TTAG(FVTwoPTestProblem) ProblemTypeTag; - typedef GET_PROP(ProblemTypeTag, ParameterTree) ParamTree; - Dune::ParameterTree &rt = ParamTree::runTimeParams(); - rt["ModelType"]=modelType; - int startReturn = Dumux::start<ProblemTypeTag>(argc, argv, usage); - std::cout<<"######################################################\n"; - std::cout<<"Used standard finite volume model\n"; - return startReturn; - } - else if (modelType == "FVAdaptive") - { - typedef TTAG(FVAdaptiveTwoPTestProblem) ProblemTypeTag; - typedef GET_PROP(ProblemTypeTag, ParameterTree) ParamTree; - Dune::ParameterTree &rt = ParamTree::runTimeParams(); - rt["ModelType"]=modelType; - int startReturn = Dumux::start<ProblemTypeTag>(argc, argv, usage); - std::cout<<"######################################################\n"; - std::cout<<"Used adaptive finite volume model\n"; - return startReturn; - } - else if (modelType == "MPFAO") - { - typedef TTAG(MPFAOTwoPTestProblem) ProblemTypeTag; - typedef GET_PROP(ProblemTypeTag, ParameterTree) ParamTree; - Dune::ParameterTree &rt = ParamTree::runTimeParams(); - rt["ModelType"]=modelType; - int startReturn = Dumux::start<ProblemTypeTag>(argc, argv, usage); - std::cout<<"######################################################\n"; - std::cout<<"Used finite volume MPFA o-method model\n"; - return startReturn; - } - else if (modelType == "MPFAL") - { - typedef TTAG(MPFALTwoPTestProblem) ProblemTypeTag; - typedef GET_PROP(ProblemTypeTag, ParameterTree) ParamTree; - Dune::ParameterTree &rt = ParamTree::runTimeParams(); - rt["ModelType"]=modelType; - int startReturn = Dumux::start<ProblemTypeTag>(argc, argv, usage); - std::cout<<"######################################################\n"; - std::cout<<"Used finite volume MPFA l-method model\n"; - return startReturn; - } - else if (modelType == "MPFALAdaptive") - { - typedef TTAG(MPFALAdaptiveTwoPTestProblem) ProblemTypeTag; - typedef GET_PROP(ProblemTypeTag, ParameterTree) ParamTree; - Dune::ParameterTree &rt = ParamTree::runTimeParams(); - rt["ModelType"]=modelType; - int startReturn = Dumux::start<ProblemTypeTag>(argc, argv, usage); - std::cout<<"######################################################\n"; - std::cout<<"Used adaptive finite volume MPFA l-method model\n"; - return startReturn; - } - else - { - typedef TTAG(MPFAOTwoPTestProblem) ProblemTypeTag; - int startReturn = Dumux::start<ProblemTypeTag>(argc, argv, usage); - std::cout<<"######################################################\n"; - std::cout<<"Unknwon model type "<<modelType<<" specified\n"; - std::cout<<"Default to finite volume MPFA o-method model\n"; - return startReturn; - } + if (modelType == "FV") + { + using ProblemTypeTag = TTAG(FVTwoPTestProblem); + // avoid unused parameter message + GET_PROP(ProblemTypeTag, ParameterTree)::runTimeParams()["ModelType"] = modelType; + std::cout<<"##########################################" << std::endl; + std::cout<<"Standard finite volume TPFA model" << std::endl; + std::cout<<"##########################################" << std::endl; + return start<ProblemTypeTag>(argc, argv, usage); + } + else if (modelType == "FVAdaptive") + { + using ProblemTypeTag = TTAG(FVAdaptiveTwoPTestProblem); + // avoid unused parameter message + GET_PROP(ProblemTypeTag, ParameterTree)::runTimeParams()["ModelType"] = modelType; + std::cout<<"##########################################" << std::endl; + std::cout<<"Adaptive finite volume TPFA model" << std::endl; + std::cout<<"##########################################" << std::endl; + return start<ProblemTypeTag>(argc, argv, usage); + } + else if (modelType == "MPFAO") + { + using ProblemTypeTag = TTAG(MPFAOTwoPTestProblem); + // avoid unused parameter message + GET_PROP(ProblemTypeTag, ParameterTree)::runTimeParams()["ModelType"] = modelType; + std::cout<<"##########################################" << std::endl; + std::cout<<"Standard finite volume MPFA-O model" << std::endl; + std::cout<<"##########################################" << std::endl; + return start<ProblemTypeTag>(argc, argv, usage); + } + else if (modelType == "MPFAL") + { + using ProblemTypeTag = TTAG(MPFALTwoPTestProblem); + // avoid unused parameter message + GET_PROP(ProblemTypeTag, ParameterTree)::runTimeParams()["ModelType"] = modelType; + std::cout<<"##########################################" << std::endl; + std::cout<<"Unknown model type " << modelType << ", default to" << std::endl; + std::cout<<"Standard finite volume MPFA-L model" << std::endl; + std::cout<<"##########################################" << std::endl; + return start<ProblemTypeTag>(argc, argv, usage); + } + else if (modelType == "MPFALAdaptive") + { + using ProblemTypeTag = TTAG(MPFALAdaptiveTwoPTestProblem); + // avoid unused parameter message + GET_PROP(ProblemTypeTag, ParameterTree)::runTimeParams()["ModelType"] = modelType; + std::cout<<"##########################################" << std::endl; + std::cout<<"Adaptive finite volume MPFA-L model" << std::endl; + std::cout<<"##########################################" << std::endl; + return start<ProblemTypeTag>(argc, argv, usage); } else { - typedef TTAG(MPFAOTwoPTestProblem) ProblemTypeTag; - int startReturn = Dumux::start<ProblemTypeTag>(argc, argv, usage); - std::cout<<"######################################################\n"; - std::cout<<"No model type specified\n"; - std::cout<<"Default to finite volume MPFA o-method model\n"; - return startReturn; + using ProblemTypeTag = TTAG(MPFAOTwoPTestProblem); + // avoid unused parameter message + GET_PROP(ProblemTypeTag, ParameterTree)::runTimeParams()["ModelType"] = modelType; + std::cout<<"##########################################" << std::endl; + std::cout<<"Unknown model type " << modelType << ", default to" << std::endl; + std::cout<<"Standard finite volume MPFA-O model" << std::endl; + std::cout<<"##########################################" << std::endl; + return start<ProblemTypeTag>(argc, argv, usage); } } - else - { - typedef TTAG(MPFAOTwoPTestProblem) ProblemTypeTag; - int startReturn = Dumux::start<ProblemTypeTag>(argc, argv, usage); - std::cout<<"######################################################\n"; - std::cout<<s<<" is not a valid model type specification!\n"; - std::cout<<"Default to finite volume MPFA o-method model\n"; - return startReturn; + catch (ParameterException &e) { + std::cerr << std::endl << e << ". Abort!" << std::endl; + return 1; + } + catch (Dune::Exception &e) { + std::cerr << "Dune reported error: " << e << std::endl; + return 3; } + catch (...) { + std::cerr << "Unknown exception thrown!\n"; + return 4; + } + + return 0; } #else