A class derived from equation specific for PDE 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 | :: | nmodes | The number of spherical harmonic modes. Should be moved to the specific implementation of the equation as this class should not be limited to systems using spherical harmonic decomposition. |
|||
integer(kind=ip), | public | :: | nvars | = | 3 | The number of variables per mode. Should probably be changed to be the total number of variables in order to make this independent of spherical harmonic decomposition. And the value should be set by the equation implementation. |
|
type(cgf), | public, | dimension(:,:), allocatable | :: | eq_data | A 2d array of complex grid functions that contains the data variables for the equation system. Should probably be changed to a 1d array to make this independent of spherical harmonic decomposition. |
||
type(cgf), | public, | dimension(:,:), allocatable | :: | eq_rhs_data | A 2d array of complex grid functions that contains the rhs variables for the equation system. Should probably be changed to a 1d array to make this independent of spherical harmonic decomposition. |
||
type(cgf), | public, | dimension(:,:,:), allocatable | :: | eq_tmp_data | A 3d array of complex grid functions that contains the temporary variables needed by the time integrator. Should probably be changed to a 2d array to make this independent of spherical harmonic decomposition. |
||
type(cgf_pointer), | public, | dimension(:,:,:), allocatable | :: | data_pointer | A 3d array of pointers to complex grid functions that points to the RHS variables (:,:,-1), the data variables (:,:,0) and the temporary variables (:,:,1:ntmp) for the equation system. Should probably be changed to a 2d array to make this independent of spherical harmonic decomposition. |
The init routine is deferred.
The interface for the PDE version of init. This interface is consistent with eq_init_interface.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(cpde_equation), | intent(inout), | target | :: | this | The equation that is being initialized. |
The rhs routine is deferred.
The interface for the PDE version of rhs. This interface is consistent with eq_rhs_interface.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(cpde_equation), | intent(inout) | :: | this | The equation for which the RHS is calculated. |
The set_to_zero routine is provided by cpde_set_to_zero.
The interface for the PDE version of set_to_zero. This interface is consistent with eq_set_to_zero_interface.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(cpde_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 cpde_update_vars.
The interface for the PDE version of update_vars. This interface is consistent with eq_update_vars_interface.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(cpde_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 PDE version of save_globals_1. This interface is consistent with eq_save_globals_1.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(cpde_equation), | intent(inout) | :: | this | The routine is called on this equation. |
The save_globals_2 routine is deferred.
The interface for the PDE version of save_globals_2. This interface is consistent with eq_save_globals_2.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(cpde_equation), | intent(inout) | :: | this | The routine is called on this equation. |
The load_globals routine is deferred.
The interface for the PDE version of load_globals. This interface is consistent with eq_load_globals.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(cpde_equation), | intent(inout) | :: | this | The routine is called on this equation. |
The output routine is provided by cpde_output.
The interface for the PDE version of output. This interface is consistent with eq_output.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(cpde_equation), | intent(inout) | :: | this | The routine is called on this equation. |
The print_data routine is provided by cpde_print_data.
The interface for the PDE version of print_data. This interface is consistent with eq_print_data.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(cpde_equation), | intent(inout) | :: | this | The routine is called on this equation. |
type, abstract, extends(equation) :: cpde_equation
!! A class derived from [[equation]] specific for PDE equations.
integer(ip) :: nmodes
!! The number of spherical harmonic modes. Should be moved to the specific
!! implementation of the equation as this class should not be limited
!! to systems using spherical harmonic decomposition.
integer(ip) :: nvars = 3
!! The number of variables per mode. Should probably be changed to be the
!! total number of variables in order to make this independent of
!! spherical harmonic decomposition. And the value should be set by
!! the equation implementation.
type(cgf), dimension(:,:), allocatable :: eq_data
!! A 2d array of complex grid functions that contains the data variables
!! for the equation system. Should probably be changed to a 1d array
!! to make this independent of spherical harmonic decomposition.
type(cgf), dimension(:,:), allocatable :: eq_rhs_data
!! A 2d array of complex grid functions that contains the rhs variables
!! for the equation system. Should probably be changed to a 1d array
!! to make this independent of spherical harmonic decomposition.
type(cgf), dimension(:,:,:), allocatable :: eq_tmp_data
!! A 3d array of complex grid functions that contains the temporary
!! variables needed by the time integrator.
!! Should probably be changed to a 2d array to make this independent of
!! spherical harmonic decomposition.
type(cgf_pointer), dimension(:,:,:), allocatable :: data_pointer
!! A 3d array of pointers to complex grid functions that points to
!! the RHS variables (:,:,-1), the data variables (:,:,0) and the
!! temporary variables (:,:,1:[[equation:ntmp]]) for the equation system.
!! Should probably be changed to a 2d array to make this independent of
!! spherical harmonic decomposition.
contains
procedure (cpde_eq_init_interface), deferred, pass :: init
!! The [[equation:init]] routine is deferred.
procedure (cpde_eq_rhs_interface), deferred, pass :: rhs
!! The [[equation:rhs]] routine is deferred.
procedure :: set_to_zero => cpde_set_to_zero
!! The [[equation:set_to_zero]] routine is provided by
!! [[cpde_set_to_zero]].
procedure :: update_vars => cpde_update_vars
!! The [[equation:update_vars]] routine is provided by
!! [[cpde_update_vars]].
procedure (cpde_eq_save_globals_1), deferred, pass :: save_globals_1
!! The [[equation:save_globals_1]] routine is deferred.
procedure (cpde_eq_save_globals_2), deferred, pass :: save_globals_2
!! The [[equation:save_globals_2]] routine is deferred.
procedure (cpde_eq_load_globals), deferred, pass :: load_globals
!! The [[equation:load_globals]] routine is deferred.
procedure :: output => cpde_output
!! The [[equation:output]] routine is provided by [[cpde_output]].
procedure :: print_data => cpde_print_data
!! The [[equation:print_data]] routine is provided by [[cpde_print_data]].
end type cpde_equation