Loading...
Searching...
No Matches
Opm::gpuistl::GpuDILU< CPUMatrixT, X, Y, l > Class Template Reference

DILU preconditioner on the GPU. More...

`#include <GpuDILU.hpp>`

Inheritance diagram for Opm::gpuistl::GpuDILU< CPUMatrixT, X, Y, l >:

## Public Types

using | domain_type = X
| The domain type of the preconditioner.
using | range_type = Y
| The range type of the preconditioner.
using | field_type = typename X::field_type
| The field type of the preconditioner.
using | GPUMatrix = GpuSparseMatrixWrapper<field_type>
using | FloatMat = GpuSparseMatrixWrapper<float>
using | FloatVec = GpuVector<float>
using | matrix_type = GPUMatrix
| The matrix type the preconditioner is for.

## Public Member Functions

| GpuDILU (const GPUMatrix &gpuMatrix, const CPUMatrixT &cpuMatrix, bool splitMatrix, bool tuneKernels, int mixedPrecisionScheme, bool reorder)
| Constructor.
void | pre (X &x, Y &b) override
| Prepare the preconditioner.
void | apply (X &v, const Y &d) override
| Apply the preconditoner.
void | post (X &x) override
| Post processing.
Dune::SolverCategory::Category | category () const override
| Category of the preconditioner (see SolverCategory::Category).
void | update () final
| Updates the matrix data.
void | reorderAndSplitMatrix (int moveThreadBlockSize)
| perform matrix splitting and reordering
void | computeDiagonal (int factorizationThreadBlockSize)
| Compute the diagonal of the DILU, and update the data of the reordered matrix.
void | tuneThreadBlockSizes ()
| function that will experimentally tune the thread block sizes of the important cuda kernels
virtual bool | hasPerfectUpdate () const override

## Static Public Member Functions

static constexpr bool | shouldCallPre ()
static constexpr bool | shouldCallPost ()

## Detailed Description

template<class CPUMatrixT, class X, class Y, int l = 1>
class Opm::gpuistl::GpuDILU< CPUMatrixT, X, Y, l >

DILU preconditioner on the GPU.

Template Parameters

  CPUMatrixT | Type of the matrix on the CPU
  X | Type of the update
  Y | Type of the defect
  l | Ignored. Just there to have the same number of template arguments as other preconditioners.

Todo
  Remove the reliance on CPUMatrix. We should be able to use the GPU matrix type directly.

Note
  We assume X and Y are both GpuVector<real_type>, but we leave them as template arguments in case of future additions.

## Constructor & Destructor Documentation

## GpuDILU()

template<class CPUMatrixT, class X, class Y, int l = 1>

Opm::gpuistl::GpuDILU< M, X, Y, l >::GpuDILU | ( | const GPUMatrix & | gpuMatrix,
|  | const CPUMatrixT & | cpuMatrix,
|  | bool | splitMatrix,
|  | bool | tuneKernels,
|  | int | mixedPrecisionScheme,
|  | bool | reorder )

explicit

Constructor.

Constructor gets all parameters to operate the prec.

## Member Function Documentation

## hasPerfectUpdate()

template<class CPUMatrixT, class X, class Y, int l = 1>

virtual bool Opm::gpuistl::GpuDILU< CPUMatrixT, X, Y, l >::hasPerfectUpdate | ( |  | ) | const

inline override virtual

Implements Dune::PreconditionerWithUpdate< X, Y >.

## post()

template<class M, class X, class Y, int l>

void Opm::gpuistl::GpuDILU< M, X, Y, l >::post | ( | X & | x | ) |

override

Post processing.

Note
  Does nothing at the moment

## pre()

template<class M, class X, class Y, int l>

void Opm::gpuistl::GpuDILU< M, X, Y, l >::pre | ( | X & | x,
|  | Y & | b )

override

Prepare the preconditioner.

Note
  Does nothing at the time being.

## shouldCallPost()

template<class CPUMatrixT, class X, class Y, int l = 1>

constexpr bool Opm::gpuistl::GpuDILU< CPUMatrixT, X, Y, l >::shouldCallPost | ( |  | ) |

inline static constexpr

Returns
  false

## shouldCallPre()

template<class CPUMatrixT, class X, class Y, int l = 1>

constexpr bool Opm::gpuistl::GpuDILU< CPUMatrixT, X, Y, l >::shouldCallPre | ( |  | ) |

inline static constexpr

Returns
  false

## update()

template<class M, class X, class Y, int l>

void Opm::gpuistl::GpuDILU< M, X, Y, l >::update | ( |  | ) |

final virtual

Updates the matrix data.

Implements Dune::PreconditionerWithUpdate< X, Y >.

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

- opm/simulators/linalg/gpuistl/GpuDILU.hpp
- opm/simulators/linalg/gpuistl/GpuDILU.cpp