abstract_executor Derived Type

type, public, abstract :: abstract_executor

The “most” abstract executor. All FFT executors are extending this class.


Inherits

type~~abstract_executor~~InheritsGraph type~abstract_executor abstract_executor c_ptr c_ptr type~abstract_executor->c_ptr plan_forward, plan_backward

Inherited by

type~~abstract_executor~~InheritedByGraph type~abstract_executor abstract_executor type~cufft_executor cufft_executor type~cufft_executor->type~abstract_executor type~fft_executor fft_executor type~fft_executor->type~abstract_executor fft type~fftw_executor fftw_executor type~fftw_executor->type~abstract_executor type~mkl_executor mkl_executor type~mkl_executor->type~abstract_executor type~vkfft_executor vkfft_executor type~vkfft_executor->type~abstract_executor type~dtfft_plan_t dtfft_plan_t type~dtfft_plan_t->type~fft_executor fft type~dtfft_core_c2c dtfft_core_c2c type~dtfft_core_c2c->type~dtfft_plan_t type~dtfft_plan_r2r_t dtfft_plan_r2r_t type~dtfft_plan_r2r_t->type~dtfft_plan_t type~plan_c plan_c type~plan_c->type~dtfft_plan_t p type~dtfft_plan_c2c_t dtfft_plan_c2c_t type~dtfft_plan_c2c_t->type~dtfft_core_c2c type~dtfft_plan_r2c_t dtfft_plan_r2c_t type~dtfft_plan_r2c_t->type~dtfft_core_c2c

Components

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?


Type-Bound Procedures

procedure, public, non_overridable, pass(self) :: create

Creates FFT plan

  • private function create(self, fft_rank, fft_type, precision, real_pencil, complex_pencil, r2r_kinds)

    Creates FFT plan

    Arguments

    Type IntentOptional 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

    Return Value integer(kind=int32)

procedure, public, non_overridable, pass(self) :: execute

Executes plan

  • private subroutine execute(self, in, out, sign)

    Executes plan

    Arguments

    Type IntentOptional 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

procedure, public, non_overridable, pass(self) :: destroy

Destroys plan

  • private subroutine destroy(self)

    Destroys plan

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_executor), intent(inout) :: self

    FFT Executor

procedure(mem_alloc_interface), public, deferred, nopass :: mem_alloc

Allocates aligned memory

  • subroutine mem_alloc_interface(alloc_bytes, ptr) Prototype

    Allocates aligned memory

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int64), intent(in) :: alloc_bytes

    Number of bytes to allocate

    type(c_ptr), intent(out) :: ptr

    Allocated pointer

procedure(mem_free_interface), public, deferred, nopass :: mem_free

Frees aligned memory

  • subroutine mem_free_interface(ptr) Prototype

    Frees aligned memory

    Arguments

    Type IntentOptional Attributes Name
    type(c_ptr), intent(in) :: ptr

    Pointer to free

procedure(create_interface), public, deferred, pass(self) :: create_private

Creates FFT plan

  • subroutine create_interface(self, fft_rank, fft_type, precision, idist, odist, how_many, fft_sizes, inembed, onembed, error_code, r2r_kinds) Prototype

    Creates FFT plan

    Arguments

    Type IntentOptional 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

procedure(execute_interface), public, deferred, pass(self) :: execute_private

Executes plan

  • subroutine execute_interface(self, a, b, sign) Prototype

    Executes plan

    Arguments

    Type IntentOptional 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

procedure(destroy_interface), public, deferred, pass(self) :: destroy_private

Destroys plan

  • subroutine destroy_interface(self) Prototype

    Destroys plan

    Arguments

    Type IntentOptional Attributes Name
    class(abstract_executor), intent(inout) :: self

    FFT Executor