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.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.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(abstract_linop_rsp), | intent(in) | :: | A |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(abstract_linop_rdp), | intent(in) | :: | A |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(abstract_linop_csp), | intent(in) | :: | A |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(abstract_linop_cdp), | intent(in) | :: | A |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=sp), | intent(in) | :: | A(:,:) |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=dp), | intent(in) | :: | A(:,:) |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
complex(kind=sp), | intent(in) | :: | A(:,:) |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
complex(kind=dp), | intent(in) | :: | A(:,:) |
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.
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') |
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 |
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.
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') |
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 |
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.
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') |
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 |
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.
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') |
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 |
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.
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. |
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 . |
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.
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. |
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 . |
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.
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. |
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 . |
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.
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. |
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 . |
Abstract representation of an abstract hermitian (complex-valued) linear operator.
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') |
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 . |
Abstract representation of an abstract hermitian (complex-valued) linear operator.
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') |
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 . |
Base type to define an abstract linear operator. All other types defined in
LightKrylov
derive from this fundamental one.
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') |
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 |
Base type to extend in order to define a complex(dp)-valued linear operator.
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') |
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 . |
Base type to extend in order to define a complex(sp)-valued linear operator.
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') |
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 . |
Base type to extend in order to define a real(dp)-valued linear operator.
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') |
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 . |
Base type to extend in order to define a real(sp)-valued linear operator.
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') |
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 . |
Abstract representation of an abstract symmetric (real valued) linear operator.
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') |
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 . |
Abstract representation of an abstract symmetric (real valued) linear operator.
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') |
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 . |
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.
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') |
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 |
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.
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') |
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 |
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.
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') |
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 |
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.
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') |
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 |
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
.
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. |
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 |
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
.
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. |
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 |
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
.
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. |
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 |
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
.
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. |
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 | 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') |
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 | 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') |
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 | 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') |
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 | 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') |
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 |
Defines a scaled linear operator with a complex(dp)-valued operator and .
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. |
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 |
Defines a scaled linear operator with a complex(sp)-valued operator and .
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. |
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 |
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.
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. |
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 |
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.
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. |
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 |