LightKrylov_AbstractLinops Module

This module provides the base classes abtract_linop_rsp, abstract_linop_rdp, abstract_linop_csp and abstract_linop_cdp which can be used to define your own linear operators. To do so, you simply need to provide two type-bound procedures:

  • matvec(self, vec_in, vec_out) : Computes the matrix-vector product.
  • `rmatvec(self, vec_in, vec_out) : Computes the transpose matrix-vector product.

It also provides extended types to define the identity operator, symmetric linear operators, scalar-multiplication of a linear multiplication, as well as addition of two linear operators.



Interfaces

public interface adjoint

  • private function initialize_adjoint_rsp(A) result(B)

    Arguments

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

    Return Value class(adjoint_linop_rsp), allocatable

  • private function initialize_adjoint_rdp(A) result(B)

    Arguments

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

    Return Value class(adjoint_linop_rdp), allocatable

  • private function initialize_adjoint_csp(A) result(B)

    Arguments

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

    Return Value class(adjoint_linop_csp), allocatable

  • private function initialize_adjoint_cdp(A) result(B)

    Arguments

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

    Return Value class(adjoint_linop_cdp), allocatable

public interface dense_linop

  • private function initialize_dense_linop_from_array_rsp(A) result(linop)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=sp), intent(in) :: A(:,:)

    Return Value type(dense_linop_rsp)

  • private function initialize_dense_linop_from_array_rdp(A) result(linop)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=dp), intent(in) :: A(:,:)

    Return Value type(dense_linop_rdp)

  • private function initialize_dense_linop_from_array_csp(A) result(linop)

    Arguments

    Type IntentOptional Attributes Name
    complex(kind=sp), intent(in) :: A(:,:)

    Return Value type(dense_linop_csp)

  • private function initialize_dense_linop_from_array_cdp(A) result(linop)

    Arguments

    Type IntentOptional Attributes Name
    complex(kind=dp), intent(in) :: A(:,:)

    Return Value type(dense_linop_cdp)


Derived Types

type, public, extends(abstract_linop_cdp) ::  Id_cdp

Utility type to define the Identity operator. Note that the type-bound procedures for matvec and rmatvec do not have to be defined by the user.

Components

Type Visibility Attributes Name Initial
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_cdp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_cdp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => id_matvec_cdp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => id_matvec_cdp

type, public, extends(abstract_linop_csp) ::  Id_csp

Utility type to define the Identity operator. Note that the type-bound procedures for matvec and rmatvec do not have to be defined by the user.

Components

Type Visibility Attributes Name Initial
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_csp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_csp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => id_matvec_csp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => id_matvec_csp

type, public, extends(abstract_linop_rdp) ::  Id_rdp

Utility type to define the Identity operator. Note that the type-bound procedures for matvec and rmatvec do not have to be defined by the user.

Components

Type Visibility Attributes Name Initial
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_rdp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_rdp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => id_matvec_rdp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => id_matvec_rdp

type, public, extends(abstract_linop_rsp) ::  Id_rsp

Utility type to define the Identity operator. Note that the type-bound procedures for matvec and rmatvec do not have to be defined by the user.

Components

Type Visibility Attributes Name Initial
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_rsp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_rsp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => id_matvec_rsp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => id_matvec_rsp

type, public, abstract, extends(abstract_linop_cdp) ::  abstract_exptA_linop_cdp

Utility type to define the exponential propagator which is the linear map corresponding to the matrix exponential of the (possibly time-dependent) system Jacobian over a time horizon as: Note that explicit knowledge or definition of the Jacobian is NOT required. This utility function is intended for the use in conjuction with a time-stepper algorithm that computes the integral directly.

Read more…

Components

Type Visibility Attributes Name Initial
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')
real(kind=dp), public :: tau

Time horizon for the temporal integration. This variable must be set when the operator is instantiated.

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_cdp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_cdp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure(abstract_matvec_cdp), public, deferred, pass(self) :: matvec

Procedure to compute the matrix-vector product .

procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure(abstract_matvec_cdp), public, deferred, pass(self) :: rmatvec

Procedure to compute the reversed matrix-vector product .

type, public, abstract, extends(abstract_linop_csp) ::  abstract_exptA_linop_csp

Utility type to define the exponential propagator which is the linear map corresponding to the matrix exponential of the (possibly time-dependent) system Jacobian over a time horizon as: Note that explicit knowledge or definition of the Jacobian is NOT required. This utility function is intended for the use in conjuction with a time-stepper algorithm that computes the integral directly.

Read more…

Components

Type Visibility Attributes Name Initial
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')
real(kind=sp), public :: tau

Time horizon for the temporal integration. This variable must be set when the operator is instantiated.

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_csp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_csp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure(abstract_matvec_csp), public, deferred, pass(self) :: matvec

Procedure to compute the matrix-vector product .

procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure(abstract_matvec_csp), public, deferred, pass(self) :: rmatvec

Procedure to compute the reversed matrix-vector product .

type, public, abstract, extends(abstract_linop_rdp) ::  abstract_exptA_linop_rdp

Utility type to define the exponential propagator which is the linear map corresponding to the matrix exponential of the (possibly time-dependent) system Jacobian over a time horizon as: Note that explicit knowledge or definition of the Jacobian is NOT required. This utility function is intended for the use in conjuction with a time-stepper algorithm that computes the integral directly.

Read more…

Components

Type Visibility Attributes Name Initial
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')
real(kind=dp), public :: tau

Time horizon for the temporal integration. This variable must be set when the operator is instantiated.

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_rdp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_rdp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure(abstract_matvec_rdp), public, deferred, pass(self) :: matvec

Procedure to compute the matrix-vector product .

procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure(abstract_matvec_rdp), public, deferred, pass(self) :: rmatvec

Procedure to compute the reversed matrix-vector product .

type, public, abstract, extends(abstract_linop_rsp) ::  abstract_exptA_linop_rsp

Utility type to define the exponential propagator which is the linear map corresponding to the matrix exponential of the (possibly time-dependent) system Jacobian over a time horizon as: Note that explicit knowledge or definition of the Jacobian is NOT required. This utility function is intended for the use in conjuction with a time-stepper algorithm that computes the integral directly.

Read more…

Components

Type Visibility Attributes Name Initial
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')
real(kind=sp), public :: tau

Time horizon for the temporal integration. This variable must be set when the operator is instantiated.

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_rsp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_rsp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure(abstract_matvec_rsp), public, deferred, pass(self) :: matvec

Procedure to compute the matrix-vector product .

procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure(abstract_matvec_rsp), public, deferred, pass(self) :: rmatvec

Procedure to compute the reversed matrix-vector product .

type, public, abstract, extends(abstract_linop_cdp) ::  abstract_hermitian_linop_cdp

Abstract representation of an abstract hermitian (complex-valued) linear operator.

Components

Type Visibility Attributes Name Initial
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_cdp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_cdp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure(abstract_matvec_cdp), public, deferred, pass(self) :: matvec

Procedure to compute the matrix-vector product .

procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure(abstract_matvec_cdp), public, deferred, pass(self) :: rmatvec

Procedure to compute the reversed matrix-vector product .

type, public, abstract, extends(abstract_linop_csp) ::  abstract_hermitian_linop_csp

Abstract representation of an abstract hermitian (complex-valued) linear operator.

Components

Type Visibility Attributes Name Initial
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_csp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_csp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure(abstract_matvec_csp), public, deferred, pass(self) :: matvec

Procedure to compute the matrix-vector product .

procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure(abstract_matvec_csp), public, deferred, pass(self) :: rmatvec

Procedure to compute the reversed matrix-vector product .

type, public, abstract ::  abstract_linop

Base type to define an abstract linear operator. All other types defined in LightKrylov derive from this fundamental one.

Read more…

Components

Type Visibility Attributes Name Initial
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

type, public, abstract, extends(abstract_linop) ::  abstract_linop_cdp

Base type to extend in order to define a complex(dp)-valued linear operator.

Components

Type Visibility Attributes Name Initial
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_cdp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_cdp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure(abstract_matvec_cdp), public, deferred, pass(self) :: matvec

Procedure to compute the matrix-vector product .

procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure(abstract_matvec_cdp), public, deferred, pass(self) :: rmatvec

Procedure to compute the reversed matrix-vector product .

type, public, abstract, extends(abstract_linop) ::  abstract_linop_csp

Base type to extend in order to define a complex(sp)-valued linear operator.

Components

Type Visibility Attributes Name Initial
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_csp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_csp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure(abstract_matvec_csp), public, deferred, pass(self) :: matvec

Procedure to compute the matrix-vector product .

procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure(abstract_matvec_csp), public, deferred, pass(self) :: rmatvec

Procedure to compute the reversed matrix-vector product .

type, public, abstract, extends(abstract_linop) ::  abstract_linop_rdp

Base type to extend in order to define a real(dp)-valued linear operator.

Components

Type Visibility Attributes Name Initial
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_rdp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_rdp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure(abstract_matvec_rdp), public, deferred, pass(self) :: matvec

Procedure to compute the matrix-vector product .

procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure(abstract_matvec_rdp), public, deferred, pass(self) :: rmatvec

Procedure to compute the reversed matrix-vector product .

type, public, abstract, extends(abstract_linop) ::  abstract_linop_rsp

Base type to extend in order to define a real(sp)-valued linear operator.

Components

Type Visibility Attributes Name Initial
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_rsp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_rsp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure(abstract_matvec_rsp), public, deferred, pass(self) :: matvec

Procedure to compute the matrix-vector product .

procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure(abstract_matvec_rsp), public, deferred, pass(self) :: rmatvec

Procedure to compute the reversed matrix-vector product .

type, public, abstract, extends(abstract_linop_rdp) ::  abstract_sym_linop_rdp

Abstract representation of an abstract symmetric (real valued) linear operator.

Components

Type Visibility Attributes Name Initial
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_rdp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_rdp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure(abstract_matvec_rdp), public, deferred, pass(self) :: matvec

Procedure to compute the matrix-vector product .

procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure(abstract_matvec_rdp), public, deferred, pass(self) :: rmatvec

Procedure to compute the reversed matrix-vector product .

type, public, abstract, extends(abstract_linop_rsp) ::  abstract_sym_linop_rsp

Abstract representation of an abstract symmetric (real valued) linear operator.

Components

Type Visibility Attributes Name Initial
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_rsp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_rsp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure(abstract_matvec_rsp), public, deferred, pass(self) :: matvec

Procedure to compute the matrix-vector product .

procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure(abstract_matvec_rsp), public, deferred, pass(self) :: rmatvec

Procedure to compute the reversed matrix-vector product .

type, public, extends(abstract_linop_cdp) ::  adjoint_linop_cdp

Utility type to define an adjoint linear operator. The definition of matvec and rmatvec are directly inherited from those used to define A. Note that this utility does not compute the adjoint for you. It simply provides a utility to define a new operator with matvec and rmatvec being switched.

Components

Type Visibility Attributes Name Initial
class(abstract_linop_cdp), public, allocatable :: A

Linear operator whose adjoint needs to be defined.

type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_cdp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_cdp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => adjoint_matvec_cdp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => adjoint_rmatvec_cdp

type, public, extends(abstract_linop_csp) ::  adjoint_linop_csp

Utility type to define an adjoint linear operator. The definition of matvec and rmatvec are directly inherited from those used to define A. Note that this utility does not compute the adjoint for you. It simply provides a utility to define a new operator with matvec and rmatvec being switched.

Components

Type Visibility Attributes Name Initial
class(abstract_linop_csp), public, allocatable :: A

Linear operator whose adjoint needs to be defined.

type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_csp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_csp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => adjoint_matvec_csp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => adjoint_rmatvec_csp

type, public, extends(abstract_linop_rdp) ::  adjoint_linop_rdp

Utility type to define an adjoint linear operator. The definition of matvec and rmatvec are directly inherited from those used to define A. Note that this utility does not compute the adjoint for you. It simply provides a utility to define a new operator with matvec and rmatvec being switched.

Components

Type Visibility Attributes Name Initial
class(abstract_linop_rdp), public, allocatable :: A

Linear operator whose adjoint needs to be defined.

type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_rdp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_rdp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => adjoint_matvec_rdp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => adjoint_rmatvec_rdp

type, public, extends(abstract_linop_rsp) ::  adjoint_linop_rsp

Utility type to define an adjoint linear operator. The definition of matvec and rmatvec are directly inherited from those used to define A. Note that this utility does not compute the adjoint for you. It simply provides a utility to define a new operator with matvec and rmatvec being switched.

Components

Type Visibility Attributes Name Initial
class(abstract_linop_rsp), public, allocatable :: A

Linear operator whose adjoint needs to be defined.

type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_rsp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_rsp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => adjoint_matvec_rsp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => adjoint_rmatvec_rsp

type, public, extends(abstract_linop_cdp) ::  axpby_linop_cdp

Utility type to define a composite linear operator . The definitions of matvec and rmatvec are directly inherited from those used to define A and B.

Components

Type Visibility Attributes Name Initial
class(abstract_linop_cdp), public, allocatable :: A

Underlying linear operators.

class(abstract_linop_cdp), public, allocatable :: B

Underlying linear operators.

complex(kind=dp), public :: alpha

Scaling factors.

complex(kind=dp), public :: beta

Scaling factors.

type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')
logical, public :: transA = .false.

Logical flag to control whether and/or need to be transposed.

logical, public :: transB = .false.

Logical flag to control whether and/or need to be transposed.

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_cdp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_cdp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => axpby_matvec_cdp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => axpby_rmatvec_cdp

type, public, extends(abstract_linop_csp) ::  axpby_linop_csp

Utility type to define a composite linear operator . The definitions of matvec and rmatvec are directly inherited from those used to define A and B.

Components

Type Visibility Attributes Name Initial
class(abstract_linop_csp), public, allocatable :: A

Underlying linear operators.

class(abstract_linop_csp), public, allocatable :: B

Underlying linear operators.

complex(kind=sp), public :: alpha

Scaling factors.

complex(kind=sp), public :: beta

Scaling factors.

type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')
logical, public :: transA = .false.

Logical flag to control whether and/or need to be transposed.

logical, public :: transB = .false.

Logical flag to control whether and/or need to be transposed.

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_csp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_csp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => axpby_matvec_csp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => axpby_rmatvec_csp

type, public, extends(abstract_linop_rdp) ::  axpby_linop_rdp

Utility type to define a composite linear operator . The definitions of matvec and rmatvec are directly inherited from those used to define A and B.

Components

Type Visibility Attributes Name Initial
class(abstract_linop_rdp), public, allocatable :: A

Underlying linear operators.

class(abstract_linop_rdp), public, allocatable :: B

Underlying linear operators.

real(kind=dp), public :: alpha

Scaling factors.

real(kind=dp), public :: beta

Scaling factors.

type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')
logical, public :: transA = .false.

Logical flag to control whether and/or need to be transposed.

logical, public :: transB = .false.

Logical flag to control whether and/or need to be transposed.

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_rdp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_rdp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => axpby_matvec_rdp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => axpby_rmatvec_rdp

type, public, extends(abstract_linop_rsp) ::  axpby_linop_rsp

Utility type to define a composite linear operator . The definitions of matvec and rmatvec are directly inherited from those used to define A and B.

Components

Type Visibility Attributes Name Initial
class(abstract_linop_rsp), public, allocatable :: A

Underlying linear operators.

class(abstract_linop_rsp), public, allocatable :: B

Underlying linear operators.

real(kind=sp), public :: alpha

Scaling factors.

real(kind=sp), public :: beta

Scaling factors.

type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')
logical, public :: transA = .false.

Logical flag to control whether and/or need to be transposed.

logical, public :: transB = .false.

Logical flag to control whether and/or need to be transposed.

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_rsp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_rsp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => axpby_matvec_rsp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => axpby_rmatvec_rsp

type, public, extends(abstract_linop_cdp) ::  dense_linop_cdp

Components

Type Visibility Attributes Name Initial
complex(kind=dp), public, allocatable :: data(:,:)
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_cdp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_cdp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => dense_matvec_cdp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => dense_rmatvec_cdp

type, public, extends(abstract_linop_csp) ::  dense_linop_csp

Components

Type Visibility Attributes Name Initial
complex(kind=sp), public, allocatable :: data(:,:)
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_csp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_csp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => dense_matvec_csp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => dense_rmatvec_csp

type, public, extends(abstract_linop_rdp) ::  dense_linop_rdp

Components

Type Visibility Attributes Name Initial
real(kind=dp), public, allocatable :: data(:,:)
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_rdp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_rdp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => dense_matvec_rdp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => dense_rmatvec_rdp

type, public, extends(abstract_linop_rsp) ::  dense_linop_rsp

Components

Type Visibility Attributes Name Initial
real(kind=sp), public, allocatable :: data(:,:)
type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_rsp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_rsp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => dense_matvec_rsp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => dense_rmatvec_rsp

type, public, extends(abstract_linop_cdp) ::  scaled_linop_cdp

Defines a scaled linear operator with a complex(dp)-valued operator and .

Components

Type Visibility Attributes Name Initial
class(abstract_linop_cdp), public, allocatable :: A

Base linear operator to be scaled.

type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')
complex(kind=dp), public :: sigma

Scaling factor.

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_cdp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_cdp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => scaled_matvec_cdp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => scaled_rmatvec_cdp

type, public, extends(abstract_linop_csp) ::  scaled_linop_csp

Defines a scaled linear operator with a complex(sp)-valued operator and .

Components

Type Visibility Attributes Name Initial
class(abstract_linop_csp), public, allocatable :: A

Base linear operator to be scaled.

type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')
complex(kind=sp), public :: sigma

Scaling factor.

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_csp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_csp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => scaled_matvec_csp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => scaled_rmatvec_csp

type, public, extends(abstract_linop_rdp) ::  scaled_linop_rdp

Defines a scaled linear operator with a real-valued operator and . The definitions of matvec and rmatvec are directly inherited from those used to define A and do not have to be defined by the user.

Components

Type Visibility Attributes Name Initial
class(abstract_linop_rdp), public, allocatable :: A

Base linear operator to be scaled.

type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')
real(kind=dp), public :: sigma

Scaling factor.

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_rdp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_rdp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => scaled_matvec_rdp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => scaled_rmatvec_rdp

type, public, extends(abstract_linop_rsp) ::  scaled_linop_rsp

Defines a scaled linear operator with a real-valued operator and . The definitions of matvec and rmatvec are directly inherited from those used to define A and do not have to be defined by the user.

Components

Type Visibility Attributes Name Initial
class(abstract_linop_rsp), public, allocatable :: A

Base linear operator to be scaled.

type(lightkrylov_timer), public :: matvec_timer = lightkrylov_timer('matvec timer')
type(lightkrylov_timer), public :: rmatvec_timer = lightkrylov_timer('rmatvec timer')
real(kind=sp), public :: sigma

Scaling factor.

Type-Bound Procedures

procedure, public, pass(self) :: apply_matvec => apply_matvec_rsp

Wrapper for matvec including the counter increment

procedure, public, pass(self) :: apply_rmatvec => apply_rmatvec_rsp

Wrapper for rmatvec including the counter increment

procedure, public, pass(self) :: finalize_timer => finalize_linop_timer

Finalize timers and print complete history_info

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

procedure, public, pass(self) :: matvec => scaled_matvec_rsp
procedure, public, pass(self) :: print_timer_info

Print current timing data

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

procedure, public, pass(self) :: reset_timer => reset_linop_timer

Reset current timing data

procedure, public, pass(self) :: rmatvec => scaled_rmatvec_rsp