This subroutine solves a general sparse linear system of equations, using an iterative algorithm, with or without preconditioning. The methods include the more smoothly converging variant of the CGS method (Bi-CGSTAB), conjugate gradient squared (CGS), or transpose-free quasi-minimal residual method (TFQMR).
See references [7], [9], [12], and [35].
Fortran | CALL PDSPGIS (as, ia1, ia2, infoa, nrhs, b, ldb, x, ldx, prcs, desc_a, iparm, rparm, info) |
C and C++ | pdspgis (as, ia1, ia2, infoa, nrhs, b, ldb, x, ldx, prcs, desc_a, iparm, rparm, info); |
Scope: local
Specified as: a one-dimensional array of (at least) length INFOA(1), containing long-precision real numbers.
Scope: local
Specified as: a one-dimensional array of (at least) length INFOA(2), containing fullword integers.
Scope: local
Specified as: a one-dimensional array of (at least) length INFOA(3), containing fullword integers.
Specified as: an array of length 30, containing fullword integers.
Scope: global
Specified as: a fullword integer; nrhs = 1.
Scope: local
Specified as: an ldb by (at least) length nrhs array, containing long-precision real numbers.
Scope: local
Specified as: a fullword integer; ldb >= max(1,N_ROW)
Scope: local
Specified as: an ldx by (at least) nrhs array, containing long-precision real numbers.
Scope: local
Specified as: a fullword integer; ldx >= max(1,N_ROW)
Scope: local
Specified as: a one-dimensional array of (at least) length lprcs, containing long-precision real numbers.
Specified as: an array of length DLEN, containing fullword integers.
If IPARM(1) = 0, the following defaults are used:
If methd = 1, the more smoothly converging variant of the CGS method, referred to as Bi-CGSTAB, is used.
If methd = 2, the conjugate gradient squared method, referred to as CGS, is used.
If methd = 3, the transpose-free quasi-minimal residual method, referred to as TFQMR, is used.
If istopc = 1, the iterative method is stopped when:
||rj||2 / ||xj||2 < epsilon
If istopc = 2, the iterative method is stopped when:
||rj||2 / ||r0||2 < epsilon
If istopc = 3, the iterative method is stopped when:
||xj -xj-1||2 / ||xj||2 < epsilon
If itrace = 0, then itrace is ignored.
If itrace > 0, an informational message about convergence, which is based on the stopping criterion described in istopc, is issued at every itrace-th iteration and upon exit.
Scope: global
Specified as: an array of length 20, containing fullword integers, where:
is an array of parameters, RPARM(i), where:
Scope: global
Specified as: an array of length 20, containing long-precision real numbers, where:
Scope: local
Returned as: an array of (at least) length N_ROW, containing long-precision real numbers.
Scope: global
Returned as: an array of length 20, containing fullword integers, where:
Scope: global
Returned as: an array of length 20, containing long-precision real numbers, where:
If info = 0, then no input-argument errors or computational errors occurred. This indicates a normal exit.
If info > 0, then this subroutine exceeded itmax iterations without converging. You may want to try the following to get your matrix to converge:
Scope: global
Returned as: a fullword integer; info >= 0.
You may want to try the following to get your matrix to converge: