MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_pressure_relaxation.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
2!>
3!! @file
4!! @brief Contains module m_pressure_relaxation
5
6# 1 "/home/runner/work/MFC/MFC/src/common/include/case.fpp" 1
7! This file exists so that Fypp can be run without generating case.fpp files for
8! each target. This is useful when generating documentation, for example. This
9! should also let MFC be built with CMake directly, without invoking mfc.sh.
10
11! For pre-process.
12# 9 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
13
14! For moving immersed boundaries in simulation
15# 14 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
16# 6 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp" 2
17# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
18# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
19# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
20# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
21# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
22# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
23# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
24# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
25
26# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
27# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
29
30# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
31
32# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
33
34# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
35
36# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
37
38# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39
40# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41
42# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43! New line at end of file is required for FYPP
44# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
45# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
46# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
47# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
48# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
50# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
52
53# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
56
57# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
58
59# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
60
61# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
62
63# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
64
65# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
66
67# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
68
69# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
70! New line at end of file is required for FYPP
71# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
72
73# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
74# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
75# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
76# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
77# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
78
79# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
80
81# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
82
83# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
84
85# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
86
87# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
88
89# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
90
91# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
92
93# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
94
95# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
96
97# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
98
99# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
100
101# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
102
103# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
104
105# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
106
107# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
108
109# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
110
111# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
112
113# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
114
115# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116
117# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
125
126# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
127
128# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
129
130# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
131
132# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
133
134# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
135
136# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137
138# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139
140# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141
142# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
143
144# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
145
146# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
147
148# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
149! New line at end of file is required for FYPP
150# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
151# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
152# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
153# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
154# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
155# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
156# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
157# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
158
159# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
160# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
161# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
162
163# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
164
165# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
166
167# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
168
169# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
170
171# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
172
173# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
174
175# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
176! New line at end of file is required for FYPP
177# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
178
179# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
180
181# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
182
183# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
184
185# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
186
187# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
188
189# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
190
191# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
192
193# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
194
195# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
196
197# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
198
199# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
200
201# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
202
203# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
204
205# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
206
207# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
208
209# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
210
211# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
212
213# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
214
215# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
216
217# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
218
219# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220
221# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222
223# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224
225# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
226
227# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
228
229# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
230
231# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
232
233# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
234! New line at end of file is required for FYPP
235# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
236
237! GPU parallel region (scalar reductions, maxval/minval)
238# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
239
240! GPU parallel loop over threads (most common GPU macro)
241# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
242
243! Required closing for GPU_PARALLEL_LOOP
244# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
245
246! Mark routine for device compilation
247# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
248
249! Declare device-resident data
250# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
251
252! Inner loop within a GPU parallel region
253# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
254
255! Scoped GPU data region
256# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
257
258! Host code with device pointers (for MPI with GPU buffers)
259# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
260
261! Allocate device memory (unscoped)
262# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
263
264! Free device memory
265# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
266
267! Atomic operation on device
268# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
269
270! End atomic capture block
271# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
272
273! Copy data between host and device
274# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
275
276! Synchronization barrier
277# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
278
279! Import GPU library module (openacc or omp_lib)
280# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
281
282! Emit code only for AMD compiler
283# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284
285! Emit code for non-Cray compilers
286# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
287
288! Emit code only for Cray compiler
289# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
290
291! Emit code for non-NVIDIA compilers
292# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
293
294# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
295# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
296! New line at end of file is required for FYPP
297# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
298
299# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
300
301! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
302! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
303! example see misc/nvidia_uvm/bind.sh. NVIDIA unified memory page placement hint
304# 57 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
305
306! Allocate and create GPU device memory
307# 77 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
308
309! Free GPU device memory and deallocate
310# 85 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
311
312! Cray-specific GPU pointer setup for vector fields
313# 109 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
314
315! Cray-specific GPU pointer setup for scalar fields
316# 125 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
317
318! Cray-specific GPU pointer setup for acoustic source spatials
319# 150 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
320
321# 156 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
322
323# 163 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
324! New line at end of file is required for FYPP
325# 7 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp" 2
326
327!> @brief Pressure relaxation for the six-equation multi-component model via Newton--Raphson equilibration and volume-fraction
328!! correction
330
333
334 implicit none
335
338
339 real(wp), allocatable, dimension(:,:) :: res_pr
340
341# 21 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
342#if defined(MFC_OpenACC)
343# 21 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
344!$acc declare create(Res_pr)
345# 21 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
346#elif defined(MFC_OpenMP)
347# 21 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
348!$omp declare target (Res_pr)
349# 21 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
350#endif
351
352contains
353
354 !> Initialize the pressure relaxation module
356
357 integer :: i, j
358
359 if (viscous) then
360#ifdef MFC_DEBUG
361# 31 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
362 block
363# 31 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
364 use iso_fortran_env, only: output_unit
365# 31 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
366
367# 31 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
368 print *, 'm_pressure_relaxation.fpp:31: ', '@:ALLOCATE(Res_pr(1:2, 1:Re_size_max))'
369# 31 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
370
371# 31 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
372 call flush (output_unit)
373# 31 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
374 end block
375# 31 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
376#endif
377# 31 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
378 allocate (res_pr(1:2, 1:re_size_max))
379# 31 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
380
381# 31 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
382
383# 31 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
384#if defined(MFC_OpenACC)
385# 31 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
386!$acc enter data create(Res_pr)
387# 31 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
388#elif defined(MFC_OpenMP)
389# 31 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
390!$omp target enter data map(always,alloc:Res_pr)
391# 31 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
392#endif
393 do i = 1, 2
394 do j = 1, re_size(i)
395 res_pr(i, j) = fluid_pp(re_idx(i, j))%Re(i)
396 end do
397 end do
398
399# 37 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
400#if defined(MFC_OpenACC)
401# 37 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
402!$acc update device(Res_pr, Re_idx, Re_size)
403# 37 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
404#elif defined(MFC_OpenMP)
405# 37 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
406!$omp target update to(Res_pr, Re_idx, Re_size)
407# 37 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
408#endif
409 end if
410
412
413 !> Finalize the pressure relaxation module
415
416 if (viscous) then
417#ifdef MFC_DEBUG
418# 46 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
419 block
420# 46 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
421 use iso_fortran_env, only: output_unit
422# 46 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
423
424# 46 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
425 print *, 'm_pressure_relaxation.fpp:46: ', '@:DEALLOCATE(Res_pr)'
426# 46 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
427
428# 46 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
429 call flush (output_unit)
430# 46 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
431 end block
432# 46 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
433#endif
434# 46 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
435
436# 46 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
437#if defined(MFC_OpenACC)
438# 46 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
439!$acc exit data delete(Res_pr)
440# 46 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
441#elif defined(MFC_OpenMP)
442# 46 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
443!$omp target exit data map(release:Res_pr)
444# 46 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
445#endif
446# 46 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
447 deallocate (res_pr)
448 end if
449
451
452 !> The main pressure relaxation procedure
454
455 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
456 integer :: j, k, l
457
458
459# 57 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
460
461# 57 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
462#if defined(MFC_OpenACC)
463# 57 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
464!$acc parallel loop collapse(3) gang vector default(present) private(j, k, l)
465# 57 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
466#elif defined(MFC_OpenMP)
467# 57 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
468
469# 57 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
470
471# 57 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
472
473# 57 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
474!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(j, k, l)
475# 57 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
476#endif
477 do l = 0, p
478 do k = 0, n
479 do j = 0, m
481 end do
482 end do
483 end do
484
485# 65 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
486#if defined(MFC_OpenACC)
487# 65 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
488!$acc end parallel loop
489# 65 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
490#elif defined(MFC_OpenMP)
491# 65 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
492
493# 65 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
494!$omp end target teams loop
495# 65 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
496#endif
497
499
500 !> Process pressure relaxation for a single cell
501 subroutine s_relax_cell_pressure(q_cons_vf, j, k, l)
502
503
504# 72 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
505#if MFC_OpenACC
506# 72 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
507!$acc routine seq
508# 72 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
509#elif MFC_OpenMP
510# 72 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
511
512# 72 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
513
514# 72 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
515!$omp declare target device_type(any)
516# 72 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
517#endif
518
519 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
520 integer, intent(in) :: j, k, l
521
522 ! Volume fraction correction
523 if (mpp_lim) call s_correct_volume_fractions(q_cons_vf, j, k, l)
524
525 ! Pressure equilibration
526 if (s_needs_pressure_relaxation(q_cons_vf, j, k, l)) then
527 call s_equilibrate_pressure(q_cons_vf, j, k, l)
528 end if
529
530 ! Internal energy correction
531 call s_correct_internal_energies(q_cons_vf, j, k, l)
532
533 end subroutine s_relax_cell_pressure
534
535 !> Check if pressure relaxation is needed for this cell
536 logical function s_needs_pressure_relaxation(q_cons_vf, j, k, l)
537
538
539# 93 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
540#if MFC_OpenACC
541# 93 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
542!$acc routine seq
543# 93 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
544#elif MFC_OpenMP
545# 93 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
546
547# 93 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
548
549# 93 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
550!$omp declare target device_type(any)
551# 93 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
552#endif
553
554 type(scalar_field), dimension(sys_size), intent(in) :: q_cons_vf
555 integer, intent(in) :: j, k, l
556 integer :: i
557
559
560# 100 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
561#if defined(MFC_OpenACC)
562# 100 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
563!$acc loop seq
564# 100 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
565#elif defined(MFC_OpenMP)
566# 100 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
567
568# 100 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
569#endif
570 do i = 1, num_fluids
571 if (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) > (1._wp - sgm_eps)) then
573 end if
574 end do
575
576 end function s_needs_pressure_relaxation
577
578 !> Correct volume fractions to physical bounds
579 subroutine s_correct_volume_fractions(q_cons_vf, j, k, l)
580
581
582# 112 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
583#if MFC_OpenACC
584# 112 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
585!$acc routine seq
586# 112 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
587#elif MFC_OpenMP
588# 112 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
589
590# 112 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
591
592# 112 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
593!$omp declare target device_type(any)
594# 112 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
595#endif
596
597 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
598 integer, intent(in) :: j, k, l
599 real(wp) :: sum_alpha
600 integer :: i
601
602 sum_alpha = 0._wp
603
604# 120 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
605#if defined(MFC_OpenACC)
606# 120 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
607!$acc loop seq
608# 120 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
609#elif defined(MFC_OpenMP)
610# 120 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
611
612# 120 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
613#endif
614 do i = 1, num_fluids
615 if ((q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l) < 0._wp) .or. (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, &
616 & l) < 0._wp)) then
617 q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l) = 0._wp
618 q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) = 0._wp
619 q_cons_vf(i + eqn_idx%int_en%beg - 1)%sf(j, k, l) = 0._wp
620 end if
621 if (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) > 1._wp) q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) = 1._wp
622 sum_alpha = sum_alpha + q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l)
623 end do
624
625
626# 132 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
627#if defined(MFC_OpenACC)
628# 132 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
629!$acc loop seq
630# 132 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
631#elif defined(MFC_OpenMP)
632# 132 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
633
634# 132 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
635#endif
636 do i = 1, num_fluids
637 q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) = q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l)/sum_alpha
638 end do
639
640 end subroutine s_correct_volume_fractions
641
642 !> Main pressure equilibration using Newton-Raphson
643 subroutine s_equilibrate_pressure(q_cons_vf, j, k, l)
644
645
646# 142 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
647#if MFC_OpenACC
648# 142 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
649!$acc routine seq
650# 142 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
651#elif MFC_OpenMP
652# 142 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
653
654# 142 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
655
656# 142 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
657!$omp declare target device_type(any)
658# 142 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
659#endif
660
661 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
662 integer, intent(in) :: j, k, l
663 real(wp) :: pres_relax, f_pres, df_pres
664# 150 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
665 real(wp), dimension(num_fluids) :: pres_K_init, rho_K_s
666# 152 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
667 integer, parameter :: MAX_ITER = 50
668 ! Pressure relaxation convergence tolerance
669 real(wp), parameter :: TOLERANCE = 1.e-10_wp
670 integer :: iter, i
671
672 ! Initialize pressures
673 pres_relax = 0._wp
674
675# 159 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
676#if defined(MFC_OpenACC)
677# 159 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
678!$acc loop seq
679# 159 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
680#elif defined(MFC_OpenMP)
681# 159 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
682
683# 159 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
684#endif
685 do i = 1, num_fluids
686 if (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) > sgm_eps) then
687 pres_k_init(i) = (q_cons_vf(i + eqn_idx%int_en%beg - 1)%sf(j, k, l)/q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, &
688 & l) - pi_infs(i))/gammas(i)
689 if (pres_k_init(i) <= -(1._wp - 1.e-8_wp)*ps_inf(i) + 1.e-8_wp) pres_k_init(i) = -(1._wp - 1.e-8_wp)*ps_inf(i) &
690 & + 1.e-8_wp
691 else
692 pres_k_init(i) = 0._wp
693 end if
694 pres_relax = pres_relax + q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l)*pres_k_init(i)
695 end do
696
697 ! Newton-Raphson iteration
698 f_pres = 1.e-9_wp
699 df_pres = 1.e9_wp
700
701# 175 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
702#if defined(MFC_OpenACC)
703# 175 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
704!$acc loop seq
705# 175 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
706#elif defined(MFC_OpenMP)
707# 175 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
708
709# 175 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
710#endif
711 do iter = 0, max_iter - 1
712 if (abs(f_pres) > tolerance) then
713 pres_relax = pres_relax - f_pres/df_pres
714
715 ! Enforce pressure bounds
716 do i = 1, num_fluids
717 if (pres_relax <= -(1._wp - 1.e-8_wp)*ps_inf(i) + 1.e-8_wp) pres_relax = -(1._wp - 1.e-8_wp)*ps_inf(i) &
718 & + 1.e-8_wp
719 end do
720
721 ! Newton-Raphson step
722 f_pres = -1._wp
723 df_pres = 0._wp
724
725# 189 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
726#if defined(MFC_OpenACC)
727# 189 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
728!$acc loop seq
729# 189 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
730#elif defined(MFC_OpenMP)
731# 189 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
732
733# 189 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
734#endif
735 do i = 1, num_fluids
736 if (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) > sgm_eps) then
737 ! Isentropic relation: rho = rho0 * (p/p0)^(1/gamma), Saurel et al. JFM (2009)
738 rho_k_s(i) = q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)/max(q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, &
739 & k, l), sgm_eps)*((pres_relax + ps_inf(i))/(pres_k_init(i) + ps_inf(i)))**(1._wp/gs_min(i))
740 f_pres = f_pres + q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)/rho_k_s(i)
741 df_pres = df_pres - q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, &
742 & l)/(gs_min(i)*rho_k_s(i)*(pres_relax + ps_inf(i)))
743 end if
744 end do
745 end if
746 end do
747
748 ! Update volume fractions
749
750# 204 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
751#if defined(MFC_OpenACC)
752# 204 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
753!$acc loop seq
754# 204 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
755#elif defined(MFC_OpenMP)
756# 204 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
757
758# 204 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
759#endif
760 do i = 1, num_fluids
761 if (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) > sgm_eps) q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, &
762 & l) = q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)/rho_k_s(i)
763 end do
764
765 end subroutine s_equilibrate_pressure
766
767 !> Correct internal energies using equilibrated pressure
768 subroutine s_correct_internal_energies(q_cons_vf, j, k, l)
769
770
771# 215 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
772#if MFC_OpenACC
773# 215 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
774!$acc routine seq
775# 215 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
776#elif MFC_OpenMP
777# 215 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
778
779# 215 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
780
781# 215 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
782!$omp declare target device_type(any)
783# 215 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
784#endif
785
786 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
787 integer, intent(in) :: j, k, l
788# 222 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
789 real(wp), dimension(num_fluids) :: alpha_rho, alpha
790# 224 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
791 real(wp) :: rho, dyn_pres, gamma, pi_inf, pres_relax, sum_alpha
792 real(wp), dimension(2) :: Re
793 integer :: i, q
794
795
796# 228 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
797#if defined(MFC_OpenACC)
798# 228 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
799!$acc loop seq
800# 228 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
801#elif defined(MFC_OpenMP)
802# 228 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
803
804# 228 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
805#endif
806 do i = 1, num_fluids
807 alpha_rho(i) = q_cons_vf(i)%sf(j, k, l)
808 alpha(i) = q_cons_vf(eqn_idx%E + i)%sf(j, k, l)
809 end do
810
811 ! Compute mixture properties (combined bubble and standard logic)
812 rho = 0._wp
813 gamma = 0._wp
814 pi_inf = 0._wp
815
816 if (bubbles_euler) then
817 if (mpp_lim .and. (model_eqns == 2) .and. (num_fluids > 2)) then
818
819# 241 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
820#if defined(MFC_OpenACC)
821# 241 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
822!$acc loop seq
823# 241 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
824#elif defined(MFC_OpenMP)
825# 241 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
826
827# 241 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
828#endif
829 do i = 1, num_fluids
830 rho = rho + alpha_rho(i)
831 gamma = gamma + alpha(i)*gammas(i)
832 pi_inf = pi_inf + alpha(i)*pi_infs(i)
833 end do
834 else if ((model_eqns == 2) .and. (num_fluids > 2)) then
835
836# 248 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
837#if defined(MFC_OpenACC)
838# 248 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
839!$acc loop seq
840# 248 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
841#elif defined(MFC_OpenMP)
842# 248 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
843
844# 248 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
845#endif
846 do i = 1, num_fluids - 1
847 rho = rho + alpha_rho(i)
848 gamma = gamma + alpha(i)*gammas(i)
849 pi_inf = pi_inf + alpha(i)*pi_infs(i)
850 end do
851 else
852 rho = alpha_rho(1)
853 gamma = gammas(1)
854 pi_inf = pi_infs(1)
855 end if
856 else
857 sum_alpha = 0._wp
858 if (mpp_lim) then
859
860# 262 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
861#if defined(MFC_OpenACC)
862# 262 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
863!$acc loop seq
864# 262 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
865#elif defined(MFC_OpenMP)
866# 262 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
867
868# 262 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
869#endif
870 do i = 1, num_fluids
871 alpha_rho(i) = max(0._wp, alpha_rho(i))
872 alpha(i) = min(max(0._wp, alpha(i)), 1._wp)
873 sum_alpha = sum_alpha + alpha(i)
874 end do
875 alpha = alpha/max(sum_alpha, sgm_eps)
876 end if
877
878
879# 271 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
880#if defined(MFC_OpenACC)
881# 271 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
882!$acc loop seq
883# 271 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
884#elif defined(MFC_OpenMP)
885# 271 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
886
887# 271 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
888#endif
889 do i = 1, num_fluids
890 rho = rho + alpha_rho(i)
891 gamma = gamma + alpha(i)*gammas(i)
892 pi_inf = pi_inf + alpha(i)*pi_infs(i)
893 end do
894
895 if (viscous) then
896
897# 279 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
898#if defined(MFC_OpenACC)
899# 279 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
900!$acc loop seq
901# 279 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
902#elif defined(MFC_OpenMP)
903# 279 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
904
905# 279 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
906#endif
907 do i = 1, 2
908 re(i) = dflt_real
909 if (re_size(i) > 0) re(i) = 0._wp
910
911# 283 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
912#if defined(MFC_OpenACC)
913# 283 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
914!$acc loop seq
915# 283 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
916#elif defined(MFC_OpenMP)
917# 283 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
918
919# 283 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
920#endif
921 do q = 1, re_size(i)
922 re(i) = alpha(re_idx(i, q))/res_pr(i, q) + re(i)
923 end do
924 re(i) = 1._wp/max(re(i), sgm_eps)
925 end do
926 end if
927 end if
928
929 ! Compute dynamic pressure and update internal energies
930 dyn_pres = 0._wp
931
932# 294 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
933#if defined(MFC_OpenACC)
934# 294 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
935!$acc loop seq
936# 294 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
937#elif defined(MFC_OpenMP)
938# 294 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
939
940# 294 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
941#endif
942 do i = eqn_idx%mom%beg, eqn_idx%mom%end
943 dyn_pres = dyn_pres + 5.e-1_wp*q_cons_vf(i)%sf(j, k, l)*q_cons_vf(i)%sf(j, k, l)/max(rho, sgm_eps)
944 end do
945
946 pres_relax = (q_cons_vf(eqn_idx%E)%sf(j, k, l) - dyn_pres - pi_inf)/gamma
947
948
949# 301 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
950#if defined(MFC_OpenACC)
951# 301 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
952!$acc loop seq
953# 301 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
954#elif defined(MFC_OpenMP)
955# 301 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
956
957# 301 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
958#endif
959 do i = 1, num_fluids
960 q_cons_vf(i + eqn_idx%int_en%beg - 1)%sf(j, k, l) = q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, &
961 & l)*(gammas(i)*pres_relax + pi_infs(i))
962 end do
963
964 end subroutine s_correct_internal_energies
965
966end module m_pressure_relaxation
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.
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
integer, dimension(2) re_size
integer, dimension(:,:), allocatable re_idx
logical viscous
Viscous effects.
type(physical_parameters), dimension(num_fluids_max) fluid_pp
Stiffened gas EOS parameters and Reynolds numbers per fluid.
Pressure relaxation for the six-equation multi-component model via Newton–Raphson equilibration and v...
subroutine s_relax_cell_pressure(q_cons_vf, j, k, l)
Process pressure relaxation for a single cell.
real(wp), dimension(:,:), allocatable res_pr
impure subroutine, public s_finalize_pressure_relaxation_module
Finalize the pressure relaxation module.
subroutine s_equilibrate_pressure(q_cons_vf, j, k, l)
Main pressure equilibration using Newton-Raphson.
subroutine, public s_pressure_relaxation_procedure(q_cons_vf)
The main pressure relaxation procedure.
logical function s_needs_pressure_relaxation(q_cons_vf, j, k, l)
Check if pressure relaxation is needed for this cell.
subroutine s_correct_internal_energies(q_cons_vf, j, k, l)
Correct internal energies using equilibrated pressure.
subroutine s_correct_volume_fractions(q_cons_vf, j, k, l)
Correct volume fractions to physical bounds.
impure subroutine, public s_initialize_pressure_relaxation_module
Initialize the pressure relaxation module.