#include <openclWellContributions.hpp>

Inheritance diagram for Opm::WellContributionsOCL:
Inheritance graph

Public Types

enum class  MatrixType { C , D , B }
 StandardWell has C, D and B matrices that need to be copied. More...
 
using UMFPackIndex = SuiteSparse_long
 

Public Member Functions

void setOpenCLEnv (cl::Context *context_, cl::CommandQueue *queue_)
 
void apply_stdwells (cl::Buffer d_x, cl::Buffer d_y)
 
void apply_mswells (cl::Buffer d_x, cl::Buffer d_y)
 
void apply (cl::Buffer d_x, cl::Buffer d_y)
 
unsigned int getNumWells ()
 
void addNumBlocks (unsigned int numBlocks)
 
void alloc ()
 Allocate memory for the StandardWells. More...
 
void setBlockSize (unsigned int dim, unsigned int dim_wells)
 
void setVectorSize (unsigned N)
 
void addMatrix (MatrixType type, int *colIndices, double *values, unsigned int val_size)
 
void addMultisegmentWellContribution (unsigned int dim, unsigned int dim_wells, unsigned int Mb, std::vector< double > &Bvalues, std::vector< unsigned int > &BcolIndices, std::vector< unsigned int > &BrowPointers, unsigned int DnumBlocks, double *Dvalues, UMFPackIndex *DcolPointers, UMFPackIndex *DrowIndices, std::vector< double > &Cvalues)
 

Static Public Member Functions

static std::unique_ptr< WellContributionscreate (const std::string &accelerator_mode, bool useWellConn)
 

Protected Member Functions

void APIalloc () override
 Allocate memory for the StandardWells. More...
 
void APIaddMatrix (MatrixType type, int *colIndices, double *values, unsigned int val_size) override
 Api specific upload of matrix. More...
 

Protected Attributes

cl::Context * context
 
cl::CommandQueue * queue
 
std::vector< cl::Event > events
 
std::unique_ptr< cl::Buffer > d_Cnnzs_ocl
 
std::unique_ptr< cl::Buffer > d_Dnnzs_ocl
 
std::unique_ptr< cl::Buffer > d_Bnnzs_ocl
 
std::unique_ptr< cl::Buffer > d_Ccols_ocl
 
std::unique_ptr< cl::Buffer > d_Bcols_ocl
 
std::unique_ptr< cl::Buffer > d_val_pointers_ocl
 
std::vector< double > h_x
 
std::vector< double > h_y
 
bool allocated = false
 
unsigned int N
 
unsigned int dim
 
unsigned int dim_wells
 
unsigned int num_blocks = 0
 
unsigned int num_std_wells = 0
 
unsigned int num_ms_wells = 0
 
unsigned int num_blocks_so_far = 0
 
unsigned int num_std_wells_so_far = 0
 
std::vector< unsigned int > val_pointers
 
std::vector< std::unique_ptr< MultisegmentWellContribution > > multisegments
 

Member Typedef Documentation

◆ UMFPackIndex

using Opm::WellContributions::UMFPackIndex = SuiteSparse_long
inherited

Member Enumeration Documentation

◆ MatrixType

enum class Opm::WellContributions::MatrixType
stronginherited

StandardWell has C, D and B matrices that need to be copied.

Enumerator

Member Function Documentation

◆ addMatrix()

void Opm::WellContributions::addMatrix ( MatrixType  type,
int *  colIndices,
double *  values,
unsigned int  val_size 
)
inherited

Store a matrix in this object, in blocked csr format, can only be called after alloc() is called

Parameters
[in]typeindicate if C, D or B is sent
[in]colIndicescolumnindices of blocks in C or B, ignored for D
[in]valuesarray of nonzeroes
[in]val_sizenumber of blocks in C or B, ignored for D

◆ addMultisegmentWellContribution()

void Opm::WellContributions::addMultisegmentWellContribution ( unsigned int  dim,
unsigned int  dim_wells,
unsigned int  Mb,
std::vector< double > &  Bvalues,
std::vector< unsigned int > &  BcolIndices,
std::vector< unsigned int > &  BrowPointers,
unsigned int  DnumBlocks,
double *  Dvalues,
UMFPackIndex DcolPointers,
UMFPackIndex DrowIndices,
std::vector< double > &  Cvalues 
)
inherited

Add a MultisegmentWellContribution, actually creates an object on heap that is destroyed in the destructor Matrices C and B are passed in Blocked CSR, matrix D in CSC

Parameters
[in]dimsize of blocks in vectors x and y, equal to MultisegmentWell::numEq
[in]dim_wellssize of blocks of C, B and D, equal to MultisegmentWell::numWellEq
[in]Mbnumber of blockrows in C, B and D
[in]Bvaluesnonzero values of matrix B
[in]BcolIndicescolumnindices of blocks of matrix B
[in]BrowPointersrowpointers of matrix B
[in]DnumBlocksnumber of blocks in D
[in]Dvaluesnonzero values of matrix D
[in]DcolPointerscolumnpointers of matrix D
[in]DrowIndicesrowindices of matrix D
[in]Cvaluesnonzero values of matrix C

