1#ifndef OPM_MIXED_MATRIX_HEADER_INCLUDED
2#define OPM_MIXED_MATRIX_HEADER_INCLUDED
17template <
class Vector>
23 static constexpr auto block_size = Vector::block_type::dimension;
25 virtual void mv(
const Vector& x, Vector& y)
const;
26 virtual void umv(
const Vector& x, Vector& y)
const;
27 virtual void usmv(
double alpha,
const Vector& x, Vector& y)
const;
35 if constexpr(
block_size!=3) OPM_THROW(std::invalid_argument,
"MixedMatrixWrapper only supports block size == 3! \n");
45 void update(
double const *data);
55template <
class Vector>
57mv(
const Vector& x, Vector& y)
const
63template <
class Vector>
65umv(
const Vector& x, Vector& y)
const
71template <
class Vector>
73usmv(
double alpha,
const Vector& x, Vector& y)
const
79template <
class Vector>
84 int const b = block_size;
87 for(
int k=0;k<nnz_;k++)
89 for(
int i=0;i<b;i++)
for(
int j=0;j<b;j++) B[b*j+i] = data[bb*k + b*i + j];
90 for(
int i=0;i<bb;i++) M_->dbl[bb*k + i] = B[i];
void bsr_downcast(bsr_matrix *M)
Make single-precision copy of double-precision values.
void bsr_vmspumv3(bsr_matrix *A, const double *x, double *y, double alpha)
Sparse matrix-vector multiplication in mixed precision.
bsr_matrix * bsr_alloc()
Create empty bsr matrix.
void bsr_vmspmv3(bsr_matrix *A, const double *x, double *y)
Sparse matrix-vector multiplication in mixed precision.
void bsr_free(bsr_matrix *A)
Delete bsr matrix.
void bsr_init(bsr_matrix *A, int nrows, int nnz, int b)
Initialize bsr matrix.
Wraps c-implementation of mixed-precision matrix.
Definition: MatrixWrapper.hpp:19
MixedMatrixWrapper(int nrows, int nnz)
constructor
Definition: MatrixWrapper.hpp:33
~MixedMatrixWrapper()
destructor
Definition: MatrixWrapper.hpp:43
virtual void mv(const Vector &x, Vector &y) const
Definition: MatrixWrapper.hpp:57
int * rowptr()
Definition: MatrixWrapper.hpp:47
void update(double const *data)
Definition: MatrixWrapper.hpp:81
int * colidx()
Definition: MatrixWrapper.hpp:48
virtual void umv(const Vector &x, Vector &y) const
Definition: MatrixWrapper.hpp:65
virtual void usmv(double alpha, const Vector &x, Vector &y) const
Definition: MatrixWrapper.hpp:73
static constexpr auto block_size
Definition: MatrixWrapper.hpp:23
Definition: blackoilbioeffectsmodules.hh:45
Mixed-precision bsr matrix.
Definition: bsr.h:12
int * colidx
Definition: bsr.h:25
int * rowptr
Definition: bsr.h:23