The linear constant coefficient equation field.
It is a FOODIE integrand class concrete extension.
The linear constant coefficient equation is a linear pure ODE and it can be written as:
$$\begin{matrix} U_t = R(U) \\ U = \begin{bmatrix} y \end{bmatrix}\;\;\; R(U) = \begin{bmatrix} a*y + b \end{bmatrix} \end{matrix}$$
The coefficent a,b are constant with \(a \ne 0\). The exact solution is
$$ U(t) = (U_0 + \frac{b}{a}) e ^{a(t-t_0)} - \frac{b){a} $$
where \(t_0\) is the initial time of integration.
[1] ORDINARY DIFFERENTIAL EQUATIONS, Gabriel Nagy, 2017.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
real(kind=R_P), | private | :: | U | = | 0._R_P | Integrand (state) variable. |
|
real(kind=R_P), | private | :: | U0 | = | 0._R_P | Integrand initial state. |
|
real(kind=R_P), | private | :: | a | = | 0._R_P | a constant. |
|
real(kind=R_P), | private | :: | b | = | 0._R_P | b constant. |
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.
=
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | intent(inout) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
= real
operator.
= real
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | 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. |
Return an informative description of the test.
Return informative integrator description.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | intent(in) | :: | self | Integrand. |
||
character(len=*), | intent(in), | optional | :: | prefix | Prefixing string. |
Description.
Return error.
Return error.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | intent(in) | :: | self | Integrand. |
||
real(kind=R_P), | intent(in) | :: | t | Time. |
||
real(kind=R_P), | intent(in), | optional | :: | t0 | Initial time. |
|
class(integrand_object), | intent(in), | optional | :: | U0 | Initial conditions. |
Error.
Return exact solution.
Return exact solution.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | intent(in) | :: | self | Integrand. |
||
real(kind=R_P), | intent(in) | :: | t | Time. |
||
real(kind=R_P), | intent(in), | optional | :: | t0 | Initial time. |
|
class(integrand_object), | intent(in), | optional | :: | U0 | Initial conditions. |
Exact solution.
Export integrand to Tecplot file.
Export integrand to Tecplot file.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | intent(in) | :: | self | Advection field. |
||
character(len=*), | intent(in), | optional | :: | file_name | File name. |
|
real(kind=R_P), | intent(in), | optional | :: | t | Time. |
|
character(len=*), | intent(in), | optional | :: | scheme | Scheme used to integrate integrand. |
|
logical, | intent(in), | optional | :: | close_file | Flag for closing file. |
|
logical, | intent(in), | optional | :: | with_exact_solution | Flag for export also exact solution. |
|
class(integrand_object), | intent(in), | optional | :: | U0 | Initial conditions. |
Initialize field.
Initialize integrand.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | intent(inout) | :: | self | Integrand. |
||
real(kind=R_P), | intent(in) | :: | Dt | Time step. |
+
operator.
+
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | 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_lcce), | 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.
+ real
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | 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_lcce), | intent(in) | :: | self | integrand. |
integrand dimension.
*
operator.
*
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | 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_lcce), | 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.
* real_scalar
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | intent(in) | :: | lhs | Left hand side. |
||
real(kind=R_P), | intent(in) | :: | rhs(1:) | Right hand side. |
Operator result.
* real_scalar
operator.
* real_scalar
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | 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_lcce), | 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.
-
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
Operator result.
- real
operator.
- real
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | 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_lcce), | intent(inout) | :: | opr | Operator result. |
||
class(integrand_object), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_object), | intent(in) | :: | rhs | Right hand side. |
||integrand_lcce - integrand_lcce||
operator.
Estimate local truncation error between 2 oscillation approximations.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | 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.
Extract integrand state field.
Extract integrand state field.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | intent(in) | :: | self | Integrand. |
State.
Initialize from command line interface.
Initialize from command line interface.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | intent(inout) | :: | self | Advection field. |
||
type(command_line_interface), | intent(inout) | :: | cli | Command line interface handler. |
real +
operator.
real +
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=R_P), | intent(in) | :: | lhs(1:) | Left hand side. |
||
class(integrand_lcce), | intent(in) | :: | rhs | Left hand side. |
Operator result.
real *
operator.
real_scalar *
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=R_P), | intent(in) | :: | lhs(1:) | Left hand side. |
||
class(integrand_lcce), | intent(in) | :: | rhs | Right hand side. |
Operator result.
real_scalar *
operator.
real_scalar *
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=R_P), | intent(in) | :: | lhs | Left hand side. |
||
class(integrand_lcce), | intent(in) | :: | rhs | Right hand side. |
Operator result.
real -
operator.
real -
operator.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=R_P), | intent(in) | :: | lhs(1:) | Left hand side. |
||
class(integrand_lcce), | intent(in) | :: | rhs | Left hand side. |
Operator result.
Set command line interface.
Set command line interface.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(command_line_interface), | intent(inout) | :: | cli | Command line interface handler. |
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 of field.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integrand_lcce), | intent(in) | :: | self | Integrand. |
||
real(kind=R_P), | intent(in), | optional | :: | t | Time. |
Integrand time derivative.
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_lcce), | intent(inout) | :: | self | Integrand. |
||
real(kind=R_P), | intent(in), | optional | :: | t | Time. |
type, extends(integrand_tester_object) :: integrand_lcce
!< The linear constant coefficient equation field.
!<
!< It is a FOODIE integrand class concrete extension.
!<
!<### ODE
!<The linear constant coefficient equation is a linear pure ODE and it can be written as:
!<
!<$$\begin{matrix}
!< U_t = R(U) \\
!< U = \begin{bmatrix}
!< y
!< \end{bmatrix}\;\;\;
!< R(U) = \begin{bmatrix}
!< a*y + b
!< \end{bmatrix}
!<\end{matrix}$$
!<
!<The coefficent *a,b* are constant with \(a \ne 0\). The exact solution is
!<
!<$$ U(t) = (U_0 + \frac{b}{a}) e ^{a(t-t_0)} - \frac{b){a} $$
!<
!< where \(t_0\) is the initial time of integration.
!<
!<#### Bibliography
!<
!<[1] *ORDINARY DIFFERENTIAL EQUATIONS*, Gabriel Nagy, 2017.
!<
private
real(R_P) :: a=0._R_P !< *a* constant.
real(R_P) :: b=0._R_P !< *b* constant.
real(R_P) :: U=0._R_P !< Integrand (state) variable.
real(R_P) :: U0=0._R_P !< Integrand initial state.
contains
! auxiliary methods
procedure, pass(self), public :: output !< Extract integrand state field.
! integrand_tester_object deferred methods
procedure, pass(self), public :: description !< Return an informative description of the test.
procedure, pass(self), public :: error !< Return error.
procedure, pass(self), public :: exact_solution !< Return exact solution.
procedure, pass(self), public :: export_tecplot !< Export integrand to Tecplot file.
procedure, pass(self), public :: initialize !< Initialize field.
procedure, pass(self), public :: parse_cli !< Initialize from command line interface.
procedure, nopass, public :: set_cli !< Set command line interface.
! integrand_object deferred methods
procedure, pass(self), public :: integrand_dimension !< Return integrand dimension.
procedure, pass(self), public :: t => dU_dt !< Time derivative, residuals.
! operators
procedure, pass(lhs), public :: local_error !<`||integrand_lcce - integrand_lcce||` operator.
! +
procedure, pass(lhs), public :: integrand_add_integrand !< `+` operator.
procedure, pass(lhs), public :: integrand_add_real !< `+ real` operator.
procedure, pass(rhs), public :: real_add_integrand !< `real +` operator.
! *
procedure, pass(lhs), public :: integrand_multiply_integrand !< `*` operator.
procedure, pass(lhs), public :: integrand_multiply_real !< `* real` operator.
procedure, pass(rhs), public :: real_multiply_integrand !< `real *` operator.
procedure, pass(lhs), public :: integrand_multiply_real_scalar !< `* real_scalar` operator.
procedure, pass(rhs), public :: real_scalar_multiply_integrand !< `real_scalar *` operator.
! -
procedure, pass(lhs), public :: integrand_sub_integrand !< `-` operator.
procedure, pass(lhs), public :: integrand_sub_real !< `- real` operator.
procedure, pass(rhs), public :: real_sub_integrand !< `real -` operator.
! =
procedure, pass(lhs), public :: assign_integrand !< `=` operator.
procedure, pass(lhs), public :: assign_real !< `= real` operator.
! override fast operators
procedure, pass(self), public :: t_fast !< Time derivative, residuals, fast mode.
procedure, pass(opr), public :: integrand_add_integrand_fast !< `+` fast operator.
procedure, pass(opr), public :: integrand_multiply_integrand_fast !< `*` fast operator.
procedure, pass(opr), public :: integrand_multiply_real_scalar_fast !< `* real_scalar` fast operator.
procedure, pass(opr), public :: integrand_subtract_integrand_fast !< `-` fast operator.
endtype integrand_lcce