FlexibleSolver: use std::make_shared

This commit is contained in:
Arne Morten Kvarving 2023-03-29 09:50:09 +02:00
parent 82fc5a6b46
commit 5f6339f6fd

View File

@ -148,33 +148,33 @@ namespace Dune
const int verbosity = is_iorank ? prm.get<int>("verbosity", 0) : 0; const int verbosity = is_iorank ? prm.get<int>("verbosity", 0) : 0;
const std::string solver_type = prm.get<std::string>("solver", "bicgstab"); const std::string solver_type = prm.get<std::string>("solver", "bicgstab");
if (solver_type == "bicgstab") { if (solver_type == "bicgstab") {
linsolver_.reset(new Dune::BiCGSTABSolver<VectorType>(*linearoperator_for_solver_, linsolver_ = std::make_shared<Dune::BiCGSTABSolver<VectorType>>(*linearoperator_for_solver_,
*scalarproduct_, *scalarproduct_,
*preconditioner_, *preconditioner_,
tol, // desired residual reduction factor tol, // desired residual reduction factor
maxiter, // maximum number of iterations maxiter, // maximum number of iterations
verbosity)); verbosity);
} else if (solver_type == "loopsolver") { } else if (solver_type == "loopsolver") {
linsolver_.reset(new Dune::LoopSolver<VectorType>(*linearoperator_for_solver_, linsolver_ = std::make_shared<Dune::LoopSolver<VectorType>>(*linearoperator_for_solver_,
*scalarproduct_,
*preconditioner_,
tol, // desired residual reduction factor
maxiter, // maximum number of iterations
verbosity));
} else if (solver_type == "gmres") {
int restart = prm.get<int>("restart", 15);
linsolver_.reset(new Dune::RestartedGMResSolver<VectorType>(*linearoperator_for_solver_,
*scalarproduct_, *scalarproduct_,
*preconditioner_, *preconditioner_,
tol, tol, // desired residual reduction factor
restart, // desired residual reduction factor
maxiter, // maximum number of iterations maxiter, // maximum number of iterations
verbosity)); verbosity);
} else if (solver_type == "gmres") {
int restart = prm.get<int>("restart", 15);
linsolver_ = std::make_shared<Dune::RestartedGMResSolver<VectorType>>(*linearoperator_for_solver_,
*scalarproduct_,
*preconditioner_,
tol,
restart, // desired residual reduction factor
maxiter, // maximum number of iterations
verbosity);
#if HAVE_SUITESPARSE_UMFPACK #if HAVE_SUITESPARSE_UMFPACK
} else if (solver_type == "umfpack") { } else if (solver_type == "umfpack") {
bool dummy = false; bool dummy = false;
using MatrixType = std::remove_const_t<std::remove_reference_t<decltype(linearoperator_for_solver_->getmat())>>; using MatrixType = std::remove_const_t<std::remove_reference_t<decltype(linearoperator_for_solver_->getmat())>>;
linsolver_.reset(new Dune::UMFPack<MatrixType>(linearoperator_for_solver_->getmat(), verbosity, dummy)); linsolver_ = std::make_shared<Dune::UMFPack<MatrixType>>(linearoperator_for_solver_->getmat(), verbosity, dummy);
#endif #endif
} else { } else {
OPM_THROW(std::invalid_argument, OPM_THROW(std::invalid_argument,