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.
@note Warning While it is not necessary to use this utility operator, it is strongly recommended for operators that correspond to exponential propagators to extend from this abstract type to allow for more rigorous type checks in the application.
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. |
Wrapper for matvec including the counter increment
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(abstract_linop_rdp), | intent(inout) | :: | self | |||
class(abstract_vector_rdp), | intent(in) | :: | vec_in | |||
class(abstract_vector_rdp), | intent(out) | :: | vec_out |
Wrapper for rmatvec including the counter increment
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(abstract_linop_rdp), | intent(inout) | :: | self | |||
class(abstract_vector_rdp), | intent(in) | :: | vec_in | |||
class(abstract_vector_rdp), | 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? |
Procedure to compute the matrix-vector product .
Interface for the matrix-vector product.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(abstract_linop_rdp), | intent(inout) | :: | self |
Linear operator . |
||
class(abstract_vector_rdp), | intent(in) | :: | vec_in |
Vector to be multiplied by . |
||
class(abstract_vector_rdp), | intent(out) | :: | vec_out |
Result of the matrix-vector product. |
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 |
Procedure to compute the reversed matrix-vector product .
Interface for the matrix-vector product.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(abstract_linop_rdp), | intent(inout) | :: | self |
Linear operator . |
||
class(abstract_vector_rdp), | intent(in) | :: | vec_in |
Vector to be multiplied by . |
||
class(abstract_vector_rdp), | intent(out) | :: | vec_out |
Result of the matrix-vector product. |