integrand_object Derived Type

type, public, abstract :: integrand_object

Abstract type for building FOODIE ODE integrators.

Inherited By

type~~integrand_object~~InheritedByGraph type~integrand_object integrand_object type~integrator_adams_bashforth integrator_adams_bashforth type~integrand_object->type~integrator_adams_bashforth buffer, previous type~integrator_runge_kutta_ls integrator_runge_kutta_ls type~integrand_object->type~integrator_runge_kutta_ls buffer, stage type~integrator_ms_runge_kutta_ssp integrator_ms_runge_kutta_ssp type~integrand_object->type~integrator_ms_runge_kutta_ssp buffer, previous, stage type~integrator_runge_kutta_lssp integrator_runge_kutta_lssp type~integrand_object->type~integrator_runge_kutta_lssp buffer, stage type~integrator_multistage_object integrator_multistage_object type~integrand_object->type~integrator_multistage_object buffer, stage type~integrator_runge_kutta_emd integrator_runge_kutta_emd type~integrand_object->type~integrator_runge_kutta_emd U1, U2, buffer, stage type~integrator_leapfrog integrator_leapfrog type~integrand_object->type~integrator_leapfrog buffer, filter, previous type~integrator_adams_bashforth_moulton integrator_adams_bashforth_moulton type~integrand_object->type~integrator_adams_bashforth_moulton buffer, previous type~integrator_lmm_ssp_vss integrator_lmm_ssp_vss type~integrand_object->type~integrator_lmm_ssp_vss buffer, previous type~integrator_multistage_multistep_object integrator_multistage_multistep_object type~integrand_object->type~integrator_multistage_multistep_object buffer, previous, stage type~integrator_back_df integrator_back_df type~integrand_object->type~integrator_back_df buffer, previous type~integrator_runge_kutta_ssp integrator_runge_kutta_ssp type~integrand_object->type~integrator_runge_kutta_ssp buffer, stage type~integrator_multistep_object integrator_multistep_object type~integrand_object->type~integrator_multistep_object buffer, previous type~integrator_euler_explicit integrator_euler_explicit type~integrand_object->type~integrator_euler_explicit buffer, stage type~integrator_adams_moulton integrator_adams_moulton type~integrand_object->type~integrator_adams_moulton buffer, previous type~integrator_lmm_ssp integrator_lmm_ssp type~integrand_object->type~integrator_lmm_ssp buffer, previous type~integrand_tester_object integrand_tester_object type~integrand_object->type~integrand_tester_object type~integrator_adams_bashforth->type~integrator_adams_bashforth_moulton predictor type~integrator_multistage_object->type~integrator_runge_kutta_ls type~integrator_multistage_object->type~integrator_runge_kutta_lssp type~integrator_multistage_object->type~integrator_runge_kutta_emd type~integrator_multistage_object->type~integrator_runge_kutta_ssp type~integrator_multistage_object->type~integrator_euler_explicit type~integrator_multistage_multistep_object->type~integrator_ms_runge_kutta_ssp type~integrator_multistep_object->type~integrator_adams_bashforth type~integrator_multistep_object->type~integrator_leapfrog type~integrator_multistep_object->type~integrator_adams_bashforth_moulton type~integrator_multistep_object->type~integrator_lmm_ssp_vss type~integrator_multistep_object->type~integrator_back_df type~integrator_multistep_object->type~integrator_adams_moulton type~integrator_multistep_object->type~integrator_lmm_ssp type~integrator_adams_moulton->type~integrator_adams_bashforth_moulton corrector type~test_object test_object type~integrand_tester_object->type~test_object integrand_0 type~integrand_lcce integrand_lcce type~integrand_tester_object->type~integrand_lcce type~integrand_ladvection integrand_ladvection type~integrand_tester_object->type~integrand_ladvection type~integrand_oscillation integrand_oscillation type~integrand_tester_object->type~integrand_oscillation type~integrand_lcce->type~test_object lcce_0 type~integrand_ladvection->type~test_object ladvection_0 type~integrand_oscillation->type~test_object oscillation_0
Help

