krylov_schur Interface

public interface krylov_schur

Description

Given a partial Krylov decomposition

this subroutine implements the Krylov-Schur restarting strategy proposed by Stewart [1].

References

  • G. W. Stewart. "A Krylov-Schur algorithm for large eigenproblems". SIAM Journal on Matrix Analysis and Applications, vol 23 (3), 2002.

Syntax

    call krylov_schur(n, X, H, select_eigs)

Arguments

n : Number of selected eigenvalues moved to the upper left-block of the Schur matrix. It is an intent(out) argument.

X : On entry, array of abstract_vector computed using the Arnoldi process. On exit, the first n columns form an orthonormal basis for the eigenspace associated with eigenvalues moved to the upper left-block of the Schur matrix. It is an intent(inout) argument.

H : On entry, real of complex upper Hessenberg matrix computed using the Arnoldi process. On exit, the leading block contains the block of the re-ordered Schur matrix containing the selected eigenvalues. It is an intent(inout) argument.

select_eigs : Procedure to select which eigenvalues to move in the upper-left block. It is an intent(inout) argument.


Module Procedures

private subroutine krylov_schur_rsp(n, X, H, select_eigs)

Arguments

Type IntentOptional Attributes Name
integer, intent(out) :: n

Number eigenvalues that have been moved to the upper left block of the Schur factorization of H.

class(abstract_vector_rsp), intent(inout) :: X(:)

Krylov basis.

real(kind=sp), intent(inout) :: H(:,:)

Upper Hessenberg matrix.

procedure(eigvals_select_sp) :: select_eigs

Procedure to select the eigenvalues to move in the upper left-block.

private subroutine krylov_schur_rdp(n, X, H, select_eigs)

Arguments

Type IntentOptional Attributes Name
integer, intent(out) :: n

Number eigenvalues that have been moved to the upper left block of the Schur factorization of H.

class(abstract_vector_rdp), intent(inout) :: X(:)

Krylov basis.

real(kind=dp), intent(inout) :: H(:,:)

Upper Hessenberg matrix.

procedure(eigvals_select_dp) :: select_eigs

Procedure to select the eigenvalues to move in the upper left-block.

private subroutine krylov_schur_csp(n, X, H, select_eigs)

Arguments

Type IntentOptional Attributes Name
integer, intent(out) :: n

Number eigenvalues that have been moved to the upper left block of the Schur factorization of H.

class(abstract_vector_csp), intent(inout) :: X(:)

Krylov basis.

complex(kind=sp), intent(inout) :: H(:,:)

Upper Hessenberg matrix.

procedure(eigvals_select_sp) :: select_eigs

Procedure to select the eigenvalues to move in the upper left-block.

private subroutine krylov_schur_cdp(n, X, H, select_eigs)

Arguments

Type IntentOptional Attributes Name
integer, intent(out) :: n

Number eigenvalues that have been moved to the upper left block of the Schur factorization of H.

class(abstract_vector_cdp), intent(inout) :: X(:)

Krylov basis.

complex(kind=dp), intent(inout) :: H(:,:)

Upper Hessenberg matrix.

procedure(eigvals_select_dp) :: select_eigs

Procedure to select the eigenvalues to move in the upper left-block.