SPARSE-ITERATIVE-SOLVERS(3DXML) — Subroutines
Digital
Name
iterative-solvers − A library of sparse linear solvers (iterative)
Description
The sparse iterative solvers are a part of the Digital Extended Math Library (DXML). This package includes a set of routines for the iterative solution of sparse linear systems of equations via preconditioned conjugate-gradient-like methods. A flexible user interface, based on a matrix-free formulation of the solver, allows a choice among various solvers, preconditioners and storage schemes. A driver routine provides a simple interface to the iterative solvers when standard preconditioners and storage schemes are used.
Six different iterative methods support various applications of the preconditioner (given in parenthesis below):
•Preconditioned conjugate gradient method (none, SPD split)
•Preconditioned least squares conjugate gradient method (none, left, right, split)
•Preconditioned bi-conjugate gradient method (none, left, right, split)
•Preconditioned conjugate gradient squared method (none, left, right, split)
•Preconditioned generalized minimum residual method (none, left, right, split)
•Preconditioned transpose-free quasi-minimal residual method (none, left, right, split)
The matrix can be stored in one of three storage schemes:
•Symmetric diagonal
•Unsymmetric diagonal
•General storage by rows
Three preconditioners are provided for each storage scheme:
•Diagonal
•Polynomial (Neumann)
•Incomplete LU with zero diagonals added
Four stopping criteria are provided for controlling the convergence of the iterative process.
The interface to the solver allows the option of using a user-defined storage scheme, preconditioner or stopping criterion. Input parameters allow a choice of the maximum number of iterations, level of output provided, degree of polynomial preconditioning, stopping criterion, tolerance for convergence etc.
The iterative solvers are available in real, double precision only.
Parallel routines
Starting with DXML 3.2, parallel versions of the following iterative solver routines are included in the parallel library. These routines have the same name and calling sequence as the serial routines. The performance improvement obtained on SMP configurations is dependent on the problem size and sparsity, as well as the system characteristics.
DITSOL_DRIVER
DITSOL_PBCG
DITSOL_PCG
DITSOL_PCGS
DITSOL_PGMRES
DITSOL_PLSCG
DITSOL_PTFQMR
DMATVEC_GENR
DMATVEC_SDIA
DMATVEC_UDIA
DCREATE_DIAG_GENR
DCREATE_DIAG_SDIA
DCREATE_DIAG_UDIA
DAPPLY_DIAG_ALL
DCREATE_POLY_GENR
DCREATE_POLY_SDIA
DCREATE_POLY_UDIA
DAPPLY_POLY_GENR
DAPPLY_POLY_SDIA
DAPPLY_POLY_UDIA
The following routines are provided for the linear system solvers. The Subprogram Name is the name of the manual page containing documentation on the subprogram.
| Routine | Operation |
| ditsol_defaults | Set the default values in the arrays IPARAM and RPARAM |
| ditsol_driver | Driver routine for the iterative solvers |
| ditsol_pcg | Apply the preconditioned conjugate gradient method |
| ditsol_plscg | Apply the preconditioned least squares conjugate gradient method |
| ditsol_pbcg | Apply the preconditioned bi-conjugate gradient method |
| ditsol_pcgs | Apply the preconditioned conjugate gradient squared method |
| ditsol_pgmres | Apply the preconditioned generalized minimum residual method |
| ditsol_ptfqmr | Apply the preconditioned transpose-free quasi-minimal residual method |
The following routines are provided for the matrix vector product for the three storage schemes. The Subprogram Name is the name of the manual page containing documentation on the subprogram.
| Routine | Operation |
| dmatvec_sdia | Matrix vector product for the symmetric diagonal storage scheme |
| dmatvec_udia | Matrix vector product for the unsymmetric diagonal storage scheme |
| dmatvec_genr | Matrix vector product for the general storage by rows scheme |
The following routines are provided for the creation of the three preconditioners for the three storage schemes. The Subprogram Name is the name of the manual page containing documentation on the subprogram.
| Routine | Operation |
| dcreate_diag_sdia | Create the diagonal preconditioner for the symmetric diagonal storage scheme |
| dcreate_diag_udia | Create the diagonal preconditioner for the unsymmetric diagonal storage scheme |
| dcreate_diag_genr | Create the diagonal preconditioner for the general storage by rows scheme |
| dcreate_poly_sdia | Create the polynomial preconditioner for the symmetric diagonal storage scheme |
| dcreate_poly_udia | Create the polynomial preconditioner for the unsymmetric diagonal storage scheme |
| dcreate_poly_genr | Create the polynomial preconditioner for the general storage by rows scheme |
| dcreate_ilu_sdia | Create the incomplete LU preconditioner for the symmetric diagonal storage scheme |
| dcreate_ilu_udia | Create the incomplete LU preconditioner for the unsymmetric diagonal storage scheme |
| dcreate_ilu_genr | Create the incomplete LU preconditioner for the general storage by rows scheme |
The following routines are provided for the application of the three preconditioners for the three storage schemes. The Subprogram Name is the name of the manual page containing documentation on the subprogram.
| Routine | Operation |
| dapply_diag_all | Apply the diagonal preconditioner for all storage schemes |
| dapply_poly_sdia | Apply the polynomial preconditioner for the symmetric diagonal storage scheme |
| dapply_poly_udia | Apply the polynomial preconditioner for the unsymmetric diagonal storage scheme |
| dapply_poly_genr | Apply the polynomial preconditioner for the general storage by rows scheme |
| dapply_ilu_sdia | Apply the incomplete LU preconditioner for the symmetric diagonal storage scheme |
| dapply_ilu_udia_L | Apply the incomplete LU preconditioner for the unsymmetric diagonal storage scheme (operates on the L part) |
| dapply_ilu_udia_u | Apply the incomplete LU preconditioner for the unsymmetric diagonal storage scheme (operates on the U part) |
| dapply_ilu_genr_l | Apply the incomplete LU preconditioner for the general storage by rows scheme (operates on the L part) |
| dapply_ilu_genr_u | Apply the incomplete LU preconditioner for the general storage by rows scheme (operates on the U part) |