isce3 0.25.0
Loading...
Searching...
No Matches
FFT.icc
1#ifndef ISCE_CUDA_FFT_FFT_ICC
2#error "FFT.icc is an implementation detail of FFT.h"
3#endif
4
5#include <isce3/fft/detail/ConfigureFFTLayout.h>
6
7namespace isce3 { namespace cuda { namespace fft {
8
9template<typename T>
10inline
11FwdFFTPlan<T> planfft1d(thrust::complex<T> * out, thrust::complex<T> * in, int n)
12{
13 return FwdFFTPlan<T>(out, in, n);
14}
15
16template<typename T>
17inline
18FwdFFTPlan<T> planfft1d(thrust::complex<T> * out, T * in, int n)
19{
20 return FwdFFTPlan<T>(out, in, n);
21}
22
23template<typename T>
24inline
25FwdFFTPlan<T> planfft1d(thrust::complex<T> * out, thrust::complex<T> * in, const int (&dims)[2], int axis)
26{
27 int n, stride, dist, batch;
28 isce3::fft::detail::configureFFTLayout(&n, &stride, &dist, &batch, dims, axis);
29
30 return FwdFFTPlan<T>(out, in, n, n, stride, dist, batch);
31}
32
33template<typename T>
34inline
35FwdFFTPlan<T> planfft1d(thrust::complex<T> * out, T * in, const int (&dims)[2], int axis)
36{
37 int n, stride, dist, batch;
38 isce3::fft::detail::configureFFTLayout(&n, &stride, &dist, &batch, dims, axis);
39
40 return FwdFFTPlan<T>(out, in, n, n, stride, dist, batch);
41}
42
43template<typename T>
44inline
45FwdFFTPlan<T> planfft2d(thrust::complex<T> * out, thrust::complex<T> * in, const int (&dims)[2])
46{
47 return FwdFFTPlan<T>(out, in, dims);
48}
49
50template<typename T>
51inline
52FwdFFTPlan<T> planfft2d(thrust::complex<T> * out, T * in, const int (&dims)[2])
53{
54 return FwdFFTPlan<T>(out, in, dims);
55}
56
57template<typename T>
58inline
59InvFFTPlan<T> planifft1d(thrust::complex<T> * out, thrust::complex<T> * in, int n)
60{
61 return InvFFTPlan<T>(out, in, n);
62}
63
64template<typename T>
65inline
66InvFFTPlan<T> planifft1d(T * out, thrust::complex<T> * in, int n)
67{
68 return InvFFTPlan<T>(out, in, n);
69}
70
71template<typename T>
72inline
73InvFFTPlan<T> planifft1d(thrust::complex<T> * out, thrust::complex<T> * in, const int (&dims)[2], int axis)
74{
75 int n, stride, dist, batch;
76 isce3::fft::detail::configureFFTLayout(&n, &stride, &dist, &batch, dims, axis);
77
78 return InvFFTPlan<T>(out, in, n, n, stride, dist, batch);
79}
80
81template<typename T>
82inline
83InvFFTPlan<T> planifft1d(T * out, thrust::complex<T> * in, const int (&dims)[2], int axis)
84{
85 int n, stride, dist, batch;
86 isce3::fft::detail::configureFFTLayout(&n, &stride, &dist, &batch, dims, axis);
87
88 return InvFFTPlan<T>(out, in, n, n, stride, dist, batch);
89}
90
91template<typename T>
92inline
93InvFFTPlan<T> planifft2d(thrust::complex<T> * out, thrust::complex<T> * in, const int (&dims)[2])
94{
95 return InvFFTPlan<T>(out, in, dims);
96}
97
98template<typename T>
99inline
100InvFFTPlan<T> planifft2d(T * out, thrust::complex<T> * in, const int (&dims)[2])
101{
102 return InvFFTPlan<T>(out, in, dims);
103}
104
105template<typename T>
106inline
107void fft1d(thrust::complex<T> * out, thrust::complex<T> * in, int n)
108{
109 FwdFFTPlan<T> plan = planfft1d(out, in, n);
110 plan.execute();
111}
112
113template<typename T>
114inline
115void fft1d(thrust::complex<T> * out, T * in, int n)
116{
117 FwdFFTPlan<T> plan = planfft1d(out, in, n);
118 plan.execute();
119}
120
121template<typename T>
122inline
123void fft1d(thrust::complex<T> * out, thrust::complex<T> * in, const int (&dims)[2], int axis)
124{
125 FwdFFTPlan<T> plan = planfft1d(out, in, dims, axis);
126 plan.execute();
127}
128
129template<typename T>
130inline
131void fft1d(thrust::complex<T> * out, T * in, const int (&dims)[2], int axis)
132{
133 FwdFFTPlan<T> plan = planfft1d(out, in, dims, axis);
134 plan.execute();
135}
136
137template<typename T>
138inline
139void fft2d(thrust::complex<T> * out, thrust::complex<T> * in, const int (&dims)[2])
140{
141 FwdFFTPlan<T> plan = planfft2d(out, in, dims);
142 plan.execute();
143}
144
145template<typename T>
146inline
147void fft2d(thrust::complex<T> * out, T * in, const int (&dims)[2])
148{
149 FwdFFTPlan<T> plan = planfft2d(out, in, dims);
150 plan.execute();
151}
152
153template<typename T>
154inline
155void ifft1d(thrust::complex<T> * out, thrust::complex<T> * in, int n)
156{
157 InvFFTPlan<T> plan = planifft1d(out, in, n);
158 plan.execute();
159}
160
161template<typename T>
162inline
163void ifft1d(T * out, thrust::complex<T> * in, int n)
164{
165 InvFFTPlan<T> plan = planifft1d(out, in, n);
166 plan.execute();
167}
168
169template<typename T>
170inline
171void ifft1d(thrust::complex<T> * out, thrust::complex<T> * in, const int (&dims)[2], int axis)
172{
173 InvFFTPlan<T> plan = planifft1d(out, in, dims, axis);
174 plan.execute();
175}
176
177template<typename T>
178inline
179void ifft1d(T * out, thrust::complex<T> * in, const int (&dims)[2], int axis)
180{
181 InvFFTPlan<T> plan = planifft1d(out, in, dims, axis);
182 plan.execute();
183}
184
185template<typename T>
186inline
187void ifft2d(thrust::complex<T> * out, thrust::complex<T> * in, const int (&dims)[2])
188{
189 InvFFTPlan<T> plan = planifft2d(out, in, dims);
190 plan.execute();
191}
192
193template<typename T>
194inline
195void ifft2d(T * out, thrust::complex<T> * in, const int (&dims)[2])
196{
197 InvFFTPlan<T> plan = planifft2d(out, in, dims);
198 plan.execute();
199}
200
201}}}
RAII wrapper encapsulating cuFFT plan for forward FFT execution.
Definition FFTPlan.h:11
RAII wrapper encapsulating cuFFT plan for inverse FFT execution.
Definition FFTPlan.h:280
base interpolator is an abstract base class
Definition BinarySearchFunc.cpp:5

Generated for ISCE3.0 by doxygen 1.13.2.