# naginterfaces.library.sparse.complex_​herm_​basic_​solver¶

naginterfaces.library.sparse.complex_herm_basic_solver(irevcm, u, v, wgt, comm)[source]

complex_herm_basic_solver is an iterative solver for a complex Hermitian system of simultaneous linear equations; complex_herm_basic_solver is the second in a suite of three functions, where the first function, complex_herm_basic_setup(), must be called prior to complex_herm_basic_solver to set up the suite, and the third function in the suite, complex_herm_basic_diag(), can be used to return additional information about the computation.

These three functions are suitable for the solution of large sparse complex Hermitian systems of equations.

For full information please refer to the NAG Library document for f11gs

https://www.nag.com/numeric/nl/nagdoc_29/flhtml/f11/f11gsf.html

Parameters
irevcmint

On initial entry: , otherwise an error condition will be raised.

On intermediate 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. complex_herm_basic_solver will then return with the termination code . Note that before calling complex_herm_basic_solver with the calling program must have performed the tasks required by the value of returned by the previous call to complex_herm_basic_solver, otherwise subsequently returned values may be invalid.

Immediate termination: complex_herm_basic_solver will return immediately with termination code and with any useful information available. This includes the last iterate of the solution and, for conjugate gradient only, the last iterate of the residual vector. The residual vector is generally not available when the Lanczos method (SYMMLQ) is used. complex_herm_basic_solver will then return with the termination code .

Immediate termination may be useful, for example, when errors are detected during matrix-vector multiplication or during the solution of the preconditioning equation.

Changing to any other value between calls will result in an error.

ucomplex, ndarray, shape , modified in place

On initial entry: an initial estimate, , of the solution of the system of equations .

On intermediate entry: must remain unchanged.

On intermediate exit: the returned value of determines the contents of in the following way.

If or , holds the vector on which the operation specified by is to be carried out.

If , holds the current iterate of the solution vector.

On final exit: if = 3 or -i, the array is unchanged from the initial entry to complex_herm_basic_solver. If = 1, the array is unchanged from the last entry to complex_herm_basic_solver. Otherwise, holds the last iterate of the solution of the system of equations, for all returned values of .

vcomplex, ndarray, shape , modified in place

On initial entry: the right-hand side of the system of equations .

On intermediate entry: the returned value of determines the contents of in the following way.

If or , must store the vector , the result of the operation specified by the value of returned by the previous call to complex_herm_basic_solver

If , must remain unchanged.

On intermediate exit: if , holds the current iterate of the residual vector. Note that this is an approximation to the true residual vector. Otherwise, it does not contain any useful information.

On final exit: if = 3 or 0, the array is unchanged from the last entry to complex_herm_basic_solver. If = 1, the array is unchanged from the initial entry to complex_herm_basic_solver. If the function exits successfully or = 2, the array contains the true residual vector of the system of equations (see also Exceptions). Otherwise, stores the last iterate of the residual vector unless the Lanczos method (SYMMLQ) was used and >= 5, in which case is set to .

wgtfloat, array-like, shape

The user-supplied weights, if these are to be used in the computation of the vector norms in the termination criterion (see Notes for complex_herm_basic_setup and Parameters for complex_herm_basic_setup).

commdict, communication object, modified in place

Communication structure.

This argument must have been initialized by a prior call to complex_herm_basic_setup().

Returns
irevcmint

On intermediate exit: has the following meanings.

The calling program must compute the matrix-vector product , where and are stored in and , respectively.

The calling program must solve the preconditioning equation , where and are stored in and , respectively.

Monitoring step: the solution and residual at the current iteration are returned in the arrays and , respectively. No action by the calling program is required. To return additional information complex_herm_basic_diag() can be called at this step.

On final exit: if , complex_herm_basic_solver has completed its tasks. The value of determines whether the iteration has been successfully completed, errors have been detected or the calling program has requested termination.

Raises
NagValueError
(errno )

On intermediate re-entry, .

Constraint: either must be unchanged from its previous exit value or or .

(errno )

On initial entry, .

Constraint: .

(errno )

Either complex_herm_basic_setup() was not called before calling complex_herm_basic_solver or it has returned an error.

(errno )

The matrix of the coefficients appears to be singular. The computation cannot continue.

Warns
NagAlgorithmicWarning
(errno )

complex_herm_basic_solver has already completed its tasks. You need to set a new problem.

(errno )

The required accuracy could not be obtained. However, a reasonable accuracy may have been achieved.

(errno )

User-requested termination: the required accuracy could not be obtained. However, a reasonable accuracy may have been achieved.

(errno )

User-requested tidy termination. The solution has not converged after iterations.

(errno )

The solution has not converged after iterations.

(errno )

The preconditioner appears not to be positive definite. The computation cannot continue.

(errno )

The matrix of the coefficients appears not to be positive definite. The computation cannot continue.

(errno )

User-requested immediate termination.

(errno )

The weights in array are all zero.

Notes

complex_herm_basic_solver solves the complex Hermitian system of linear simultaneous equations using either the preconditioned conjugate gradient method (see Hestenes and Stiefel (1952), Golub and Van Loan (1996), Barrett et al. (1994) and Dias da Cunha and Hopkins (1994)) or a preconditioned Lanczos method based upon the algorithm SYMMLQ (see Paige and Saunders (1975) and Barrett et al. (1994)).

For a general description of the methods employed you are referred to Notes for complex_herm_basic_setup.

complex_herm_basic_solver can solve the system after the first function in the suite, complex_herm_basic_setup(), has been called to initialize the computation and specify the method of solution. The third function in the suite, complex_herm_basic_diag(), can be used to return additional information generated by the computation during monitoring steps and after complex_herm_basic_solver has completed its tasks.

complex_herm_basic_solver uses reverse communication, i.e., complex_herm_basic_solver returns repeatedly to the calling program with the argument (see Parameters) set to specified values which require the calling program to carry out a specific task: either to compute the matrix-vector product ; to solve the preconditioning equation ; to notify the completion of the computation; or, to allow the calling program to monitor the solution. Through the argument 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 function, 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 functions used to perform matrix operations.

References

Barrett, R, Berry, M, Chan, T F, Demmel, J, Donato, J, Dongarra, J, Eijkhout, V, Pozo, R, Romine, C and Van der Vorst, H, 1994, Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods, SIAM, Philadelphia

Dias da Cunha, R and Hopkins, T, 1994, PIM 1.1 — the parallel iterative method package for systems of linear equations user’s guide — Fortran 77 version, Technical Report, Computing Laboratory, University of Kent at Canterbury, Kent, UK

Golub, G H and Van Loan, C F, 1996, Matrix Computations, (3rd Edition), Johns Hopkins University Press, Baltimore

Hestenes, M and Stiefel, E, 1952, Methods of conjugate gradients for solving linear systems, J. Res. Nat. Bur. Stand. (49), 409–436

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. Software (14), 381–396

Paige, C C and Saunders, M A, 1975, Solution of sparse indefinite systems of linear equations, SIAM J. Numer. Anal. (12), 617–629