CXML
ditsol_pgmres
Preconditioned generalized minimum residual method (Serial
and Parallel Versions)
FORMAT
DITSOL_PGMRES (matvec, pcondl, pcondr, mstop, a, ia, x, b, n,
ql, iql , qr, iqr, iparam, rparam, iwork, rwork, ierror)
Arguments
DITSOL_PGMRES has the standard parameter list for an iterative solver.
Description
The generalized minimum residual method [Saad and Schultz 1986] obtains a
solution x of the form
x = x0 + z
where x0 is the initial guess and z is a vector that minimizes the two norm
of the residual
r = b - A * (x0 + z)
over the Krylov space
K = (span) { r0, A*r0, A**2*r0, ... , A**(k-1)*r0}
of dimension k, with the initial residual r0 defined as:
r0 = b - A * x0
CXML implements the restarted generalized minimum residual method, where
the method is restarted every kprev steps. This implies that only the kprev
residuals need to be stored, instead of all the previous residuals as in
the generalized minimum residual method, resulting in a substantial savings
in memory.
The choice of kprev is crucial and requires some skill and experience ---
too small a value could result in poor convergence or no convergence at
all, while too large a value could result in excessive memory requirements.
kprev should be assigned a value prior to a call to DITSOL_PGMRES via the
parameter IPARAM(34) in the array IPARAM. A suggested starting value for
kprev is in the range of 3 to 6. If convergence is not obtained, the value
should be increased.
While the generalized minimum residual method is applicable to a general
problem and the residuals guaranteed not to increase, it is possible for
the residuals to stagnate and for the convergence criterion never to be
satisfied. Therefore, the convergence of the method should be monitored
closely.
The two norm of the residual generated by the generalized minimum residual
method is obtained during its implementation at no extra cost. However,
this is the residual of the system to which the method is applied, which,
in the left and split preconditioned case is the preconditioned residual
inverse(QL) * r. To obtain the true residual, a non-negligible amount of
extra computation would be required. Hence, for this method, only stopping
criteria 3 and 4 are allowed. Additionally, a user-defined MSTOP is not
allowed. In the unpreconditioned case, the stopping criteria default to 1
and 2, respectively. Thus only istop = 3 and istop = 4 are permitted for
both the preconditioned and the unpreconditioned case.
The implementation of the generalized minimum residual method requires the
routine MATVEC to provide operations for job= 0. The routines MATVEC,
PCONDL (if used), PCONDR (if used) should be declared external in your
calling (sub)program. Note that a user-defined MSTOP is not allowed.
CXML provides the following four forms of the method:
• Unpreconditioned generalized minimum residual method:
This is the generalized minimum residual method applied to
A * x = b
where A is a general matrix. As no preconditioning is used, both PCONDL
and PCONDR are dummy input parameters.
For the unpreconditioned generalized minimum residual method, the length
of the real work space array, defined by the variable nrwk (IPARAM(4)),
should be at least
nrwk = n * (kprev+1) + kprev * (kprev+5) + 1
where n is the order of the matrix A and kprev is the number of previous
residuals stored.
• Generalized minimum residual method with left preconditioning: This is
the generalized minimum residual method applied to
(inverse(QL) * A )* x = (inverse(QL) * b )
The routine PCONDL, with job = 0 should evaluate
v = inverse(QL) * u
The routine PCONDR is not used and is therefore a dummy input parameter.
For the generalized minimum residual method, with left preconditioning,
the length of the real work space array, defined by the variable nrwk
(IPARAM(4)), should be at least
nrwk = n * (kprev+2) + kprev * (kprev+5) + 1
where n is the order of the matrix A and kprev is the number of previous
residuals stored. This does not include the memory requirements of the
preconditioner.
• Generalized minimum residual method with right preconditioning:
This is the generalized minimum residual method applied to
(A * inverse(QR) ) * y = b
where
y = QR * x
The routine PCONDR, with job = 0 should evaluate
v = inverse(QR) * u
The routine PCONDL is not used.
For the generalized minimum residual method, with right preconditioning,
the length of the real work space array, defined by the variable nrwk
(IPARAM(4)), should be at least
nrwk = n * (kprev+2) + kprev * (kprev+5) + 1
where n is the order of the matrix A and kprev is the number of previous
residuals stored. This does not include the memory requirements of the
preconditioner.
• GMRES with split preconditioning:
This is the generalized minimum residual method applied to
(inverse(QL) * A * inverse(QR)) * y = (inverse(QL) * b)
where
y = QR * x
The routine PCONDL, with job= 0 should evaluate
v = inverse(QL) * u
and the routine PCONDR, with job= 0 should evaluate
v = inverse(QR) * u
For the generalized minimum residual method, with split
preconditioning, the length of the real work space array, defined by
the variable nrwk (IPARAM(4)), should be at least
nrwk = n * (kprev+2) + kprev * (kprev+5) + 1
where n is the order of the matrix A and kprev is the number of previous
residuals stored. This does not include the memory requirements of the
preconditioner.
This routine is available in both serial and parallel versions. The routine
names and parameter list are identical for both versions. For information
about linking to the serial or to the parallel library, refer to the CXML
Reference Manual.
CXML Home Page Index of CXML Routines