Source Code


Type-Bound Procedures

generic, public :: add_fast => integrand_add_integrand_fast

Overloading add_fast method.

procedure(assignment_integrand), public, deferred, pass(lhs) :: assign_integrand

= operator.

  • subroutine assignment_integrand(lhs, rhs) Prototype

    Symmetric assignment integrand = integrand.

    Arguments

    Type IntentOptional AttributesName
    class(integrand_object), intent(inout) :: lhs

    Left hand side.

    class(integrand_object), intent(in) :: rhs

    Right hand side.

procedure(assignment_real), public, deferred, pass(lhs) :: assign_real

= real operator.

  • pure subroutine assignment_real(lhs, rhs) Prototype

    Symmetric assignment integrand = integrand.

    Arguments

    Type IntentOptional AttributesName
    class(integrand_object), intent(inout) :: lhs

    Left hand side.

    real(kind=R_P), intent(in) :: rhs(1:)

    Right hand side.

generic, public :: assignment(=) => assign_integrand, assign_real

Overloading = assignament.

  • private pure subroutine assign_integrand(lhs, rhs)

    = operator.

    Arguments

    Type IntentOptional AttributesName
    class(integrand_oscillation), intent(inout) :: lhs

    Left hand side.

    class(integrand_object), intent(in) :: rhs

    Right hand side.

  • private pure subroutine assign_real(lhs, rhs)

    = real operator.

    Arguments

    Type IntentOptional AttributesName
    class(integrand_oscillation), intent(inout) :: lhs

    Left hand side.

    real(kind=R_P), intent(in) :: rhs(1:)

    Right hand side.

procedure(symmetric_operator), public, deferred, pass(lhs) :: integrand_add_integrand

+ operator.

  • pure function symmetric_operator(lhs, rhs) result(operator_result) Prototype

    Symmetric type operator integrand.op.integrand.

    Arguments

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

    Left hand side.

    class(integrand_object), intent(in) :: rhs

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

procedure, public, pass(opr) :: integrand_add_integrand_fast

+ fast operator.

procedure(integrand_op_real), public, deferred, pass(lhs) :: integrand_add_real

+ real operator.

  • pure function integrand_op_real(lhs, rhs) result(operator_result) Prototype

    Asymmetric type operator integrand.op.real.

    Arguments

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

    Left hand side.

    real(kind=R_P), intent(in) :: rhs(1:)

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

procedure(integrand_dimension_interface), public, deferred, pass(self) :: integrand_dimension

Return integrand dimension.

  • pure function integrand_dimension_interface(self) result(integrand_dimension) Prototype

    Return integrand dimension.

    Arguments

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

    Integrand.

    Return Value integer(kind=I_P)

    Integrand dimension.

procedure(symmetric_operator), public, deferred, pass(lhs) :: integrand_multiply_integrand

* operator.

  • pure function symmetric_operator(lhs, rhs) result(operator_result) Prototype

    Symmetric type operator integrand.op.integrand.

    Arguments

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

    Left hand side.

    class(integrand_object), intent(in) :: rhs

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

procedure, public, pass(opr) :: integrand_multiply_integrand_fast

* fast operator.

procedure(integrand_op_real), public, deferred, pass(lhs) :: integrand_multiply_real

* real operator.

  • pure function integrand_op_real(lhs, rhs) result(operator_result) Prototype

    Asymmetric type operator integrand.op.real.

    Arguments

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

    Left hand side.

    real(kind=R_P), intent(in) :: rhs(1:)

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

procedure(integrand_op_real_scalar), public, deferred, pass(lhs) :: integrand_multiply_real_scalar

* real_scalar operator.

  • pure function integrand_op_real_scalar(lhs, rhs) result(operator_result) Prototype

    Asymmetric type operator integrand.op.real.

    Arguments

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

    Left hand side.

    real(kind=R_P), intent(in) :: rhs

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

