scaled_linop_cdp Derived Type

type, public, extends(abstract_linop_cdp) :: scaled_linop_cdp

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


Components

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

Base linear operator to be scaled.

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

Scaling factor.


Type-Bound Procedures

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

Wrapper for matvec including the counter increment

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

Wrapper for rmatvec including the counter increment

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

Finalize timers and print complete history_info

  • private subroutine finalize_linop_timer(self)

    Finalize the matvec/rmatvec timers Note: Wrapper of the corresponding routine from lightkrylov_timer

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_linop), intent(inout) :: self

procedure, public, pass(self) :: get_counter

Return matvec/rmatvec counter value

  • private pure function get_counter(self, trans) result(count)

    Getter function for the number of matvec calls

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_linop), intent(in) :: self
    logical, intent(in) :: trans

    matvec or rmatvec?

    Return Value integer

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

procedure, public, pass(self) :: print_timer_info

Print current timing data

  • private subroutine print_timer_info(self, trans)

    Getter routine to print the current timing information for matvec/rmatvec Note: Wrapper of the corresponding routine from lightkrylov_timer

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_linop), intent(inout) :: self
    logical, intent(in), optional :: trans

    matvec or rmatvec?

procedure, public, pass(self) :: reset_counter

Reset matvec/rmatvec counter

  • private subroutine reset_counter(self, trans, procedure, counter, reset_timer, soft_reset, clean_timer)

    Setter routine to reset the matvec counter and reset timers

    Arguments

    Type IntentOptional 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.)

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

Reset current timing data

  • private subroutine reset_linop_timer(self, trans, soft, clean)

    Setter routine to reset the matvec/rmatvec timers Note: Wrapper of the corresponding routine from lightkrylov_timer

    Arguments

    Type IntentOptional 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, public, pass(self) :: rmatvec => scaled_rmatvec_cdp