@@ -31,19 +31,20 @@ Constructs a OneDGrid object with size `Lx`, resolution `nx`, and leftmost
31
31
position `x0`. FFT plans are generated for `nthreads` CPUs using
32
32
FFTW flag `effort`.
33
33
"""
34
- struct OneDGrid{T<: AbstractFloat , Ta <: AbstractArray , Tfft, Trfft} <: AbstractGrid{T, Ta }
34
+ struct OneDGrid{T<: AbstractFloat , Tk, Tx, Tfft, Trfft} <: AbstractGrid{T, Tk }
35
35
nx :: Int
36
36
nk :: Int
37
37
nkr :: Int
38
38
39
39
dx :: T
40
40
Lx :: T
41
41
42
- x :: Ta
43
- k :: Ta
44
- kr :: Ta
45
- invksq :: Ta
46
- invkrsq :: Ta
42
+ x :: Tx
43
+
44
+ k :: Tk
45
+ kr :: Tk
46
+ invksq :: Tk
47
+ invkrsq :: Tk
47
48
48
49
fftplan :: Tfft
49
50
rfftplan :: Trfft
@@ -58,15 +59,15 @@ function OneDGrid(nx, Lx; x0=-Lx/2, nthreads=Sys.CPU_THREADS, effort=FFTW.MEASUR
58
59
59
60
dx = Lx/ nx
60
61
61
- nk = nx
62
+ nk = nx
62
63
nkr = Int (nx/ 2 + 1 )
63
64
64
65
# Physical grid
65
- x = ArrayType {T} ( range (x0 , step= dx , length= nx) )
66
+ x = range (T (x0) , step= T (dx) , length= nx)
66
67
67
68
# Wavenubmer grid
68
- k = ArrayType {T} (fftfreq (nx, 2 π/ Lx* nx))
69
- kr = ArrayType {T} (rfftfreq (nx, 2 π/ Lx* nx))
69
+ k = ArrayType {T} ( fftfreq (nx, 2 π/ Lx* nx))
70
+ kr = ArrayType {T} (rfftfreq (nx, 2 π/ Lx* nx))
70
71
71
72
invksq = @. 1 / k^ 2
72
73
invkrsq = @. 1 / kr^ 2
@@ -79,11 +80,12 @@ function OneDGrid(nx, Lx; x0=-Lx/2, nthreads=Sys.CPU_THREADS, effort=FFTW.MEASUR
79
80
80
81
kalias, kralias = getaliasedwavenumbers (nk, nkr, dealias)
81
82
82
- Ta = typeof (x)
83
+ Tx = typeof (x)
84
+ Tk = typeof (k)
83
85
Tfft = typeof (fftplan)
84
86
Trfft = typeof (rfftplan)
85
87
86
- return OneDGrid {T, Ta , Tfft, Trfft} (nx, nk, nkr, dx, Lx, x, k, kr,
88
+ return OneDGrid {T, Tk, Tx , Tfft, Trfft} (nx, nk, nkr, dx, Lx, x, k, kr,
87
89
invksq, invkrsq, fftplan, rfftplan, kalias, kralias)
88
90
end
89
91
92
94
93
95
Constructs a TwoDGrid object.
94
96
"""
95
- struct TwoDGrid{T<: AbstractFloat , Ta <: AbstractArray , Tfft, Trfft} <: AbstractGrid{T, Ta }
97
+ struct TwoDGrid{T<: AbstractFloat , Tk, Tx, Tfft, Trfft} <: AbstractGrid{T, Tk }
96
98
nx :: Int
97
99
ny :: Int
98
100
nk :: Int
@@ -104,15 +106,16 @@ struct TwoDGrid{T<:AbstractFloat, Ta<:AbstractArray, Tfft, Trfft} <: AbstractGri
104
106
Lx :: T
105
107
Ly :: T
106
108
107
- x :: Ta
108
- y :: Ta
109
- k :: Ta
110
- l :: Ta
111
- kr :: Ta
112
- Ksq :: Ta
113
- invKsq :: Ta
114
- Krsq :: Ta
115
- invKrsq :: Ta
109
+ x :: Tx
110
+ y :: Tx
111
+
112
+ k :: Tk
113
+ l :: Tk
114
+ kr :: Tk
115
+ Ksq :: Tk
116
+ invKsq :: Tk
117
+ Krsq :: Tk
118
+ invKrsq :: Tk
116
119
117
120
fftplan :: Tfft
118
121
rfftplan :: Trfft
@@ -129,18 +132,18 @@ function TwoDGrid(nx, Lx, ny=nx, Ly=Lx; x0=-Lx/2, y0=-Ly/2, nthreads=Sys.CPU_THR
129
132
dx = Lx/ nx
130
133
dy = Ly/ ny
131
134
132
- nk = nx
133
- nl = ny
135
+ nk = nx
136
+ nl = ny
134
137
nkr = Int (nx/ 2 + 1 )
135
138
136
139
# Physical grid
137
- x = ArrayType {T} ( reshape ( range (x0 , step= dx , length= nx), (nx, 1 )) )
138
- y = ArrayType {T} ( reshape ( range (y0 , step= dy , length= ny), ( 1 , ny)) )
140
+ x = range (T (x0) , step= T (dx) , length= nx)
141
+ y = range (T (y0) , step= T (dy) , length= ny)
139
142
140
143
# Wavenubmer grid
141
- k = ArrayType {T} (reshape (fftfreq (nx, 2 π/ Lx* nx), (nk, 1 )))
142
- l = ArrayType {T} (reshape (fftfreq (ny, 2 π/ Ly* ny), (1 , nl)))
143
- kr = ArrayType {T} (reshape (rfftfreq (nx, 2 π/ Lx* nx), (nkr, 1 )))
144
+ k = ArrayType {T} (reshape ( fftfreq (nx, 2 π/ Lx* nx), (nk, 1 )))
145
+ l = ArrayType {T} (reshape ( fftfreq (ny, 2 π/ Ly* ny), (1 , nl)))
146
+ kr = ArrayType {T} (reshape (rfftfreq (nx, 2 π/ Lx* nx), (nkr, 1 )))
144
147
145
148
Ksq = @. k^ 2 + l^ 2
146
149
invKsq = @. 1 / Ksq
@@ -159,11 +162,12 @@ function TwoDGrid(nx, Lx, ny=nx, Ly=Lx; x0=-Lx/2, y0=-Ly/2, nthreads=Sys.CPU_THR
159
162
kalias, kralias = getaliasedwavenumbers (nk, nkr, dealias)
160
163
lalias, _ = getaliasedwavenumbers (nl, nl, dealias)
161
164
162
- Ta = typeof (x)
165
+ Tx = typeof (x)
166
+ Tk = typeof (k)
163
167
Tfft = typeof (fftplan)
164
168
Trfft = typeof (rfftplan)
165
169
166
- return TwoDGrid {T, Ta , Tfft, Trfft} (nx, ny, nk, nl, nkr, dx, dy, Lx, Ly, x, y, k, l, kr, Ksq, invKsq, Krsq, invKrsq,
170
+ return TwoDGrid {T, Tk, Tx , Tfft, Trfft} (nx, ny, nk, nl, nkr, dx, dy, Lx, Ly, x, y, k, l, kr, Ksq, invKsq, Krsq, invKrsq,
167
171
fftplan, rfftplan, kalias, kralias, lalias)
168
172
end
169
173
172
176
173
177
Constructs a ThreeDGrid object.
174
178
"""
175
- struct ThreeDGrid{T<: AbstractFloat , Ta <: AbstractArray , Tfft, Trfft} <: AbstractGrid{T, Ta }
179
+ struct ThreeDGrid{T<: AbstractFloat , Tk, Tx, Tfft, Trfft} <: AbstractGrid{T, Tk }
176
180
nx :: Int
177
181
ny :: Int
178
182
nz :: Int
@@ -188,17 +192,18 @@ struct ThreeDGrid{T<:AbstractFloat, Ta<:AbstractArray, Tfft, Trfft} <: AbstractG
188
192
Ly :: T
189
193
Lz :: T
190
194
191
- x :: Ta
192
- y :: Ta
193
- z :: Ta
194
- k :: Ta
195
- l :: Ta
196
- m :: Ta
197
- kr :: Ta
198
- Ksq :: Ta
199
- invKsq :: Ta
200
- Krsq :: Ta
201
- invKrsq :: Ta
195
+ x :: Tx
196
+ y :: Tx
197
+ z :: Tx
198
+
199
+ k :: Tk
200
+ l :: Tk
201
+ m :: Tk
202
+ kr :: Tk
203
+ Ksq :: Tk
204
+ invKsq :: Tk
205
+ Krsq :: Tk
206
+ invKrsq :: Tk
202
207
203
208
fftplan :: Tfft
204
209
rfftplan :: Trfft
@@ -223,14 +228,14 @@ function ThreeDGrid(nx, Lx, ny=nx, Ly=Lx, nz=nx, Lz=Lx; x0=-Lx/2, y0=-Ly/2, z0=-
223
228
nkr = Int (nx/ 2 + 1 )
224
229
225
230
# Physical grid
226
- x = ArrayType {T} ( reshape ( range (x0 , step= dx , length= nx), (nx, 1 , 1 )) )
227
- y = ArrayType {T} ( reshape ( range (y0 , step= dy , length= ny), ( 1 , ny, 1 )) )
228
- z = ArrayType {T} ( reshape ( range (z0 , step= dz , length= nz), ( 1 , 1 , nz)) )
231
+ x = range (T (x0) , step= T (dx) , length= nx)
232
+ y = range (T (y0) , step= T (dy) , length= ny)
233
+ z = range (T (z0) , step= T (dz) , length= nz)
229
234
230
235
# Wavenubmer grid
231
- k = ArrayType {T} (reshape (fftfreq (nx, 2 π/ Lx* nx), (nk, 1 , 1 )))
232
- l = ArrayType {T} (reshape (fftfreq (ny, 2 π/ Ly* ny), (1 , nl, 1 )))
233
- m = ArrayType {T} (reshape (fftfreq (nz, 2 π/ Lz* nz), (1 , 1 , nm)))
236
+ k = ArrayType {T} (reshape ( fftfreq (nx, 2 π/ Lx* nx), (nk, 1 , 1 )))
237
+ l = ArrayType {T} (reshape ( fftfreq (ny, 2 π/ Ly* ny), (1 , nl, 1 )))
238
+ m = ArrayType {T} (reshape ( fftfreq (nz, 2 π/ Lz* nz), (1 , 1 , nm)))
234
239
kr = ArrayType {T} (reshape (rfftfreq (nx, 2 π/ Lx* nx), (nkr, 1 , 1 )))
235
240
236
241
Ksq = @. k^ 2 + l^ 2 + m^ 2
@@ -250,11 +255,12 @@ function ThreeDGrid(nx, Lx, ny=nx, Ly=Lx, nz=nx, Lz=Lx; x0=-Lx/2, y0=-Ly/2, z0=-
250
255
kalias, kralias = getaliasedwavenumbers (nk, nkr, dealias)
251
256
lalias, malias = getaliasedwavenumbers (nl, nm, dealias)
252
257
253
- Ta = typeof (x)
258
+ Tx = typeof (x)
259
+ Tk = typeof (k)
254
260
Tfft = typeof (fftplan)
255
261
Trfft = typeof (rfftplan)
256
262
257
- return ThreeDGrid {T, Ta , Tfft, Trfft} (nx, ny, nz, nk, nl, nm, nkr, dx, dy, dz, Lx, Ly, Lz,
263
+ return ThreeDGrid {T, Tk, Tx , Tfft, Trfft} (nx, ny, nz, nk, nl, nm, nkr, dx, dy, dz, Lx, Ly, Lz,
258
264
x, y, z, k, l, m, kr, Ksq, invKsq, Krsq, invKrsq, fftplan, rfftplan,
259
265
kalias, kralias, lalias, malias)
260
266
end
@@ -268,20 +274,20 @@ TwoDGrid(dev::CPU, args...; kwargs...) = TwoDGrid(args...; ArrayType=Array, kwar
268
274
ThreeDGrid (dev:: CPU , args... ; kwargs... ) = ThreeDGrid (args... ; ArrayType= Array, kwargs... )
269
275
270
276
"""
271
- gridpoints(g )
277
+ gridpoints(grid )
272
278
273
- Returns the collocation points of the grid `g` in 2D or 3D arrays `X, Y (and Z)` .
279
+ Returns the collocation points of the ` grid` in 2D or 3D arrays `X, Y` (and `Z`) .
274
280
"""
275
- function gridpoints (g :: TwoDGrid{T, A} ) where {T, A}
276
- X = [ g . x[i] for i= 1 : g . nx, j = 1 : g . ny]
277
- Y = [ g . y[j ] for i= 1 : g . nx, j = 1 : g . ny]
281
+ function gridpoints (grid :: TwoDGrid{T, A} ) where {T, A}
282
+ X = [ grid . x[i₁ ] for i₁ = 1 : grid . nx, i₂ = 1 : grid . ny ]
283
+ Y = [ grid . y[i₂ ] for i₁ = 1 : grid . nx, i₂ = 1 : grid . ny ]
278
284
return A (X), A (Y)
279
285
end
280
286
281
- function gridpoints (g :: ThreeDGrid{T, A} ) where {T, A}
282
- X = [ g . x[i] for i= 1 : g . nx, j = 1 : g . ny, k = 1 : g . nz]
283
- Y = [ g . y[j ] for i= 1 : g . nx, j = 1 : g . ny, k = 1 : g . nz]
284
- Z = [ g . z[k ] for i= 1 : g . nx, j = 1 : g . ny, k = 1 : g . nz]
287
+ function gridpoints (grid :: ThreeDGrid{T, A} ) where {T, A}
288
+ X = [ grid . x[i₁ ] for i₁ = 1 : grid . nx, i₂ = 1 : grid . ny, i₃ = 1 : grid . nz ]
289
+ Y = [ grid . y[i₂ ] for i₁ = 1 : grid . nx, i₂ = 1 : grid . ny, i₃ = 1 : grid . nz ]
290
+ Z = [ grid . z[i₃ ] for i₁ = 1 : grid . nx, i₂ = 1 : grid . ny, i₃ = 1 : grid . nz ]
285
291
return A (X), A (Y), A (Z)
286
292
end
287
293
0 commit comments