procedure, public, pass(opr) :: integrand_multiply_real_scalar_fast

* real_scalar fast operator.

procedure(symmetric_operator), public, deferred, pass(lhs) :: integrand_sub_integrand

- operator.

  • pure function symmetric_operator(lhs, rhs) result(operator_result) Prototype

    Symmetric type operator integrand.op.integrand.

    Arguments

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

    Left hand side.

    class(integrand_object), intent(in) :: rhs

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

procedure(integrand_op_real), public, deferred, pass(lhs) :: integrand_sub_real

- real operator.

  • pure function integrand_op_real(lhs, rhs) result(operator_result) Prototype

    Asymmetric type operator integrand.op.real.

    Arguments

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

    Left hand side.

    real(kind=R_P), intent(in) :: rhs(1:)

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

procedure, public, pass(opr) :: integrand_subtract_integrand_fast

- fast operator.

procedure(local_error_operator), public, deferred, pass(lhs) :: local_error

||integrand - integrand|| operator.

  • function local_error_operator(lhs, rhs) result(error) Prototype

    Estimate local truncation error between 2 solution approximations.

    Arguments

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

    Left hand side.

    class(integrand_object), intent(in) :: rhs

    Right hand side.

    Return Value real(kind=R_P)

    Error estimation.

Overloading multiply_fast method.

Overloading * operator.

  • private pure function integrand_multiply_integrand(lhs, rhs) result(opr)

    * operator.

    Arguments

    Type IntentOptional AttributesName
    class(integrand_oscillation), intent(in) :: lhs

    Left hand side.

    class(integrand_object), intent(in) :: rhs

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

  • private pure function integrand_multiply_real(lhs, rhs) result(opr)

    * real_scalar operator.

    Arguments

    Type IntentOptional AttributesName
    class(integrand_oscillation), intent(in) :: lhs

    Left hand side.

    real(kind=R_P), intent(in) :: rhs(1:)

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

  • private pure function real_multiply_integrand(lhs, rhs) result(opr)

    real_scalar * operator.

    Arguments

    Type IntentOptional AttributesName
    real(kind=R_P), intent(in) :: lhs(1:)

    Left hand side.

    class(integrand_oscillation), intent(in) :: rhs

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

  • private pure function integrand_multiply_real_scalar(lhs, rhs) result(opr)

    * real_scalar operator.

    Arguments

    Type IntentOptional AttributesName
    class(integrand_oscillation), intent(in) :: lhs

    Left hand side.

    real(kind=R_P), intent(in) :: rhs

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

  • private pure function real_scalar_multiply_integrand(lhs, rhs) result(opr)

    real_scalar * operator.

    Arguments

    Type IntentOptional AttributesName
    real(kind=R_P), intent(in) :: lhs

    Left hand side.

    class(integrand_oscillation), intent(in) :: rhs

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

Overloading + operator.

  • private pure function integrand_add_integrand(lhs, rhs) result(opr)

    + operator.

    Arguments

    Type IntentOptional AttributesName
    class(integrand_oscillation), intent(in) :: lhs

    Left hand side.

    class(integrand_object), intent(in) :: rhs

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

  • private pure function integrand_add_real(lhs, rhs) result(opr)

    + real operator.

    Arguments

    Type IntentOptional AttributesName
    class(integrand_oscillation), intent(in) :: lhs

    Left hand side.

    real(kind=R_P), intent(in) :: rhs(1:)

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

  • private pure function real_add_integrand(lhs, rhs) result(opr)

    real + operator.

    Arguments

    Type IntentOptional AttributesName
    real(kind=R_P), intent(in) :: lhs(1:)

    Left hand side.

    class(integrand_oscillation), intent(in) :: rhs

    Left hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

