Line data Source code
1 : #ifdef HAVE_DFTI
2 : !Local variables-------------------------------
3 : !scalars
4 : integer :: status,arr(4)
5 : type(DFTI_DESCRIPTOR),pointer :: Desc1
6 :
7 : ! *************************************************************************
8 :
9 1869348 : status = DftiCreateDescriptor(Desc1, DEV_DFTI_PRECISION, DFTI_COMPLEX, 3, (/nx ,ny ,nz/) )
10 467337 : DFTI_CHECK(status)
11 :
12 467337 : status = DftiSetValue(Desc1, DFTI_NUMBER_OF_TRANSFORMS, ndat)
13 467337 : status = DftiSetValue(Desc1, DFTI_INPUT_DISTANCE, ldx*ldy*ldz)
14 467337 : arr(1) = 0
15 467337 : arr(2) = 1
16 467337 : arr(3) = ldx
17 467337 : arr(4) = ldx*ldy
18 467337 : status = DftiSetValue(Desc1, DFTI_INPUT_STRIDES, arr )
19 467337 : status = DftiSetValue(Desc1, DFTI_OUTPUT_DISTANCE, ldx*ldy*ldz)
20 467337 : status = DftiSetValue(Desc1, DFTI_OUTPUT_STRIDES, arr )
21 467337 : status = DftiSetValue(Desc1, DFTI_PLACEMENT, DFTI_NOT_INPLACE)
22 :
23 467337 : if (isign == -1 .and. iscale /= 0) then
24 232556 : status = DftiSetValue(Desc1, DFTI_FORWARD_SCALE, one/DBLE(nx*ny*nz) )
25 : end if
26 :
27 467337 : status = DftiCommitDescriptor(Desc1)
28 467337 : DFTI_CHECK(status)
29 :
30 467337 : if (isign==-1) then
31 232556 : status = DftiComputeForward(Desc1, ff, gg)
32 234781 : else if (isign==+1) then
33 234781 : status = DftiComputeBackward(Desc1, ff, gg)
34 : else
35 0 : ABI_ERROR("Wrong isign")
36 : end if
37 467337 : DFTI_CHECK(status)
38 :
39 467337 : status = DftiFreeDescriptor(Desc1)
40 467337 : DFTI_CHECK(status)
41 :
42 : #else
43 : ABI_ERROR("FFT_DFTI support not activated")
44 : ABI_UNUSED((/nx,ny,nz,ldx,ldy,ldz,ndat,iscale,isign/))
45 : ABI_UNUSED(ff)
46 : ABI_UNUSED(gg)
47 : #endif
|