CXML

ditsol_pbcg 


FORMAT

  DITSOL_PBCG (matvec, pcondl, pcondr, mstop, a, ia, x, b, n,
             ql, iql , qr, iqr, iparam, rparam, iwork, rwork, ierror)

Arguments

  DITSOL_PBCG has the standard parameter list for an iterative solver.

Description

  The bi-conjugate gradient method is a method for the solution of
  nonsymmetric linear systems of equations. It is similar to the conjugate
  gradient method but generates two sequences of mutually orthogonal
  residuals [Fletcher 1976]. While there is no solid theoretical basis for
  the convergence behavior of the bi-conjugate gradient method, it can be
  efficient for some classes of problems. This method requires two matrix
  products involving the matrix A and transp(A), but there is no squaring of
  the condition number.

  The implementation of the bi-conjugate gradient method requires the routine
  MATVEC to provide operations for both job= 0 and job = 1. The routines
  MATVEC, PCONDL (if used), PCONDR (if used) and MSTOP (if used) should be
  declared external in your calling (sub)program.

  CXML provides the following four forms of the method:

    Unpreconditioned bi-conjugate gradient method:

     This is the bi-conjugate gradient 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 bi-conjugate gradient method, the length of the
     real work space array, defined by the variable nrwk (IPARAM(4)), should
     be at least 5*n, where n is the order of the matrix A.

     The vector z, passed as an input argument to the routine MSTOP, is not
     defined.

    Bi-conjugate gradient method with left preconditioning:

     This is the bi-conjugate gradient method applied to

         (inverse(QL) * A) * x  = (inverse(QL) * b)

     The routine PCONDL, with job= 0 should evaluate

          v = inverse(QL) * u

     and with job= 1 should evaluate

         v = inverse(transp(QL)) * u

     The routine PCONDR is not used and is therefore a dummy input parameter.

     For the bi-conjugate gradient method, with left preconditioning, the
     length of the real work space array, defined by the variable nrwk
     (IPARAM(4)), should be at least 7*n, where n is the order of the matrix
     A. This does not include  the memory requirements of the preconditioner.

     The vector z, passed as an input argument to the routine MSTOP, is
     defined as

         z = inverse(QL) * r

     where r is the residual at the i-th iteration.

    Bi-conjugate gradient method with right preconditioning:

     This is the bi-conjugate gradient method applied to

         (A * inverse(QR) ) * y  =  b

     where

         y = Q(R) * x

     The routine PCONDR, with job= 0 should evaluate

         v = inverse(QR) * u

     and with job= 1 should evaluate

         v = inverse(transp(QR)) * u

     The routine PCONDL is not used and is therefore a dummy input parameter.

     For the bi-conjugate gradient method, with right preconditioning, the
     length of the real work space array, defined  by the variable nrwk
     (IPARAM(4)), should be at least 6*n,  where n is the order of the matrix
     A. This does not include the memory requirements of the preconditioner.

     The vector z, passed as an input argument to the routine  MSTOP, is not
     defined.

    Bi-conjugate gradient method with split preconditioning:

     This is the bi-conjugate gradient 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 with job= 1 should evaluate

         v = inverse(transp(QL)) * u

     The routine PCONDR, with job= 0 should evaluate

         v = inverse(QR) * u

     and with job= 1 should evaluate

         v = inverse(transp(QR)) * u

     For the bi-conjugate gradient method, with split preconditioning, the
     length of the real work space array, defined by the variable nrwk
     (IPARAM(4)), should be at least 7*n, where n is the order of the matrix
     A. This does not include the memory requirements of the preconditioner.

     The vector z, passed as an input argument to the routine MSTOP, is
     defined as

         z = inverse(QL) * r

     where r is the residual at the i-th iteration.

  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