Overloading - operator.

  • private pure function integrand_sub_integrand(lhs, rhs) result(opr)

    - operator.

    Arguments

    Type IntentOptional AttributesName
    class(integrand_oscillation), intent(in) :: lhs

    Left hand side.

    class(integrand_object), intent(in) :: rhs

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

  • private pure function integrand_sub_real(lhs, rhs) result(opr)

    - real operator.

    Arguments

    Type IntentOptional AttributesName
    class(integrand_oscillation), intent(in) :: lhs

    Left hand side.

    real(kind=R_P), intent(in) :: rhs(1:)

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

  • private pure function real_sub_integrand(lhs, rhs) result(opr)

    real - operator.

    Arguments

    Type IntentOptional AttributesName
    real(kind=R_P), intent(in) :: lhs(1:)

    Left hand side.

    class(integrand_oscillation), intent(in) :: rhs

    Left hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

generic, public :: operator(.lterror.) => local_error

Estimate local truncation error.

  • private pure function local_error(lhs, rhs) result(error)

    Estimate local truncation error between 2 oscillation approximations.

    Arguments

    Type IntentOptional AttributesName
    class(integrand_oscillation), intent(in) :: lhs

    Left hand side.

    class(integrand_object), intent(in) :: rhs

    Right hand side.

    Return Value real(kind=R_P)

    Error estimation.

procedure(real_op_integrand), public, deferred, pass(rhs) :: real_add_integrand

real + operator.

  • pure function real_op_integrand(lhs, rhs) result(operator_result) Prototype

    Asymmetric type operator real.op.integrand.

    Arguments

    Type IntentOptional AttributesName
    real(kind=R_P), intent(in) :: lhs(1:)

    Left hand side.

    class(integrand_object), intent(in) :: rhs

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

procedure(real_op_integrand), public, deferred, pass(rhs) :: real_multiply_integrand

real * operator.

  • pure function real_op_integrand(lhs, rhs) result(operator_result) Prototype

    Asymmetric type operator real.op.integrand.

    Arguments

    Type IntentOptional AttributesName
    real(kind=R_P), intent(in) :: lhs(1:)

    Left hand side.

    class(integrand_object), intent(in) :: rhs

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

procedure(real_scalar_op_integrand), public, deferred, pass(rhs) :: real_scalar_multiply_integrand

real_scalar * operator.

  • pure function real_scalar_op_integrand(lhs, rhs) result(operator_result) Prototype

    Asymmetric type operator real.op.integrand.

    Arguments

    Type IntentOptional AttributesName
    real(kind=R_P), intent(in) :: lhs

    Left hand side.

    class(integrand_object), intent(in) :: rhs

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

procedure(real_op_integrand), public, deferred, pass(rhs) :: real_sub_integrand

real - operator.

  • pure function real_op_integrand(lhs, rhs) result(operator_result) Prototype

    Asymmetric type operator real.op.integrand.

    Arguments

    Type IntentOptional AttributesName
    real(kind=R_P), intent(in) :: lhs(1:)

    Left hand side.

    class(integrand_object), intent(in) :: rhs

    Right hand side.

    Return Value real(kind=R_P), allocatable, (:)

    Operator result.

generic, public :: subtract_fast => integrand_subtract_integrand_fast

Overloading subtract_fast method.

procedure(time_derivative), public, deferred, pass(self) :: t

Time derivative, residuals.

  • function time_derivative(self, t) result(dState_dt) Prototype

    Time derivative function of integrand class, i.e. the residuals function.

    Arguments

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

    Integrand field.

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

    Time.

    Return Value real(kind=R_P), allocatable, (:)

    Result of the time derivative function of integrand field.

procedure, public, pass(self) :: t_fast

Time derivative, residuals, fast mode.

  • private subroutine t_fast(self, t)

    Time derivative function of integrand class, i.e. the residuals function. Fast mode acting directly on self.

    Arguments

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

    Integrand field.

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

    Time.

Source Code

type, abstract :: integrand_object
  !< Abstract type for building FOODIE ODE integrators.
