Documentation 6b54b78464
Loading...
Searching...
No Matches
Sparse linear systems

Classes and function to represent and solve large distributed sparse linear systems. More...

Classes

class  CPreconditioner< ScalarType >
 Abstract base class for defining a preconditioning operation. More...
 
class  CIdentityPreconditioner< ScalarType >
 No-op preconditioner used when Krylov solvers run without preconditioning. More...
 
class  CJacobiPreconditioner< ScalarType >
 Specialization of preconditioner that uses CSysMatrix class. More...
 
class  CILUPreconditioner< ScalarType >
 Specialization of preconditioner that uses CSysMatrix class. More...
 
class  CLU_SGSPreconditioner< ScalarType >
 Specialization of preconditioner that uses CSysMatrix class. More...
 
class  CLineletPreconditioner< ScalarType >
 Specialization of preconditioner that uses CSysMatrix class. More...
 
class  CPastixPreconditioner< ScalarType >
 Specialization of preconditioner that uses PaStiX to factorize a CSysMatrix. More...
 
class  CAbstractPreconditioner< ScalarType >
 Applies a std::function as the preconditioning operation. More...
 
struct  CSysMatrixComms
 Helper to communicate distributed vectors. More...
 
class  CMatrixVectorProduct< ScalarType >
 Abstract base class for defining matrix-vector products. More...
 
class  CSysMatrixVectorProduct< ScalarType >
 Specialization of matrix-vector product that uses CSysMatrix class. More...
 
class  CPastixWrapper< ScalarType >
 Wrapper class that converts between SU2 sparse format and PaStiX format and simplifies calls to the external solver. More...
 
class  CSysMatrix< ScalarType >
 Main class for defining block-compressed-row-storage sparse matrices. More...
 
class  CSysSolve< ScalarType >
 Class for solving linear systems using classical and Krylov-subspace iterative methods. More...
 
class  CSysVector< ScalarType >
 Class for holding and manipulating vectors needed by linear solvers. More...
 

Enumerations

enum class  FgcrodrMode { FgcrodrMode::NORMAL , FgcrodrMode::SAME_MAT }
 Modes of using FGCRODR. More...
 

Functions

template<class ScalarType , class Apply >
void ApplyPreconditionerOnHost (const CSysVector< ScalarType > &u, CSysVector< ScalarType > &v, Apply &&apply)
 Applies a preconditioner that only has a host implementation to vectors that live on the device: bring the input down, apply, put the result back.
 
template<class ScalarType , class Apply >
void ApplyPreconditionerOnDevice (const CSysVector< ScalarType > &u, CSysVector< ScalarType > &v, bool useCuda, Apply &&apply)
 Mirror of ApplyPreconditionerOnHost: applies a device preconditioner to host vectors.
 
virtual CPreconditioner< ScalarType >::~CPreconditioner ()=0
 Destructor of the class.
 
static CPreconditioner * CPreconditioner< ScalarType >::Create (ENUM_LINEAR_SOLVER_PREC kind, CSysMatrix< ScalarType > &jacobian, CGeometry *geometry, const CConfig *config)
 Factory method.
 

Detailed Description

Classes and function to represent and solve large distributed sparse linear systems.

Enumeration Type Documentation

◆ FgcrodrMode

enum class FgcrodrMode
strong

Modes of using FGCRODR.

Enumerator
NORMAL 

Solve the linear system.

SAME_MAT 

"NORMAL" but knowing the matrix did not change.

Function Documentation

◆ ApplyPreconditionerOnDevice()

template<class ScalarType , class Apply >
void ApplyPreconditionerOnDevice ( const CSysVector< ScalarType > &  u,
CSysVector< ScalarType > &  v,
bool  useCuda,
Apply &&  apply 
)
inline

Mirror of ApplyPreconditionerOnHost: applies a device preconditioner to host vectors.

Note
For callers that drive the Krylov solvers themselves and so never went through CSysSolve::Solve, which is what normally leaves the vectors on the device (Newton-Krylov). Device expressions are on for the duration so that a nested solve also uses the device copies. Only u is uploaded, v is always overwritten by the apply.

◆ ApplyPreconditionerOnHost()

template<class ScalarType , class Apply >
void ApplyPreconditionerOnHost ( const CSysVector< ScalarType > &  u,
CSysVector< ScalarType > &  v,
Apply &&  apply 
)
inline

Applies a preconditioner that only has a host implementation to vectors that live on the device: bring the input down, apply, put the result back.

Note
This is what keeps LU-SGS, Linelet and PaStiX usable on the GPU path. The transfers are issued by one thread with the team synchronized around them, the apply itself is the normal OpenMP parallel host code.

◆ Create()

template<class ScalarType >
CPreconditioner< ScalarType > * CPreconditioner< ScalarType >::Create ( ENUM_LINEAR_SOLVER_PREC  kind,
CSysMatrix< ScalarType > &  jacobian,
CGeometry *  geometry,
const CConfig *  config 
)
static

Factory method.

◆ ~CPreconditioner()

template<class ScalarType >
CPreconditioner< ScalarType >::~CPreconditioner ( )
pure virtual

Destructor of the class.