CXML

ditsol_pgmres 


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