#ifdef CAF
  class(*), allocatable :: dummy_to_allow_extensions[:] !< Dummy member to allow concrete extensions with coarray members.
#endif
  contains
    ! public deferred procedures that concrete integrand-field must implement
    procedure(integrand_dimension_interface), pass(self), deferred, public :: integrand_dimension !< Return integrand dimension.
    procedure(time_derivative),               pass(self), deferred, public :: t                   !< Time derivative, residuals.
    ! operators
    procedure(local_error_operator), pass(lhs), deferred, public :: local_error !< `||integrand - integrand||` operator.
    generic, public :: operator(.lterror.) => local_error !< Estimate local truncation error.
    ! +
    procedure(symmetric_operator), pass(lhs), deferred, public :: integrand_add_integrand !< `+` operator.
    procedure(integrand_op_real),  pass(lhs), deferred, public :: integrand_add_real      !< `+ real` operator.
    procedure(real_op_integrand),  pass(rhs), deferred, public :: real_add_integrand      !< `real +` operator.
    generic, public :: operator(+) => integrand_add_integrand, &
                                      integrand_add_real,      &
                                      real_add_integrand !< Overloading `+` operator.
    ! *
    procedure(symmetric_operator),       pass(lhs), deferred, public :: integrand_multiply_integrand   !< `*` operator.
    procedure(integrand_op_real),        pass(lhs), deferred, public :: integrand_multiply_real        !< `* real` operator.
    procedure(real_op_integrand),        pass(rhs), deferred, public :: real_multiply_integrand        !< `real *` operator.
    procedure(integrand_op_real_scalar), pass(lhs), deferred, public :: integrand_multiply_real_scalar !< `* real_scalar` operator.
    procedure(real_scalar_op_integrand), pass(rhs), deferred, public :: real_scalar_multiply_integrand !< `real_scalar *` operator.
    generic, public :: operator(*) => integrand_multiply_integrand,   &
                                      integrand_multiply_real,        &
                                      real_multiply_integrand,        &
                                      integrand_multiply_real_scalar, &
                                      real_scalar_multiply_integrand !< Overloading `*` operator.
    ! -
    procedure(symmetric_operator), pass(lhs), deferred, public :: integrand_sub_integrand !< `-` operator.
    procedure(integrand_op_real),  pass(lhs), deferred, public :: integrand_sub_real      !< `- real` operator.
    procedure(real_op_integrand),  pass(rhs), deferred, public :: real_sub_integrand      !< `real -` operator.
    generic, public :: operator(-) => integrand_sub_integrand, &
                                      integrand_sub_real,      &
                                      real_sub_integrand !< Overloading `-` operator.
    ! =
    procedure(assignment_integrand), pass(lhs), deferred, public :: assign_integrand !< `=` operator.
    procedure(assignment_real),      pass(lhs), deferred, public :: assign_real      !< `= real` operator.
    generic, public :: assignment(=) => assign_integrand, assign_real !< Overloading `=` assignament.
    ! public methods for fast operational mode, must be overridden
    procedure, pass(self), public :: t_fast !< Time derivative, residuals, fast mode.
    procedure, pass(opr), public :: integrand_add_integrand_fast !< `+` fast operator.
    generic, public :: add_fast => integrand_add_integrand_fast !< Overloading `add_fast` method.
    procedure, pass(opr), public :: integrand_multiply_integrand_fast   !< `*` fast operator.
    procedure, pass(opr), public :: integrand_multiply_real_scalar_fast !< `* real_scalar` fast operator.
    generic, public :: multiply_fast => integrand_multiply_integrand_fast, &
                                        integrand_multiply_real_scalar_fast !< Overloading `multiply_fast` method.
    procedure, pass(opr), public :: integrand_subtract_integrand_fast !< `-` fast operator.
    generic, public :: subtract_fast => integrand_subtract_integrand_fast !< Overloading `subtract_fast` method.
endtype integrand_object