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:
| 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:
| 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:
| 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:
| 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 operator 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 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 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 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 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 |