Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ ditsol_pcgs(3DXML) — Extended Math Library 3.4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

DITSOL_PCGS(3DXML)  —  Subroutines

Digital

Name

ditsol_pcgs − Preconditioned conjugate gradient squared method (Serial and Parallel Versions)

FORMAT

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

Arguments

      DITSOL_PCGS has the standard parameter list for an iterative solver. 

Description

The conjugate gradient squared method [Sonneveld 1989] accelerates the convergence of the bi-conjugate gradient method by generating residuals which are related to the original residual by the square of a polynomial in A, instead of a polynomial in A, as in the case of the conjugate gradient and the bi-conjugate gradient methods.  In practice, this results in the conjugate gradient squared method converging roughly twice as fast as the bi-conjugate gradient method. The additional advantage is that only the matrix A is involved and not transp(A). The computational cost for both the bi-conjugate gradient method and the conjugate gradient squared method are about the same per iteration. 

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

DXML provides the following four forms of the method:

•Unpreconditioned conjugate gradient squared method:

This is the conjugate gradient squared 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 conjugate gradient squared method,  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. 

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

•Conjugate gradient squared method with left preconditioning:

This is the conjugate gradient squared 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 conjugate gradient squared 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. 

•Conjugate gradient squared method with right preconditioning:

This is the conjugate gradient squared 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 and is therefore a dummy input parameter. 

For the conjugate gradient squared 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. 

•Conjugate gradient squared method with split preconditioning:

This is the conjugate gradient squared 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 conjugate gradient squared 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. 

For split preconditioning, 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 DXML Reference Manual. 

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026