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