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