◆ addNumBlocks()

void Opm::WellContributions::addNumBlocks ( unsigned int  numBlocks)
inherited

Indicate how large the next StandardWell is, this function cannot be called after alloc() is called

Parameters
[in]numBlocksnumber of blocks in C and B of next StandardWell

Referenced by Opm::BlackoilWellModel< TypeTag >::getWellContributions().

◆ alloc()

void Opm::WellContributions::alloc ( )
inherited

Allocate memory for the StandardWells.

Referenced by Opm::BlackoilWellModel< TypeTag >::getWellContributions().

◆ APIaddMatrix()

void Opm::WellContributionsOCL::APIaddMatrix ( MatrixType  ,
int *  ,
double *  ,
unsigned int   
)
overrideprotectedvirtual

Api specific upload of matrix.

Reimplemented from Opm::WellContributions.

◆ APIalloc()

void Opm::WellContributionsOCL::APIalloc ( )
overrideprotectedvirtual

Allocate memory for the StandardWells.

Reimplemented from Opm::WellContributions.

◆ apply()

void Opm::WellContributionsOCL::apply ( cl::Buffer  d_x,
cl::Buffer  d_y 
)

◆ apply_mswells()

void Opm::WellContributionsOCL::apply_mswells ( cl::Buffer  d_x,
cl::Buffer  d_y 
)

◆ apply_stdwells()

void Opm::WellContributionsOCL::apply_stdwells ( cl::Buffer  d_x,
cl::Buffer  d_y 
)

◆ create()

static std::unique_ptr< WellContributions > Opm::WellContributions::create ( const std::string &  accelerator_mode,
bool  useWellConn 
)
staticinherited

◆ getNumWells()

unsigned int Opm::WellContributions::getNumWells ( )
inlineinherited

◆ setBlockSize()

void Opm::WellContributions::setBlockSize ( unsigned int  dim,
unsigned int  dim_wells 
)
inherited

Indicate how large the blocks of the StandardWell (C and B) are

Parameters
[in]dimnumber of columns
[in]dim_wellsnumber of rows

Referenced by Opm::BlackoilWellModel< TypeTag >::getWellContributions().

◆ setOpenCLEnv()

void Opm::WellContributionsOCL::setOpenCLEnv ( cl::Context *  context_,
cl::CommandQueue *  queue_ 
)

◆ setVectorSize()

void Opm::WellContributions::setVectorSize ( unsigned  N)
inherited

Set size of vector that the wells are applied to

Parameters
[in]Nsize of vector

Member Data Documentation

◆ allocated

bool Opm::WellContributions::allocated = false
protectedinherited

◆ context

cl::Context* Opm::WellContributionsOCL::context
protected

◆ d_Bcols_ocl

std::unique_ptr<cl::Buffer> Opm::WellContributionsOCL::d_Bcols_ocl
protected

◆ d_Bnnzs_ocl

std::unique_ptr<cl::Buffer> Opm::WellContributionsOCL::d_Bnnzs_ocl
protected

◆ d_Ccols_ocl

std::unique_ptr<cl::Buffer> Opm::WellContributionsOCL::d_Ccols_ocl
protected

◆ d_Cnnzs_ocl

std::unique_ptr<cl::Buffer> Opm::WellContributionsOCL::d_Cnnzs_ocl
protected

◆ d_Dnnzs_ocl

std::unique_ptr<cl::Buffer> Opm::WellContributionsOCL::d_Dnnzs_ocl
protected

◆ d_val_pointers_ocl

std::unique_ptr<cl::Buffer> Opm::WellContributionsOCL::d_val_pointers_ocl
protected

◆ dim

unsigned int Opm::WellContributions::dim
protectedinherited

◆ dim_wells

unsigned int Opm::WellContributions::dim_wells
protectedinherited

◆ events

std::vector<cl::Event> Opm::WellContributionsOCL::events
protected

◆ h_x

std::vector<double> Opm::WellContributionsOCL::h_x
protected

◆ h_y

std::vector<double> Opm::WellContributionsOCL::h_y
protected

◆ multisegments

std::vector<std::unique_ptr<MultisegmentWellContribution> > Opm::WellContributions::multisegments
protectedinherited

◆ N

unsigned int Opm::WellContributions::N
protectedinherited

◆ num_blocks

unsigned int Opm::WellContributions::num_blocks = 0
protectedinherited

◆ num_blocks_so_far

unsigned int Opm::WellContributions::num_blocks_so_far = 0
protectedinherited

◆ num_ms_wells

unsigned int Opm::WellContributions::num_ms_wells = 0
protectedinherited

◆ num_std_wells

unsigned int Opm::WellContributions::num_std_wells = 0
protectedinherited

◆ num_std_wells_so_far

unsigned int Opm::WellContributions::num_std_wells_so_far = 0
protectedinherited

◆ queue

cl::CommandQueue* Opm::WellContributionsOCL::queue
protected

◆ val_pointers

std::vector<unsigned int> Opm::WellContributions::val_pointers
protectedinherited

The documentation for this class was generated from the following file: