Data Structures | Functions

viennacl::linalg::detail::amg Namespace Reference

Data Structures

class  amg_tag
 A tag for algebraic multigrid (AMG). Used to transport information from the user to the implementation. More...
class  amg_nonzero_scalar
 A class for a scalar that can be written to the sparse matrix or sparse vector datatypes. More...
class  amg_sparsevector_iterator
 Defines an iterator for the sparse vector type. More...
class  amg_sparsevector
 A class for the sparse vector type. More...
class  amg_sparsematrix
 A class for the sparse matrix type. Uses vector of maps as data structure for higher performance and lower memory usage. Uses similar interface as ublas::compressed_matrix. Can deal with transposed of matrix internally: Creation, Storage, Iterators, etc. More...
class  amg_point
 A class for the AMG points. Saves point index and influence measure Holds information whether point is undecided, C or F point. Holds lists of points that are influenced by or influencing this point. More...
struct  classcomp
 Comparison class for the sorted set of points in amg_pointvector. Set is sorted by influence measure from lower to higher with the point-index as tie-breaker. More...
class  amg_pointvector
 A class for the AMG points. Holds pointers of type amg_point in a vector that can be accessed using [point-index]. Additional list of pointers sorted by influence number and index to improve coarsening performance (see amg_coarse_classic_onepass() in amg_coarse.hpp) Constructs indices for C points on the coarse level, needed for interpolation. More...
class  amg_slicing
 A class for the matrix slicing for parallel coarsening schemes (RS0/RS3). More...

Functions

template<typename SparseMatrixType >
void amg_mat_prod (SparseMatrixType &A, SparseMatrixType &B, SparseMatrixType &RES)
 Sparse matrix product. Calculates RES = A*B.
template<typename SparseMatrixType >
void amg_galerkin_prod (SparseMatrixType &A, SparseMatrixType &P, SparseMatrixType &RES)
 Sparse Galerkin product: Calculates RES = trans(P)*A*P.
template<typename SparseMatrixType >
void test_triplematprod (SparseMatrixType &A, SparseMatrixType &P, SparseMatrixType &A_i1)
 Test triple-matrix product by comparing it to ublas functions. Very slow for large matrices!
template<typename SparseMatrixType , typename PointVectorType >
void test_interpolation (SparseMatrixType &A, SparseMatrixType &P, PointVectorType &Pointvector)
 Test if interpolation matrix makes sense. Only vanilla test though! Only checks if basic requirements are met!
template<typename InternalType1 , typename InternalType2 , typename InternalType3 >
void amg_coarse (unsigned int level, InternalType1 &A, InternalType2 &Pointvector, InternalType3 &Slicing, amg_tag &tag)
 Calls the right coarsening procedure.
template<typename InternalType1 , typename InternalType2 >
void amg_influence (unsigned int level, InternalType1 const &A, InternalType2 &Pointvector, amg_tag &tag)
 Determines strong influences in system matrix, classical approach (RS). Multithreaded!
template<typename InternalType1 , typename InternalType2 >
void amg_coarse_classic_onepass (unsigned int level, InternalType1 &A, InternalType2 &Pointvector, amg_tag &tag)
 Classical (RS) one-pass coarsening. Single-Threaded! (VIENNACL_AMG_COARSE_CLASSIC_ONEPASS).
template<typename InternalType1 , typename InternalType2 >
void amg_coarse_classic (unsigned int level, InternalType1 &A, InternalType2 &Pointvector, amg_tag &tag)
 Classical (RS) two-pass coarsening. Single-Threaded! (VIENNACL_AMG_COARSE_CLASSIC).
template<typename InternalType1 , typename InternalType2 , typename InternalType3 >
void amg_coarse_rs0 (unsigned int level, InternalType1 &A, InternalType2 &Pointvector, InternalType3 &Slicing, amg_tag &tag)
 Parallel classical RS0 coarsening. Multi-Threaded! (VIENNACL_AMG_COARSE_RS0 || VIENNACL_AMG_COARSE_RS3).
template<typename InternalType1 , typename InternalType2 , typename InternalType3 >
void amg_coarse_rs3 (unsigned int level, InternalType1 &A, InternalType2 &Pointvector, InternalType3 &Slicing, amg_tag &tag)
 RS3 coarsening. Single-Threaded! (VIENNACL_AMG_COARSE_RS3).
template<typename InternalType1 , typename InternalType2 >
void amg_coarse_ag (unsigned int level, InternalType1 &A, InternalType2 &Pointvector, amg_tag &tag)
 AG (aggregation based) coarsening. Single-Threaded! (VIENNACL_AMG_COARSE_SA).
template<typename MatrixType >
void printmatrix (MatrixType &mat, int const value=-1)
template<typename VectorType >
void printvector (VectorType const &vec)
template<typename InternalType1 , typename InternalType2 >
void amg_interpol (unsigned int level, InternalType1 &A, InternalType1 &P, InternalType2 &Pointvector, amg_tag &tag)
 Calls the right function to build interpolation matrix.
