This module describes private pencil and public dtfft_pencil_t classes
Structure to hold pencil decomposition info
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer(kind=int8), | public | :: | dim |
Aligned dimension id |
|||
integer(kind=int8), | public | :: | ndims |
Number of dimensions |
|||
integer(kind=int32), | public, | allocatable | :: | starts(:) |
Local starts, starting from 0 for both C and Fortran |
||
integer(kind=int32), | public, | allocatable | :: | counts(:) |
Local counts of data, in elements |
||
integer(kind=int64), | public | :: | size |
Total number of elements in a pencil |
final :: destroy_pencil_t |
Class that describes information about data layout
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer(kind=int8), | public | :: | aligned_dim |
Position of aligned dimension. For example: X pencil aligned_dim = 1, Z pencil aligned_dim = 3 |
|||
integer(kind=int8), | public | :: | rank |
Rank of buffer: 2 or 3 |
|||
integer(kind=int32), | public, | allocatable | :: | starts(:) |
Local starts, starting from 0 for both C and Fortran |
||
integer(kind=int32), | public, | allocatable | :: | counts(:) |
Local counts of data, in elements |
||
logical, | public | :: | is_even |
Is data evenly distributed across processes |
procedure, public, pass(self) :: create | ../../ Creates pencil |
procedure, public, pass(self) :: destroy | ../../ Destroys pencil |
procedure, public, pass(self) :: make_public | ../../ Creates public object that users can use to create own FFT backends |
Determines transpose ID based on pencils
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(pencil), | intent(in) | :: | send |
Send pencil |
||
type(pencil), | intent(in) | :: | recv |
Receive pencil |
Transpose ID
Creates public object that users can use to create own FFT backends
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(pencil), | intent(in) | :: | self |
Pencil |
Obtain local starts and counts in real
and fourier
spaces
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(pencil), | intent(in) | :: | pencils(:) |
Array of pencils |
||
integer(kind=int32), | intent(out), | optional | :: | in_starts(:) |
Start indexes in |
|
integer(kind=int32), | intent(out), | optional | :: | in_counts(:) |
Number of elements in |
|
integer(kind=int32), | intent(out), | optional | :: | out_starts(:) |
Start indexes in |
|
integer(kind=int32), | intent(out), | optional | :: | out_counts(:) |
Number of elements in |
|
integer(kind=int64), | intent(out), | optional | :: | alloc_size |
Minimal number of elements required to execute plan |
Creates pencil
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(pencil), | intent(inout) | :: | self |
Pencil |
||
integer(kind=int8), | intent(in) | :: | rank |
Rank of buffer |
||
integer(kind=int8), | intent(in) | :: | aligned_dim |
Position of aligned dimension |
||
integer(kind=int32), | intent(in) | :: | counts(:) |
Global counts |
||
type(MPI_Comm), | intent(in) | :: | comms(:) |
Grid communicators |
Destroys pencil
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(pencil), | intent(inout) | :: | self |
Pencil |
Computes local portions of data based on global count and position inside grid communicator
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int32), | intent(in) | :: | n_global |
Global number of points |
||
type(MPI_Comm), | intent(in) | :: | comm |
Grid communicator |
||
integer(kind=int32), | intent(out) | :: | start |
Local start |
||
integer(kind=int32), | intent(out) | :: | count |
Local count |
||
logical, | intent(out) | :: | is_even |
Is data evenly distributed across processes |
Destroys pencil
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(dtfft_pencil_t), | intent(inout) | :: | self |
Public pencil |