ViennaCL - The Vienna Computing Library  1.2.0
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
levelCoarse level identifier
AOperator matrix on all levels
PointvectorVector of points on all levels
SlicingPartitioning of the system matrix to different processors (only used in RS0 and RS3)
tagAMG 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
levelCoarse level identifier
AOperator matrix on all levels
PointvectorVector of points on all levels
tagAMG 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
levelCoarse level identifier
AOperator matrix on all levels
PointvectorVector of points on all levels
tagAMG 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
levelCourse level identifier
AOperator matrix on all levels
PointvectorVector of points on all levels
tagAMG 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
levelCoarse level identifier
AOperator matrix on all level
PointvectorVector of points on all levels
SlicingPartitioning of the system matrix and the other data structures to different processors
tagAMG 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
levelCoarse level identifier
AOperator matrix on all levels
PointvectorVector of points on all levels
SlicingPartitioning of the system matrix and the other data structures to different processors
tagAMG 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
AOperator matrix (quadratic)
PProlongation/Interpolation matrix
RESResult 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
levelCoarse level identifier
AOperator matrix on all levels
PointvectorVector of points on all levels
tagAMG 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
levelCoarse level identifier
AOperator matrix on all levels
PProlongation matrices. P[level] is constructed
PointvectorVector of points on all levels
tagAMG 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
levelCoarse level identifier
AOperator matrix on all levels
PProlongation matrices. P[level] is constructed
PointvectorVector of points on all levels
tagAMG 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
levelCoarse level identifier
AOperator matrix on all levels
PProlongation matrices. P[level] is constructed
PointvectorVector of points on all levels
tagAMG 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
levelCoarse level identifier
AOperator matrix on all levels
PProlongation matrices. P[level] is constructed
PointvectorVector of points on all levels
tagAMG 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
levelCoarse level identifier
AOperator matrix on all levels
PProlongation matrices. P[level] is constructed
PointvectorVector of points on all levels
tagAMG preconditioner tag
void viennacl::linalg::detail::amg::amg_mat_prod ( SparseMatrixType &  A,
SparseMatrixType &  B,
SparseMatrixType &  RES 
)

Sparse matrix product. Calculates RES = A*B.

Parameters
ALeft Matrix
BRight Matrix
RESResult 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
PInterpolation matrix
rowRow which has to be truncated
tagAMG 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
AOperator matrix (quadratic)
PProlongation/Interpolation matrix
PointvectorVector 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
AOperator matrix (quadratic)
PProlongation/Interpolation matrix
A_i1Result Matrix