Id_rsp Derived Type

type, public, extends(abstract_linop_rsp) :: Id_rsp

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.


Components

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')

Type-Bound Procedures

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

  • 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 => id_matvec_rsp

  • private subroutine id_matvec_rsp(self, vec_in, vec_out)

    Arguments

    Type IntentOptional Attributes Name
    class(Id_rsp), intent(inout) :: self
    class(abstract_vector_rsp), intent(in) :: vec_in
    class(abstract_vector_rsp), intent(out) :: vec_out

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 => id_matvec_rsp

  • private subroutine id_matvec_rsp(self, vec_in, vec_out)

    Arguments

    Type IntentOptional Attributes Name
    class(Id_rsp), intent(inout) :: self
    class(abstract_vector_rsp), intent(in) :: vec_in
    class(abstract_vector_rsp), intent(out) :: vec_out