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# 15 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
31# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
32# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
33
34# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
35
36# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
37
38# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39
40# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41
42# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43
44# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45
46# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
47
48# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49! New line at end of file is required for FYPP
50# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
51# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
52# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
53# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
56# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
58
59# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
60# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
61# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
62
63# 15 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
64# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
65# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
66
67# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
68
69# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
70
71# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
72
73# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
74
75# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
76
77# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
78
79# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
80
81# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
82! New line at end of file is required for FYPP
83# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
84
85# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
86# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
87# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
88# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
89# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
90
91# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
92
93# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
94
95# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
96
97# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
98
99# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
100
101# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
102
103# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
104
105# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
106
107# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
108
109# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
110
111# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
112
113# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
114
115# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116
117# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 126 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124
125# 156 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 197 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128
129# 211 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130
131# 236 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132
133# 247 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134
135# 249 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136# 260 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137
138# 310 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139
140# 320 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141
142# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
143
144# 339 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
145
146# 356 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
147
148# 366 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
149
150# 373 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
151
152# 379 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
153
154# 385 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
155
156# 391 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
157
158# 397 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
159
160# 403 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
161! New line at end of file is required for FYPP
162# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
163# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
164# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
165# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
166# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
167# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
168# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
169# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
170
171# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
172# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
173# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
174
175# 15 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
176# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
177# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
178
179# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
180
181# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
182
183# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
184
185# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
186
187# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
188
189# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
190
191# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
192
193# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
194! New line at end of file is required for FYPP
195# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
196
197# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
198
199# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
200
201# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
202
203# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
204
205# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
206
207# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
208
209# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
210
211# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
212
213# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
214
215# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
216
217# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
218
219# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220
221# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222
223# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224
225# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
226
227# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
228
229# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
230
231# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
232
233# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
234
235# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
236
237# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
238
239# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
240
241# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
242
243# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
244
245# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
246
247# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
248
249# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
250
251# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
252! New line at end of file is required for FYPP
253# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
254
255! GPU parallel region (scalar reductions, maxval/minval)
256# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
257
258! GPU parallel loop over threads (most common GPU macro)
259# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
260
261! Required closing for GPU_PARALLEL_LOOP
262# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
263
264! Mark routine for device compilation
265# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
266
267! Declare device-resident data
268# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
269
270! Inner loop within a GPU parallel region
271# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
272
273! Scoped GPU data region
274# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
275
276! Host code with device pointers (for MPI with GPU buffers)
277# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
278
279! Allocate device memory (unscoped)
280# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
281
282! Free device memory
283# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284
285! Atomic operation on device
286# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
287
288! End atomic capture block
289# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
290
291! Copy data between host and device
292# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
293
294! Synchronization barrier
295# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
296
297! Import GPU library module (openacc or omp_lib)
298# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
299
300! Emit code only for AMD compiler
301# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
302
303! Emit code for non-Cray compilers
304# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
305
306! Emit code only for Cray compiler
307# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
308
309! Emit code for non-NVIDIA compilers
310# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
311
312# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
313# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
314! New line at end of file is required for FYPP
315# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
316
317# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
318
319! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
320! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
321! example see misc/nvidia_uvm/bind.sh.
322# 52 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
323
324! Allocate and create GPU device memory
325# 72 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
326
327! Free GPU device memory and deallocate
328# 80 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
329
330! Cray-specific GPU pointer setup for vector fields
331# 104 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
332
333! Cray-specific GPU pointer setup for scalar fields
334# 120 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
335
336! Cray-specific GPU pointer setup for acoustic source spatials
337# 145 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
338
339# 151 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
340
341# 158 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
342! New line at end of file is required for FYPP
343# 7 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp" 2
344
345!> @brief Pressure relaxation for the six-equation multi-component model via Newton--Raphson equilibration and volume-fraction
346!! correction
348
351 use m_mpi_proxy, only: s_mpi_abort
354
355 implicit none
356
358
359 !> Cell updates in which the Newton below stopped on its iteration cap rather than on the tolerance. Counted because the answer
360 !! then depends on that cap, and nothing else in the code says so.
361 integer :: n_hit_cap = 0
362 real(wp) :: worst_residual = 0._wp !< Largest |f| left behind when the cap was reached
363
364contains
365
366 !> The main pressure relaxation procedure
368
369 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
370 integer :: i, j, k, l
371
372# 38 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
373 real(wp), dimension(num_fluids) :: alpha_rho, alpha
374# 40 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
375 real(wp) :: rho, gamma, pi_inf, qv_mix
376 integer :: hit_cap, hit_cap_sum, unusable, unusable_sum
377 real(wp) :: resid, resid_max
378
379 ! Formed here, not one call deeper: CCE OpenACC accepts a num_fluids-sized array passed to a device routine from a
380 ! parallel-loop body, and rejects the same call from inside another acc routine seq.
381 hit_cap_sum = 0
382 unusable_sum = 0
383 resid_max = 0._wp
384
385# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
386
387# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
388#if defined(MFC_OpenACC)
389# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
390!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k, l, alpha_rho, alpha, rho, gamma, pi_inf, qv_mix, hit_cap, resid, unusable) reduction(+:hit_cap_sum, unusable_sum) &
391# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
392!$acc& reduction(max:resid_max)
393# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
394#elif defined(MFC_OpenMP)
395# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
396
397# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
398
399# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
400
401# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
402!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) &
403# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
404!$omp& private(i, j, k, l, alpha_rho, alpha, rho, gamma, pi_inf, qv_mix, hit_cap, resid, unusable) reduction(+:hit_cap_sum, unusable_sum) reduction(max:resid_max)
405# 49 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
406#endif
407# 51 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
408 do l = 0, p
409 do k = 0, n
410 do j = 0, m
411 if (mpp_lim) call s_correct_volume_fractions(q_cons_vf, j, k, l)
412
413 hit_cap = 0
414 resid = 0._wp
415 unusable = 0
417 call s_equilibrate_pressure(q_cons_vf, j, k, l, hit_cap, resid, unusable)
418 end if
419 hit_cap_sum = hit_cap_sum + hit_cap
420 unusable_sum = unusable_sum + unusable
421 resid_max = max(resid_max, resid)
422
423
424# 66 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
425#if defined(MFC_OpenACC)
426# 66 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
427!$acc loop seq
428# 66 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
429#elif defined(MFC_OpenMP)
430# 66 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
431
432# 66 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
433#endif
434 do i = 1, num_fluids
435 alpha_rho(i) = q_cons_vf(i)%sf(j, k, l)
436 alpha(i) = q_cons_vf(eqn_idx%E + i)%sf(j, k, l)
437 end do
438
439 call s_convert_species_to_mixture_variables_kernel(rho, gamma, pi_inf, qv_mix, alpha, alpha_rho)
440
441 call s_correct_internal_energies(q_cons_vf, j, k, l, rho, gamma, pi_inf, qv_mix)
442 end do
443 end do
444 end do
445
446# 78 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
447#if defined(MFC_OpenACC)
448# 78 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
449!$acc end parallel loop
450# 78 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
451#elif defined(MFC_OpenMP)
452# 78 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
453
454# 78 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
455!$omp end target teams loop
456# 78 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
457#endif
458 n_hit_cap = n_hit_cap + hit_cap_sum
459 worst_residual = max(worst_residual, resid_max)
460
461 ! Equilibration produced a density that is not a usable number. Continuing means advancing a cell that has
462 ! no physical state, which is the kind of quiet wrongness that only shows up as a bad answer much later.
463 if (unusable_sum > 0) then
464 call s_mpi_abort('Pressure relaxation produced a non-physical phasic density. Exiting.')
465 end if
466
468
469 !> One line at the end of a run if the equilibration ever stopped on its iteration cap. Silence means every cell reached the
470 !! tolerance.
472
473 if (n_hit_cap > 0 .and. proc_rank == 0) then
474 print '(A,I0,A,ES10.3,A)', ' Pressure relaxation reached its iteration cap in ', n_hit_cap, &
475 & ' cell updates; worst residual left behind ', worst_residual, ' against a 1e-10 tolerance.'
476 end if
477
478 end subroutine s_report_pressure_relaxation
479
480 !> Check if pressure relaxation is needed for this cell
481 logical function s_needs_pressure_relaxation(q_cons_vf, j, k, l)
482
483
484# 104 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
485#if MFC_OpenACC
486# 104 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
487!$acc routine seq
488# 104 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
489#elif MFC_OpenMP
490# 104 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
491
492# 104 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
493
494# 104 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
495!$omp declare target device_type(any)
496# 104 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
497#endif
498
499 type(scalar_field), dimension(sys_size), intent(in) :: q_cons_vf
500 integer, intent(in) :: j, k, l
501 integer :: i
502
504
505# 111 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
506#if defined(MFC_OpenACC)
507# 111 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
508!$acc loop seq
509# 111 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
510#elif defined(MFC_OpenMP)
511# 111 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
512
513# 111 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
514#endif
515 do i = 1, num_fluids
516 if (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) > (1._wp - sgm_eps)) then
518 end if
519 end do
520
521 end function s_needs_pressure_relaxation
522
523 !> Correct volume fractions to physical bounds
524 subroutine s_correct_volume_fractions(q_cons_vf, j, k, l)
525
526
527# 123 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
528#if MFC_OpenACC
529# 123 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
530!$acc routine seq
531# 123 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
532#elif MFC_OpenMP
533# 123 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
534
535# 123 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
536
537# 123 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
538!$omp declare target device_type(any)
539# 123 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
540#endif
541
542 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
543 integer, intent(in) :: j, k, l
544 real(wp) :: sum_alpha
545 integer :: i
546
547 sum_alpha = 0._wp
548
549# 131 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
550#if defined(MFC_OpenACC)
551# 131 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
552!$acc loop seq
553# 131 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
554#elif defined(MFC_OpenMP)
555# 131 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
556
557# 131 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
558#endif
559 do i = 1, num_fluids
560 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, &
561 & l) < 0._wp)) then
562 q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l) = 0._wp
563 q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) = 0._wp
564 q_cons_vf(i + eqn_idx%int_en%beg - 1)%sf(j, k, l) = 0._wp
565 end if
566 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
567 sum_alpha = sum_alpha + q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l)
568 end do
569
570
571# 143 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
572#if defined(MFC_OpenACC)
573# 143 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
574!$acc loop seq
575# 143 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
576#elif defined(MFC_OpenMP)
577# 143 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
578
579# 143 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
580#endif
581 do i = 1, num_fluids
582 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
583 end do
584
585 end subroutine s_correct_volume_fractions
586
587 !> Main pressure equilibration using Newton-Raphson
588 subroutine s_equilibrate_pressure(q_cons_vf, j, k, l, hit_cap, resid, unusable)
589
590
591# 153 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
592#if MFC_OpenACC
593# 153 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
594!$acc routine seq
595# 153 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
596#elif MFC_OpenMP
597# 153 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
598
599# 153 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
600
601# 153 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
602!$omp declare target device_type(any)
603# 153 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
604#endif
605
606 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
607 integer, intent(in) :: j, k, l
608 integer, intent(out) :: hit_cap, unusable
609 real(wp), intent(out) :: resid
610 real(wp) :: pres_relax, f_pres, df_pres
611# 163 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
612 real(wp), dimension(num_fluids) :: pres_K_init, rho_K_init, rho_K_s
613# 165 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
614 real(wp) :: gamma_K, pi_inf_K, dpi_K, dgamma_K, c2_K, alpha_i, alpha_rho_i, rho_i, p_i, rho_s_i
615 integer, parameter :: MAX_ITER = 50
616 ! Pressure relaxation convergence tolerance
617 real(wp), parameter :: TOLERANCE = 1.e-10_wp
618 integer :: iter, i
619 logical :: usable
620
621 ! Initialize pressures
622 pres_relax = 0._wp
623
624# 174 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
625#if defined(MFC_OpenACC)
626# 174 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
627!$acc loop seq
628# 174 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
629#elif defined(MFC_OpenMP)
630# 174 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
631
632# 174 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
633#endif
634 do i = 1, num_fluids
635 if (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) > sgm_eps) then
636 ! Phasic internal energy carries the formation energy: alpha_rho_k*qv_k must be
637 ! removed before inverting the stiffened-gas EOS, or a nonzero qv inflates the
638 ! phasic pressure by rho_k*qv_k/gamma_k (this is what breaks the reactive burn).
639 alpha_rho_i = q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)
640 alpha_i = q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l)
641 call s_phase_coefficients(alpha_rho_i, alpha_i, i, rho_i, gamma_k, pi_inf_k, dpi_k, dgamma_k)
642 rho_k_init(i) = rho_i
643 pres_k_init(i) = ((q_cons_vf(i + eqn_idx%int_en%beg - 1)%sf(j, k, l) - q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, &
644 & k, l)*qvs(i))/q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) - pi_inf_k)/gamma_k
645 if (.not. f_is_state_dependent(i)) then
646 if (pres_k_init(i) <= -(1._wp - 1.e-8_wp)*isentrope_b(i) + 1.e-8_wp) pres_k_init(i) = -(1._wp - 1.e-8_wp) &
647 & *isentrope_b(i) + 1.e-8_wp
648 end if
649 else
650 pres_k_init(i) = 0._wp
651 end if
652 pres_relax = pres_relax + q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l)*pres_k_init(i)
653 end do
654
655 ! Newton-Raphson iteration
656 f_pres = 1.e-9_wp
657 df_pres = 1.e9_wp
658
659# 199 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
660#if defined(MFC_OpenACC)
661# 199 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
662!$acc loop seq
663# 199 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
664#elif defined(MFC_OpenMP)
665# 199 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
666
667# 199 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
668#endif
669 do iter = 0, max_iter - 1
670 if (abs(f_pres) > tolerance) then
671 pres_relax = pres_relax - f_pres/df_pres
672
673 ! Enforce pressure bounds
674 do i = 1, num_fluids
675 if (.not. f_is_state_dependent(i)) then
676 if (pres_relax <= -(1._wp - 1.e-8_wp)*isentrope_b(i) + 1.e-8_wp) pres_relax = -(1._wp - 1.e-8_wp) &
677 & *isentrope_b(i) + 1.e-8_wp
678 end if
679 end do
680
681 ! Newton-Raphson step
682 f_pres = -1._wp
683 df_pres = 0._wp
684
685# 215 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
686#if defined(MFC_OpenACC)
687# 215 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
688!$acc loop seq
689# 215 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
690#elif defined(MFC_OpenMP)
691# 215 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
692
693# 215 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
694#endif
695 do i = 1, num_fluids
696 if (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) > sgm_eps .and. any_state_dependent_eos) then
697 rho_i = rho_k_init(i)
698 p_i = pres_k_init(i)
699 call s_phase_density_on_isentrope(i, rho_i, p_i, pres_relax, rho_s_i, c2_k)
700 rho_k_s(i) = rho_s_i
701 f_pres = f_pres + q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)/rho_k_s(i)
702 df_pres = df_pres - q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)/(rho_k_s(i)**2*c2_k)
703 else if (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) > sgm_eps) then
704 ! Isentropic relation: rho = rho0 * (p/p0)^(1/gamma), Saurel et al. JFM (2009)
705 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, &
706 & k, l), &
707 & sgm_eps)*((pres_relax + isentrope_b(i))/(pres_k_init(i) + isentrope_b(i)))**(1._wp/isentrope_n(i))
708 f_pres = f_pres + q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)/rho_k_s(i)
709 df_pres = df_pres - q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, &
710 & l)/(isentrope_n(i)*rho_k_s(i)*(pres_relax + isentrope_b(i)))
711 end if
712 end do
713 end if
714 end do
715
716 ! Written as .not. (<=) so a NaN residual is reported as a miss, like a diverged one.
717 hit_cap = 0
718 resid = 0._wp
719 unusable = 0
720 if (.not. (abs(f_pres) <= tolerance)) then
721 hit_cap = 1
722 ! A NaN residual has to be mapped, not passed on: max() with a NaN keeps the other operand, so the
723 ! reduction would report the miss as zero.
724 resid = abs(f_pres)
725 if (f_pres /= f_pres) resid = huge(1._wp)
726 end if
727
728 ! An unconverged-but-physical density is still used: the Newton often stops on the iteration cap and the
729 ! answer then depends on that cap, so refusing it would move every six-equation result. A density that is
730 ! not a usable number is different -- the equilibration has failed, and the cell has no physical state to
731 ! continue from. Flag it and let the caller stop the run rather than quietly leaving the cell unrelaxed.
732 ! Written as .not. (> 0) so a NaN takes the same path as a non-positive value.
733 ! No early return: Cray OpenACC rejects a RETURN inside an accelerator loop.
734 usable = .true.
735
736# 256 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
737#if defined(MFC_OpenACC)
738# 256 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
739!$acc loop seq
740# 256 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
741#elif defined(MFC_OpenMP)
742# 256 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
743
744# 256 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
745#endif
746 do i = 1, num_fluids
747 if (q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l) > sgm_eps .and. .not. (rho_k_s(i) > 0._wp)) usable = .false.
748 end do
749
750 if (usable) then
751
752# 262 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
753#if defined(MFC_OpenACC)
754# 262 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
755!$acc loop seq
756# 262 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
757#elif defined(MFC_OpenMP)
758# 262 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
759
760# 262 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
761#endif
762 do i = 1, num_fluids
763 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, &
764 & l) = q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)/rho_k_s(i)
765 end do
766 else
767 unusable = 1
768 end if
769
770 end subroutine s_equilibrate_pressure
771
772 !> Correct internal energies using equilibrated pressure
773 subroutine s_correct_internal_energies(q_cons_vf, j, k, l, rho, gamma, pi_inf, qv_mix)
774
775
776# 276 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
777#if MFC_OpenACC
778# 276 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
779!$acc routine seq
780# 276 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
781#elif MFC_OpenMP
782# 276 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
783
784# 276 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
785
786# 276 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
787!$omp declare target device_type(any)
788# 276 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
789#endif
790
791 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
792 integer, intent(in) :: j, k, l
793 real(wp), intent(in) :: rho, gamma, pi_inf, qv_mix
794 real(wp) :: dyn_pres, pres_relax, alpha_i, alpha_rho_i, e_i
795 integer :: i
796
797 dyn_pres = 0._wp
798
799# 285 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
800#if defined(MFC_OpenACC)
801# 285 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
802!$acc loop seq
803# 285 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
804#elif defined(MFC_OpenMP)
805# 285 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
806
807# 285 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
808#endif
809 do i = eqn_idx%mom%beg, eqn_idx%mom%end
810 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)
811 end do
812
813 pres_relax = f_pressure(q_cons_vf(eqn_idx%E)%sf(j, k, l) - dyn_pres, gamma, pi_inf, qv_mix)
814
815
816# 292 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
817#if defined(MFC_OpenACC)
818# 292 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
819!$acc loop seq
820# 292 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
821#elif defined(MFC_OpenMP)
822# 292 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
823
824# 292 "/home/runner/work/MFC/MFC/src/simulation/m_pressure_relaxation.fpp"
825#endif
826 do i = 1, num_fluids
827 alpha_i = q_cons_vf(i + eqn_idx%adv%beg - 1)%sf(j, k, l)
828 alpha_rho_i = q_cons_vf(i + eqn_idx%cont%beg - 1)%sf(j, k, l)
829 call s_phase_internal_energy(pres_relax, alpha_i, alpha_rho_i, i, e_i)
830 q_cons_vf(i + eqn_idx%int_en%beg - 1)%sf(j, k, l) = e_i
831 end do
832
833 end subroutine s_correct_internal_energies
834
835end 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 proc_rank
Rank of the local processor.
MPI halo exchange, domain decomposition, and buffer packing/unpacking for the simulation solver.
Pressure relaxation for the six-equation multi-component model via Newton–Raphson equilibration and v...
subroutine s_equilibrate_pressure(q_cons_vf, j, k, l, hit_cap, resid, unusable)
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, rho, gamma, pi_inf, qv_mix)
Correct internal energies using equilibrated pressure.
integer n_hit_cap
Cell updates in which the Newton below stopped on its iteration cap rather than on the tolerance....
real(wp) worst_residual
Largest |f| left behind when the cap was reached.
impure subroutine, public s_report_pressure_relaxation
One line at the end of a run if the equilibration ever stopped on its iteration cap....
subroutine s_correct_volume_fractions(q_cons_vf, j, k, l)
Correct volume fractions to physical bounds.
Conservative-to-primitive variable conversion, mixture property evaluation, and pressure computation.
subroutine, public s_phase_internal_energy(pres, alpha, alpha_rho, i, e_phase)
Internal energy per unit volume of phase i at pressure pres: alpha (Gamma p + Pi) + alpha_rho qv,...
subroutine, public s_phase_density_on_isentrope(i, rho_from, p_from, p_to, rho_to, c2_to)
Density of phase i on the isentrope through (rho_from, p_from) at p_to, and c^2 there: Newton on the ...
subroutine, public s_convert_species_to_mixture_variables_kernel(rho_k, gamma_k, pi_inf_k, qv_k, alpha_k, alpha_rho_k, re_k, g_k, g)
Host- and device-callable conversion kernel for species and mixture variables.
logical function, public f_is_state_dependent(i)
Whether the EOS of fluid i is a family whose coefficients vary with density.
real(wp) function, public f_pressure(e_int, gamma, pi_inf, qv)
Pressure of a stiffened gas from its internal energy density - the inverse of s_compute_energy....
subroutine, public s_phase_coefficients(alpha_rho, alpha, i, rho, gamma, pi_inf, dpi, dgamma)
Coefficients of phase i at its own density alpha_rho/alpha: the per-cell dispatch when some fluid's E...
Derived type annexing a scalar field (SF).