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