Abstract type for building FOODIE ODE integrators.
Overloading add_fast method.
+ fast operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_oscillation), | intent(inout) | :: | opr | Operator result. |
||
| class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
| class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
= operator.
Symmetric assignment integrand = integrand.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_object), | intent(inout) | :: | lhs | Left hand side. |
||
| class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
= real operator.
Symmetric assignment integrand = integrand.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_object), | intent(inout) | :: | lhs | Left hand side. |
||
| real(kind=R_P), | intent(in) | :: | rhs(1:) | Right hand side. |
Overloading = assignament.
= operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_oscillation), | intent(inout) | :: | lhs | Left hand side. |
||
| class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
= real operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_oscillation), | intent(inout) | :: | lhs | Left hand side. |
||
| real(kind=R_P), | intent(in) | :: | rhs(1:) | Right hand side. |
+ operator.
Symmetric type operator integrand.op.integrand.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
| class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Operator result.
+ fast operator.
+ fast operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| 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. |
+ real operator.
Asymmetric type operator integrand.op.real.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
| real(kind=R_P), | intent(in) | :: | rhs(1:) | Right hand side. |
Operator result.
Return integrand dimension.
Return integrand dimension.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_object), | intent(in) | :: | self | Integrand. |
Integrand dimension.
* operator.
Symmetric type operator integrand.op.integrand.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
| class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Operator result.
* fast operator.
* fast operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| 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. |
* real operator.
Asymmetric type operator integrand.op.real.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
| real(kind=R_P), | intent(in) | :: | rhs(1:) | Right hand side. |
Operator result.
* real_scalar operator.
Asymmetric type operator integrand.op.real.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
| real(kind=R_P), | intent(in) | :: | rhs | Right hand side. |
Operator result.
* real_scalar fast operator.
* real_scalar fast operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| 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. |
- operator.
Symmetric type operator integrand.op.integrand.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
| class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Operator result.
- real operator.
Asymmetric type operator integrand.op.real.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
| real(kind=R_P), | intent(in) | :: | rhs(1:) | Right hand side. |
Operator result.
- fast operator.
- fast operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| 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. |
||integrand - integrand|| operator.
Estimate local truncation error between 2 solution approximations.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
| class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Error estimation.
Overloading multiply_fast method.
* fast operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_oscillation), | intent(inout) | :: | opr | Operator result. |
||
| class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
| class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
* real_scalar fast operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_oscillation), | intent(inout) | :: | opr | Operator result. |
||
| class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
| real(kind=R_P), | intent(in) | :: | rhs | Right hand side. |
Overloading * operator.
* operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_oscillation), | intent(in) | :: | lhs | Left hand side. |
||
| class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Operator result.
* real_scalar operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_oscillation), | intent(in) | :: | lhs | Left hand side. |
||
| real(kind=R_P), | intent(in) | :: | rhs(1:) | Right hand side. |
Operator result.
real_scalar * operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=R_P), | intent(in) | :: | lhs(1:) | Left hand side. |
||
| class(integrand_oscillation), | intent(in) | :: | rhs | Right hand side. |
Operator result.
* real_scalar operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_oscillation), | intent(in) | :: | lhs | Left hand side. |
||
| real(kind=R_P), | intent(in) | :: | rhs | Right hand side. |
Operator result.
real_scalar * operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=R_P), | intent(in) | :: | lhs | Left hand side. |
||
| class(integrand_oscillation), | intent(in) | :: | rhs | Right hand side. |
Operator result.
Overloading + operator.
+ operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_oscillation), | intent(in) | :: | lhs | Left hand side. |
||
| class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Operator result.
+ real operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_oscillation), | intent(in) | :: | lhs | Left hand side. |
||
| real(kind=R_P), | intent(in) | :: | rhs(1:) | Right hand side. |
Operator result.
real + operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=R_P), | intent(in) | :: | lhs(1:) | Left hand side. |
||
| class(integrand_oscillation), | intent(in) | :: | rhs | Left hand side. |
Operator result.
Overloading - operator.
- operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_oscillation), | intent(in) | :: | lhs | Left hand side. |
||
| class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Operator result.
- real operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_oscillation), | intent(in) | :: | lhs | Left hand side. |
||
| real(kind=R_P), | intent(in) | :: | rhs(1:) | Right hand side. |
Operator result.
real - operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=R_P), | intent(in) | :: | lhs(1:) | Left hand side. |
||
| class(integrand_oscillation), | intent(in) | :: | rhs | Left hand side. |
Operator result.
Estimate local truncation error.
Estimate local truncation error between 2 oscillation approximations.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_oscillation), | intent(in) | :: | lhs | Left hand side. |
||
| class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Error estimation.
real + operator.
Asymmetric type operator real.op.integrand.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=R_P), | intent(in) | :: | lhs(1:) | Left hand side. |
||
| class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Operator result.
real * operator.
Asymmetric type operator real.op.integrand.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=R_P), | intent(in) | :: | lhs(1:) | Left hand side. |
||
| class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Operator result.
real_scalar * operator.
Asymmetric type operator real.op.integrand.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=R_P), | intent(in) | :: | lhs | Left hand side. |
||
| class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Operator result.
real - operator.
Asymmetric type operator real.op.integrand.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=R_P), | intent(in) | :: | lhs(1:) | Left hand side. |
||
| class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Operator result.
Overloading subtract_fast method.
- fast operator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_oscillation), | intent(inout) | :: | opr | Operator result. |
||
| class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
| class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Time derivative, residuals.
Time derivative function of integrand class, i.e. the residuals function.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_object), | intent(in) | :: | self | Integrand field. |
||
| real(kind=R_P), | intent(in), | optional | :: | t | Time. |
Result of the time derivative function of integrand field.
Time derivative, residuals, fast mode.
Time derivative function of integrand class, i.e. the residuals function. Fast mode acting directly on self.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(integrand_object), | intent(inout) | :: | self | Integrand field. |
||
| real(kind=R_P), | intent(in), | optional | :: | t | Time. |
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