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