template<typename InternalType1 , typename InternalType2 >
void amg_interpol_direct (unsigned int level, InternalType1 &A, InternalType1 &P, InternalType2 &Pointvector, amg_tag &tag)
 Direct interpolation. Multi-threaded! (VIENNACL_AMG_INTERPOL_DIRECT).
template<typename InternalType1 , typename InternalType2 >
void amg_interpol_classic (unsigned int level, InternalType1 &A, InternalType1 &P, InternalType2 &Pointvector, amg_tag &tag)
 Classical interpolation. Don't use with onepass classical coarsening or RS0 (Yang, p.14)! Multi-threaded! (VIENNACL_AMG_INTERPOL_CLASSIC).
template<typename SparseMatrixType >
void amg_truncate_row (SparseMatrixType &P, unsigned int row, amg_tag &tag)
 Interpolation truncation (for VIENNACL_AMG_INTERPOL_DIRECT and VIENNACL_AMG_INTERPOL_CLASSIC).
template<typename InternalType1 , typename InternalType2 >
void amg_interpol_ag (unsigned int level, InternalType1 &A, InternalType1 &P, InternalType2 &Pointvector, amg_tag &tag)
 AG (aggregation based) interpolation. Multi-Threaded! (VIENNACL_INTERPOL_SA).
template<typename InternalType1 , typename InternalType2 >
void amg_interpol_sa (unsigned int level, InternalType1 &A, InternalType1 &P, InternalType2 &Pointvector, amg_tag &tag)
 SA (smoothed aggregate) interpolation. Multi-Threaded! (VIENNACL_INTERPOL_SA).

Function Documentation

void viennacl::linalg::detail::amg::amg_coarse ( unsigned int  level,
InternalType1 &  A,
InternalType2 &  Pointvector,
InternalType3 &  Slicing,
amg_tag &  tag 
)

Calls the right coarsening procedure.

Parameters:
level Coarse level identifier
A Operator matrix on all levels
Pointvector Vector of points on all levels
Slicing Partitioning of the system matrix to different processors (only used in RS0 and RS3)
tag AMG preconditioner tag
void viennacl::linalg::detail::amg::amg_coarse_ag ( unsigned int  level,
InternalType1 &  A,
InternalType2 &  Pointvector,
amg_tag &  tag 
)

AG (aggregation based) coarsening. Single-Threaded! (VIENNACL_AMG_COARSE_SA).

Parameters:
level Coarse level identifier
A Operator matrix on all levels
Pointvector Vector of points on all levels
tag AMG preconditioner tag
void viennacl::linalg::detail::amg::amg_coarse_classic ( unsigned int  level,
InternalType1 &  A,
InternalType2 &  Pointvector,
amg_tag &  tag 
)

Classical (RS) two-pass coarsening. Single-Threaded! (VIENNACL_AMG_COARSE_CLASSIC).

Parameters:
level Coarse level identifier
A Operator matrix on all levels
Pointvector Vector of points on all levels
tag AMG preconditioner tag
void viennacl::linalg::detail::amg::amg_coarse_classic_onepass ( unsigned int  level,
InternalType1 &  A,
InternalType2 &  Pointvector,
amg_tag &  tag 
)

Classical (RS) one-pass coarsening. Single-Threaded! (VIENNACL_AMG_COARSE_CLASSIC_ONEPASS).

Parameters:
level Course level identifier
A Operator matrix on all levels
Pointvector Vector of points on all levels
tag AMG preconditioner tag
void viennacl::linalg::detail::amg::amg_coarse_rs0 ( unsigned int  level,
InternalType1 &  A,
InternalType2 &  Pointvector,
InternalType3 &  Slicing,
amg_tag &  tag 
)

Parallel classical RS0 coarsening. Multi-Threaded! (VIENNACL_AMG_COARSE_RS0 || VIENNACL_AMG_COARSE_RS3).

Parameters:
level Coarse level identifier
A Operator matrix on all level
Pointvector Vector of points on all levels
Slicing Partitioning of the system matrix and the other data structures to different processors
tag AMG preconditioner tag
void viennacl::linalg::detail::amg::amg_coarse_rs3 ( unsigned int  level,
InternalType1 &  A,
InternalType2 &  Pointvector,
InternalType3 &  Slicing,
amg_tag &  tag 
)

RS3 coarsening. Single-Threaded! (VIENNACL_AMG_COARSE_RS3).

Parameters:
level Coarse level identifier
A Operator matrix on all levels
Pointvector Vector of points on all levels
Slicing Partitioning of the system matrix and the other data structures to different processors
tag AMG preconditioner tag
void viennacl::linalg::detail::amg::amg_galerkin_prod ( SparseMatrixType &  A,
SparseMatrixType &  P,
SparseMatrixType &  RES 
)

