foodie_integrand_object Module

  • Uses:

  • penf
module~~foodie_integrand_object~~UsesGraph module~foodie_integrand_object foodie_integrand_object penf penf penf->module~foodie_integrand_object
Help

Define the abstract type integrand for building FOODIE ODE integrators.

Used By

module~~foodie_integrand_object~~UsedByGraph module~foodie_integrand_object foodie_integrand_object module~foodie_integrator_adams_bashforth foodie_integrator_adams_bashforth module~foodie_integrand_object->module~foodie_integrator_adams_bashforth module~foodie_integrator_ms_runge_kutta_ssp foodie_integrator_ms_runge_kutta_ssp module~foodie_integrand_object->module~foodie_integrator_ms_runge_kutta_ssp module~foodie_integrator_backward_differentiation_formula foodie_integrator_backward_differentiation_formula module~foodie_integrand_object->module~foodie_integrator_backward_differentiation_formula module~foodie_integrator_lmm_ssp foodie_integrator_lmm_ssp module~foodie_integrand_object->module~foodie_integrator_lmm_ssp module~foodie_integrator_multistep_object foodie_integrator_multistep_object module~foodie_integrand_object->module~foodie_integrator_multistep_object module~foodie_integrator_runge_kutta_emd foodie_integrator_runge_kutta_emd module~foodie_integrand_object->module~foodie_integrator_runge_kutta_emd module~foodie_integrator_adams_bashforth_moulton foodie_integrator_adams_bashforth_moulton module~foodie_integrand_object->module~foodie_integrator_adams_bashforth_moulton module~foodie_integrator_euler_explicit foodie_integrator_euler_explicit module~foodie_integrand_object->module~foodie_integrator_euler_explicit module~foodie_integrator_adams_moulton foodie_integrator_adams_moulton module~foodie_integrand_object->module~foodie_integrator_adams_moulton module~foodie_integrator_runge_kutta_lssp foodie_integrator_runge_kutta_lssp module~foodie_integrand_object->module~foodie_integrator_runge_kutta_lssp module~foodie_integrator_runge_kutta_ssp foodie_integrator_runge_kutta_ssp module~foodie_integrand_object->module~foodie_integrator_runge_kutta_ssp module~foodie foodie module~foodie_integrand_object->module~foodie module~foodie_integrator_runge_kutta_low_storage foodie_integrator_runge_kutta_low_storage module~foodie_integrand_object->module~foodie_integrator_runge_kutta_low_storage module~foodie_integrator_leapfrog foodie_integrator_leapfrog module~foodie_integrand_object->module~foodie_integrator_leapfrog module~foodie_integrator_multistage_multistep_object foodie_integrator_multistage_multistep_object module~foodie_integrand_object->module~foodie_integrator_multistage_multistep_object module~foodie_integrator_lmm_ssp_vss foodie_integrator_lmm_ssp_vss module~foodie_integrand_object->module~foodie_integrator_lmm_ssp_vss module~foodie_integrator_multistage_object foodie_integrator_multistage_object module~foodie_integrand_object->module~foodie_integrator_multistage_object module~foodie_integrator_adams_bashforth->module~foodie_integrator_adams_bashforth_moulton module~foodie_integrator_adams_bashforth->module~foodie module~foodie_integrator_ms_runge_kutta_ssp->module~foodie module~foodie_integrator_backward_differentiation_formula->module~foodie module~foodie_integrator_lmm_ssp->module~foodie module~foodie_integrator_multistep_object->module~foodie_integrator_adams_bashforth module~foodie_integrator_multistep_object->module~foodie_integrator_backward_differentiation_formula module~foodie_integrator_multistep_object->module~foodie_integrator_lmm_ssp module~foodie_integrator_multistep_object->module~foodie_integrator_adams_bashforth_moulton module~foodie_integrator_multistep_object->module~foodie_integrator_adams_moulton module~foodie_integrator_multistep_object->module~foodie module~foodie_integrator_multistep_object->module~foodie_integrator_leapfrog module~foodie_integrator_multistep_object->module~foodie_integrator_lmm_ssp_vss module~foodie_integrator_runge_kutta_emd->module~foodie module~foodie_integrator_adams_bashforth_moulton->module~foodie module~foodie_integrator_euler_explicit->module~foodie module~foodie_integrator_adams_moulton->module~foodie_integrator_adams_bashforth_moulton module~foodie_integrator_adams_moulton->module~foodie module~foodie_integrator_runge_kutta_lssp->module~foodie module~foodie_integrator_runge_kutta_ssp->module~foodie program~integrate_burgers integrate_burgers module~foodie->program~integrate_burgers program~integrate_lorenz integrate_lorenz module~foodie->program~integrate_lorenz module~type_euler_1d type_euler_1D module~foodie->module~type_euler_1d module~foodie_test_integrand_tester_object foodie_test_integrand_tester_object module~foodie->module~foodie_test_integrand_tester_object module~foodie_test_lcce_test foodie_test_lcce_test module~foodie->module~foodie_test_lcce_test module~type_euler_1d_openmp type_euler_1D_openmp module~foodie->module~type_euler_1d_openmp program~integrate_euler_1d_caf~2 integrate_euler_1D_caf module~foodie->program~integrate_euler_1d_caf~2 module~foodie_test_oscillation_test foodie_test_oscillation_test module~foodie->module~foodie_test_oscillation_test program~integrate_euler_1d integrate_euler_1D module~foodie->program~integrate_euler_1d module~foodie_test_object foodie_test_object module~foodie->module~foodie_test_object module~foodie_test_integrand_oscillation foodie_test_integrand_oscillation module~foodie->module~foodie_test_integrand_oscillation module~foodie_test_integrand_lcce foodie_test_integrand_lcce module~foodie->module~foodie_test_integrand_lcce module~type_euler_1d_caf type_euler_1D_caf module~foodie->module~type_euler_1d_caf module~type_burgers type_burgers module~foodie->module~type_burgers module~foodie_test_integrand_ladvection foodie_test_integrand_ladvection module~foodie->module~foodie_test_integrand_ladvection program~integrate_euler_1d_openmp integrate_euler_1D_openmp module~foodie->program~integrate_euler_1d_openmp module~type_lorenz type_lorenz module~foodie->module~type_lorenz module~foodie_integrator_runge_kutta_low_storage->module~foodie module~foodie_integrator_leapfrog->module~foodie module~foodie_integrator_multistage_multistep_object->module~foodie_integrator_ms_runge_kutta_ssp module~foodie_integrator_multistage_multistep_object->module~foodie module~foodie_integrator_lmm_ssp_vss->module~foodie module~foodie_integrator_multistage_object->module~foodie_integrator_runge_kutta_emd module~foodie_integrator_multistage_object->module~foodie_integrator_euler_explicit module~foodie_integrator_multistage_object->module~foodie_integrator_runge_kutta_lssp module~foodie_integrator_multistage_object->module~foodie_integrator_runge_kutta_ssp module~foodie_integrator_multistage_object->module~foodie module~foodie_integrator_multistage_object->module~foodie_integrator_runge_kutta_low_storage module~type_euler_1d->program~integrate_euler_1d module~foodie_test_integrand_tester_object->module~foodie_test_object module~foodie_test_integrand_tester_object->module~foodie_test_integrand_oscillation module~foodie_test_integrand_tester_object->module~foodie_test_integrand_lcce module~foodie_test_integrand_tester_object->module~foodie_test_integrand_ladvection program~foodie_test_lcce foodie_test_lcce module~foodie_test_lcce_test->program~foodie_test_lcce module~type_euler_1d_openmp->program~integrate_euler_1d_openmp program~foodie_test_oscillation foodie_test_oscillation module~foodie_test_oscillation_test->program~foodie_test_oscillation program~foodie_tester foodie_tester module~foodie_test_object->program~foodie_tester module~foodie_test_integrand_oscillation->module~foodie_test_oscillation_test module~foodie_test_integrand_oscillation->module~foodie_test_object module~foodie_test_integrand_lcce->module~foodie_test_lcce_test module~foodie_test_integrand_lcce->module~foodie_test_object module~type_euler_1d_caf->program~integrate_euler_1d_caf~2 module~type_burgers->program~integrate_burgers module~foodie_test_integrand_ladvection->module~foodie_test_object module~type_lorenz->program~integrate_lorenz
Help


