These subroutines compute the mixed-radix three-dimensional complex conjugate even discrete Fourier transform of real data:
for:
where:
and where:
X, scale | Y | Subroutine |
Short-precision real | Short-precision complex | PSRCFT3 |
Long-precision real | Long-precision complex | PDRCFT3 |
Fortran | CALL PSRCFT3 | PDRCFT3 (x, y, n1, n2, n3, isign, scale, icontxt, ip) |
C and C++ | psrcft3 | pdrcft3 (x, y, n1, n2, n3, isign, scale, icontxt, ip); |
Scope: local
Specified as: an array of (at least) length ldx1 × ldx2 × LOCq(n3), containing numbers of the data type indicated in Table 113. This array must be aligned on a doubleword boundary.
Scope: global
Specified as: a fullword integer; n1 <= 37748736 and must be one of the values listed in Figure 9.
Scope: global
Specified as: a fullword integer; n2 <= 37748736 and must be one of the values listed in Figure 9.
Scope: global
Specified as: a fullword integer; n3 <= 37748736 and must be one of the values listed in Figure 9.
If isign = positive value, Isign = + (transforming time to frequency).
If isign = negative value, Isign = - (transforming frequency to time).
Scope: global
Specified as: a fullword integer; where isign > 0 or isign < 0.
Scope: global
Specified as: a number of the data type indicated in Table 113, where scale > 0.0 or scale < 0.0.
Scope: global
Specified as: the fullword integer that was returned by a prior call to BLACS_GRIDINIT or BLACS_GRIDMAP.
If IP(1) = 0, then the following default values are used:
The remaining parameters of the array IP are ignored.
If IP(1) <> 0, then you set the remaining values of ip to indicate values for the leading dimensions.
If IP(20) = 0, then ldx1 = n1.
If IP(20) <> 0, then ldx1 is this value of IP(20).
If IP(21) = 0, then ldx2 = n2.
If IP(21) <> 0, then ldx2 is this value of IP(21).
If IP(22) = 0, then ldy1 = n3.
If IP(22) <> 0, then ldy1 is this value of IP(22).
If IP(23) = 0, then ldy2 = n2.
If IP(23) <> 0, then ldy2 is this value of IP(23).
Scope: global
Specified as: a one-dimensional array of (at least) length 40, containing fullword integers, where:
If IP(1) = 0, the local array Y has dimensions n3 × n2 × LOCq(n1/2).
If IP(1) <> 0, the local array Y has dimensions ldy1 × ldy2 × LOCq(n1/2).
Scope: local
Returned as: an ldy1 × ldy2 × LOCq(n1/2) array, containing the numbers of the data type indicated in Table 113. This array must be aligned on a doubleword boundary.
In general, distributing your data evenly provides the best work load balance among the processes and allows the use of the most efficient collective communication. However, for your specific problem size and number of processes available, experimentation is necessary to achieve optimal performance.
None
This example shows how to compute a three-dimensional transform. The data is block-plane distributed over a 1 × 2 process grid. The arrays are declared as follows:
REAL*8 X(0:8,0:3,0:1) COMPLEX*16 Y(0:4,0:3,0) INTEGER*4 IP(40) REAL*8 SCALE
ORDER = 'R' NPROW = 1 NPCOL = 2 CALL BLACS_GET(0, 0, ICONTXT) CALL BLACS_GRIDINIT(ICONTXT, ORDER, NPROW, NPCOL) CALL BLACS_GRIDINFO(ICONTXT, NPROW, NPCOL, MYROW, MYCOL) IP(1) = 1 IP(20) = 9 IP(21) = 4 IP(22) = 5 IP(23) = 4 X Y N1 N2 N3 ISIGN SCALE ICONTXT IP | | | | | | | | | CALL PDRCFT3( X , Y , 4 , 4 , 4 , 1 , 1.0D0 , ICONTXT , IP)
Global matrix X:
Plane 0: Plane 1: ---------------------------------------------------- B,D 0 ---------------------------------------------------- * * | 1.0 0.0 0.0 0.0 | 0.0 0.0 0.0 0.0 | | 0.0 0.0 0.0 0.0 | 0.0 0.0 0.0 0.0 | | 0.0 0.0 0.0 0.0 | 0.0 0.0 0.0 0.0 | | 0.0 0.0 0.0 0.0 | 0.0 0.0 0.0 0.0 | 0 | . . . . | . . . . | | . . . . | . . . . | | . . . . | . . . . | | . . . . | . . . . | | . . . . | . . . . | * * Plane 2: Plane 3: ---------------------------------------------------- B,D 1 ---------------------------------------------------- * * | 0.0 0.0 0.0 0.0 | 0.0 0.0 0.0 0.0 | | 0.0 0.0 0.0 0.0 | 0.0 0.0 0.0 0.0 | | 0.0 0.0 0.0 0.0 | 0.0 0.0 0.0 0.0 | | 0.0 0.0 0.0 0.0 | 0.0 0.0 0.0 0.0 | 0 | . . . . | . . . . | | . . . . | . . . . | | . . . . | . . . . | | . . . . | . . . . | | . . . . | . . . . | * *
The following is the 1 × 2 process grid:
B,D | 0 | 1 -----| ------- |----- 0 | P00 | P01
Local arrays for X:
p,q | 0 | 1 -----|------------------------------------------|------------------------------------------ | 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 | 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 | 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 | 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 | 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 | 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 | 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 | 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 | . . . . . . . . | . . . . . . . . | . . . . . . . . | . . . . . . . . | . . . . . . . . | . . . . . . . . | . . . . . . . . | . . . . . . . . | . . . . . . . . | . . . . . . . .
The following global matrix Y is returned in transposed form and stored in FFT-packed storage mode:
Plane 0:
B,D 0 * * | (1.0,1.0) (1.0,0.0) (1.0,1.0) (1.0,0.0) | | (1.0,0.0) (1.0,0.0) (1.0,0.0) (1.0,0.0) | 0 | (1.0,1.0) (1.0,0.0) (1.0,1.0) (1.0,0.0) | | (1.0,0.0) (1.0,0.0) (1.0,0.0) (1.0,0.0) | | . . . . | * *
Plane 1:
B,D 1 * * | (1.0,0.0) (1.0,0.0) (1.0,0.0) (1.0,0.0) | | (1.0,0.0) (1.0,0.0) (1.0,0.0) (1.0,0.0) | 0 | (1.0,0.0) (1.0,0.0) (1.0,0.0) (1.0,0.0) | | (1.0,0.0) (1.0,0.0) (1.0,0.0) (1.0,0.0) | | . . . . | * *
The following is the 1 × 2 process grid:
B,D | 0 | 1 -----| ------- |----- 0 | P00 | P01
The following local arrays for Y are returned in transposed form and stored in FFT-packed storage mode:
p,q | 0 | 1 -----|----------------------------------------------|---------------------------------------------- | (1.0,1.0) (1.0,0.0) (1.0,1.0) (1.0,0.0) | (1.0,0.0) (1.0,0.0) (1.0,0.0) (1.0,0.0) | (1.0,0.0) (1.0,0.0) (1.0,0.0) (1.0,0.0) | (1.0,0.0) (1.0,0.0) (1.0,0.0) (1.0,0.0) 0 | (1.0,1.0) (1.0,0.0) (1.0,1.0) (1.0,0.0) | (1.0,0.0) (1.0,0.0) (1.0,0.0) (1.0,0.0) | (1.0,0.0) (1.0,0.0) (1.0,0.0) (1.0,0.0) | (1.0,0.0) (1.0,0.0) (1.0,0.0) (1.0,0.0) | . . . . | . . . .