From 0bf91691fecd22aed148b4789467f94241da1791 Mon Sep 17 00:00:00 2001 From: Tong Dong Qiu Date: Wed, 22 Mar 2023 11:06:36 +0100 Subject: [PATCH] Only do CPU decomposition if needed, when using GPU --- opm/simulators/linalg/ISTLSolverEbos.cpp | 7 +++++++ opm/simulators/linalg/ISTLSolverEbos.hpp | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/opm/simulators/linalg/ISTLSolverEbos.cpp b/opm/simulators/linalg/ISTLSolverEbos.cpp index 8eb3d0a94..cdb449f62 100644 --- a/opm/simulators/linalg/ISTLSolverEbos.cpp +++ b/opm/simulators/linalg/ISTLSolverEbos.cpp @@ -265,6 +265,13 @@ apply(Vector& rhs, return false; } +template +bool BdaSolverInfo:: +gpuActive() +{ + return bridge_->getUseGpu(); +} + template template void BdaSolverInfo:: diff --git a/opm/simulators/linalg/ISTLSolverEbos.hpp b/opm/simulators/linalg/ISTLSolverEbos.hpp index 753903ddd..0b104dc31 100644 --- a/opm/simulators/linalg/ISTLSolverEbos.hpp +++ b/opm/simulators/linalg/ISTLSolverEbos.hpp @@ -149,6 +149,8 @@ struct BdaSolverInfo Vector& x, Dune::InverseOperatorResult& result); + bool gpuActive(); + int numJacobiBlocks_ = 0; private: @@ -351,7 +353,14 @@ std::unique_ptr blockJacobiAdjacency(const Grid& grid, if (isParallel() && prm_.get("preconditioner.type") != "ParOverILU0") { detail::makeOverlapRowsInvalid(getMatrix(), overlapRows_); } +#if COMPILE_BDA_BRIDGE + if(!bdaBridge->gpuActive()){ + prepareFlexibleSolver(); + } +#else prepareFlexibleSolver(); +#endif + firstcall = false; } @@ -401,6 +410,11 @@ std::unique_ptr blockJacobiAdjacency(const Grid& grid, #endif { OPM_TIMEBLOCK(flexibleSolverApply); +#if COMPILE_BDA_BRIDGE + if(bdaBridge->gpuActive()){ + prepareFlexibleSolver(); + } +#endif assert(flexibleSolver_.solver_); flexibleSolver_.solver_->apply(x, *rhs_, result); }