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). |
void viennacl::linalg::detail::amg::amg_coarse | ( | unsigned int | level, | |
InternalType1 & | A, | |||
InternalType2 & | Pointvector, | |||
InternalType3 & | Slicing, | |||
amg_tag & | tag | |||
) |
Calls the right coarsening procedure.
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).
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).
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).
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).
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).
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.
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!
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.
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).
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).
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).
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).
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.
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).
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!
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!
A | Operator matrix (quadratic) | |
P | Prolongation/Interpolation matrix | |
A_i1 | Result Matrix |