From 7e700c11e027967b07e70b8c3253eeb493437c6e Mon Sep 17 00:00:00 2001 From: Markus Blatt Date: Tue, 7 Jan 2020 17:53:54 +0100 Subject: [PATCH] Move PreconditionerFactory into namespace Opm. This fixes name clashes with DUNE's own factory that is introduced in DUNE 2.7. Hence it closes issue #2266. BTW: Dune's factory has more template parameters than ours. --- opm/simulators/linalg/FlexibleSolver.hpp | 4 ++-- opm/simulators/linalg/OwningTwoLevelPreconditioner.hpp | 10 +++++++--- opm/simulators/linalg/PreconditionerFactory.hpp | 2 +- tests/test_preconditionerfactory.cpp | 4 ++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/opm/simulators/linalg/FlexibleSolver.hpp b/opm/simulators/linalg/FlexibleSolver.hpp index 2f3f63637..2b1433ded 100644 --- a/opm/simulators/linalg/FlexibleSolver.hpp +++ b/opm/simulators/linalg/FlexibleSolver.hpp @@ -96,7 +96,7 @@ private: auto linop = std::make_shared(matrix, comm); linearoperator_ = linop; preconditioner_ - = Dune::PreconditionerFactory::create(*linop, prm.get_child("preconditioner"), comm); + = Opm::PreconditionerFactory::create(*linop, prm.get_child("preconditioner"), comm); scalarproduct_ = Dune::createScalarProduct(comm, linearoperator_->category()); } @@ -106,7 +106,7 @@ private: using SeqOperatorType = Dune::MatrixAdapter; auto linop = std::make_shared(matrix); linearoperator_ = linop; - preconditioner_ = Dune::PreconditionerFactory::create(*linop, prm.get_child("preconditioner")); + preconditioner_ = Opm::PreconditionerFactory::create(*linop, prm.get_child("preconditioner")); scalarproduct_ = std::make_shared>(); } diff --git a/opm/simulators/linalg/OwningTwoLevelPreconditioner.hpp b/opm/simulators/linalg/OwningTwoLevelPreconditioner.hpp index a96d5281a..bbba9e21f 100644 --- a/opm/simulators/linalg/OwningTwoLevelPreconditioner.hpp +++ b/opm/simulators/linalg/OwningTwoLevelPreconditioner.hpp @@ -35,14 +35,18 @@ #include #include -namespace Dune -{ +namespace Opm +{ // Circular dependency between PreconditionerFactory [which can make an OwningTwoLevelPreconditioner] // and OwningTwoLevelPreconditioner [which uses PreconditionerFactory to choose the fine-level smoother] // must be broken, accomplished by forward-declaration here. template class PreconditionerFactory; +} + +namespace Dune +{ // Must forward-declare FlexibleSolver as we want to use it as solver for the pressure system. @@ -63,7 +67,7 @@ class OwningTwoLevelPreconditioner : public Dune::PreconditionerWithUpdate; + using PrecFactory = Opm::PreconditionerFactory; OwningTwoLevelPreconditioner(const OperatorType& linearoperator, const pt& prm) : linear_operator_(linearoperator) diff --git a/opm/simulators/linalg/PreconditionerFactory.hpp b/opm/simulators/linalg/PreconditionerFactory.hpp index 859f0a8c1..2bb22717c 100644 --- a/opm/simulators/linalg/PreconditionerFactory.hpp +++ b/opm/simulators/linalg/PreconditionerFactory.hpp @@ -37,7 +37,7 @@ #include #include -namespace Dune +namespace Opm { /// This is an object factory for creating preconditioners. The diff --git a/tests/test_preconditionerfactory.cpp b/tests/test_preconditionerfactory.cpp index e9345ffbc..a817c40a4 100644 --- a/tests/test_preconditionerfactory.cpp +++ b/tests/test_preconditionerfactory.cpp @@ -90,7 +90,7 @@ testPrec(const boost::property_tree::ptree& prm, const std::string& matrix_filen } using Operator = Dune::MatrixAdapter; Operator op(matrix); - using PrecFactory = Dune::PreconditionerFactory; + using PrecFactory = Opm::PreconditionerFactory; auto prec = PrecFactory::create(op, prm.get_child("preconditioner")); Dune::BiCGSTABSolver solver(op, *prec, prm.get("tol"), prm.get("maxiter"), prm.get("verbosity")); Vector x(rhs.size()); @@ -164,7 +164,7 @@ using V = Dune::BlockVector>; template using O = Dune::MatrixAdapter, V, V>; template -using PF = Dune::PreconditionerFactory>; +using PF = Opm::PreconditionerFactory>; BOOST_AUTO_TEST_CASE(TestAddingPreconditioner)