Abstract Interfaces

abstract interface

Abstract type bound procedures necessary for implementing a concrete extension of integrand_object.

  • private subroutine assignment_integrand(lhs, rhs)

    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.

abstract interface

Abstract type bound procedures necessary for implementing a concrete extension of integrand_object.

  • private pure subroutine assignment_real(lhs, rhs)

    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.

abstract interface

Abstract type bound procedures necessary for implementing a concrete extension of integrand_object.

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

    Return integrand dimension.

    Arguments

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

    Integrand.

    Return Value integer(kind=I_P)

    Integrand dimension.

abstract interface

Abstract type bound procedures necessary for implementing a concrete extension of integrand_object.

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

    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.

abstract interface

Abstract type bound procedures necessary for implementing a concrete extension of integrand_object.

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

    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.

abstract interface

Abstract type bound procedures necessary for implementing a concrete extension of integrand_object.

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

    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.

abstract interface

Abstract type bound procedures necessary for implementing a concrete extension of integrand_object.

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

    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.

abstract interface

Abstract type bound procedures necessary for implementing a concrete extension of integrand_object.

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

    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.

abstract interface

Abstract type bound procedures necessary for implementing a concrete extension of integrand_object.

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

    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.

abstract interface

Abstract type bound procedures necessary for implementing a concrete extension of integrand_object.

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

    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.


