diff --git a/opm/simulators/linalg/bda/amgclSolverBackend.cpp b/opm/simulators/linalg/bda/amgclSolverBackend.cpp index f3d405c0a..0aedeb2f3 100644 --- a/opm/simulators/linalg/bda/amgclSolverBackend.cpp +++ b/opm/simulators/linalg/bda/amgclSolverBackend.cpp @@ -51,7 +51,7 @@ void amgclSolverBackend::initialize(int N_, int nnz_, int dim, doubl std::ostringstream out; out << "Initializing amgclSolverBackend, matrix size: " << N << " blocks, nnzb: " << nnzb << "\n"; out << "Maxit: " << maxit << std::scientific << ", tolerance: " << tolerance << "\n"; - out << "PlatformID: " << platformID << ", deviceID: " << deviceID << "\n"; + out << "DeviceID: " << deviceID << "\n"; OpmLog::info(out.str()); out.str(""); out.clear(); @@ -63,14 +63,22 @@ void amgclSolverBackend::initialize(int N_, int nnz_, int dim, doubl x.resize(N); #if AMGCL_CUDA + cudaDeviceProp prop; + cudaGetDeviceProperties(&prop, deviceID); + std::cout << prop.name << std::endl; cusparseCreate(&bprm.cusparse_handle); #endif + // set amgcl parameters + prm.precond.damping = 0.9; + prm.solver.maxiter = maxit; + prm.solver.tol = tolerance; + prm.solver.verbose = (verbosity >= 2); + initialized = true; } // end initialize() - template void amgclSolverBackend::convert_sparsity_pattern(int *rows, int *cols) { Timer t; @@ -99,6 +107,7 @@ void amgclSolverBackend::convert_sparsity_pattern(int *rows, int *co } } // end convert_sparsity_pattern() + template void amgclSolverBackend::convert_data(double *vals, int *rows) { Timer t; @@ -136,23 +145,12 @@ void amgclSolverBackend::solve_system(double *b, WellContributions & // create matrix object auto A = std::tie(N, A_rows, A_cols, A_vals); - // set parameters - typename Solver::params prm; - prm.precond.damping = 0.9; - prm.solver.maxiter = maxit; - prm.solver.tol = tolerance; - prm.solver.verbose = (verbosity >= 2); - - // create solver + // create solver and construct preconditioner + // don't reuse this unless the preconditioner can be reused Solver solve(A, prm, bprm); // print info (once) std::call_once(print_info, [&](){ -#if AMGCL_CUDA - cudaDeviceProp prop; - cudaGetDeviceProperties(&prop, deviceID); - std::cout << prop.name << std::endl; -#endif // print solver structure std::cout << solve << std::endl; }); diff --git a/opm/simulators/linalg/bda/amgclSolverBackend.hpp b/opm/simulators/linalg/bda/amgclSolverBackend.hpp index 4fcfa605b..0de8d9d61 100644 --- a/opm/simulators/linalg/bda/amgclSolverBackend.hpp +++ b/opm/simulators/linalg/bda/amgclSolverBackend.hpp @@ -89,6 +89,7 @@ private: std::vector x; std::once_flag print_info; + typename Solver::params prm; typename Backend::params bprm; // amgcl backend parameters, only used for cusparseHandle /// Initialize GPU and allocate memory