mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Reduced header inclusion, also moved WellContributions OpenCL initialization
This commit is contained in:
parent
a5c5dc2ec9
commit
748dc4ccb3
@ -250,12 +250,9 @@ namespace Opm
|
|||||||
if (use_gpu) {
|
if (use_gpu) {
|
||||||
const std::string gpu_mode = EWOMS_GET_PARAM(TypeTag, std::string, GpuMode);
|
const std::string gpu_mode = EWOMS_GET_PARAM(TypeTag, std::string, GpuMode);
|
||||||
WellContributions wellContribs(gpu_mode);
|
WellContributions wellContribs(gpu_mode);
|
||||||
#if HAVE_OPENCL
|
|
||||||
if(gpu_mode.compare("opencl") == 0){
|
bdaBridge->initWellContributions(wellContribs);
|
||||||
const auto openclBackend = static_cast<const bda::openclSolverBackend<block_size>*>(&bdaBridge->getBackend());
|
|
||||||
wellContribs.setOpenCLEnv(openclBackend->context.get(), openclBackend->queue.get());
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (!useWellConn_) {
|
if (!useWellConn_) {
|
||||||
simulator_.problem().wellModel().getWellContributions(wellContribs);
|
simulator_.problem().wellModel().getWellContributions(wellContribs);
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,19 @@
|
|||||||
#include <opm/simulators/linalg/bda/BdaBridge.hpp>
|
#include <opm/simulators/linalg/bda/BdaBridge.hpp>
|
||||||
#include <opm/simulators/linalg/bda/BdaResult.hpp>
|
#include <opm/simulators/linalg/bda/BdaResult.hpp>
|
||||||
|
|
||||||
|
#if HAVE_CUDA
|
||||||
|
#include <opm/simulators/linalg/bda/cusparseSolverBackend.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAVE_OPENCL
|
||||||
|
#include <opm/simulators/linalg/bda/openclSolverBackend.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAVE_FPGA
|
||||||
|
#include <opm/simulators/linalg/bda/FPGASolverBackend.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define PRINT_TIMERS_BRIDGE 0
|
#define PRINT_TIMERS_BRIDGE 0
|
||||||
|
|
||||||
typedef Dune::InverseOperatorResult InverseOperatorResult;
|
typedef Dune::InverseOperatorResult InverseOperatorResult;
|
||||||
@ -41,7 +54,8 @@ namespace Opm
|
|||||||
using bda::ILUReorder;
|
using bda::ILUReorder;
|
||||||
|
|
||||||
template <class BridgeMatrix, class BridgeVector, int block_size>
|
template <class BridgeMatrix, class BridgeVector, int block_size>
|
||||||
BdaBridge<BridgeMatrix, BridgeVector, block_size>::BdaBridge(std::string gpu_mode, int linear_solver_verbosity, int maxit, double tolerance, unsigned int platformID OPM_UNUSED, unsigned int deviceID, std::string opencl_ilu_reorder OPM_UNUSED)
|
BdaBridge<BridgeMatrix, BridgeVector, block_size>::BdaBridge(std::string gpu_mode_, int linear_solver_verbosity, int maxit, double tolerance, unsigned int platformID OPM_UNUSED, unsigned int deviceID, std::string opencl_ilu_reorder OPM_UNUSED)
|
||||||
|
: gpu_mode(gpu_mode_)
|
||||||
{
|
{
|
||||||
if (gpu_mode.compare("cusparse") == 0) {
|
if (gpu_mode.compare("cusparse") == 0) {
|
||||||
#if HAVE_CUDA
|
#if HAVE_CUDA
|
||||||
@ -224,6 +238,19 @@ void BdaBridge<BridgeMatrix, BridgeVector, block_size>::get_result(BridgeVector
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class BridgeMatrix, class BridgeVector, int block_size>
|
||||||
|
void BdaBridge<BridgeMatrix, BridgeVector, block_size>::initWellContributions(WellContributions& wellContribs) {
|
||||||
|
if(gpu_mode.compare("opencl") == 0){
|
||||||
|
#if HAVE_OPENCL
|
||||||
|
const auto openclBackend = static_cast<const bda::openclSolverBackend<block_size>*>(backend.get());
|
||||||
|
wellContribs.setOpenCLEnv(openclBackend->context.get(), openclBackend->queue.get());
|
||||||
|
#else
|
||||||
|
OPM_THROW(std::logic_error, "Error openclSolver was chosen, but OpenCL was not found by CMake");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#define INSTANTIATE_BDA_FUNCTIONS(n) \
|
#define INSTANTIATE_BDA_FUNCTIONS(n) \
|
||||||
template BdaBridge<Dune::BCRSMatrix<Opm::MatrixBlock<double, n, n>, std::allocator<Opm::MatrixBlock<double, n, n> > >, \
|
template BdaBridge<Dune::BCRSMatrix<Opm::MatrixBlock<double, n, n>, std::allocator<Opm::MatrixBlock<double, n, n> > >, \
|
||||||
Dune::BlockVector<Dune::FieldVector<double, n>, std::allocator<Dune::FieldVector<double, n> > >, \
|
Dune::BlockVector<Dune::FieldVector<double, n>, std::allocator<Dune::FieldVector<double, n> > >, \
|
||||||
@ -241,6 +268,11 @@ template void BdaBridge<Dune::BCRSMatrix<Opm::MatrixBlock<double, n, n>, std::al
|
|||||||
Dune::BlockVector<Dune::FieldVector<double, n>, std::allocator<Dune::FieldVector<double, n> > >, \
|
Dune::BlockVector<Dune::FieldVector<double, n>, std::allocator<Dune::FieldVector<double, n> > >, \
|
||||||
n>::get_result \
|
n>::get_result \
|
||||||
(Dune::BlockVector<Dune::FieldVector<double, n>, std::allocator<Dune::FieldVector<double, n> > >&); \
|
(Dune::BlockVector<Dune::FieldVector<double, n>, std::allocator<Dune::FieldVector<double, n> > >&); \
|
||||||
|
\
|
||||||
|
template void BdaBridge<Dune::BCRSMatrix<Opm::MatrixBlock<double, n, n>, std::allocator<Opm::MatrixBlock<double, n, n> > >, \
|
||||||
|
Dune::BlockVector<Dune::FieldVector<double, n>, std::allocator<Dune::FieldVector<double, n> > >, \
|
||||||
|
n>::initWellContributions(WellContributions&)
|
||||||
|
|
||||||
|
|
||||||
INSTANTIATE_BDA_FUNCTIONS(1);
|
INSTANTIATE_BDA_FUNCTIONS(1);
|
||||||
INSTANTIATE_BDA_FUNCTIONS(2);
|
INSTANTIATE_BDA_FUNCTIONS(2);
|
||||||
|
@ -25,16 +25,10 @@
|
|||||||
#include "dune/istl/bcrsmatrix.hh"
|
#include "dune/istl/bcrsmatrix.hh"
|
||||||
#include <opm/simulators/linalg/matrixblock.hh>
|
#include <opm/simulators/linalg/matrixblock.hh>
|
||||||
|
|
||||||
|
#include <opm/simulators/linalg/bda/BdaSolver.hpp>
|
||||||
#include <opm/simulators/linalg/bda/ILUReorder.hpp>
|
#include <opm/simulators/linalg/bda/ILUReorder.hpp>
|
||||||
#include <opm/simulators/linalg/bda/WellContributions.hpp>
|
#include <opm/simulators/linalg/bda/WellContributions.hpp>
|
||||||
|
|
||||||
#if HAVE_CUDA
|
|
||||||
#include <opm/simulators/linalg/bda/cusparseSolverBackend.hpp>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if HAVE_OPENCL
|
|
||||||
#include <opm/simulators/linalg/bda/openclSolverBackend.hpp>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace Opm
|
namespace Opm
|
||||||
{
|
{
|
||||||
@ -48,6 +42,7 @@ class BdaBridge
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
bool use_gpu = false;
|
bool use_gpu = false;
|
||||||
|
std::string gpu_mode;
|
||||||
std::unique_ptr<bda::BdaSolver<block_size> > backend;
|
std::unique_ptr<bda::BdaSolver<block_size> > backend;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -79,9 +74,11 @@ public:
|
|||||||
return use_gpu;
|
return use_gpu;
|
||||||
}
|
}
|
||||||
|
|
||||||
const bda::BdaSolver<block_size>& getBackend() const {
|
/// Initialize the WellContributions object with opencl context and queue
|
||||||
return *backend;
|
/// those must be set before calling BlackOilWellModel::getWellContributions() in ISTL
|
||||||
}
|
/// \param[in] wellContribs container to hold all WellContributions
|
||||||
|
void initWellContributions(WellContributions& wellContribs);
|
||||||
|
|
||||||
|
|
||||||
}; // end class BdaBridge
|
}; // end class BdaBridge
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user