This module describes Abstraction for all FFT Executors: abstract_executor
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer(kind=int8), | public, | parameter | :: | FFT_C2C | = | 0 |
Complex to complex FFT |
integer(kind=int8), | public, | parameter | :: | FFT_R2C | = | 1 |
Real to complex FFT |
integer(kind=int8), | public, | parameter | :: | FFT_R2R | = | 2 |
Real to real FFT |
integer(kind=int8), | public, | parameter | :: | FFT_1D | = | 1 |
1D FFT |
integer(kind=int8), | public, | parameter | :: | FFT_2D | = | 2 |
2D FFT |
Creates FFT plan
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(abstract_executor), | intent(inout) | :: | self |
FFT Executor |
||
integer(kind=int8), | intent(in) | :: | fft_rank |
Rank of fft: 1 or 2 |
||
integer(kind=int8), | intent(in) | :: | fft_type |
Type of fft: r2r, r2c, c2c |
||
type(dtfft_precision_t), | intent(in) | :: | precision |
Precision of fft: DTFFT_SINGLE or DTFFT_DOUBLE |
||
integer(kind=int32), | intent(in) | :: | idist |
Distance between the first element of two consecutive signals in a batch of the input data. |
||
integer(kind=int32), | intent(in) | :: | odist |
Distance between the first element of two consecutive signals in a batch of the output data. |
||
integer(kind=int32), | intent(in) | :: | how_many |
Number of transforms to create |
||
integer(kind=int32), | intent(in) | :: | fft_sizes(:) |
Dimensions of transform |
||
integer(kind=int32), | intent(in) | :: | inembed(:) |
Storage dimensions of the input data in memory. |
||
integer(kind=int32), | intent(in) | :: | onembed(:) |
Storage dimensions of the output data in memory. |
||
integer(kind=int32), | intent(inout) | :: | error_code |
Error code to be returned to user |
||
type(dtfft_r2r_kind_t), | intent(in), | optional | :: | r2r_kinds(:) |
Kinds of r2r transform |
Executes plan
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(abstract_executor), | intent(in) | :: | self |
FFT Executor |
||
type(c_ptr), | intent(in) | :: | a |
Source pointer |
||
type(c_ptr), | intent(in) | :: | b |
Target pointer |
||
integer(kind=int8), | intent(in) | :: | sign |
Sign of transform |
Destroys plan
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(abstract_executor), | intent(inout) | :: | self |
FFT Executor |
Allocates aligned memory
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=int64), | intent(in) | :: | alloc_bytes |
Number of bytes to allocate |
||
type(c_ptr), | intent(out) | :: | ptr |
Allocated pointer |
Frees aligned memory
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(c_ptr), | intent(in) | :: | ptr |
Pointer to free |
The “most” abstract executor. All FFT executors are extending this class.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
type(c_ptr), | public | :: | plan_forward |
Pointer to forward plan |
|||
type(c_ptr), | public | :: | plan_backward |
Pointer to backward plan |
|||
logical, | public | :: | is_inverse_copied | = | .false. |
Is inverse plan copied? |
|
logical, | private | :: | is_created | = | .false. |
Is plan created? |
procedure, public, non_overridable, pass(self) :: create | ../../ Creates FFT plan |
procedure, public, non_overridable, pass(self) :: execute | ../../ Executes plan |
procedure, public, non_overridable, pass(self) :: destroy | ../../ Destroys plan |
procedure(mem_alloc_interface), public, deferred, nopass :: mem_alloc | ../../ Allocates aligned memory |
procedure(mem_free_interface), public, deferred, nopass :: mem_free | ../../ Frees aligned memory |
procedure(create_interface), public, deferred, pass(self) :: create_private | ../../ Creates FFT plan |
procedure(execute_interface), public, deferred, pass(self) :: execute_private | ../../ Executes plan |
procedure(destroy_interface), public, deferred, pass(self) :: destroy_private | ../../ Destroys plan |
Creates FFT plan
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(abstract_executor), | intent(inout) | :: | self |
FFT Executor |
||
integer(kind=int8), | intent(in) | :: | fft_rank |
Rank of fft: 1 or 2 |
||
integer(kind=int8), | intent(in) | :: | fft_type |
Type of fft: r2r, r2c, c2c |
||
type(dtfft_precision_t), | intent(in) | :: | precision |
Precision of fft: DTFFT_SINGLE or DTFFT_DOUBLE |
||
type(pencil), | intent(in), | optional | :: | real_pencil |
Real data layout |
|
type(pencil), | intent(in), | optional | :: | complex_pencil |
Complex data layout |
|
type(dtfft_r2r_kind_t), | intent(in), | optional | :: | r2r_kinds(:) |
Kinds of r2r transform |
Executes plan
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(abstract_executor), | intent(in) | :: | self |
FFT Executor |
||
type(c_ptr), | intent(in) | :: | in |
Source buffer |
||
type(c_ptr), | intent(in) | :: | out |
Target buffer |
||
integer(kind=int8), | intent(in) | :: | sign |
Sign of transform |
Destroys plan
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(abstract_executor), | intent(inout) | :: | self |
FFT Executor |