The sparse iterative solvers are a part of the Compaq Extended Math Library (CXML). 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.
Starting with CXML 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)