Teuchos::RCP<Thyra::ResponseOnlyModelEvaluatorBase<Scalar> > SolverFactory::createSolver( const Teuchos::RCP<Teuchos::ParameterList> &piroParams, const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > &model, const Teuchos::RCP<Piro::ObserverBase<Scalar> > &observer) { Teuchos::RCP<Thyra::ResponseOnlyModelEvaluatorBase<Scalar> > result; const std::string &solverType = piroParams->get("Solver Type", "NOX"); #ifdef Piro_ENABLE_NOX if (solverType == "NOX") { result = Teuchos::rcp(new NOXSolver<Scalar>(piroParams, model, observer)); } else if (solverType == "LOCA") { result = observedLocaSolver(piroParams, model, observer); } else #endif /* Piro_ENABLE_NOX */ #ifdef Piro_ENABLE_Rythmos if (solverType == "Rythmos") { result = rythmosSolver(piroParams, model, observer); } else #endif /* Piro_ENABLE_Rythmos */ { TEUCHOS_TEST_FOR_EXCEPTION( true, std::runtime_error, "Error: Unknown Piro Solver Type: " << solverType); } return result; }
Teuchos::RCP<Thyra::ResponseOnlyModelEvaluatorBase<Scalar> > SolverFactory::createSolver( const Teuchos::RCP<Teuchos::ParameterList> &piroParams, const Teuchos::RCP<Thyra::ModelEvaluator<Scalar> > &model, const Teuchos::RCP<Piro::ObserverBase<Scalar> > &observer) { Teuchos::RCP<Thyra::ResponseOnlyModelEvaluatorBase<Scalar> > result; const std::string &solverType = piroParams->get("Solver Type", "NOX"); #ifdef HAVE_PIRO_NOX if (solverType == "NOX") { result = Teuchos::rcp(new NOXSolver<Scalar>(piroParams, model, observer)); } else if (solverType == "Velocity Verlet") { result = Teuchos::rcp(new VelocityVerletSolver<Scalar>(piroParams, model, observer)); } else if (solverType == "Trapezoid Rule") { result = Teuchos::rcp(new TrapezoidRuleSolver<Scalar>(piroParams, model, observer)); } else if (solverType == "LOCA") { result = observedLocaSolver(piroParams, model, observer); } else #endif /* HAVE_PIRO_NOX */ #ifdef HAVE_PIRO_RYTHMOS if (solverType == "Rythmos") { result = rythmosSolver<Scalar, LocalOrdinal, GlobalOrdinal, Node>(piroParams, model, observer); } else #endif /* HAVE_PIRO_RYTHMOS */ { TEUCHOS_TEST_FOR_EXCEPTION( true, std::runtime_error, "Error: Unknown Piro Solver Type: " << solverType); } return result; }