f11bsf is an iterative solver for a complex general (non-Hermitian) system of simultaneous linear equations; f11bsf is the second in a suite of three routines, where the first routine, f11brf, must be called prior to f11bsf to set up the suite, and the third routine in the suite, f11btf, can be used to return additional information about the computation.
These three routines are suitable for the solution of large sparse general (non-Hermitian) systems of equations.
For a general description of the methods employed you are referred to Section 3 in f11brf.
f11bsf can solve the system after the first routine in the suite, f11brf, has been called to initialize the computation and specify the method of solution. The third routine in the suite, f11btf, can be used to return additional information generated by the computation during monitoring steps and after f11bsf has completed its tasks.
f11bsf uses reverse communication, i.e., it returns repeatedly to the calling program with the argument irevcm (see Section 5) set to specified values which require the calling program to carry out one of the following tasks:
compute the matrix-vector product or (the four methods require the matrix transpose-vector product only if or is estimated internally by Higham's method (see Higham (1988)));
solve the preconditioning equation ;
notify the completion of the computation;
allow the calling program to monitor the solution.
Through the argument irevcm the calling program can cause immediate or tidy termination of the execution. On final exit, the last iterates of the solution and of the residual vectors of the original system of equations are returned.
Reverse communication has the following advantages.
1.Maximum flexibility in the representation and storage of sparse matrices: all matrix operations are performed outside the solver routine, thereby avoiding the need for a complicated interface with enough flexibility to cope with all types of storage schemes and sparsity patterns. This applies also to preconditioners.
2.Enhanced user interaction: you can closely monitor the progress of the solution and tidy or immediate termination can be requested. This is useful, for example, when alternative termination criteria are to be employed or in case of failure of the external routines used to perform matrix operations.
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
Higham N J (1988) FORTRAN codes for estimating the one-norm of a real or complex matrix, with applications to condition estimation ACM Trans. Math. Software14 381–396
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 ETNA1 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
Note: this routine uses reverse communication. Its use involves an initial entry, intermediate exits and re-entries, and a final exit, as indicated by the argument irevcm. Between intermediate exits and re-entries, all arguments other thanirevcm and v must remain unchanged.
1: – IntegerInput/Output
On initial entry: , otherwise an error condition will be raised.
On intermediate re-entry: must either be unchanged from its previous exit value, or can have one of the following values.
Tidy termination: the computation will terminate at the end of the current iteration. Further reverse communication exits may occur depending on when the termination request is issued. f11bsf will then return with the termination code . Note that before calling f11bsf with the calling program must have performed the tasks required by the value of irevcm returned by the previous call to f11bsf, otherwise subsequently returned values may be invalid.
Immediate termination: f11bsf will return immediately with termination code and with any useful information available. This includes the last iterate of the solution. Immediate termination may be useful, for example, when errors are detected during matrix-vector multiplication or during the solution of the preconditioning equation.
Changing irevcm to any other value between calls will result in an error.
On intermediate exit:
has the following meanings.
The calling program must compute the matrix-vector product , where and are stored in u and v, respectively; RGMRES, CGS and Bi-CGSTAB() methods return only if the matrix norm or is estimated internally using Higham's method. This can only happen if in f11brf.
The calling program must compute the matrix-vector product , where and are stored in u and v, respectively.
The calling program must solve the preconditioning equation , where and are stored in u and v, respectively.
Monitoring step: the solution and residual at the current iteration are returned in the arrays u and v, respectively. No action by the calling program is required. f11btf can be called at this step to return additional information.
On final exit: : f11bsf has completed its tasks. The value of ifail determines whether the iteration has been successfully completed, errors have been detected or the calling program has requested termination.
on initial entry, ; on re-entry, either irevcm must remain unchanged or be reset to or .
Note: any values you return to f11bsf as part of the reverse communication procedure should not include floating-point NaN (Not a Number) or infinity values, since these are not handled by f11bsf. If your code does inadvertently return any NaNs or infinities, f11bsf is likely to produce unexpected results.
2: – Complex (Kind=nag_wp) arrayInput/Output
Note: the dimension of the array u
must be at least
On initial entry: an initial estimate, , of the solution of the system of equations .
On intermediate re-entry: must remain unchanged.
On intermediate exit:
the returned value of irevcm determines the contents of u as follows.
If , or , u holds the vector on which the operation specified by irevcm is to be carried out.
If , u holds the current iterate of the solution vector.
On final exit: if or , the array u is unchanged from the initial entry to f11bsf.
If , the array u is unchanged from the last entry to f11bsf.
Otherwise, u holds the last available iterate of the solution of the system of equations, for all returned values of ifail.
3: – Complex (Kind=nag_wp) arrayInput/Output
Note: the dimension of the array v
must be at least
On initial entry: the right-hand side of the system of equations .
On intermediate re-entry: the returned value of irevcm determines the contents of v as follows.
If , or , v must store the vector , the result of the operation specified by the value of irevcm returned by the previous call to f11bsf.
On initial entry: ifail must be set to , or to set behaviour on detection of an error; these values have no effect when no error is detected.
A value of causes the printing of an error message and program execution will be halted; otherwise program execution continues. A value of means that an error message is printed while a value of means that it is not.
If halting is not appropriate, the value or is recommended. If message printing is undesirable, then the value is recommended. Otherwise, the value is recommended since useful values can be provided in some output arguments even when on exit. When the value or is used it is essential to test the value of ifail on exit.
On final exit: unless the routine detects an error or a warning has been flagged (see Section 6).
6Error Indicators and Warnings
If on entry or , explanatory error messages are output on the current error message unit (as defined by x04aaf).
Errors or warnings detected by the routine:
f11bsf has already completed its tasks. You need to set a new problem.
The required accuracy could not be obtained. However, a reasonable accuracy may have been achieved.
User-requested termination: the required accuracy could not be obtained. However, a reasonable accuracy may have been achieved.
f11bsf has terminated with reasonable accuracy: the last iterate of the residual satisfied the termination criterion but the exact residual , did not. After the first occurrence of this situation, the iteration was restarted once, but f11bsf could not improve on the accuracy. This error code usually implies that your problem has been fully and satisfactorily solved to within or close to the accuracy available on your system. Further iterations are unlikely to improve on this situation. You should call f11bff to check the values of the left- and right-hand sides of the termination condition.
Either f11brf was not called before calling f11bsf or it has returned an error.
User-requested tidy termination. The solution has not converged after iterations.
On intermediate re-entry, . Constraint: either irevcm must be unchanged from its previous exit value or or .
On entry, . Constraint: , where lwreq is returned by f11brf.
An unexpected error has been triggered by this routine. Please
See Section 7 in the Introduction to the NAG Library FL Interface for further information.
Your licence key may have expired or may not have been installed correctly.
See Section 8 in the Introduction to the NAG Library FL Interface for further information.
Dynamic memory allocation failed.
See Section 9 in the Introduction to the NAG Library FL Interface for further information.
On completion, i.e., on exit, the arrays u and v will return the solution and residual vectors, and , respectively, at the th iteration, the last iteration performed, unless an immediate termination was requested.
On successful completion, the termination criterion is satisfied to within the user-specified tolerance, as described in f11brf. The computed values of the left- and right-hand sides of the termination criterion selected can be obtained by a call to f11btf.
8Parallelism and Performance
f11bsf is threaded by NAG for parallel execution in multithreaded implementations of the NAG Library.
f11bsf makes calls to BLAS and/or LAPACK routines, which may be threaded within the vendor library used by this implementation. Consult the documentation for the vendor library for further information.
Please consult the X06 Chapter Introduction for information on how to control and interrogate the OpenMP environment used within this routine. Please also consult the Users' Note for your implementation for any additional implementation-specific information.
The number of operations carried out by f11bsf for each iteration is likely to be principally determined by the computation of the matrix-vector products and by the solution of the preconditioning equation in the calling program. Each of these operations is carried out once every iteration.
The number of the remaining operations in f11bsf for each iteration is approximately proportional to .
The number of iterations required to achieve a prescribed accuracy cannot be easily determined at the onset, as it can depend dramatically on the conditioning and spectrum of the preconditioned matrix of the coefficients (RGMRES, CGS and TFQMR methods) or (Bi-CGSTAB() method).
Additional matrix-vector products are required for the computation of or , when this has not been supplied to f11brf and is required by the termination criterion employed.
If the termination criterion is used (see Section 3 in f11brf) and , then the required accuracy cannot be obtained due to loss of significant digits. The iteration is restarted automatically at some suitable point: f11bsf sets and the computation begins again. For particularly badly scaled problems, more than one restart may be necessary. This does not apply to the RGMRES method which, by its own nature, self-restarts every super-iteration. Naturally, restarting adds to computational costs: it is recommended that the iteration should start from a value which is as close to the true solution as can be estimated. Otherwise, the iteration should start from .