ssy Interface

public interface ssy

Description

Given a linear operator with full column rank and the associated saddle-point problem

the Saunders-Simon-Yip factorization computes orthonormal bases and for the column-span and of and , respectively, and a tridiagonal matrix such that

with and .

Algorithmic Features

  • The operator only needs to be accessed through matrix-vector products.
  • Constructs an orthonormal basis for the Krylov subspace .
  • Constructs an orthonormal basis for the Krylov subspace .
  • Constructs a tridiagonal matrix such that .
  • Checks for convergence and invariant subspaces.

References

  • A. Buttari, D. Orban, D. Ruiz, and D. Titly-Peloquin. "A tridiagonalization method for symmetric saddle-point systems". SIAM Journal on Scientific Computing, 41(5), 2019. (PDF)

### Syntax

fortran call ssy(A, U, V, T, info [, kstart] [, kend] [, tol])

### Arguments

  • A : Linear operator derived from one the base types provided by the AbstractLinops module. It is an intent(inout) argument.

  • U : Arrays of types derived from one the base types provided by the AbstractVectors module. It needs to be consistent with the type of A. On entry, U(1) = b. On exit, it contains an orthonormal basis for . It is an intent(inout) argument.

  • V : Arrays of types derived from one the base types provided by the AbstractVectors module. It needs to be consistent with the type o fA. On entry, V(1) = c. On exit, it contains an orthonormal basis for . It is an intent(inout) argument.

  • T : real or complex rank-2 array. On exit, it contains the tridiagonal matrix computed from the SSY factorization. It is an intent(inout) argument.

  • info : integer variable. It is the LightKrylov information flag. On exit, if info > 0 the SSY process experienced a lucky breakdown.

  • kstart (optional) : integer value determining the index of the first SSY step to be computed. It is an optional intent(in) argument. By default, kstart = 1.

  • kend (optional) : integer value determining the index of the last SSY step to be computed. It is an optional intent(in) argument. By default, kend = size(U) - 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_dp depending on the kind of A.


Subroutines

private module subroutine ssy_cdp(A, U, V, T, info, kstart, kend, tol)

Arguments

Type IntentOptional Attributes Name
class(abstract_linop_cdp), intent(inout) :: A

Linear operator to be factorized.

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

Orthonormal basis for the span of . On entry, U(1) needs to be set to the starting Krylov vector b (non-normalized).

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

Orthonormal basis for the row span of . On entry, V(1) needs to be set to the starting Krylov vector c (non-normalized).

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

Tridiagonal matrix.

integer, intent(out) :: info

Information flag.

integer, intent(in), optional :: kstart

Starting index for the SSY factorization (default 1)

integer, intent(in), optional :: kend

Final index for the SSY factorization (default size(U)-1).

real(kind=dp), intent(in), optional :: tol

Tolerance to determine whether invariant subspaces have been computed or not.

private module subroutine ssy_csp(A, U, V, T, info, kstart, kend, tol)

Arguments

Type IntentOptional Attributes Name
class(abstract_linop_csp), intent(inout) :: A

Linear operator to be factorized.

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

Orthonormal basis for the span of . On entry, U(1) needs to be set to the starting Krylov vector b (non-normalized).

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

Orthonormal basis for the row span of . On entry, V(1) needs to be set to the starting Krylov vector c (non-normalized).

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

Tridiagonal matrix.

integer, intent(out) :: info

Information flag.

integer, intent(in), optional :: kstart

Starting index for the SSY factorization (default 1)

integer, intent(in), optional :: kend

Final index for the SSY factorization (default size(U)-1).

real(kind=sp), intent(in), optional :: tol

Tolerance to determine whether invariant subspaces have been computed or not.

private module subroutine ssy_rdp(A, U, V, T, info, kstart, kend, tol)

Arguments

Type IntentOptional Attributes Name
class(abstract_linop_rdp), intent(inout) :: A

Linear operator to be factorized.

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

Orthonormal basis for the span of . On entry, U(1) needs to be set to the starting Krylov vector b (non-normalized).

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

Orthonormal basis for the row span of . On entry, V(1) needs to be set to the starting Krylov vector c (non-normalized).

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

Tridiagonal matrix.

integer, intent(out) :: info

Information flag.

integer, intent(in), optional :: kstart

Starting index for the SSY factorization (default 1)

integer, intent(in), optional :: kend

Final index for the SSY factorization (default size(U)-1).

real(kind=dp), intent(in), optional :: tol

Tolerance to determine whether invariant subspaces have been computed or not.

private module subroutine ssy_rsp(A, U, V, T, info, kstart, kend, tol)

Arguments

Type IntentOptional Attributes Name
class(abstract_linop_rsp), intent(inout) :: A

Linear operator to be factorized.

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

Orthonormal basis for the span of . On entry, U(1) needs to be set to the starting Krylov vector b (non-normalized).

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

Orthonormal basis for the row span of . On entry, V(1) needs to be set to the starting Krylov vector c (non-normalized).

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

Tridiagonal matrix.

integer, intent(out) :: info

Information flag.

integer, intent(in), optional :: kstart

Starting index for the SSY factorization (default 1)

integer, intent(in), optional :: kend

Final index for the SSY factorization (default size(U)-1).

real(kind=sp), intent(in), optional :: tol

Tolerance to determine whether invariant subspaces have been computed or not.