# ComputeBackwardDM

Computes the backward FFT.

## Syntax

Fortran:

Status = DftiComputeBackwardDM(handle, in_X, out_X)

Status = DftiComputeBackwardDM(handle, in_out_X)

C/C++:

status = DftiComputeBackwardDM(handle, in_X, out_X);

status = DftiComputeBackwardDM(handle, in_out_X);

## Input Parameters

handle
  The descriptor handle.
in_X, in_out_X
  Local part of input data. Array of complex values. Refer to Distributing Data among Processes on how to allocate and initialize the array.

## Output Parameters

out_X, in_out_X
  Local part of output data. Array of complex values. Refer to Distributing Data among Processes on how to allocate the array.

## Description

The DftiComputeBackwardDM function computes the backward FFT. Backward FFT is the transform using the factor `ei2π/n`.

Before you call the function, the valid descriptor, created by DftiCreateDescriptorDM, must be configured and committed using the DftiCommitDescriptorDM function.

The computation is carried out by calling the DftiComputeBackward function. So, the functions have very much in common, and details not explicitly mentioned below can be found in the description of DftiComputeBackward.

Local part of input data, as well as local part of the output data, is an appropriate sequence of complex values (each complex value consists of two real numbers: real part and imaginary part) that a particular process stores. See Distributing Data among Processes for details.

Refer to Configuration Settings for the list of configuration parameters that the descriptor passes to the function.

The configuration parameter `DFTI_PRECISION` determines the precision of input data, output data, and transform: a setting of `DFTI_SINGLE` indicates single-precision floating-point data type and a setting of `DFTI_DOUBLE` indicates double-precision floating-point data type.

The configuration parameter `DFTI_PLACEMENT` informs the function whether the computation should be in-place. If the value of this parameter is `DFTI_INPLACE` (default), you must call the function with two parameters, otherwise you must supply three parameters. If `DFTI_PLACEMENT = DFTI_INPLACE` and three parameters are supplied, then the third parameter is ignored.

### Caution

Even in case of an out-of-place transform, local array of input data in_X may be changed. To save data, make its copy before calling DftiComputeBackwardDM.

In case of an in-place transform, DftiComputeBackwardDM dynamically allocates and deallocates a work buffer of the same size as the local input/output array requires.

### Note

You can specify your own workspace of the same size through the configuration parameter `CDFT_WORKSPACE` to avoid redundant memory allocation.

## Return Values

The function returns `DFTI_NO_ERROR` when completes successfully. If the function fails, it returns a value of another error class constant (for the list of constants, refer to Error Codes).

## Interface and Prototype

! Fortran Interface

INTERFACE DftiComputeBackwardDM

INTEGER(4) FUNCTION DftiComputeBackwardDM(h, in_X, out_X)

TYPE(DFTI_DESCRIPTOR_DM), POINTER :: h

COMPLEX(8), DIMENSION(*) :: in_x, out_X

END FUNCTION DftiComputeBackwardDM

INTEGER(4) FUNCTION DftiComputeBackwardDMi(h, in_out_X)

TYPE(DFTI_DESCRIPTOR_DM), POINTER :: h

COMPLEX(8), DIMENSION(*) :: in_out_X

END FUNCTION DftiComputeBackwardDMi

INTEGER(4) FUNCTION DftiComputeBackwardDMs(h, in_X, out_X)

TYPE(DFTI_DESCRIPTOR_DM), POINTER :: h

COMPLEX(4), DIMENSION(*) :: in_x, out_X

END FUNCTION DftiComputeBackwardDMs

INTEGER(4) FUNCTION DftiComputeBackwardDMis(h, in_out_X)

TYPE(DFTI_DESCRIPTOR_DM), POINTER :: h

COMPLEX(4), DIMENSION(*) :: in_out_X

END FUNCTION DftiComputeBackwardDMis

END INTERFACE

/* C/C++ prototype */

long DftiComputeBackwardDM(DFTI_DESCRIPTOR_DM_HANDLE handle, void *in_X,...);

Parent topic: FFT Computation Functions