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') |
Wrapper for matvec including the counter increment
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_linop_csp), | intent(inout) | :: | self | |||
| class(abstract_vector_csp), | intent(in) | :: | vec_in | |||
| class(abstract_vector_csp), | intent(out) | :: | vec_out |
Wrapper for rmatvec including the counter increment
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_linop_csp), | intent(inout) | :: | self | |||
| class(abstract_vector_csp), | intent(in) | :: | vec_in | |||
| class(abstract_vector_csp), | intent(out) | :: | vec_out |
Finalize timers and print complete history_info
Finalize the matvec/rmatvec timers Note: Wrapper of the corresponding routine from lightkrylov_timer
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_linop), | intent(inout) | :: | self |
Return matvec/rmatvec counter value
Getter function for the number of matvec calls
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_linop), | intent(in) | :: | self | |||
| logical, | intent(in) | :: | trans |
matvec or rmatvec? |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(adjoint_linop_csp), | intent(inout) | :: | self | |||
| class(abstract_vector_csp), | intent(in) | :: | vec_in | |||
| class(abstract_vector_csp), | intent(out) | :: | vec_out |
Print current timing data
Getter routine to print the current timing information for matvec/rmatvec Note: Wrapper of the corresponding routine from lightkrylov_timer
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_linop), | intent(inout) | :: | self | |||
| logical, | intent(in), | optional | :: | trans |
matvec or rmatvec? |
Reset matvec/rmatvec counter
Setter routine to reset the matvec counter and reset timers
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_linop), | intent(inout) | :: | self | |||
| logical, | intent(in) | :: | trans |
matvec or rmatvec? |
||
| character(len=*), | intent(in) | :: | procedure |
name of the caller routine |
||
| integer, | intent(in), | optional | :: | counter |
optional flag to reset to an integer other than zero. |
|
| logical, | intent(in), | optional | :: | reset_timer |
optional flag to reset also the timers |
|
| logical, | intent(in), | optional | :: | soft_reset |
optional flag to choose whether to save previous timing data (default: .true.) |
|
| logical, | intent(in), | optional | :: | clean_timer |
optional flag to choose whether to fully reset the timer (default: .false.) |
Reset current timing data
Setter routine to reset the matvec/rmatvec timers Note: Wrapper of the corresponding routine from lightkrylov_timer
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_linop), | intent(inout) | :: | self | |||
| logical, | intent(in), | optional | :: | trans |
matvec or rmatvec? |
|
| logical, | intent(in), | optional | :: | soft | ||
| logical, | intent(in), | optional | :: | clean |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(adjoint_linop_csp), | intent(inout) | :: | self | |||
| class(abstract_vector_csp), | intent(in) | :: | vec_in | |||
| class(abstract_vector_csp), | intent(out) | :: | vec_out |
type, extends(abstract_linop_csp), public :: adjoint_linop_csp !! Utility type to define an adjoint linear operator. The definition of `matvec` and `rmatvec` !! are directly inherited from those used to define `A`. Note that this utility does not !! compute the adjoint for you. It simply provides a utility to define a new operator !! with `matvec` and `rmatvec` switched. class(abstract_linop_csp), allocatable :: A !! Linear operator whose adjoint needs to be defined. contains private procedure, pass(self), public :: matvec => adjoint_matvec_csp procedure, pass(self), public :: rmatvec => adjoint_rmatvec_csp end type adjoint_linop_csp