NAG Library Function Document
nag_sparse_nherm_fac_sol (f11dqc)
1 Purpose
nag_sparse_nherm_fac_sol (f11dqc) solves a complex sparse non-Hermitian system of linear equations, represented in coordinate storage format, using a restarted generalized minimal residual (RGMRES), conjugate gradient squared (CGS), stabilized bi-conjugate gradient (Bi-CGSTAB), or transpose-free quasi-minimal residual (TFQMR) method, with incomplete preconditioning.
2 Specification
| #include <nag.h> |
| #include <nagf11.h> |
| void |
nag_sparse_nherm_fac_sol (Nag_SparseNsym_Method method,
Integer n,
Integer nnz,
const Complex a[],
Integer la,
const Integer irow[],
const Integer icol[],
const Integer ipivp[],
const Integer ipivq[],
const Integer istr[],
const Integer idiag[],
const Complex b[],
Integer m,
double tol,
Integer maxitn,
Complex x[],
double *rnorm,
Integer *itn,
NagError *fail) |
|
3 Description
nag_sparse_nherm_fac_sol (f11dqc) solves a complex sparse non-Hermitian linear system of equations
using a preconditioned RGMRES (see
Saad and Schultz (1986)), CGS (see
Sonneveld (1989)), Bi-CGSTAB(
) (see
Van der Vorst (1989) and
Sleijpen and Fokkema (1993)), or TFQMR (see
Freund and Nachtigal (1991) and
Freund (1993)) method.
nag_sparse_nherm_fac_sol (f11dqc) uses the incomplete
factorization determined by
nag_sparse_nherm_fac (f11dnc) as the preconditioning matrix. A call to nag_sparse_nherm_fac_sol (f11dqc) must always be preceded by a call to
nag_sparse_nherm_fac (f11dnc). Alternative preconditioners for the same storage scheme are available by calling
nag_sparse_nherm_sol (f11dsc).
The matrix
, and the preconditioning matrix
, are represented in coordinate storage (CS) format (see
Section 2.1.1 in the f11 Chapter Introduction) in the arrays
a,
irow and
icol, as returned from
nag_sparse_nherm_fac (f11dnc). The array
a holds the nonzero entries in these matrices, while
irow and
icol hold the corresponding row and column indices.
4 References
Freund R W (1993) A transpose-free quasi-minimal residual algorithm for non-Hermitian linear systems SIAM J. Sci. Comput. 14 470–482
Freund R W and Nachtigal N (1991) QMR: a Quasi-Minimal Residual Method for Non-Hermitian Linear Systems Numer. Math. 60 315–339
Saad Y and Schultz M (1986) GMRES: a generalized minimal residual algorithm for solving nonsymmetric linear systems SIAM J. Sci. Statist. Comput. 7 856–869
Sleijpen G L G and Fokkema D R (1993) BiCGSTAB for linear equations involving matrices with complex spectrum ETNA 1 11–32
Sonneveld P (1989) CGS, a fast Lanczos-type solver for nonsymmetric linear systems SIAM J. Sci. Statist. Comput. 10 36–52
Van der Vorst H (1989) Bi-CGSTAB, a fast and smoothly converging variant of Bi-CG for the solution of nonsymmetric linear systems SIAM J. Sci. Statist. Comput. 13 631–644
5 Arguments
- 1:
method – Nag_SparseNsym_MethodInput
On entry: specifies the iterative method to be used.
- Restarted generalized minimum residual method.
- Conjugate gradient squared method.
- Bi-conjugate gradient stabilized () method.
- Transpose-free quasi-minimal residual method.
Constraint:
, , or .
- 2:
n – IntegerInput
On entry:
, the order of the matrix
. This
must be the same value as was supplied in the preceding call to
nag_sparse_nherm_fac (f11dnc).
Constraint:
.
- 3:
nnz – IntegerInput
On entry: the number of nonzero elements in the matrix
. This
must be the same value as was supplied in the preceding call to
nag_sparse_nherm_fac (f11dnc).
Constraint:
.
- 4:
a[la] – const ComplexInput
On entry: the values returned in the array
a by a previous call to
nag_sparse_nherm_fac (f11dnc).
- 5:
la – IntegerInput
On entry: the dimension of the arrays
a,
irow and
icol. This
must be the same value as was supplied in the preceding call to
nag_sparse_nherm_fac (f11dnc).
Constraint:
.
- 6:
irow[la] – const IntegerInput
- 7:
icol[la] – const IntegerInput
- 8:
ipivp[n] – const IntegerInput
- 9:
ipivq[n] – const IntegerInput
- 10:
istr[] – const IntegerInput
- 11:
idiag[n] – const IntegerInput
On entry: the values returned in arrays
irow,
icol,
ipivp,
ipivq,
istr and
idiag
by a previous call to
nag_sparse_nherm_fac (f11dnc).
ipivp and
ipivq are restored on exit.
- 12:
b[n] – const ComplexInput
-
On entry: the right-hand side vector .
- 13:
m – IntegerInput
On entry: if
,
m is the dimension of the restart subspace.
If
,
m is the order
of the polynomial Bi-CGSTAB method.
Otherwise,
m is not referenced.
Constraints:
- if , ;
- if , .
- 14:
tol – doubleInput
-
On entry: the required tolerance. Let
denote the approximate solution at iteration
, and
the corresponding residual. The algorithm is considered to have converged at iteration
if
If
,
is used, where
is the
machine precision. Otherwise
is used.
Constraint:
.
- 15:
maxitn – IntegerInput
-
On entry: the maximum number of iterations allowed.
Constraint:
.
- 16:
x[n] – ComplexInput/Output
-
On entry: an initial approximation to the solution vector .
On exit: an improved approximation to the solution vector .
- 17:
rnorm – double *Output
-
On exit: the final value of the residual norm
, where
is the output value of
itn.
- 18:
itn – Integer *Output
-
On exit: the number of iterations carried out.
- 19:
fail – NagError *Input/Output
-
The NAG error argument (see
Section 3.6 in the Essential Introduction).
6 Error Indicators and Warnings
- NE_ACCURACY
The required accuracy could not be obtained. However a reasonable accuracy may have been achieved.
- NE_ALG_FAIL
Algorithmic breakdown. A solution is returned, although it is possible that it is completely inaccurate.
- NE_ALLOC_FAIL
Dynamic memory allocation failed.
- NE_BAD_PARAM
On entry, argument had an illegal value.
- NE_CONVERGENCE
The solution has not converged after iterations.
- NE_INT
On entry, .
Constraint: .
On entry, .
Constraint: .
On entry, .
Constraint: .
- NE_INT_2
On entry, and .
Constraint: .
On entry, and .
Constraint: and .
On entry, and .
Constraint: .
- NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact
NAG for assistance.
- NE_INVALID_CS
On entry,
,
and
.
Constraint:
and
.
Check that
a,
irow,
icol,
ipivp,
ipivq,
istr and
idiag have not been corrupted between calls to nag_sparse_nherm_fac_sol (f11dqc) and
nag_sparse_nherm_fac (f11dnc).
On entry,
,
and
.
Constraint:
and
.
Check that
a,
irow,
icol,
ipivp,
ipivq,
istr and
idiag have not been corrupted between calls to nag_sparse_nherm_fac_sol (f11dqc) and
nag_sparse_nherm_fac (f11dnc).
- NE_INVALID_CS_PRECOND
The CS representation of the preconditioner is invalid.
Check that
a,
irow,
icol,
ipivp,
ipivq,
istr and
idiag have not been corrupted between calls to nag_sparse_nherm_fac_sol (f11dqc) and
nag_sparse_nherm_fac (f11dnc).
- NE_NOT_STRICTLY_INCREASING
On entry,
is out of order:
.
Check that
a,
irow,
icol,
ipivp,
ipivq,
istr and
idiag have not been corrupted between calls to nag_sparse_nherm_fac_sol (f11dqc) and
nag_sparse_nherm_fac (f11dnc).
On entry, the location (
) is a duplicate:
.
Check that
a,
irow,
icol,
ipivp,
ipivq,
istr and
idiag have not been corrupted between calls to nag_sparse_nherm_fac_sol (f11dqc) and
nag_sparse_nherm_fac (f11dnc).
- NE_REAL
On entry, .
Constraint: .
7 Accuracy
On successful termination, the final residual
, where
, satisfies the termination criterion
The value of the final residual norm is returned in
rnorm.
The time taken by nag_sparse_nherm_fac_sol (f11dqc) for each iteration is roughly proportional to the value of
nnzc returned from the preceding call to
nag_sparse_nherm_fac (f11dnc).
The number of iterations required to achieve a prescribed accuracy cannot be easily determined a priori, as it can depend dramatically on the conditioning and spectrum of the preconditioned coefficient matrix .
9 Example
This example solves a complex sparse non-Hermitian linear system of equations using the CGS method, with incomplete preconditioning.
9.1 Program Text
Program Text (f11dqce.c)
9.2 Program Data
Program Data (f11dqce.d)
9.3 Program Results
Program Results (f11dqce.r)