@@ -123,10 +123,35 @@ function testtypedthreedgrid(dev::Device, nx, Lx, ny=nx, Ly=Lx, nz=nx, Lz=Lx; T=
123
123
typeof (gr. dx)== T && typeof (gr. dy)== T && typeof (gr. dz)== T && typeof (gr. x[1 ])== T && typeof (gr. y[1 ])== T && typeof (gr. z[1 ])== T && typeof (gr. Lx)== T && typeof (gr. Ly)== T && typeof (gr. Lz)== T && eltype (gr) == T
124
124
end
125
125
126
- function testmakefilter (dev:: Device , g:: AbstractGrid{T} ) where T
126
+ function testmakefilter (dev:: Device , g:: AbstractGrid )
127
+ T = eltype (g)
127
128
filter = FourierFlows. makefilter (g)
128
129
G = typeof (g)
129
130
nofilter = G<: OneDGrid ? filter[@. g. kr* g. dx/ π < 0.65 ] : ( G<: TwoDGrid ? filter[@. sqrt ((g. kr* g. dx/ π)^ 2 + (g. l* g. dy/ π)^ 2 ) < 0.65 ] : filter[@. sqrt ((g. kr* g. dx/ π)^ 2 + (g. l* g. dy/ π)^ 2 + (g. m* g. dz/ π)^ 2 ) < 0.65 ] )
130
131
fullfilter = G<: OneDGrid ? filter[@. g. kr* g. dx/ π > 0.999 ] : ( G<: TwoDGrid ? filter[@. sqrt ((g. kr* g. dx/ π)^ 2 + (g. l* g. dy/ π)^ 2 ) > 0.999 ] : filter[@. sqrt ((g. kr* g. dx/ π)^ 2 + (g. l* g. dy/ π)^ 2 + (g. m* g. dz/ π)^ 2 ) > 0.999 ] )
131
132
nofilter== zeros (dev, T, size (nofilter)) .+ 1 && isapprox (fullfilter, zeros (dev, T, size (fullfilter)), atol= 1e-12 )
132
133
end
134
+
135
+ function test_plan_flows_fftrfft (:: CPU ; T= Float64)
136
+ A = ArrayType (CPU ())
137
+ return ( typeof (FourierFlows. plan_flows_fft (A (rand (Complex{T}, (4 ,))))) == FFTW. cFFTWPlan{Complex{T},- 1 ,false ,1 } &&
138
+ typeof (FourierFlows. plan_flows_fft (A (rand (Complex{T}, (4 , 6 ))))) == FFTW. cFFTWPlan{Complex{T},- 1 ,false ,2 } &&
139
+ typeof (FourierFlows. plan_flows_fft (A (rand (Complex{T}, (4 , 6 , 8 ))))) == FFTW. cFFTWPlan{Complex{T},- 1 ,false ,3 } &&
140
+ FourierFlows. plan_flows_fft (A (rand (Complex{T}, (4 , 6 , 8 ))), [1 , 2 ]). region == [1 , 2 ] &&
141
+ typeof (FourierFlows. plan_flows_rfft (A (rand (T, (4 ,))))) == FFTW. rFFTWPlan{T,- 1 ,false ,1 } &&
142
+ typeof (FourierFlows. plan_flows_rfft (A (rand (T, (4 , 6 ))))) == FFTW. rFFTWPlan{T,- 1 ,false ,2 } &&
143
+ typeof (FourierFlows. plan_flows_rfft (A (rand (T, (4 , 6 , 8 ))))) == FFTW. rFFTWPlan{T,- 1 ,false ,3 } &&
144
+ FourierFlows. plan_flows_rfft (A (rand (T, (4 , 6 , 8 ))), [1 , 2 ]). region == [1 , 2 ] )
145
+ end
146
+
147
+ function test_plan_flows_fftrfft (:: GPU ; T= Float64)
148
+ A = ArrayType (GPU ())
149
+ return ( typeof (FourierFlows. plan_flows_fft (A (rand (Complex{T}, (4 ,))))) == CuArrays. CUFFT. cCuFFTPlan{Complex{T},- 1 ,false ,1 } &&
150
+ typeof (FourierFlows. plan_flows_fft (A (rand (Complex{T}, (4 , 6 ))))) == CuArrays. CUFFT. cCuFFTPlan{Complex{T},- 1 ,false ,2 } &&
151
+ typeof (FourierFlows. plan_flows_fft (A (rand (Complex{T}, (4 , 6 , 8 ))))) == CuArrays. CUFFT. cCuFFTPlan{Complex{T},- 1 ,false ,3 } &&
152
+ FourierFlows. plan_flows_fft (A (rand (Complex{T}, (4 , 6 , 8 ))), [1 , 2 ]). region == [1 , 2 ] &&
153
+ typeof (FourierFlows. plan_flows_rfft (A (rand (T, (4 ,))))) == CuArrays. CUFFT. rCuFFTPlan{T,- 1 ,false ,1 } &&
154
+ typeof (FourierFlows. plan_flows_rfft (A (rand (T, (4 , 6 ))))) == CuArrays. CUFFT. rCuFFTPlan{T,- 1 ,false ,2 } &&
155
+ typeof (FourierFlows. plan_flows_rfft (A (rand (T, (4 , 6 , 8 ))))) == CuArrays. CUFFT. rCuFFTPlan{T,- 1 ,false ,3 } &&
156
+ FourierFlows. plan_flows_rfft (A (rand (T, (4 , 6 , 8 ))), [1 , 2 ]). region == [1 , 2 ] )
157
+ end
0 commit comments