Given a square linear operator , find matrices and such that
where is an orthogonal basis, is upper Hessenberg, and for block Arnoldi with block size , is a matrix (reducing to a scalar when ).
Algorithmic Features
References
call arnoldi(A, X, H, info [, kstart] [, kend] [, tol] [, transpose] [, blksize])
A : Linear operator derived from one the base types provided by the AbstractLinops
module. The operator needs to be square, i.e. the dimension of its domain and
co-domain is the same. It is an intent(inout) argument.
X : Array of types derived from one the base types provided by the AbstractVectors
module. It needs to be consistent with the type of A. On exit, it contains the
the computed Krylov vectors. The first entry X(1) is the starting vector for
the Arnoldi factorization. Additionally, the maximum number of Arnoldi steps
is equal to size(X) - 1. It is an intent(inout) argument.
-H : real or complex rank-2 array. On exit, it contains the
upper Hessenberg matrix
computed from the Arnoldi factorization, where is the
maximum number of Arnoldi steps and is the block size (default 1).
It is an intent(inout) argument.
-info : integer variable. It is the LightKrylov information flag. On exit, if
info > 0, the Arnoldi factorization experienced a lucky breakdown.
The array of Krylov vectors X spans an -invariant subpsace of
dimension info. If info < 0, an input argument is illegal:
info = -3 indicates that H is not large enough: it must have
leading dimensions at least (size(X), p*kdim) with
kdim = (size(X) - p) / p and block size p;
info = -5 indicates an illegal kstart; info = -6 an illegal kend;
info = -7 a negative tolerance; info = -9 an illegal blksize
(blksize 0 or size(X) not divisible by blksize).
kstart (optional) : integer value determining the index of the first Arnoldi
step to be computed. By default, kstart = 1. It is an
optional intent(in) argument.
kend (optional) : integer value determining the index of the last Arnoldi step
to be computed. It is an optional intent(in) argument.
By default, kend = size(X) - 1.
tol (optional) : Numerical tolerance below which a subspace is considered
to be -invariant. It is an optional intent(in) argument.
By default tol = atol_sp or tol = atol_rp depending on the
kind of A.
transpose (optional) : logical flag determining whether the Arnoldi factorization
is applied to or . It is an optional intent(in)
argument. Default transpose = .false.
blksize (optional) : integer value determining the dimension of a block for the
block Arnoldi factorization. It is an optional intent(in)
argument. Default is blksize=1. The block size must divide
size(X) evenly, and the maximum number of Arnoldi steps is
.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_linop_cdp), | intent(inout) | :: | A |
Linear operator to be factorized. |
||
| class(abstract_vector_cdp), | intent(inout) | :: | X(:) |
Orthogonal basis for the generated Krylov subspace. |
||
| complex(kind=dp), | intent(inout) | :: | H(:,:) |
Upper Hessenberg matrix. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| integer, | intent(in), | optional | :: | kstart |
Starting index for the Arnoldi factorization (default 1). |
|
| integer, | intent(in), | optional | :: | kend |
Final index for the Arnoldi factorization (default |
|
| real(kind=dp), | intent(in), | optional | :: | tol |
Tolerance to determine whether an invariant subspace has been computed or not. |
|
| logical, | intent(in), | optional | :: | transpose |
Whether is being transposed or not (default |
|
| integer, | intent(in), | optional | :: | blksize |
Block size for block Arnoldi (default 1). |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_linop_csp), | intent(inout) | :: | A |
Linear operator to be factorized. |
||
| class(abstract_vector_csp), | intent(inout) | :: | X(:) |
Orthogonal basis for the generated Krylov subspace. |
||
| complex(kind=sp), | intent(inout) | :: | H(:,:) |
Upper Hessenberg matrix. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| integer, | intent(in), | optional | :: | kstart |
Starting index for the Arnoldi factorization (default 1). |
|
| integer, | intent(in), | optional | :: | kend |
Final index for the Arnoldi factorization (default |
|
| real(kind=sp), | intent(in), | optional | :: | tol |
Tolerance to determine whether an invariant subspace has been computed or not. |
|
| logical, | intent(in), | optional | :: | transpose |
Whether is being transposed or not (default |
|
| integer, | intent(in), | optional | :: | blksize |
Block size for block Arnoldi (default 1). |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_linop_rdp), | intent(inout) | :: | A |
Linear operator to be factorized. |
||
| class(abstract_vector_rdp), | intent(inout) | :: | X(:) |
Orthogonal basis for the generated Krylov subspace. |
||
| real(kind=dp), | intent(inout) | :: | H(:,:) |
Upper Hessenberg matrix. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| integer, | intent(in), | optional | :: | kstart |
Starting index for the Arnoldi factorization (default 1). |
|
| integer, | intent(in), | optional | :: | kend |
Final index for the Arnoldi factorization (default |
|
| real(kind=dp), | intent(in), | optional | :: | tol |
Tolerance to determine whether an invariant subspace has been computed or not. |
|
| logical, | intent(in), | optional | :: | transpose |
Whether is being transposed or not (default |
|
| integer, | intent(in), | optional | :: | blksize |
Block size for block Arnoldi (default 1). |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_linop_rsp), | intent(inout) | :: | A |
Linear operator to be factorized. |
||
| class(abstract_vector_rsp), | intent(inout) | :: | X(:) |
Orthogonal basis for the generated Krylov subspace. |
||
| real(kind=sp), | intent(inout) | :: | H(:,:) |
Upper Hessenberg matrix. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| integer, | intent(in), | optional | :: | kstart |
Starting index for the Arnoldi factorization (default 1). |
|
| integer, | intent(in), | optional | :: | kend |
Final index for the Arnoldi factorization (default |
|
| real(kind=sp), | intent(in), | optional | :: | tol |
Tolerance to determine whether an invariant subspace has been computed or not. |
|
| logical, | intent(in), | optional | :: | transpose |
Whether is being transposed or not (default |
|
| integer, | intent(in), | optional | :: | blksize |
Block size for block Arnoldi (default 1). |