base_backend class defines all the abstract operations that the solver class requires.
For example, transport equation in solver class evaluates the derivatives in x, y, and z directions, and reorders the input fields as required. Then finally, combines all the directional derivatives to obtain the divergence of U*.
All these high level operations solver class executes are defined here using the abstract interfaces. Every backend implementation extends the present abstact backend class to define the specifics of these operations based on the target architecture.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
real(kind=dp), | public | :: | nu | ||||
class(mesh_t), | public, | pointer | :: | mesh | |||
class(allocator_t), | public, | pointer | :: | allocator | |||
class(poisson_fft_t), | public, | pointer | :: | poisson_fft |
transeq equation obtains the derivatives direction by direction, and the exact algorithm used to obtain these derivatives are decided at runtime. Backend implementations are responsible from directing calls to transeq_ders into the correct algorithm.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t) | :: | self | ||||
class(field_t), | intent(inout) | :: | du | |||
class(field_t), | intent(inout) | :: | dv | |||
class(field_t), | intent(inout) | :: | dw | |||
class(field_t), | intent(in) | :: | u | |||
class(field_t), | intent(in) | :: | v | |||
class(field_t), | intent(in) | :: | w | |||
type(dirps_t), | intent(in) | :: | dirps |
transeq equation obtains the derivatives direction by direction, and the exact algorithm used to obtain these derivatives are decided at runtime. Backend implementations are responsible from directing calls to transeq_ders into the correct algorithm.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t) | :: | self | ||||
class(field_t), | intent(inout) | :: | du | |||
class(field_t), | intent(inout) | :: | dv | |||
class(field_t), | intent(inout) | :: | dw | |||
class(field_t), | intent(in) | :: | u | |||
class(field_t), | intent(in) | :: | v | |||
class(field_t), | intent(in) | :: | w | |||
type(dirps_t), | intent(in) | :: | dirps |
transeq equation obtains the derivatives direction by direction, and the exact algorithm used to obtain these derivatives are decided at runtime. Backend implementations are responsible from directing calls to transeq_ders into the correct algorithm.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t) | :: | self | ||||
class(field_t), | intent(inout) | :: | du | |||
class(field_t), | intent(inout) | :: | dv | |||
class(field_t), | intent(inout) | :: | dw | |||
class(field_t), | intent(in) | :: | u | |||
class(field_t), | intent(in) | :: | v | |||
class(field_t), | intent(in) | :: | w | |||
type(dirps_t), | intent(in) | :: | dirps |
transeq equation obtains the derivatives direction by direction, and the exact algorithm used to obtain these derivatives are decided at runtime. Backend implementations are responsible from directing calls to tds_solve to the correct algorithm.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t) | :: | self | ||||
class(field_t), | intent(inout) | :: | du | |||
class(field_t), | intent(in) | :: | u | |||
class(tdsops_t), | intent(in) | :: | tdsops |
reorder subroutines are straightforward, they rearrange data into our specialist data structure so that regardless of the direction tridiagonal systems are solved efficiently and fast.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t) | :: | self | ||||
class(field_t), | intent(inout) | :: | u_ | |||
class(field_t), | intent(in) | :: | u | |||
integer, | intent(in) | :: | direction |
sum9into3 subroutine combines all the directional velocity derivatives into the corresponding x directional fields.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t) | :: | self | ||||
class(field_t), | intent(inout) | :: | u | |||
class(field_t), | intent(in) | :: | u_ |
sum9into3 subroutine combines all the directional velocity derivatives into the corresponding x directional fields.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t) | :: | self | ||||
class(field_t), | intent(inout) | :: | u | |||
class(field_t), | intent(in) | :: | u_ |
adds two vectors together: y = ax + by
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t) | :: | self | ||||
real(kind=dp), | intent(in) | :: | a | |||
class(field_t), | intent(in) | :: | x | |||
real(kind=dp), | intent(in) | :: | b | |||
class(field_t), | intent(inout) | :: | y |
Calculates the scalar product of two input fields
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t) | :: | self | ||||
class(field_t), | intent(in) | :: | x | |||
class(field_t), | intent(in) | :: | y |
Scales or shifts a field by a
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t) | :: | self | ||||
class(field_t), | intent(in) | :: | f | |||
real(kind=dp), | intent(in) | :: | a |
Scales or shifts a field by a
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t) | :: | self | ||||
class(field_t), | intent(in) | :: | f | |||
real(kind=dp), | intent(in) | :: | a |
Copy the specialist data structure from device or host back to a regular 3D data array in host memory.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t), | intent(inout) | :: | self | |||
class(field_t), | intent(inout) | :: | f | |||
real(kind=dp), | intent(in), | dimension(:, :, :) | :: | data |
Copy a regular 3D array in host memory into the specialist data structure field that lives on device or host
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t), | intent(inout) | :: | self | |||
real(kind=dp), | intent(out), | dimension(:, :, :) | :: | data | ||
class(field_t), | intent(in) | :: | f |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t) | :: | self | ||||
class(tdsops_t), | intent(inout), | allocatable | :: | tdsops | ||
integer, | intent(in) | :: | dir | |||
character(len=*), | intent(in) | :: | operation | |||
character(len=*), | intent(in) | :: | scheme | |||
integer, | intent(in) | :: | bc_start | |||
integer, | intent(in) | :: | bc_end | |||
integer, | intent(in), | optional | :: | n_halo | ||
character(len=*), | intent(in), | optional | :: | from_to | ||
logical, | intent(in), | optional | :: | sym | ||
real(kind=dp), | intent(in), | optional | :: | c_nu | ||
real(kind=dp), | intent(in), | optional | :: | nu0_nu |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t) | :: | self | ||||
class(mesh_t), | intent(in) | :: | mesh | |||
type(dirps_t), | intent(in) | :: | xdirps | |||
type(dirps_t), | intent(in) | :: | ydirps | |||
type(dirps_t), | intent(in) | :: | zdirps |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t) | :: | self |
Extract data from field f
optionally reordering into dir
orientation.
To output in same orientation as f
, use call ...%get_field_data(data, f, f%dir)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t) | :: | self | ||||
real(kind=dp), | intent(out), | dimension(:, :, :) | :: | data |
Output array |
|
class(field_t), | intent(in) | :: | f |
Field |
||
integer, | intent(in), | optional | :: | dir |
Desired orientation of output array (defaults to Cartesian) |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(base_backend_t) | :: | self | ||||
class(field_t), | intent(inout) | :: | f |
Field |
||
real(kind=dp), | intent(in), | dimension(:, :, :) | :: | data |
Input array |
|
integer, | intent(in), | optional | :: | dir |
Orientation of input array (defaults to Cartesian) |