A class derived from equation specific for ODE equations.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer(kind=ip), | public | :: | ntmp | The number of temporary storage variables to allocate. |
|||
character(len=:), | public, | allocatable | :: | ename | The name of the system of equations |
||
integer(kind=ip), | public | :: | nvars | The number of variables in the ODE system. |
|||
real(kind=wp), | public, | dimension(:), allocatable | :: | var_data | A 1d array of reals that contains the data variables. |
||
real(kind=wp), | public, | dimension(:), allocatable | :: | rhs_data | A 1d array of reals that contains the RHS variables. |
||
real(kind=wp), | public, | dimension(:,:), allocatable | :: | tmp_data | A 2d array of reals that contains the temporary variables needed by the time integrator. |
||
integer(kind=ip), | public | :: | io_id | The file unit id used for output for this system of ODE's. |
The init routine is deferred.
The interface for the ODE version of init. This interface is consistent with eq_init_interface.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ode_equation), | intent(inout), | target | :: | this | The equation that is being initialized. |
The rhs routine is deferred.
The interface for the ODE version of rhs. This interface is consistent with eq_rhs_interface.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ode_equation), | intent(inout) | :: | this | The equation for which the RHS is calculated. |
The set_to_zero routine is provided by ode_set_to_zero.
The interface for the ODE version of set_to_zero. This interface is consistent with eq_set_to_zero_interface.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ode_equation), | intent(inout) | :: | this | The routine is called on this equation. |
||
integer(kind=ip), | intent(in) | :: | dest | Can be either -1 (RHS), 0 (main) or between 1 and ntmp (temporary). |
The update_vars routine is provided by ode_update_vars.
The interface for the ODE version of update_vars. This interface is consistent with eq_update_vars_interface.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ode_equation), | intent(inout), | target | :: | this | The routine is called on this equation. |
|
integer(kind=ip), | intent(in) | :: | source | The first source for the update. Can be either -1 (RHS), 0 (main) or between 1 and ntmp (temporary). |
||
integer(kind=ip), | intent(in) | :: | dest | The destination for the update. Can be either -1 (RHS), 0 (main) or between 1 and ntmp (temporary). |
||
integer(kind=ip), | intent(in), | optional | :: | source2 | The second source for the update. Can be either -1 (RHS), 0 (main) or between 1 and ntmp (temporary). |
|
real(kind=wp), | intent(in), | optional | :: | scalar | The scalar multiplying the first source. |
|
real(kind=wp), | intent(in), | optional | :: | scalar2 | The scalar multiplying the second source. |
The save_globals_1 routine is deferred.
The interface for the ODE version of save_globals_1. This interface is consistent with eq_save_globals_1.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ode_equation), | intent(inout) | :: | this | The routine is called on this equation. |
The save_globals_2 routine is deferred.
The interface for the ODE version of save_globals_2. This interface is consistent with eq_save_globals_2.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ode_equation), | intent(inout) | :: | this | The routine is called on this equation. |
The load_globals routine is deferred.
The interface for the ODE version of load_globals. This interface is consistent with eq_load_globals.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ode_equation), | intent(inout) | :: | this | The routine is called on this equation. |
The output routine is deferred.
The interface for the ODE version of output. This interface is consistent with eq_output.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ode_equation), | intent(inout) | :: | this | The routine is called on this equation. |
The print_data routine is provided by ode_print_data.
The interface for the ODE version of print_data. This interface is consistent with eq_print_data.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ode_equation), | intent(inout) | :: | this | The routine is called on this equation. |
type, abstract, extends(equation) :: ode_equation
!! A class derived from [[equation]] specific for ODE equations.
integer(ip) :: nvars
!! The number of variables in the ODE system.
real(wp), dimension(:), allocatable :: var_data
!! A 1d array of reals that contains the data variables.
real(wp), dimension(:), allocatable :: rhs_data
!! A 1d array of reals that contains the RHS variables.
real(wp), dimension(:,:), allocatable :: tmp_data
!! A 2d array of reals that contains the temporary variables needed by the
!! time integrator.
integer(ip) :: io_id
!! The file unit id used for output for this system of ODE's.
contains
procedure (ode_eq_init_interface), deferred, pass :: init
!! The [[equation:init]] routine is deferred.
procedure (ode_eq_rhs_interface), deferred, pass :: rhs
!! The [[equation:rhs]] routine is deferred.
procedure :: set_to_zero => ode_set_to_zero
!! The [[equation:set_to_zero]] routine is provided by
!! [[ode_set_to_zero]].
procedure :: update_vars => ode_update_vars
!! The [[equation:update_vars]] routine is provided by
!! [[ode_update_vars]].
procedure (ode_eq_save_globals_1), deferred, pass :: save_globals_1
!! The [[equation:save_globals_1]] routine is deferred.
procedure (ode_eq_save_globals_2), deferred, pass :: save_globals_2
!! The [[equation:save_globals_2]] routine is deferred.
procedure (ode_eq_load_globals), deferred, pass :: load_globals
!! The [[equation:load_globals]] routine is deferred.
procedure (ode_eq_output), deferred, pass :: output
!! The [[equation:output]] routine is deferred.
procedure :: print_data => ode_print_data
!! The [[equation:print_data]] routine is provided by [[ode_print_data]].
end type ode_equation