1#ifndef OPM_MIXED_PREC_HEADER_INCLUDED
2#define OPM_MIXED_PREC_HEADER_INCLUDED
14template <
class M,
class X,
class Y>
20 static constexpr auto block_size = domain_type::block_type::dimension;
30 int nnz = A.nonzeroes();
31 double_data_ = &A[0][0][0][0];
39 int *rows = mixed_matrix_->
rowptr;
40 int *cols = mixed_matrix_->
colidx;
45 for(
auto row=A.begin(); row!=A.end(); row++)
47 for(
auto col = row->begin(); col != row->end(); ++col)
49 cols[icol++] = col.index();
73 virtual void update()
override;
75 virtual void pre ([[maybe_unused]] X& x, [[maybe_unused]] Y& y)
override {};
76 virtual void post ([[maybe_unused]] X& x)
override {};
77 virtual void apply ([[maybe_unused]] X& x, [[maybe_unused]]
const Y& y)
override;
78 virtual Dune::SolverCategory::Category
category()
const override {
return Dune::SolverCategory::sequential; };
82 double const *double_data_;
88template <
class M,
class X,
class Y>
96 for(
int k=0;k<nnz_;k++)
98 for(
int i=0;i<b;i++)
for(
int j=0;j<b;j++) B[b*j+i] = double_data_[bb*k + b*i + j];
99 for(
int i=0;i<bb;i++) mixed_matrix_->dbl[bb*k + i] = B[i];
106template <
class M,
class X,
class Y>
108apply ([[maybe_unused]] X& x, [[maybe_unused]]
const Y& y)
bsr_matrix * bsr_alloc()
Create empty bsr matrix.
void bsr_free(bsr_matrix *A)
Delete bsr matrix.
void bsr_init(bsr_matrix *A, int nrows, int nnz, int b)
Initialize bsr matrix.
Interface class adding the update() method to the preconditioner interface.
Definition: PreconditionerWithUpdate.hpp:34
Wraps c-implementation of mixed-precision preconditioner.
Definition: PreconditionerWrapper.hpp:16
virtual void post(X &x) override
Definition: PreconditionerWrapper.hpp:76
virtual Dune::SolverCategory::Category category() const override
Definition: PreconditionerWrapper.hpp:78
MixedPreconditioner(const M &A, bool use_dilu=false)
constructor
Definition: PreconditionerWrapper.hpp:26
virtual void apply(X &x, const Y &y) override
Definition: PreconditionerWrapper.hpp:108
virtual bool hasPerfectUpdate() const override
Definition: PreconditionerWrapper.hpp:74
X domain_type
Definition: PreconditionerWrapper.hpp:19
virtual void update() override
Definition: PreconditionerWrapper.hpp:90
~MixedPreconditioner()
destructor
Definition: PreconditionerWrapper.hpp:67
static constexpr auto block_size
Definition: PreconditionerWrapper.hpp:20
virtual void pre(X &x, Y &y) override
Definition: PreconditionerWrapper.hpp:75
Definition: blackoilbioeffectsmodules.hh:45
void prec_ilu0_factorize(prec_t *P, bsr_matrix *A)
ILU0 factorization.
void prec_mapply3c(prec_t *P, double *x)
Preconditioner application in mixed-precision.
void prec_free(prec_t *P)
Delete preconditioner object.
void prec_dilu_factorize(prec_t *P, bsr_matrix *A)
DILU factorization.
void prec_downcast(prec_t *P)
Make single-precision copy of double-precision values.
prec_t * prec_alloc()
Create empty preconditioner object.
void prec_init(prec_t *P, bsr_matrix const *A)
Initialize preconditioner object.
Mixed-precision bsr matrix.
Definition: bsr.h:12
int * colidx
Definition: bsr.h:25
int * rowptr
Definition: bsr.h:23
Preconditioner struct.
Definition: prec.h:14