integrator_multistage_multistep_object Derived Type

type, public, abstract, extends(integrator_object) :: integrator_multistage_multistep_object

type~~integrator_multistage_multistep_object~~InheritsGraph type~integrator_multistage_multistep_object integrator_multistage_multistep_object type~integrand_object integrand_object type~integrand_object->type~integrator_multistage_multistep_object buffer, previous, stage type~integrator_object integrator_object type~integrator_object->type~integrator_multistage_multistep_object
Help


Abstract type of FOODIE ODE integrators of the multistage/multistep family.

Inherited By

type~~integrator_multistage_multistep_object~~InheritedByGraph type~integrator_multistage_multistep_object integrator_multistage_multistep_object type~integrator_ms_runge_kutta_ssp integrator_ms_runge_kutta_ssp type~integrator_multistage_multistep_object->type~integrator_ms_runge_kutta_ssp
Help

Components

TypeVisibility AttributesNameInitial
real(kind=R_P), public, allocatable:: Dt(:)

Previous time steps.

logical, public :: autoupdate

Perform cyclic autoupdate of previous time steps buffers.

class(integrand_object), public, allocatable:: buffer

Buffer used for fast integration.

character(len=:), public, allocatable:: description_

Informative description of the integrator.

integer(kind=I_P), public :: error =0

Error status code.

character(len=:), public, allocatable:: error_message

Error message, hopefully meaningful.

integer(kind=I_P), public :: iterations

Implicit iterations.

class(integrand_object), public, allocatable:: previous(:)

Previous steps.

integer(kind=I_P), public :: registers_stages

Number of registers used for stages.

integer(kind=I_P), public :: registers_steps

Number of registers used for steps.

class(integrand_object), public, allocatable:: stage(:)

Stages.

integer(kind=I_P), public :: stages

Number of stages.

integer(kind=I_P), public :: steps

Number of time steps.

real(kind=R_P), public, allocatable:: t(:)

Previous times.


Type-Bound Procedures

procedure, public, pass(self) :: allocate_integrand_members

Allocate integrand members.

procedure, public, pass(lhs) :: assign_abstract

Assign ony members of abstract integrator_object type.

procedure, public, pass(lhs) :: assign_multistage_multistep

generic, public :: assignment(=) => integr_assign_integr

Overload =.

procedure, public, pass(self) :: check_error

Check for error occurrencies.

  • private subroutine check_error(self, is_severe)

    Check for error occurencies.

    Arguments

    Type IntentOptional AttributesName
    class(integrator_object), intent(in) :: self

    Integrator.

    logical, intent(in), optional :: is_severe

    Flag to activate severe faliure, namely errors trigger a stop.

procedure(class_name_interface), public, deferred, pass(self) :: class_name

Return the class name of schemes.

  • pure function class_name_interface(self) result(class_name) Prototype

    Return the class name of schemes.

    Arguments

    Type IntentOptional AttributesName
    class(integrator_object), intent(in) :: self

    Integrator.

    Return Value character(len=99)

    Class name.

procedure, public, pass(self) :: description

Return informative integrator description.

  • private pure function description(self, prefix) result(desc)

    Return informative integrator description.

    Arguments

    Type IntentOptional AttributesName
    class(integrator_object), intent(in) :: self

    Integrator.

    character(len=*), intent(in), optional :: prefix

    Prefixing string.

    Return Value character(len=:), allocatable

    Description.

procedure, public, pass(self) :: destroy_abstract

Destroy only members of abstract integrator_object type.

procedure, public, pass(self) :: destroy_multistage_multistep

Destroy the integrator.

procedure(has_fast_mode_interface), public, deferred, pass(self) :: has_fast_mode

Return .true. if the integrator class has fast mode integrate.

  • elemental function has_fast_mode_interface(self) result(has_fast_mode) Prototype

    Return .true. if the integrator class has fast mode integrate.

    Arguments

    Type IntentOptional AttributesName
    class(integrator_object), intent(in) :: self

    Integrator.

    Return Value logical

    Inquire result.

procedure(assignment_interface), public, deferred, pass(lhs) :: integr_assign_integr

Operator =.

procedure(integrate_interface), public, deferred, pass(self) :: integrate

Integrate integrand field.

procedure(integrate_fast_interface), public, deferred, pass(self) :: integrate_fast

Integrate integrand field, fast mode.

procedure, public, pass(self) :: is_multistage

Return .true. for multistage integrator.

procedure, public, pass(self) :: is_multistep

Return .true. for multistep integrator.

procedure(is_supported_interface), public, deferred, pass(self) :: is_supported

