MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_fftw.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
2!>
3!! @file
4!! @brief Contains module m_fftw
5
6# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
7# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
8# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
9# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
10# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
11# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
12# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
13# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
14
15# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
16# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
17# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
18
19# 15 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
20# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
21# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
22
23# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
24
25# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
26
27# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28
29# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
30
31# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
32
33# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
34
35# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
36
37# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
38! New line at end of file is required for FYPP
39# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
40# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
41# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
42# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
44# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
46# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
47
48# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
50# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51
52# 15 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55
56# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57
58# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
59
60# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
61
62# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
63
64# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
65
66# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
67
68# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
69
70# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
71! New line at end of file is required for FYPP
72# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
73
74# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
75# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
76# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
77# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
78# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
79
80# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
81
82# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
83
84# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
85
86# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
87
88# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
89
90# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
91
92# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
93
94# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
95
96# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
97
98# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
99
100# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
101
102# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
103
104# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
105
106# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107
108# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109
110# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111
112# 126 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113
114# 156 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
115
116# 197 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
117
118# 211 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
119
120# 236 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
121
122# 247 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
123
124# 249 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
125# 260 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 310 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128
129# 320 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130
131# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132
133# 339 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134
135# 356 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136
137# 366 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
138
139# 373 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
140
141# 379 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
142
143# 385 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
144
145# 391 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
146
147# 397 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
148
149# 403 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
150! New line at end of file is required for FYPP
151# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
152# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
153# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
154# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
155# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
156# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
157# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
158# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
159
160# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
161# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
162# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
163
164# 15 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
165# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
166# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
167
168# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
169
170# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
171
172# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
173
174# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
175
176# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
177
178# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
179
180# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
181
182# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
183! New line at end of file is required for FYPP
184# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
185
186# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
187
188# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
189
190# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
191
192# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
193
194# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
195
196# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
197
198# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
199
200# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
201
202# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
203
204# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
205
206# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
207
208# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
209
210# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
211
212# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
213
214# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
215
216# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
217
218# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
219
220# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221
222# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
223
224# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
225
226# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
227
228# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
229
230# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
231
232# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
233
234# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
235
236# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
237
238# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
239
240# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
241! New line at end of file is required for FYPP
242# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
243
244! GPU parallel region (scalar reductions, maxval/minval)
245# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
246
247! GPU parallel loop over threads (most common GPU macro)
248# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
249
250! Required closing for GPU_PARALLEL_LOOP
251# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
252
253! Mark routine for device compilation
254# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
255
256! Declare device-resident data
257# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
258
259! Inner loop within a GPU parallel region
260# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
261
262! Scoped GPU data region
263# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
264
265! Host code with device pointers (for MPI with GPU buffers)
266# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
267
268! Allocate device memory (unscoped)
269# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
270
271! Free device memory
272# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
273
274! Atomic operation on device
275# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
276
277! End atomic capture block
278# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
279
280! Copy data between host and device
281# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
282
283! Synchronization barrier
284# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
285
286! Import GPU library module (openacc or omp_lib)
287# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
288
289! Emit code only for AMD compiler
290# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
291
292! Emit code for non-Cray compilers
293# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
294
295! Emit code only for Cray compiler
296# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
297
298! Emit code for non-NVIDIA compilers
299# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
300
301# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
302# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
303! New line at end of file is required for FYPP
304# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
305
306# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
307
308! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
309! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
310! example see misc/nvidia_uvm/bind.sh.
311# 52 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
312
313! Allocate and create GPU device memory
314# 72 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
315
316! Free GPU device memory and deallocate
317# 80 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
318
319! Cray-specific GPU pointer setup for vector fields
320# 104 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
321
322! Cray-specific GPU pointer setup for scalar fields
323# 120 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
324
325! Cray-specific GPU pointer setup for acoustic source spatials
326# 145 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
327
328# 151 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
329
330# 158 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
331! New line at end of file is required for FYPP
332# 6 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp" 2
333
334!> @brief Forward and inverse FFT wrappers (FFTW/cuFFT/hipFFT) for azimuthal Fourier filtering in cylindrical geometries
335module m_fftw
336
337 use, intrinsic :: iso_c_binding
338
341 use m_mpi_proxy
342#if defined(MFC_GPU) && defined(__PGI)
343 use cufft
344#elif defined(MFC_GPU)
345 use hipfort
346 use hipfort_check
347 use hipfort_hipfft
348#endif
349
350 implicit none
351
353
354#if !defined(MFC_GPU)
355 include 'fftw3.f03'
356#endif
357
358 type(c_ptr) :: fwd_plan, bwd_plan
361 real(c_double), pointer :: data_real(:) !< Real data
362 complex(c_double_complex), pointer :: data_cmplx(:) !< Complex data in Fourier space
363 complex(c_double_complex), pointer :: data_fltr_cmplx(:) !< Filtered complex data in Fourier space
364#if defined(MFC_GPU)
365
366# 38 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
367#if defined(MFC_OpenACC)
368# 38 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
369!$acc declare create(real_size, cmplx_size, x_size, batch_size, Nfq, i2)
370# 38 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
371#elif defined(MFC_OpenMP)
372# 38 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
373!$omp declare target (real_size, cmplx_size, x_size, batch_size, Nfq, i2)
374# 38 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
375#endif
376
377 real(dp), allocatable, target :: data_real_gpu(:)
378 complex(dp), allocatable, target :: data_cmplx_gpu(:)
379 complex(dp), allocatable, target :: data_fltr_cmplx_gpu(:)
380
381# 43 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
382#if defined(MFC_OpenACC)
383# 43 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
384!$acc declare create(data_real_gpu, data_cmplx_gpu, data_fltr_cmplx_gpu)
385# 43 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
386#elif defined(MFC_OpenMP)
387# 43 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
388!$omp declare target (data_real_gpu, data_cmplx_gpu, data_fltr_cmplx_gpu)
389# 43 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
390#endif
391
392 !> @cond
393#if defined(__PGI)
394 integer :: fwd_plan_gpu, bwd_plan_gpu
395#else
396 !> @endcond
398 !> @cond
399#endif
400 !> @endcond
401
402 integer, allocatable :: gpu_fft_size(:), iembed(:), oembed(:)
403 integer :: istride, ostride, rank
404#endif
405
406contains
407
408 !> Initialize the FFTW module
409 impure subroutine s_initialize_fftw_module
410
411 integer :: ierr !< Generic flag used to identify and report GPU errors
412 ! Size of input array going into DFT
413
414 real_size = p + 1
415 ! Size of output array coming out of DFT
416 cmplx_size = (p + 1)/2 + 1
417
418 x_size = m + 1
419 batch_size = x_size*sys_size
420
421#if defined(MFC_GPU)
422 rank = 1; istride = 1; ostride = 1
423 allocate (gpu_fft_size(1:rank), iembed(1:rank), oembed(1:rank))
424
426 iembed(1) = real_size
427 oembed(1) = cmplx_size
428
429# 81 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
430#if defined(MFC_OpenACC)
431# 81 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
432!$acc enter data copyin(real_size, cmplx_size, x_size, sys_size, batch_size, Nfq)
433# 81 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
434#elif defined(MFC_OpenMP)
435# 81 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
436!$omp target enter data map(to:real_size, cmplx_size, x_size, sys_size, batch_size, Nfq)
437# 81 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
438#endif
439
440# 82 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
441#if defined(MFC_OpenACC)
442# 82 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
443!$acc update device(real_size, cmplx_size, x_size, sys_size, batch_size)
444# 82 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
445#elif defined(MFC_OpenMP)
446# 82 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
447!$omp target update to(real_size, cmplx_size, x_size, sys_size, batch_size)
448# 82 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
449#endif
450#else
451 ! Allocate input and output DFT data sizes
452 fftw_real_data = fftw_alloc_real(int(real_size, c_size_t))
453 fftw_cmplx_data = fftw_alloc_complex(int(cmplx_size, c_size_t))
454 fftw_fltr_cmplx_data = fftw_alloc_complex(int(cmplx_size, c_size_t))
455 ! Associate input and output data pointers with allocated memory
456 call c_f_pointer(fftw_real_data, data_real, [real_size])
457 call c_f_pointer(fftw_cmplx_data, data_cmplx, [cmplx_size])
459
460 ! Generate plans for forward and backward DFTs
461 fwd_plan = fftw_plan_dft_r2c_1d(real_size, data_real, data_cmplx, fftw_estimate)
462 bwd_plan = fftw_plan_dft_c2r_1d(real_size, data_fltr_cmplx, data_real, fftw_estimate)
463#endif
464
465#if defined(MFC_GPU)
466#ifdef MFC_DEBUG
467# 99 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
468 block
469# 99 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
470 use iso_fortran_env, only: output_unit
471# 99 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
472
473# 99 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
474 print *, 'm_fftw.fpp:99: ', '@:ALLOCATE(data_real_gpu(1:real_size*x_size*sys_size))'
475# 99 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
476
477# 99 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
478 call flush (output_unit)
479# 99 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
480 end block
481# 99 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
482#endif
483# 99 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
484 allocate (data_real_gpu(1:real_size*x_size*sys_size))
485# 99 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
486
487# 99 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
488
489# 99 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
490#if defined(MFC_OpenACC)
491# 99 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
492!$acc enter data create(data_real_gpu)
493# 99 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
494#elif defined(MFC_OpenMP)
495# 99 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
496!$omp target enter data map(always,alloc:data_real_gpu)
497# 99 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
498#endif
499#ifdef MFC_DEBUG
500# 100 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
501 block
502# 100 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
503 use iso_fortran_env, only: output_unit
504# 100 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
505
506# 100 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
507 print *, 'm_fftw.fpp:100: ', '@:ALLOCATE(data_cmplx_gpu(1:cmplx_size*x_size*sys_size))'
508# 100 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
509
510# 100 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
511 call flush (output_unit)
512# 100 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
513 end block
514# 100 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
515#endif
516# 100 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
517 allocate (data_cmplx_gpu(1:cmplx_size*x_size*sys_size))
518# 100 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
519
520# 100 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
521
522# 100 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
523#if defined(MFC_OpenACC)
524# 100 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
525!$acc enter data create(data_cmplx_gpu)
526# 100 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
527#elif defined(MFC_OpenMP)
528# 100 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
529!$omp target enter data map(always,alloc:data_cmplx_gpu)
530# 100 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
531#endif
532#ifdef MFC_DEBUG
533# 101 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
534 block
535# 101 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
536 use iso_fortran_env, only: output_unit
537# 101 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
538
539# 101 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
540 print *, 'm_fftw.fpp:101: ', '@:ALLOCATE(data_fltr_cmplx_gpu(1:cmplx_size*x_size*sys_size))'
541# 101 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
542
543# 101 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
544 call flush (output_unit)
545# 101 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
546 end block
547# 101 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
548#endif
549# 101 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
550 allocate (data_fltr_cmplx_gpu(1:cmplx_size*x_size*sys_size))
551# 101 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
552
553# 101 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
554
555# 101 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
556#if defined(MFC_OpenACC)
557# 101 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
558!$acc enter data create(data_fltr_cmplx_gpu)
559# 101 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
560#elif defined(MFC_OpenMP)
561# 101 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
562!$omp target enter data map(always,alloc:data_fltr_cmplx_gpu)
563# 101 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
564#endif
565
566#if defined(__PGI)
568 & cufft_d2z, batch_size)
570 & cufft_z2d, batch_size)
571#else
573 & hipfft_d2z, batch_size)
575 & hipfft_z2d, batch_size)
576#endif
577#endif
578
579 end subroutine s_initialize_fftw_module
580
581 !> Apply a Fourier low-pass filter in the azimuthal direction to remove high-frequency content
582 impure subroutine s_apply_fourier_filter(q_cons_vf)
583
584 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
585 integer :: i, j, k, l !< Generic loop iterators
586 integer :: ierr !< Generic flag used to identify and report GPU errors
587 ! Restrict filter to processors that have cells adjacent to axis
588
589 if (bc_y%beg >= 0) return
590#if defined(MFC_GPU)
591
592# 128 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
593
594# 128 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
595#if defined(MFC_OpenACC)
596# 128 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
597!$acc parallel loop collapse(3) gang vector default(present)
598# 128 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
599#elif defined(MFC_OpenMP)
600# 128 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
601
602# 128 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
603
604# 128 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
605
606# 128 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
607!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
608# 128 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
609#endif
610 do k = 1, sys_size
611 do j = 0, m
612 do l = 1, cmplx_size
613 data_fltr_cmplx_gpu(l + j*cmplx_size + (k - 1)*cmplx_size*x_size) = (0_dp, 0_dp)
614 end do
615 end do
616 end do
617
618# 136 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
619#if defined(MFC_OpenACC)
620# 136 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
621!$acc end parallel loop
622# 136 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
623#elif defined(MFC_OpenMP)
624# 136 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
625
626# 136 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
627!$omp end target teams loop
628# 136 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
629#endif
630
631
632# 138 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
633
634# 138 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
635#if defined(MFC_OpenACC)
636# 138 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
637!$acc parallel loop collapse(3) gang vector default(present)
638# 138 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
639#elif defined(MFC_OpenMP)
640# 138 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
641
642# 138 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
643
644# 138 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
645
646# 138 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
647!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
648# 138 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
649#endif
650 do k = 1, sys_size
651 do j = 0, m
652 do l = 0, p
653 data_real_gpu(l + j*real_size + 1 + (k - 1)*real_size*x_size) = q_cons_vf(k)%sf(j, 0, l)
654 end do
655 end do
656 end do
657
658# 146 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
659#if defined(MFC_OpenACC)
660# 146 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
661!$acc end parallel loop
662# 146 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
663#elif defined(MFC_OpenMP)
664# 146 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
665
666# 146 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
667!$omp end target teams loop
668# 146 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
669#endif
670
671
672# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
673#if defined(MFC_OpenACC)
674# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
675!$acc host_data use_device(data_real_gpu, data_cmplx_gpu, data_fltr_cmplx_gpu)
676# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
677#if defined(__PGI)
678# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
679 ierr = cufftexecd2z(fwd_plan_gpu, data_real_gpu, data_cmplx_gpu)
680# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
681#else
682# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
683 ierr = hipfftexecd2z(fwd_plan_gpu, data_real_gpu, data_cmplx_gpu)
684# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
685 call hipcheck(hipdevicesynchronize())
686# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
687#endif
688# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
689!$acc end host_data
690# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
691#elif defined(MFC_OpenMP)
692# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
693!$omp target data use_device_addr(data_real_gpu, data_cmplx_gpu, data_fltr_cmplx_gpu)
694# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
695#if defined(__PGI)
696# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
697 ierr = cufftexecd2z(fwd_plan_gpu, data_real_gpu, data_cmplx_gpu)
698# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
699#else
700# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
701 ierr = hipfftexecd2z(fwd_plan_gpu, data_real_gpu, data_cmplx_gpu)
702# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
703 call hipcheck(hipdevicesynchronize())
704# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
705#endif
706# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
707!$omp end target data
708# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
709#else
710# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
711#if defined(__PGI)
712# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
713 ierr = cufftexecd2z(fwd_plan_gpu, data_real_gpu, data_cmplx_gpu)
714# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
715#else
716# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
717 ierr = hipfftexecd2z(fwd_plan_gpu, data_real_gpu, data_cmplx_gpu)
718# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
719 call hipcheck(hipdevicesynchronize())
720# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
721#endif
722# 148 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
723#endif
724# 156 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
725 nfq = 3
726
727# 157 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
728#if defined(MFC_OpenACC)
729# 157 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
730!$acc update device(Nfq)
731# 157 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
732#elif defined(MFC_OpenMP)
733# 157 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
734!$omp target update to(Nfq)
735# 157 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
736#endif
737
738
739# 159 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
740
741# 159 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
742#if defined(MFC_OpenACC)
743# 159 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
744!$acc parallel loop collapse(3) gang vector default(present)
745# 159 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
746#elif defined(MFC_OpenMP)
747# 159 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
748
749# 159 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
750
751# 159 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
752
753# 159 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
754!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
755# 159 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
756#endif
757 do k = 1, sys_size
758 do j = 0, m
759 do l = 1, nfq
762 end do
763 end do
764 end do
765
766# 168 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
767#if defined(MFC_OpenACC)
768# 168 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
769!$acc end parallel loop
770# 168 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
771#elif defined(MFC_OpenMP)
772# 168 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
773
774# 168 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
775!$omp end target teams loop
776# 168 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
777#endif
778
779
780# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
781#if defined(MFC_OpenACC)
782# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
783!$acc host_data use_device(data_real_gpu, data_cmplx_gpu, data_fltr_cmplx_gpu)
784# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
785#if defined(__PGI)
786# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
787 ierr = cufftexecz2d(bwd_plan_gpu, data_fltr_cmplx_gpu, data_real_gpu)
788# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
789#else
790# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
791 ierr = hipfftexecz2d(bwd_plan_gpu, data_fltr_cmplx_gpu, data_real_gpu)
792# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
793 call hipcheck(hipdevicesynchronize())
794# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
795#endif
796# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
797!$acc end host_data
798# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
799#elif defined(MFC_OpenMP)
800# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
801!$omp target data use_device_addr(data_real_gpu, data_cmplx_gpu, data_fltr_cmplx_gpu)
802# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
803#if defined(__PGI)
804# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
805 ierr = cufftexecz2d(bwd_plan_gpu, data_fltr_cmplx_gpu, data_real_gpu)
806# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
807#else
808# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
809 ierr = hipfftexecz2d(bwd_plan_gpu, data_fltr_cmplx_gpu, data_real_gpu)
810# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
811 call hipcheck(hipdevicesynchronize())
812# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
813#endif
814# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
815!$omp end target data
816# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
817#else
818# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
819#if defined(__PGI)
820# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
821 ierr = cufftexecz2d(bwd_plan_gpu, data_fltr_cmplx_gpu, data_real_gpu)
822# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
823#else
824# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
825 ierr = hipfftexecz2d(bwd_plan_gpu, data_fltr_cmplx_gpu, data_real_gpu)
826# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
827 call hipcheck(hipdevicesynchronize())
828# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
829#endif
830# 170 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
831#endif
832# 178 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
833
834
835# 179 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
836
837# 179 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
838#if defined(MFC_OpenACC)
839# 179 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
840!$acc parallel loop collapse(3) gang vector default(present)
841# 179 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
842#elif defined(MFC_OpenMP)
843# 179 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
844
845# 179 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
846
847# 179 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
848
849# 179 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
850!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
851# 179 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
852#endif
853 do k = 1, sys_size
854 do j = 0, m
855 do l = 0, p
856 data_real_gpu(l + j*real_size + 1 + (k - 1)*real_size*x_size) = data_real_gpu(l + j*real_size + 1 + (k - 1) &
857 & *real_size*x_size)/real(real_size, dp)
858 q_cons_vf(k)%sf(j, 0, l) = data_real_gpu(l + j*real_size + 1 + (k - 1)*real_size*x_size)
859 end do
860 end do
861 end do
862
863# 189 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
864#if defined(MFC_OpenACC)
865# 189 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
866!$acc end parallel loop
867# 189 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
868#elif defined(MFC_OpenMP)
869# 189 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
870
871# 189 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
872!$omp end target teams loop
873# 189 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
874#endif
875
876 do i = 1, fourier_rings
877 i2 = i
878
879# 193 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
880#if defined(MFC_OpenACC)
881# 193 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
882!$acc update device(i2)
883# 193 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
884#elif defined(MFC_OpenMP)
885# 193 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
886!$omp target update to(i2)
887# 193 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
888#endif
889
890
891# 195 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
892
893# 195 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
894#if defined(MFC_OpenACC)
895# 195 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
896!$acc parallel loop collapse(3) gang vector default(present)
897# 195 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
898#elif defined(MFC_OpenMP)
899# 195 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
900
901# 195 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
902
903# 195 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
904
905# 195 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
906!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
907# 195 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
908#endif
909 do k = 1, sys_size
910 do j = 0, m
911 do l = 1, cmplx_size
912 data_fltr_cmplx_gpu(l + j*cmplx_size + (k - 1)*cmplx_size*x_size) = (0_dp, 0_dp)
913 end do
914 end do
915 end do
916
917# 203 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
918#if defined(MFC_OpenACC)
919# 203 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
920!$acc end parallel loop
921# 203 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
922#elif defined(MFC_OpenMP)
923# 203 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
924
925# 203 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
926!$omp end target teams loop
927# 203 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
928#endif
929
930
931# 205 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
932
933# 205 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
934#if defined(MFC_OpenACC)
935# 205 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
936!$acc parallel loop collapse(3) gang vector default(present)
937# 205 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
938#elif defined(MFC_OpenMP)
939# 205 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
940
941# 205 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
942
943# 205 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
944
945# 205 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
946!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
947# 205 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
948#endif
949 do k = 1, sys_size
950 do j = 0, m
951 do l = 0, p
952 data_real_gpu(l + j*real_size + 1 + (k - 1)*real_size*x_size) = q_cons_vf(k)%sf(j, i2, l)
953 end do
954 end do
955 end do
956
957# 213 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
958#if defined(MFC_OpenACC)
959# 213 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
960!$acc end parallel loop
961# 213 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
962#elif defined(MFC_OpenMP)
963# 213 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
964
965# 213 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
966!$omp end target teams loop
967# 213 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
968#endif
969
970
971# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
972#if defined(MFC_OpenACC)
973# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
974!$acc host_data use_device(data_real_gpu, data_cmplx_gpu, data_fltr_cmplx_gpu)
975# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
976#if defined(__PGI)
977# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
978 ierr = cufftexecd2z(fwd_plan_gpu, data_real_gpu, data_cmplx_gpu)
979# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
980#else
981# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
982 ierr = hipfftexecd2z(fwd_plan_gpu, data_real_gpu, data_cmplx_gpu)
983# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
984 call hipcheck(hipdevicesynchronize())
985# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
986#endif
987# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
988!$acc end host_data
989# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
990#elif defined(MFC_OpenMP)
991# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
992!$omp target data use_device_addr(data_real_gpu, data_cmplx_gpu, data_fltr_cmplx_gpu)
993# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
994#if defined(__PGI)
995# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
996 ierr = cufftexecd2z(fwd_plan_gpu, data_real_gpu, data_cmplx_gpu)
997# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
998#else
999# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1000 ierr = hipfftexecd2z(fwd_plan_gpu, data_real_gpu, data_cmplx_gpu)
1001# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1002 call hipcheck(hipdevicesynchronize())
1003# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1004#endif
1005# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1006!$omp end target data
1007# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1008#else
1009# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1010#if defined(__PGI)
1011# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1012 ierr = cufftexecd2z(fwd_plan_gpu, data_real_gpu, data_cmplx_gpu)
1013# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1014#else
1015# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1016 ierr = hipfftexecd2z(fwd_plan_gpu, data_real_gpu, data_cmplx_gpu)
1017# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1018 call hipcheck(hipdevicesynchronize())
1019# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1020#endif
1021# 215 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1022#endif
1023# 223 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1024
1025 nfq = min(floor(2_dp*real(i, dp)*pi), cmplx_size)
1026
1027# 225 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1028#if defined(MFC_OpenACC)
1029# 225 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1030!$acc update device(Nfq)
1031# 225 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1032#elif defined(MFC_OpenMP)
1033# 225 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1034!$omp target update to(Nfq)
1035# 225 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1036#endif
1037
1038
1039# 227 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1040
1041# 227 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1042#if defined(MFC_OpenACC)
1043# 227 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1044!$acc parallel loop collapse(3) gang vector default(present)
1045# 227 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1046#elif defined(MFC_OpenMP)
1047# 227 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1048
1049# 227 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1050
1051# 227 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1052
1053# 227 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1054!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1055# 227 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1056#endif
1057 do k = 1, sys_size
1058 do j = 0, m
1059 do l = 1, nfq
1061 & - 1)*cmplx_size*x_size)
1062 end do
1063 end do
1064 end do
1065
1066# 236 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1067#if defined(MFC_OpenACC)
1068# 236 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1069!$acc end parallel loop
1070# 236 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1071#elif defined(MFC_OpenMP)
1072# 236 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1073
1074# 236 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1075!$omp end target teams loop
1076# 236 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1077#endif
1078
1079
1080# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1081#if defined(MFC_OpenACC)
1082# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1083!$acc host_data use_device(data_real_gpu, data_cmplx_gpu, data_fltr_cmplx_gpu)
1084# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1085#if defined(__PGI)
1086# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1087 ierr = cufftexecz2d(bwd_plan_gpu, data_fltr_cmplx_gpu, data_real_gpu)
1088# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1089#else
1090# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1091 ierr = hipfftexecz2d(bwd_plan_gpu, data_fltr_cmplx_gpu, data_real_gpu)
1092# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1093 call hipcheck(hipdevicesynchronize())
1094# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1095#endif
1096# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1097!$acc end host_data
1098# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1099#elif defined(MFC_OpenMP)
1100# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1101!$omp target data use_device_addr(data_real_gpu, data_cmplx_gpu, data_fltr_cmplx_gpu)
1102# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1103#if defined(__PGI)
1104# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1105 ierr = cufftexecz2d(bwd_plan_gpu, data_fltr_cmplx_gpu, data_real_gpu)
1106# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1107#else
1108# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1109 ierr = hipfftexecz2d(bwd_plan_gpu, data_fltr_cmplx_gpu, data_real_gpu)
1110# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1111 call hipcheck(hipdevicesynchronize())
1112# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1113#endif
1114# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1115!$omp end target data
1116# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1117#else
1118# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1119#if defined(__PGI)
1120# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1121 ierr = cufftexecz2d(bwd_plan_gpu, data_fltr_cmplx_gpu, data_real_gpu)
1122# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1123#else
1124# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1125 ierr = hipfftexecz2d(bwd_plan_gpu, data_fltr_cmplx_gpu, data_real_gpu)
1126# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1127 call hipcheck(hipdevicesynchronize())
1128# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1129#endif
1130# 238 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1131#endif
1132# 246 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1133
1134
1135# 247 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1136
1137# 247 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1138#if defined(MFC_OpenACC)
1139# 247 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1140!$acc parallel loop collapse(3) gang vector default(present)
1141# 247 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1142#elif defined(MFC_OpenMP)
1143# 247 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1144
1145# 247 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1146
1147# 247 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1148
1149# 247 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1150!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1151# 247 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1152#endif
1153 do k = 1, sys_size
1154 do j = 0, m
1155 do l = 0, p
1156 data_real_gpu(l + j*real_size + 1 + (k - 1)*real_size*x_size) = data_real_gpu(l + j*real_size + 1 + (k &
1157 & - 1)*real_size*x_size)/real(real_size, dp)
1158 q_cons_vf(k)%sf(j, i2, l) = data_real_gpu(l + j*real_size + 1 + (k - 1)*real_size*x_size)
1159 end do
1160 end do
1161 end do
1162
1163# 257 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1164#if defined(MFC_OpenACC)
1165# 257 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1166!$acc end parallel loop
1167# 257 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1168#elif defined(MFC_OpenMP)
1169# 257 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1170
1171# 257 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1172!$omp end target teams loop
1173# 257 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1174#endif
1175 end do
1176#else
1177 nfq = 3
1178 do j = 0, m
1179 do k = 1, sys_size
1180 data_fltr_cmplx(:) = (0_dp, 0_dp)
1181 data_real(1:p + 1) = q_cons_vf(k)%sf(j, 0,0:p)
1182 call fftw_execute_dft_r2c(fwd_plan, data_real, data_cmplx)
1184 call fftw_execute_dft_c2r(bwd_plan, data_fltr_cmplx, data_real)
1185 data_real(:) = data_real(:)/real(real_size, dp)
1186 q_cons_vf(k)%sf(j, 0,0:p) = data_real(1:p + 1)
1187 end do
1188 end do
1189
1190 ! Apply Fourier filter to additional rings
1191 do i = 1, fourier_rings
1192 nfq = min(floor(2_dp*real(i, dp)*pi), cmplx_size)
1193 do j = 0, m
1194 do k = 1, sys_size
1195 data_fltr_cmplx(:) = (0_dp, 0_dp)
1196 data_real(1:p + 1) = q_cons_vf(k)%sf(j, i,0:p)
1197 call fftw_execute_dft_r2c(fwd_plan, data_real, data_cmplx)
1199 call fftw_execute_dft_c2r(bwd_plan, data_fltr_cmplx, data_real)
1200 data_real(:) = data_real(:)/real(real_size, dp)
1201 q_cons_vf(k)%sf(j, i,0:p) = data_real(1:p + 1)
1202 end do
1203 end do
1204 end do
1205#endif
1206
1207 end subroutine s_apply_fourier_filter
1208
1209 !> Finalize the FFTW module
1210 impure subroutine s_finalize_fftw_module
1211
1212#if defined(MFC_GPU)
1213 integer :: ierr !< Generic flag used to identify and report GPU errors
1214
1215#ifdef MFC_DEBUG
1216# 298 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1217 block
1218# 298 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1219 use iso_fortran_env, only: output_unit
1220# 298 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1221
1222# 298 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1223 print *, 'm_fftw.fpp:298: ', '@:DEALLOCATE(data_real_gpu, data_fltr_cmplx_gpu, data_cmplx_gpu)'
1224# 298 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1225
1226# 298 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1227 call flush (output_unit)
1228# 298 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1229 end block
1230# 298 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1231#endif
1232# 298 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1233
1234# 298 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1235#if defined(MFC_OpenACC)
1236# 298 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1237!$acc exit data delete(data_real_gpu, data_fltr_cmplx_gpu, data_cmplx_gpu)
1238# 298 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1239#elif defined(MFC_OpenMP)
1240# 298 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1241!$omp target exit data map(release:data_real_gpu, data_fltr_cmplx_gpu, data_cmplx_gpu)
1242# 298 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1243#endif
1244# 298 "/home/runner/work/MFC/MFC/src/simulation/m_fftw.fpp"
1246#if defined(__PGI)
1247 ierr = cufftdestroy(fwd_plan_gpu)
1248 ierr = cufftdestroy(bwd_plan_gpu)
1249#else
1250 ierr = hipfftdestroy(fwd_plan_gpu)
1251 ierr = hipfftdestroy(bwd_plan_gpu)
1252#endif
1253#else
1254 call fftw_free(fftw_real_data)
1255 call fftw_free(fftw_cmplx_data)
1256 call fftw_free(fftw_fltr_cmplx_data)
1257
1258 call fftw_destroy_plan(fwd_plan)
1259 call fftw_destroy_plan(bwd_plan)
1260#endif
1261
1262 end subroutine s_finalize_fftw_module
1263
1264end module m_fftw
type(scalar_field), dimension(sys_size), intent(inout) q_cons_vf
integer, intent(in) k
integer, intent(in) j
integer, intent(in) l
Shared derived types for field data, patch geometry, bubble dynamics, and MPI I/O structures.
Forward and inverse FFT wrappers (FFTW/cuFFT/hipFFT) for azimuthal Fourier filtering in cylindrical g...
integer rank
type(c_ptr) fftw_real_data
complex(dp), dimension(:), allocatable, target data_fltr_cmplx_gpu
integer x_size
complex(c_double_complex), dimension(:), pointer data_fltr_cmplx
Filtered complex data in Fourier space.
real(dp), dimension(:), allocatable, target data_real_gpu
complex(c_double_complex), dimension(:), pointer data_cmplx
Complex data in Fourier space.
type(c_ptr) bwd_plan
integer ostride
integer batch_size
type(c_ptr) fftw_cmplx_data
real(c_double), dimension(:), pointer data_real
Real data.
impure subroutine, public s_apply_fourier_filter(q_cons_vf)
Apply a Fourier low-pass filter in the azimuthal direction to remove high-frequency content.
integer real_size
integer, dimension(:), allocatable iembed
type(c_ptr) bwd_plan_gpu
integer, dimension(:), allocatable gpu_fft_size
complex(dp), dimension(:), allocatable, target data_cmplx_gpu
type(c_ptr) fftw_fltr_cmplx_data
integer istride
integer nfq
type(c_ptr) fwd_plan_gpu
impure subroutine, public s_initialize_fftw_module
Initialize the FFTW module.
impure subroutine, public s_finalize_fftw_module
Finalize the FFTW module.
integer, dimension(:), allocatable oembed
type(c_ptr) fwd_plan
integer i2
integer cmplx_size
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
MPI halo exchange, domain decomposition, and buffer packing/unpacking for the simulation solver.