Sparse Galerkin product: Calculates RES = trans(P)*A*P.

Parameters:
A Operator matrix (quadratic)
P Prolongation/Interpolation matrix
RES Result Matrix (Galerkin operator)
void viennacl::linalg::detail::amg::amg_influence ( unsigned int  level,
InternalType1 const &  A,
InternalType2 &  Pointvector,
amg_tag &  tag 
)

Determines strong influences in system matrix, classical approach (RS). Multithreaded!

Parameters:
level Coarse level identifier
A Operator matrix on all levels
Pointvector Vector of points on all levels
tag AMG preconditioner tag
void viennacl::linalg::detail::amg::amg_interpol ( unsigned int  level,
InternalType1 &  A,
InternalType1 &  P,
InternalType2 &  Pointvector,
amg_tag &  tag 
)

Calls the right function to build interpolation matrix.

Parameters:
level Coarse level identifier
A Operator matrix on all levels
P Prolongation matrices. P[level] is constructed
Pointvector Vector of points on all levels
tag AMG preconditioner tag
void viennacl::linalg::detail::amg::amg_interpol_ag ( unsigned int  level,
InternalType1 &  A,
InternalType1 &  P,
InternalType2 &  Pointvector,
amg_tag &  tag 
)

AG (aggregation based) interpolation. Multi-Threaded! (VIENNACL_INTERPOL_SA).

Parameters:
level Coarse level identifier
A Operator matrix on all levels
P Prolongation matrices. P[level] is constructed
Pointvector Vector of points on all levels
tag AMG preconditioner tag
void viennacl::linalg::detail::amg::amg_interpol_classic ( unsigned int  level,
InternalType1 &  A,
InternalType1 &  P,
InternalType2 &  Pointvector,
amg_tag &  tag 
)

Classical interpolation. Don't use with onepass classical coarsening or RS0 (Yang, p.14)! Multi-threaded! (VIENNACL_AMG_INTERPOL_CLASSIC).

Parameters:
level Coarse level identifier
A Operator matrix on all levels
P Prolongation matrices. P[level] is constructed
Pointvector Vector of points on all levels
tag AMG preconditioner tag
void viennacl::linalg::detail::amg::amg_interpol_direct ( unsigned int  level,
InternalType1 &  A,
InternalType1 &  P,
InternalType2 &  Pointvector,
amg_tag &  tag 
)

Direct interpolation. Multi-threaded! (VIENNACL_AMG_INTERPOL_DIRECT).

Parameters:
level Coarse level identifier
A Operator matrix on all levels
P Prolongation matrices. P[level] is constructed
Pointvector Vector of points on all levels
tag AMG preconditioner tag
void viennacl::linalg::detail::amg::amg_interpol_sa ( unsigned int  level,
InternalType1 &  A,
InternalType1 &  P,
InternalType2 &  Pointvector,
amg_tag &  tag 
)

SA (smoothed aggregate) interpolation. Multi-Threaded! (VIENNACL_INTERPOL_SA).

Parameters:
level Coarse level identifier
A Operator matrix on all levels
P Prolongation matrices. P[level] is constructed
Pointvector Vector of points on all levels
tag AMG preconditioner tag
void viennacl::linalg::detail::amg::amg_mat_prod ( SparseMatrixType &  A,
SparseMatrixType &  B,
SparseMatrixType &  RES 
)

Sparse matrix product. Calculates RES = A*B.

Parameters:
A Left Matrix
B Right Matrix
RES Result Matrix
void viennacl::linalg::detail::amg::amg_truncate_row ( SparseMatrixType &  P,
unsigned int  row,
amg_tag &  tag 
)

Interpolation truncation (for VIENNACL_AMG_INTERPOL_DIRECT and VIENNACL_AMG_INTERPOL_CLASSIC).

Parameters:
P Interpolation matrix
row Row which has to be truncated
tag AMG preconditioner tag
void viennacl::linalg::detail::amg::printmatrix ( MatrixType &  mat,
int const   value = -1 
)
void viennacl::linalg::detail::amg::printvector ( VectorType const &  vec  ) 
void viennacl::linalg::detail::amg::test_interpolation ( SparseMatrixType &  A,
SparseMatrixType &  P,
PointVectorType &  Pointvector 
)

Test if interpolation matrix makes sense. Only vanilla test though! Only checks if basic requirements are met!

Parameters:
A Operator matrix (quadratic)
P Prolongation/Interpolation matrix
Pointvector Vector of points
void viennacl::linalg::detail::amg::test_triplematprod ( SparseMatrixType &  A,
SparseMatrixType &  P,
SparseMatrixType &  A_i1 
)

Test triple-matrix product by comparing it to ublas functions. Very slow for large matrices!

Parameters:
A Operator matrix (quadratic)
P Prolongation/Interpolation matrix
A_i1 Result Matrix