Return .true. if the integrator class support the given scheme.

  • elemental function is_supported_interface(self, scheme) result(is_supported) Prototype

    Return .true. if the integrator class support the given scheme.

    Arguments

    Type IntentOptional AttributesName
    class(integrator_object), intent(in) :: self

    Integrator.

    character(len=*), intent(in) :: scheme

    Queried scheme.

    Return Value logical

    Inquire result.

procedure, public, pass(self) :: stages_number

Return number of stages used.

procedure, public, pass(self) :: steps_number

Return number of steps used.

  • private elemental function steps_number(self)

    Return number of steps used.

    Arguments

    Type IntentOptional AttributesName
    class(integrator_multistage_multistep_object), intent(in) :: self

    Integrator.

    Return Value integer(kind=I_P)

    Number of steps used.

procedure(supported_schemes_interface), public, deferred, pass(self) :: supported_schemes

Return the list of supported schemes.

  • pure function supported_schemes_interface(self) result(schemes) Prototype

    Return the list of supported schemes.

    Arguments

    Type IntentOptional AttributesName
    class(integrator_object), intent(in) :: self

    Integrator.

    Return Value character(len=99), allocatable, (:)

    Queried scheme.

procedure, public, pass(self) :: trigger_error

Trigger an error.

  • private subroutine trigger_error(self, error, error_message, is_severe)

    Check for error occurencies.

    Arguments

    Type IntentOptional AttributesName
    class(integrator_object), intent(inout) :: self

    Integrator.

    integer(kind=I_P), intent(in) :: error

    Error status code.

    character(len=*), intent(in), optional :: error_message

    Error message, hopefully meaningful.

    logical, intent(in), optional :: is_severe

    Flag to activate severe faliure, namely errors trigger a stop.

procedure, public, nopass :: update_previous

Cyclic update previous time steps.

  • private subroutine update_previous(U, previous, Dt, t, previous_Dt, previous_t)

    Cyclic update previous time steps.

    Arguments

    Type IntentOptional AttributesName
    class(integrand_object), intent(in) :: U

    Field to be integrated.

    class(integrand_object), intent(inout) :: previous(1:)

    Previous time steps solutions of integrand.

    real(kind=R_P), intent(in), optional :: Dt

    Time step.

    real(kind=R_P), intent(in), optional :: t

    Time.

    real(kind=R_P), intent(inout), optional :: previous_Dt(1:)

    Time step.

    real(kind=R_P), intent(inout), optional :: previous_t(1:)

    Time.

Source Code

type, extends(integrator_object), abstract :: integrator_multistage_multistep_object
   !< Abstract type of FOODIE ODE integrators of the multistage/multistep family.
   integer(I_P)                         :: registers_stages !< Number of registers used for stages.
   integer(I_P)                         :: registers_steps  !< Number of registers used for steps.
   integer(I_P)                         :: stages           !< Number of stages.
   integer(I_P)                         :: steps            !< Number of time steps.
   logical                              :: autoupdate       !< Perform cyclic autoupdate of previous time steps buffers.
   integer(I_P)                         :: iterations       !< Implicit iterations.
   real(R_P),               allocatable :: Dt(:)            !< Previous time steps.
   real(R_P),               allocatable :: t(:)             !< Previous times.
   class(integrand_object), allocatable :: previous(:)      !< Previous steps.
   class(integrand_object), allocatable :: stage(:)         !< Stages.
   class(integrand_object), allocatable :: buffer           !< Buffer used for fast integration.
   contains
      ! deferred methods
      procedure(integrate_interface),      pass(self), deferred :: integrate      !< Integrate integrand field.
      procedure(integrate_fast_interface), pass(self), deferred :: integrate_fast !< Integrate integrand field, fast mode.
      ! implemented deferred methods of parent
      procedure, pass(self) :: is_multistage !< Return .true. for multistage integrator.
      procedure, pass(self) :: is_multistep  !< Return .true. for multistep integrator.
      procedure, pass(self) :: stages_number !< Return number of stages used.
      procedure, pass(self) :: steps_number  !< Return number of steps used.
      ! public methods
      procedure, pass(self) :: allocate_integrand_members   !< Allocate integrand members.
      procedure, pass(lhs)  :: assign_multistage_multistep  !< Assign members of [[integrator_multistage_multistep_object]].
      procedure, pass(self) :: destroy_multistage_multistep !< Destroy the integrator.
      procedure, nopass     :: update_previous              !< Cyclic update previous time steps.
endtype integrator_multistage_multistep_object