Derived Types

type, public, abstract :: integrand_object

Abstract type for building FOODIE ODE integrators.

Type-Bound Procedures

generic, public :: add_fast => integrand_add_integrand_fast

Overloading add_fast method.

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

= operator.

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

= real operator.

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

Overloading = assignament.

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

+ operator.

procedure, public, pass(opr) :: integrand_add_integrand_fast

+ fast operator.

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

+ real operator.

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

Return integrand dimension.

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

* operator.

procedure, public, pass(opr) :: integrand_multiply_integrand_fast

* fast operator.

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

* real operator.

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

* real_scalar operator.

procedure, public, pass(opr) :: integrand_multiply_real_scalar_fast

* real_scalar fast operator.

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

- operator.

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

- real operator.

procedure, public, pass(opr) :: integrand_subtract_integrand_fast

- fast operator.

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

||integrand - integrand|| operator.

generic, public :: multiply_fast => integrand_multiply_integrand_fast, integrand_multiply_real_scalar_fast

Overloading multiply_fast method.

generic, public :: operator(*) => integrand_multiply_integrand, integrand_multiply_real, real_multiply_integrand, integrand_multiply_real_scalar, real_scalar_multiply_integrand

Overloading * operator.

generic, public :: operator(+) => integrand_add_integrand, integrand_add_real, real_add_integrand

Overloading + operator.

generic, public :: operator(-) => integrand_sub_integrand, integrand_sub_real, real_sub_integrand

Overloading - operator.

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

Estimate local truncation error.

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

real + operator.

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

real * operator.

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

real_scalar * operator.

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

real - operator.

generic, public :: subtract_fast => integrand_subtract_integrand_fast

Overloading subtract_fast method.

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

Time derivative, residuals.

procedure, public, pass(self) :: t_fast

Time derivative, residuals, fast mode.


Subroutines

private pure subroutine integrand_add_integrand_fast(opr, lhs, rhs)

+ fast operator.

Arguments

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

Operator result.

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

Left hand side.

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

Right hand side.

private pure subroutine integrand_multiply_integrand_fast(opr, lhs, rhs)

* fast operator.

Arguments

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

Operator result.

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

Left hand side.

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

Right hand side.

private pure subroutine integrand_multiply_real_scalar_fast(opr, lhs, rhs)

* real_scalar fast operator.

Arguments

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

Operator result.

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

Left hand side.

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

Right hand side.

private pure subroutine integrand_subtract_integrand_fast(opr, lhs, rhs)

- fast operator.

Arguments

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

Operator result.

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

Left hand side.

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

Right hand side.

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.