DITSOL_PGMRES (matvec, pcondl, pcondr, mstop, a, ia, x, b, n, ql, iql , qr, iqr, iparam, rparam, iwork, rwork, ierror)
DITSOL_PGMRES has the standard parameter list for an iterative solver.
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.