MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_muscl.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
2!>
3!! @file
4!! @brief Contains module m_muscl
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# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107
108# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109
110# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111
112# 244 "/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# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116
117# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124
125# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128
129# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130
131# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132
133# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134
135# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136
137# 377 "/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# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
207
208# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
209
210# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
211
212# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
213
214# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
215
216# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
217
218# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
219
220# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221
222# 311 "/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! GPU parallel region (scalar reductions, maxval/minval)
227# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
228
229! GPU parallel loop over threads (most common GPU macro)
230# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
231
232! Required closing for GPU_PARALLEL_LOOP
233# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
234
235! Mark routine for device compilation
236# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
237
238! Declare device-resident data
239# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
240
241! Inner loop within a GPU parallel region
242# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
243
244! Scoped GPU data region
245# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
246
247! Host code with device pointers (for MPI with GPU buffers)
248# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
249
250! Allocate device memory (unscoped)
251# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
252
253! Free device memory
254# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
255
256! Atomic operation on device
257# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
258
259! End atomic capture block
260# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
261
262! Copy data between host and device
263# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
264
265! Synchronization barrier
266# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
267
268! Import GPU library module (openacc or omp_lib)
269# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
270
271! Emit code only for AMD compiler
272# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
273
274! Emit code for non-Cray compilers
275# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
276
277! Emit code only for Cray compiler
278# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
279
280! Emit code for non-NVIDIA compilers
281# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
282
283# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
285! New line at end of file is required for FYPP
286# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
287
288# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
289
290! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
291! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
292! example see misc/nvidia_uvm/bind.sh. NVIDIA unified memory page placement hint
293# 57 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
294
295! Allocate and create GPU device memory
296# 77 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
297
298! Free GPU device memory and deallocate
299# 85 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
300
301! Cray-specific GPU pointer setup for vector fields
302# 109 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
303
304! Cray-specific GPU pointer setup for scalar fields
305# 125 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
306
307! Cray-specific GPU pointer setup for acoustic source spatials
308# 150 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
309
310# 156 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
311
312# 163 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
313! New line at end of file is required for FYPP
314# 6 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp" 2
315
316!> @brief MUSCL reconstruction with interface sharpening for contact-preserving advection
318
322#ifdef MFC_OpenACC
323 use openacc
324#endif
325
326 use m_mpi_proxy
327 use m_helper
328 use m_thinc
329 use m_nvtx
330
332
333 integer :: v_size
334
335# 25 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
336#if defined(MFC_OpenACC)
337# 25 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
338!$acc declare create(v_size)
339# 25 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
340#elif defined(MFC_OpenMP)
341# 25 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
342!$omp declare target (v_size)
343# 25 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
344#endif
345
347
348# 28 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
349#if defined(MFC_OpenACC)
350# 28 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
351!$acc declare create(is1_muscl, is2_muscl, is3_muscl)
352# 28 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
353#elif defined(MFC_OpenMP)
354# 28 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
355!$omp declare target (is1_muscl, is2_muscl, is3_muscl)
356# 28 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
357#endif
358
359 !> @name The cell-average variables that will be MUSCL-reconstructed, unpacked into an array for performance
360 !> @{
361 real(wp), allocatable, dimension(:,:,:,:) :: v_rs_ws_muscl
362 !> @}
363
364# 34 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
365#if defined(MFC_OpenACC)
366# 34 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
367!$acc declare create(v_rs_ws_muscl)
368# 34 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
369#elif defined(MFC_OpenMP)
370# 34 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
371!$omp declare target (v_rs_ws_muscl)
372# 34 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
373#endif
374
375contains
376
377 !> Allocate and initialize MUSCL reconstruction working arrays
379
380 ! Initializing in x-direction
381 is1_muscl%beg = -buff_size; is1_muscl%end = m - is1_muscl%beg
382 if (n == 0) then
383 is2_muscl%beg = 0
384 else
385 is2_muscl%beg = -buff_size
386 end if
387
388 is2_muscl%end = n - is2_muscl%beg
389
390 if (p == 0) then
391 is3_muscl%beg = 0
392 else
393 is3_muscl%beg = -buff_size
394 end if
395
396 is3_muscl%end = p - is3_muscl%beg
397
398#ifdef MFC_DEBUG
399# 59 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
400 block
401# 59 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
402 use iso_fortran_env, only: output_unit
403# 59 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
404
405# 59 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
406 print *, 'm_muscl.fpp:59: ', '@:ALLOCATE(v_rs_ws_muscl(is1_muscl%beg:is1_muscl%end, is2_muscl%beg:is2_muscl%end, is3_muscl%beg:is3_muscl%end, 1:sys_size))'
407# 59 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
408
409# 59 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
410 call flush (output_unit)
411# 59 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
412 end block
413# 59 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
414#endif
415# 59 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
416 allocate (v_rs_ws_muscl(is1_muscl%beg:is1_muscl%end, is2_muscl%beg:is2_muscl%end, is3_muscl%beg:is3_muscl%end, 1:sys_size))
417# 59 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
418
419# 59 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
420
421# 59 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
422#if defined(MFC_OpenACC)
423# 59 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
424!$acc enter data create(v_rs_ws_muscl)
425# 59 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
426#elif defined(MFC_OpenMP)
427# 59 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
428!$omp target enter data map(always,alloc:v_rs_ws_muscl)
429# 59 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
430#endif
431
432 if (n == 0) return
433
434 ! initializing in y-direction
435 is2_muscl%beg = -buff_size; is2_muscl%end = n - is2_muscl%beg
436 is1_muscl%beg = -buff_size; is1_muscl%end = m - is1_muscl%beg
437
438 if (p == 0) then
439 is3_muscl%beg = 0
440 else
441 is3_muscl%beg = -buff_size
442 end if
443
444 is3_muscl%end = p - is3_muscl%beg
445
446 if (p == 0) return
447
448 ! initializing in z-direction
449 is2_muscl%beg = -buff_size; is2_muscl%end = n - is2_muscl%beg
450 is1_muscl%beg = -buff_size; is1_muscl%end = m - is1_muscl%beg
451 is3_muscl%beg = -buff_size; is3_muscl%end = p - is3_muscl%beg
452
453 end subroutine s_initialize_muscl_module
454
455 !> Perform MUSCL reconstruction of left and right cell-boundary values from cell-averaged variables
456 subroutine s_muscl(v_vf, vL_rs_vf_x, vR_rs_vf_x, muscl_dir, is1_muscl_d, &
457
458 & is2_muscl_d, is3_muscl_d)
459
460 type(scalar_field), dimension(1:), intent(in) :: v_vf
461 real(wp), dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:), intent(inout) :: vl_rs_vf_x, vr_rs_vf_x
462 integer, intent(in) :: muscl_dir
463 type(int_bounds_info), intent(in) :: is1_muscl_d, is2_muscl_d, is3_muscl_d
464 integer :: j, k, l, i
465 real(wp) :: slopel, sloper, slope
466
467 is1_muscl = is1_muscl_d
468 is2_muscl = is2_muscl_d
469 is3_muscl = is3_muscl_d
470
471
472# 100 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
473#if defined(MFC_OpenACC)
474# 100 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
475!$acc update device(is1_muscl, is2_muscl, is3_muscl)
476# 100 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
477#elif defined(MFC_OpenMP)
478# 100 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
479!$omp target update to(is1_muscl, is2_muscl, is3_muscl)
480# 100 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
481#endif
482
483 if (muscl_order == 1) then
484 if (muscl_dir == 1) then
485
486# 104 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
487
488# 104 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
489#if defined(MFC_OpenACC)
490# 104 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
491!$acc parallel loop collapse(4) gang vector default(present)
492# 104 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
493#elif defined(MFC_OpenMP)
494# 104 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
495
496# 104 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
497
498# 104 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
499
500# 104 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
501!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(4) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
502# 104 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
503#endif
504 do i = 1, ubound(v_vf, 1)
505 do l = is3_muscl%beg, is3_muscl%end
506 do k = is2_muscl%beg, is2_muscl%end
507 do j = is1_muscl%beg, is1_muscl%end
508 vl_rs_vf_x(j, k, l, i) = v_vf(i)%sf(j, k, l)
509 vr_rs_vf_x(j, k, l, i) = v_vf(i)%sf(j, k, l)
510 end do
511 end do
512 end do
513 end do
514
515# 115 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
516#if defined(MFC_OpenACC)
517# 115 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
518!$acc end parallel loop
519# 115 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
520#elif defined(MFC_OpenMP)
521# 115 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
522
523# 115 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
524!$omp end target teams loop
525# 115 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
526#endif
527 else if (muscl_dir == 2) then
528
529# 117 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
530
531# 117 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
532#if defined(MFC_OpenACC)
533# 117 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
534!$acc parallel loop collapse(4) gang vector default(present)
535# 117 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
536#elif defined(MFC_OpenMP)
537# 117 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
538
539# 117 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
540
541# 117 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
542
543# 117 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
544!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(4) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
545# 117 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
546#endif
547 do i = 1, ubound(v_vf, 1)
548 do l = is3_muscl%beg, is3_muscl%end
549 do j = is1_muscl%beg, is1_muscl%end
550 do k = is2_muscl%beg, is2_muscl%end
551 vl_rs_vf_x(k, j, l, i) = v_vf(i)%sf(k, j, l)
552 vr_rs_vf_x(k, j, l, i) = v_vf(i)%sf(k, j, l)
553 end do
554 end do
555 end do
556 end do
557
558# 128 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
559#if defined(MFC_OpenACC)
560# 128 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
561!$acc end parallel loop
562# 128 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
563#elif defined(MFC_OpenMP)
564# 128 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
565
566# 128 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
567!$omp end target teams loop
568# 128 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
569#endif
570 else if (muscl_dir == 3) then
571
572# 130 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
573
574# 130 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
575#if defined(MFC_OpenACC)
576# 130 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
577!$acc parallel loop collapse(4) gang vector default(present)
578# 130 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
579#elif defined(MFC_OpenMP)
580# 130 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
581
582# 130 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
583
584# 130 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
585
586# 130 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
587!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(4) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
588# 130 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
589#endif
590 do i = 1, ubound(v_vf, 1)
591 do j = is1_muscl%beg, is1_muscl%end
592 do k = is2_muscl%beg, is2_muscl%end
593 do l = is3_muscl%beg, is3_muscl%end
594 vl_rs_vf_x(l, k, j, i) = v_vf(i)%sf(l, k, j)
595 vr_rs_vf_x(l, k, j, i) = v_vf(i)%sf(l, k, j)
596 end do
597 end do
598 end do
599 end do
600
601# 141 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
602#if defined(MFC_OpenACC)
603# 141 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
604!$acc end parallel loop
605# 141 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
606#elif defined(MFC_OpenMP)
607# 141 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
608
609# 141 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
610!$omp end target teams loop
611# 141 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
612#endif
613 end if
614 end if
615
616 v_size = ubound(v_vf, 1)
617
618# 146 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
619#if defined(MFC_OpenACC)
620# 146 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
621!$acc update device(v_size)
622# 146 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
623#elif defined(MFC_OpenMP)
624# 146 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
625!$omp target update to(v_size)
626# 146 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
627#endif
628
629 if (muscl_order /= 1) then
630
631# 149 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
632
633# 149 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
634#if defined(MFC_OpenACC)
635# 149 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
636!$acc parallel loop collapse(4) gang vector default(present) private(j, k, l, i)
637# 149 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
638#elif defined(MFC_OpenMP)
639# 149 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
640
641# 149 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
642
643# 149 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
644
645# 149 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
646!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(4) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(j, k, l, i)
647# 149 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
648#endif
649 do i = 1, v_size
650 do l = idwbuff(3)%beg, idwbuff(3)%end
651 do k = idwbuff(2)%beg, idwbuff(2)%end
652 do j = idwbuff(1)%beg, idwbuff(1)%end
653 v_rs_ws_muscl(j, k, l, i) = v_vf(i)%sf(j, k, l)
654 end do
655 end do
656 end do
657 end do
658
659# 159 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
660#if defined(MFC_OpenACC)
661# 159 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
662!$acc end parallel loop
663# 159 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
664#elif defined(MFC_OpenMP)
665# 159 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
666
667# 159 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
668!$omp end target teams loop
669# 159 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
670#endif
671 end if
672
673 if (muscl_order == 2) then
674 ! MUSCL Reconstruction
675# 168 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
676# 169 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
677# 170 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
678 if (muscl_dir == 1) then
679
680# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
681
682# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
683#if defined(MFC_OpenACC)
684# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
685!$acc parallel loop collapse(4) gang vector default(present) private(i, j, k, l, slopeL, slopeR, slope)
686# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
687#elif defined(MFC_OpenMP)
688# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
689
690# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
691
692# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
693
694# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
695!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(4) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(i, j, k, l, slopeL, slopeR, slope)
696# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
697#endif
698 do l = is3_muscl%beg, is3_muscl%end
699 do k = is2_muscl%beg, is2_muscl%end
700 do j = is1_muscl%beg, is1_muscl%end
701 do i = 1, v_size
702 slopel = v_rs_ws_muscl(j + 1, k, l, i) - v_rs_ws_muscl(j, k, l, i)
703 sloper = v_rs_ws_muscl(j, k, l, i) - v_rs_ws_muscl(j - 1, k, l, i)
704 slope = 0._wp
705
706 if (muscl_lim == 0) then ! unlimited (central difference)
707 slope = 5e-1_wp*(slopel + sloper)
708 else if (muscl_lim == 1) then ! minmod
709 if (slopel*sloper > muscl_eps) then
710 slope = min(abs(slopel), abs(sloper))
711 end if
712 if (slopel < 0._wp) slope = -slope
713 else if (muscl_lim == 2) then ! MC
714 if (slopel*sloper > muscl_eps) then
715 slope = min(2._wp*abs(slopel), 2._wp*abs(sloper))
716 slope = min(slope, 5e-1_wp*(abs(slopel) + abs(sloper)))
717 end if
718 if (slopel < 0._wp) slope = -slope
719 else if (muscl_lim == 3) then ! Van Albada
720 if (slopel*sloper > muscl_eps) then
721 slope = ((slopel + sloper)*slopel*sloper)/(slopel**2._wp + sloper**2._wp)
722 end if
723 else if (muscl_lim == 4) then ! Van Leer
724 if (slopel*sloper > muscl_eps) then
725 slope = 2._wp*slopel*sloper/(slopel + sloper)
726 end if
727 else if (muscl_lim == 5) then ! SUPERBEE
728 if (slopel*sloper > muscl_eps) then
729 slope = -1._wp*min(-min(2._wp*abs(slopel), abs(sloper)), -min(abs(slopel), &
730 & 2._wp*abs(sloper)))
731 end if
732 end if
733
734 ! reconstruct from left side
735 vl_rs_vf_x(j, k, l, i) = v_rs_ws_muscl(j, k, l, i) - (5.e-1_wp*slope)
736
737 ! reconstruct from the right side
738 vr_rs_vf_x(j, k, l, i) = v_rs_ws_muscl(j, k, l, i) + (5.e-1_wp*slope)
739 end do
740 end do
741 end do
742 end do
743
744# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
745#if defined(MFC_OpenACC)
746# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
747!$acc end parallel loop
748# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
749#elif defined(MFC_OpenMP)
750# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
751
752# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
753!$omp end target teams loop
754# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
755#endif
756 end if
757# 168 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
758# 169 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
759# 170 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
760 if (muscl_dir == 2) then
761
762# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
763
764# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
765#if defined(MFC_OpenACC)
766# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
767!$acc parallel loop collapse(4) gang vector default(present) private(i, j, k, l, slopeL, slopeR, slope)
768# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
769#elif defined(MFC_OpenMP)
770# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
771
772# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
773
774# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
775
776# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
777!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(4) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(i, j, k, l, slopeL, slopeR, slope)
778# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
779#endif
780 do l = is3_muscl%beg, is3_muscl%end
781 do k = is1_muscl%beg, is1_muscl%end
782 do j = is2_muscl%beg, is2_muscl%end
783 do i = 1, v_size
784 slopel = v_rs_ws_muscl(j, k + 1, l, i) - v_rs_ws_muscl(j, k, l, i)
785 sloper = v_rs_ws_muscl(j, k, l, i) - v_rs_ws_muscl(j, k - 1, l, i)
786 slope = 0._wp
787
788 if (muscl_lim == 0) then ! unlimited (central difference)
789 slope = 5e-1_wp*(slopel + sloper)
790 else if (muscl_lim == 1) then ! minmod
791 if (slopel*sloper > muscl_eps) then
792 slope = min(abs(slopel), abs(sloper))
793 end if
794 if (slopel < 0._wp) slope = -slope
795 else if (muscl_lim == 2) then ! MC
796 if (slopel*sloper > muscl_eps) then
797 slope = min(2._wp*abs(slopel), 2._wp*abs(sloper))
798 slope = min(slope, 5e-1_wp*(abs(slopel) + abs(sloper)))
799 end if
800 if (slopel < 0._wp) slope = -slope
801 else if (muscl_lim == 3) then ! Van Albada
802 if (slopel*sloper > muscl_eps) then
803 slope = ((slopel + sloper)*slopel*sloper)/(slopel**2._wp + sloper**2._wp)
804 end if
805 else if (muscl_lim == 4) then ! Van Leer
806 if (slopel*sloper > muscl_eps) then
807 slope = 2._wp*slopel*sloper/(slopel + sloper)
808 end if
809 else if (muscl_lim == 5) then ! SUPERBEE
810 if (slopel*sloper > muscl_eps) then
811 slope = -1._wp*min(-min(2._wp*abs(slopel), abs(sloper)), -min(abs(slopel), &
812 & 2._wp*abs(sloper)))
813 end if
814 end if
815
816 ! reconstruct from left side
817 vl_rs_vf_x(j, k, l, i) = v_rs_ws_muscl(j, k, l, i) - (5.e-1_wp*slope)
818
819 ! reconstruct from the right side
820 vr_rs_vf_x(j, k, l, i) = v_rs_ws_muscl(j, k, l, i) + (5.e-1_wp*slope)
821 end do
822 end do
823 end do
824 end do
825
826# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
827#if defined(MFC_OpenACC)
828# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
829!$acc end parallel loop
830# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
831#elif defined(MFC_OpenMP)
832# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
833
834# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
835!$omp end target teams loop
836# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
837#endif
838 end if
839# 168 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
840# 169 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
841# 170 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
842 if (muscl_dir == 3) then
843
844# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
845
846# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
847#if defined(MFC_OpenACC)
848# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
849!$acc parallel loop collapse(4) gang vector default(present) private(i, j, k, l, slopeL, slopeR, slope)
850# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
851#elif defined(MFC_OpenMP)
852# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
853
854# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
855
856# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
857
858# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
859!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(4) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(i, j, k, l, slopeL, slopeR, slope)
860# 171 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
861#endif
862 do l = is1_muscl%beg, is1_muscl%end
863 do k = is2_muscl%beg, is2_muscl%end
864 do j = is3_muscl%beg, is3_muscl%end
865 do i = 1, v_size
866 slopel = v_rs_ws_muscl(j, k, l + 1, i) - v_rs_ws_muscl(j, k, l, i)
867 sloper = v_rs_ws_muscl(j, k, l, i) - v_rs_ws_muscl(j, k, l - 1, i)
868 slope = 0._wp
869
870 if (muscl_lim == 0) then ! unlimited (central difference)
871 slope = 5e-1_wp*(slopel + sloper)
872 else if (muscl_lim == 1) then ! minmod
873 if (slopel*sloper > muscl_eps) then
874 slope = min(abs(slopel), abs(sloper))
875 end if
876 if (slopel < 0._wp) slope = -slope
877 else if (muscl_lim == 2) then ! MC
878 if (slopel*sloper > muscl_eps) then
879 slope = min(2._wp*abs(slopel), 2._wp*abs(sloper))
880 slope = min(slope, 5e-1_wp*(abs(slopel) + abs(sloper)))
881 end if
882 if (slopel < 0._wp) slope = -slope
883 else if (muscl_lim == 3) then ! Van Albada
884 if (slopel*sloper > muscl_eps) then
885 slope = ((slopel + sloper)*slopel*sloper)/(slopel**2._wp + sloper**2._wp)
886 end if
887 else if (muscl_lim == 4) then ! Van Leer
888 if (slopel*sloper > muscl_eps) then
889 slope = 2._wp*slopel*sloper/(slopel + sloper)
890 end if
891 else if (muscl_lim == 5) then ! SUPERBEE
892 if (slopel*sloper > muscl_eps) then
893 slope = -1._wp*min(-min(2._wp*abs(slopel), abs(sloper)), -min(abs(slopel), &
894 & 2._wp*abs(sloper)))
895 end if
896 end if
897
898 ! reconstruct from left side
899 vl_rs_vf_x(j, k, l, i) = v_rs_ws_muscl(j, k, l, i) - (5.e-1_wp*slope)
900
901 ! reconstruct from the right side
902 vr_rs_vf_x(j, k, l, i) = v_rs_ws_muscl(j, k, l, i) + (5.e-1_wp*slope)
903 end do
904 end do
905 end do
906 end do
907
908# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
909#if defined(MFC_OpenACC)
910# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
911!$acc end parallel loop
912# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
913#elif defined(MFC_OpenMP)
914# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
915
916# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
917!$omp end target teams loop
918# 217 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
919#endif
920 end if
921# 220 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
922 end if
923
924 if (int_comp > 0 .and. v_size >= eqn_idx%adv%end) then
925 call nvtxstartrange("WENO-INTCOMP")
926# 225 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
927 if (muscl_dir == 1) then
928 call s_thinc_compression(v_rs_ws_muscl, vl_rs_vf_x, vr_rs_vf_x, muscl_dir, is1_muscl, is2_muscl, is3_muscl)
929 end if
930# 225 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
931 if (muscl_dir == 2) then
932 call s_thinc_compression(v_rs_ws_muscl, vl_rs_vf_x, vr_rs_vf_x, muscl_dir, is1_muscl, is2_muscl, is3_muscl)
933 end if
934# 225 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
935 if (muscl_dir == 3) then
936 call s_thinc_compression(v_rs_ws_muscl, vl_rs_vf_x, vr_rs_vf_x, muscl_dir, is1_muscl, is2_muscl, is3_muscl)
937 end if
938# 229 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
939 call nvtxendrange()
940 end if
941
942 end subroutine s_muscl
943
944 !> Finalize the MUSCL module
946
947#ifdef MFC_DEBUG
948# 237 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
949 block
950# 237 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
951 use iso_fortran_env, only: output_unit
952# 237 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
953
954# 237 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
955 print *, 'm_muscl.fpp:237: ', '@:DEALLOCATE(v_rs_ws_muscl)'
956# 237 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
957
958# 237 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
959 call flush (output_unit)
960# 237 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
961 end block
962# 237 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
963#endif
964# 237 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
965
966# 237 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
967#if defined(MFC_OpenACC)
968# 237 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
969!$acc exit data delete(v_rs_ws_muscl)
970# 237 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
971#elif defined(MFC_OpenMP)
972# 237 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
973!$omp target exit data map(release:v_rs_ws_muscl)
974# 237 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
975#endif
976# 237 "/home/runner/work/MFC/MFC/src/simulation/m_muscl.fpp"
977 deallocate (v_rs_ws_muscl)
978
979 end subroutine s_finalize_muscl_module
980
981end module m_muscl
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.
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
integer sys_size
Number of unknowns in system of eqns.
integer buff_size
Number of ghost cells for boundary condition storage.
Utility routines for bubble model setup, coordinate transforms, array sampling, and special functions...
MPI halo exchange, domain decomposition, and buffer packing/unpacking for the simulation solver.
MUSCL reconstruction with interface sharpening for contact-preserving advection.
real(wp), dimension(:,:,:,:), allocatable v_rs_ws_muscl
type(int_bounds_info) is2_muscl
type(int_bounds_info) is3_muscl
subroutine, public s_muscl(v_vf, vl_rs_vf_x, vr_rs_vf_x, muscl_dir, is1_muscl_d, is2_muscl_d, is3_muscl_d)
Perform MUSCL reconstruction of left and right cell-boundary values from cell-averaged variables.
type(int_bounds_info) is1_muscl
subroutine, public s_initialize_muscl_module()
Allocate and initialize MUSCL reconstruction working arrays.
integer v_size
subroutine, public s_finalize_muscl_module()
Finalize the MUSCL module.
NVIDIA NVTX profiling API bindings for GPU performance instrumentation.
Definition m_nvtx.f90:6
THINC and MTHINC interface compression for volume fraction sharpening. THINC (int_comp=1): 1D directi...
Conservative-to-primitive variable conversion, mixture property evaluation, and pressure computation.
Integer bounds for variables.