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