MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_assign_variables.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
2!>
3!! @file
4!! @brief Contains module m_assign_variables
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/pre_process/m_assign_variables.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/pre_process/m_assign_variables.fpp" 2
344
345!> @brief Assigns initial primitive variables to computational cells based on patch geometry
347
352 use m_thermochem, only: num_species, gas_constant, get_mixture_molecular_weight
354
355 implicit none
356
357 public :: s_perturb_primitive
358
360
361 !> Pointer to mixture or species patch assignment routine
363 !> Abstract interface to the two subroutines that assign the patch primitive variables, either mixture or species, depending on
364 !! the subroutine, to a particular cell in the computational domain
365 abstract interface
366
367 !> Skeleton of s_assign_patch_mixture_primitive_variables and s_assign_patch_species_primitive_variables
368 subroutine s_assign_patch_xxxxx_primitive_variables(patch_id, j, k, l, eta, q_prim_vf, patch_id_fp)
369
370 import :: scalar_field, sys_size, n, m, p, wp
371
372 integer, intent(in) :: patch_id
373 integer, intent(in) :: j, k, l
374 real(wp), intent(in) :: eta
375 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
376
377#ifdef MFC_MIXED_PRECISION
378 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
379#else
380 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
381#endif
382
384 end interface
385
386 private
389
390contains
391
392 !> Allocate volume fraction sum and set the patch primitive variable assignment procedure pointer.
394
395 if (.not. igr) then
396 allocate (alf_sum%sf(0:m,0:n,0:p))
397 end if
398
399 ! Select procedure pointer based on multicomponent flow model
400
401 if (model_eqns == model_eqns_gamma_law) then ! Gamma/pi_inf model
403 else ! Volume fraction model
405 end if
406
408
409 !> Assign the mixture primitive variables of the patch designated by the patch_id to the cell that is designated by the indexes
410 !! (j,k,l). In addition, the variable bookkeeping the patch identities in the entire domain is updated with the new assignment.
411 !! Note that if the smoothing of the patch's boundaries is employed, the ensuing primitive variables in the cell will be a type
412 !! of combination of the current patch's primitive variables with those of the smoothing patch. The specific details of the
413 !! combination may be found in Shyue's work (1998).
414 subroutine s_assign_patch_mixture_primitive_variables(patch_id, j, k, l, eta, q_prim_vf, patch_id_fp)
415
416
417# 79 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
418#if MFC_OpenACC
419# 79 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
420!$acc routine seq
421# 79 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
422#elif MFC_OpenMP
423# 79 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
424
425# 79 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
426
427# 79 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
428!$omp declare target device_type(any)
429# 79 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
430#endif
431
432 integer, intent(in) :: patch_id
433 integer, intent(in) :: j, k, l
434 real(wp), intent(in) :: eta
435 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
436#ifdef MFC_MIXED_PRECISION
437 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
438#else
439 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
440#endif
441
442 real(wp) :: ys(1:num_species)
443 integer :: smooth_patch_id
444 integer :: i
445
446 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
447
448 q_prim_vf(1)%sf(j, k, l) = eta*patch_icpp(patch_id)%rho + (1._wp - eta)*patch_icpp(smooth_patch_id)%rho
449
450 do i = 1, eqn_idx%E - eqn_idx%mom%beg
451 q_prim_vf(i + 1)%sf(j, k, l) = 1._wp/q_prim_vf(1)%sf(j, k, &
452 & l)*(eta*patch_icpp(patch_id)%rho*patch_icpp(patch_id)%vel(i) + (1._wp - eta) &
453 & *patch_icpp(smooth_patch_id)%rho*patch_icpp(smooth_patch_id)%vel(i))
454 end do
455
456 q_prim_vf(eqn_idx%gamma)%sf(j, k, l) = eta*patch_icpp(patch_id)%gamma + (1._wp - eta)*patch_icpp(smooth_patch_id)%gamma
457
458 q_prim_vf(eqn_idx%E)%sf(j, k, l) = 1._wp/q_prim_vf(eqn_idx%gamma)%sf(j, k, &
459 & l)*(eta*patch_icpp(patch_id)%gamma*patch_icpp(patch_id)%pres + (1._wp - eta) &
460 & *patch_icpp(smooth_patch_id)%gamma*patch_icpp(smooth_patch_id)%pres)
461
462 q_prim_vf(eqn_idx%pi_inf)%sf(j, k, l) = eta*patch_icpp(patch_id)%pi_inf + (1._wp - eta)*patch_icpp(smooth_patch_id)%pi_inf
463
464 if (chemistry) then
465 block
466 real(wp) :: sum, term
467
468 sum = 0._wp
469 do i = 1, num_species
470 term = eta*patch_icpp(patch_id)%Y(i) + (1._wp - eta)*patch_icpp(smooth_patch_id)%Y(i)
471 q_prim_vf(eqn_idx%species%beg + i - 1)%sf(j, k, l) = term
472 sum = sum + term
473 end do
474
475 sum = max(sum, verysmall)
476
477 do i = 1, num_species
478 q_prim_vf(eqn_idx%species%beg + i - 1)%sf(j, k, l) = q_prim_vf(eqn_idx%species%beg + i - 1)%sf(j, k, l)/sum
479 ys(i) = q_prim_vf(eqn_idx%species%beg + i - 1)%sf(j, k, l)
480 end do
481 end block
482 end if
483
484 if (1._wp - eta < 1.e-16_wp) patch_id_fp(j, k, l) = patch_id
485
487
488 !> Apply a stable pressure perturbation following Ando's method for bubble-laden flows.
489 subroutine s_perturb_primitive(j, k, l, q_prim_vf)
490
491 integer, intent(in) :: j, k, l
492 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
493 integer :: i
494 real(wp) :: n_tait, b_tait, p0
495 real(wp) :: r3bar, n0, ratio, nh, vfh, velh, rhoh, deno
496
497 p0 = 101325._wp
498 n_tait = isentrope_n(1)
499 b_tait = isentrope_b(1)
500
501 if (j < 177) then
502 q_prim_vf(eqn_idx%E)%sf(j, k, l) = 0.5_wp*q_prim_vf(eqn_idx%E)%sf(j, k, l)
503 end if
504
505 if (qbmm) then
506 do i = 1, nb
507 q_prim_vf(eqn_idx%bub%beg + 1 + (i - 1)*nmom)%sf(j, k, l) = q_prim_vf(eqn_idx%bub%beg + 1 + (i - 1)*nmom)%sf(j, &
508 & k, l)*((p0 - bub_pp%pv)/(q_prim_vf(eqn_idx%E)%sf(j, k, l)*p0 - bub_pp%pv))**(1._wp/3._wp)
509 end do
510 end if
511
512 r3bar = 0._wp
513
514 if (qbmm) then
515 do i = 1, nb
516 r3bar = r3bar + weight(i)*0.5_wp*(q_prim_vf(eqn_idx%bub%beg + 1 + (i - 1)*nmom)%sf(j, k, l))**3._wp
517 end do
518 else
519 do i = 1, nb
520 if (polytropic) then
521 r3bar = r3bar + weight(i)*(q_prim_vf(eqn_idx%bub%beg + (i - 1)*2)%sf(j, k, l))**3._wp
522 else
523 r3bar = r3bar + weight(i)*(q_prim_vf(eqn_idx%bub%beg + (i - 1)*4)%sf(j, k, l))**3._wp
524 end if
525 end do
526 end if
527
528 n0 = 3._wp*q_prim_vf(eqn_idx%alf)%sf(j, k, l)/(4._wp*pi*r3bar)
529
530 ratio = ((1._wp + b_tait)/(q_prim_vf(eqn_idx%E)%sf(j, k, l) + b_tait))**(1._wp/n_tait)
531
532 nh = n0/((1._wp - q_prim_vf(eqn_idx%alf)%sf(j, k, l))*ratio + (4._wp*pi/3._wp)*n0*r3bar)
533 vfh = (4._wp*pi/3._wp)*nh*r3bar
534 rhoh = (1._wp - vfh)/ratio
535 deno = 1._wp - (1._wp - q_prim_vf(eqn_idx%alf)%sf(j, k, l))/rhoh
536
537 if (f_approx_equal(deno, 0._wp)) then
538 velh = 0._wp
539 else
540 velh = (q_prim_vf(eqn_idx%E)%sf(j, k, l) - 1._wp)/(1._wp - q_prim_vf(eqn_idx%alf)%sf(j, k, l))/deno
541 velh = sqrt(velh)
542 velh = velh*deno
543 end if
544
545 do i = eqn_idx%cont%beg, eqn_idx%cont%end
546 q_prim_vf(i)%sf(j, k, l) = rhoh
547 end do
548
549 do i = eqn_idx%mom%beg, eqn_idx%mom%end
550 q_prim_vf(i)%sf(j, k, l) = velh
551 end do
552
553 q_prim_vf(eqn_idx%alf)%sf(j, k, l) = vfh
554
555 end subroutine s_perturb_primitive
556
557 !> Assign the species primitive variables, following s_assign_patch_species_primitive_variables with adaptation for
558 !! ensemble-averaged bubble modeling
559 impure subroutine s_assign_patch_species_primitive_variables(patch_id, j, k, l, eta, q_prim_vf, patch_id_fp)
560
561
562# 210 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
563#if MFC_OpenACC
564# 210 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
565!$acc routine seq
566# 210 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
567#elif MFC_OpenMP
568# 210 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
569
570# 210 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
571
572# 210 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
573!$omp declare target device_type(any)
574# 210 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
575#endif
576
577 integer, intent(in) :: patch_id
578 integer, intent(in) :: j, k, l
579 real(wp), intent(in) :: eta
580#ifdef MFC_MIXED_PRECISION
581 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
582#else
583 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
584#endif
585 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
586
587 ! Density, gamma, and liquid stiffness from current and smoothing patches
588 real(wp) :: rho !< density
589 real(wp) :: gamma
590 real(wp) :: pi_inf !< stiffness from SEOS
591 real(wp) :: qv !< reference energy from SEOS
592 real(wp) :: orig_rho
593 real(wp) :: orig_gamma
594 real(wp) :: orig_pi_inf
595 real(wp) :: orig_qv
596 real(wp) :: mur, muv
597 real(wp) :: r3bar
598 real(wp) :: ys(1:num_species)
599 real(stp), dimension(sys_size) :: orig_prim_vf !< Vector to hold original values of cell for smoothing purposes
600 integer :: i
601 integer :: smooth_patch_id
602
603 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
604
605 do i = 1, sys_size
606 orig_prim_vf(i) = q_prim_vf(i)%sf(j, k, l)
607 end do
608
609 if (mpp_lim .and. bubbles_euler) then
610 ! adjust volume fractions, according to modeled gas void fraction
611 alf_sum%sf = 0._wp
612 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
613 alf_sum%sf = alf_sum%sf + q_prim_vf(i)%sf
614 end do
615
616 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
617 q_prim_vf(i)%sf = q_prim_vf(i)%sf*(1._wp - q_prim_vf(eqn_idx%alf)%sf)/alf_sum%sf
618 end do
619 end if
620
621 call s_convert_to_mixture_variables(q_prim_vf, j, k, l, orig_rho, orig_gamma, orig_pi_inf, orig_qv)
622
623 if (.not. igr .or. num_fluids > 1) then
624 do i = eqn_idx%adv%beg, eqn_idx%adv%end
625 q_prim_vf(i)%sf(j, k, l) = patch_icpp(patch_id)%alpha(i - eqn_idx%E)
626 end do
627 end if
628
629 if (mpp_lim .and. bubbles_euler) then
630 ! adjust volume fractions, according to modeled gas void fraction
631 alf_sum%sf = 0._wp
632 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
633 alf_sum%sf = alf_sum%sf + q_prim_vf(i)%sf
634 end do
635
636 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
637 q_prim_vf(i)%sf = q_prim_vf(i)%sf*(1._wp - q_prim_vf(eqn_idx%alf)%sf)/alf_sum%sf
638 end do
639 end if
640
641 do i = 1, eqn_idx%cont%end
642 q_prim_vf(i)%sf(j, k, l) = patch_icpp(patch_id)%alpha_rho(i)
643 end do
644
645 call s_convert_to_mixture_variables(q_prim_vf, j, k, l, patch_icpp(patch_id)%rho, patch_icpp(patch_id)%gamma, &
646 & patch_icpp(patch_id)%pi_inf, patch_icpp(patch_id)%qv)
647
648 do i = 1, eqn_idx%cont%end
649 q_prim_vf(i)%sf(j, k, l) = patch_icpp(smooth_patch_id)%alpha_rho(i)
650 end do
651
652 if (.not. igr .or. num_fluids > 1) then
653 do i = eqn_idx%adv%beg, eqn_idx%adv%end
654 q_prim_vf(i)%sf(j, k, l) = patch_icpp(smooth_patch_id)%alpha(i - eqn_idx%E)
655 end do
656 end if
657
658 if (mpp_lim .and. bubbles_euler) then
659 ! adjust volume fractions, according to modeled gas void fraction
660 alf_sum%sf = 0._wp
661 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
662 alf_sum%sf = alf_sum%sf + q_prim_vf(i)%sf
663 end do
664
665 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
666 q_prim_vf(i)%sf = q_prim_vf(i)%sf*(1._wp - q_prim_vf(eqn_idx%alf)%sf)/alf_sum%sf
667 end do
668 end if
669
670 if (bubbles_euler) then
671 do i = 1, nb
672 mur = r0(i)*patch_icpp(smooth_patch_id)%r0/r0ref
673 muv = patch_icpp(smooth_patch_id)%v0
674 if (qbmm) then
675 ! Initialize the moment set
676 if (dist_type == 1) then
677 q_prim_vf(qbmm_idx%fullmom(i, 0, 0))%sf(j, k, l) = 1._wp
678 q_prim_vf(qbmm_idx%fullmom(i, 1, 0))%sf(j, k, l) = mur
679 q_prim_vf(qbmm_idx%fullmom(i, 0, 1))%sf(j, k, l) = muv
680 q_prim_vf(qbmm_idx%fullmom(i, 2, 0))%sf(j, k, l) = mur**2 + (sigr*r0ref)**2
681 q_prim_vf(qbmm_idx%fullmom(i, 1, 1))%sf(j, k, l) = mur*muv + rhorv*(sigr*r0ref)*(sigv*sqrt(p0ref/rho0ref))
682 q_prim_vf(qbmm_idx%fullmom(i, 0, 2))%sf(j, k, l) = muv**2 + (sigv*sqrt(p0ref/rho0ref))**2
683 else if (dist_type == 2) then
684 q_prim_vf(qbmm_idx%fullmom(i, 0, 0))%sf(j, k, l) = 1._wp
685 q_prim_vf(qbmm_idx%fullmom(i, 1, 0))%sf(j, k, l) = exp((sigr**2)/2._wp)*mur
686 q_prim_vf(qbmm_idx%fullmom(i, 0, 1))%sf(j, k, l) = muv
687 q_prim_vf(qbmm_idx%fullmom(i, 2, 0))%sf(j, k, l) = exp((sigr**2)*2._wp)*(mur**2)
688 q_prim_vf(qbmm_idx%fullmom(i, 1, 1))%sf(j, k, l) = exp((sigr**2)/2._wp)*mur*muv
689 q_prim_vf(qbmm_idx%fullmom(i, 0, 2))%sf(j, k, l) = muv**2 + (sigv*sqrt(p0ref/rho0ref))**2
690 end if
691 else
692 q_prim_vf(qbmm_idx%rs(i))%sf(j, k, l) = mur
693 q_prim_vf(qbmm_idx%vs(i))%sf(j, k, l) = muv
694 if (.not. polytropic) then
695 q_prim_vf(qbmm_idx%ps(i))%sf(j, k, l) = patch_icpp(patch_id)%p0
696 q_prim_vf(qbmm_idx%ms(i))%sf(j, k, l) = patch_icpp(patch_id)%m0
697 end if
698 end if
699 end do
700
701 if (adv_n) then
702 ! Initialize number density
703 r3bar = 0._wp
704 do i = 1, nb
705 r3bar = r3bar + weight(i)*(q_prim_vf(qbmm_idx%rs(i))%sf(j, k, l))**3._wp
706 end do
707 q_prim_vf(eqn_idx%n)%sf(j, k, l) = 3*q_prim_vf(eqn_idx%alf)%sf(j, k, l)/(4*pi*r3bar)
708 end if
709 end if
710
711 call s_convert_to_mixture_variables(q_prim_vf, j, k, l, patch_icpp(smooth_patch_id)%rho, &
712 & patch_icpp(smooth_patch_id)%gamma, patch_icpp(smooth_patch_id)%pi_inf, &
713 & patch_icpp(smooth_patch_id)%qv)
714
715 q_prim_vf(eqn_idx%E)%sf(j, k, l) = (eta*patch_icpp(patch_id)%pres + (1._wp - eta)*orig_prim_vf(eqn_idx%E))
716
717 if (.not. igr .or. num_fluids > 1) then
718 do i = eqn_idx%adv%beg, eqn_idx%adv%end
719 q_prim_vf(i)%sf(j, k, l) = eta*patch_icpp(patch_id)%alpha(i - eqn_idx%E) + (1._wp - eta)*orig_prim_vf(i)
720 end do
721 end if
722
723 if (mhd) then
724 if (n == 0) then ! 1D: By, Bz
725 q_prim_vf(eqn_idx%B%beg)%sf(j, k, l) = eta*patch_icpp(patch_id)%By + (1._wp - eta)*orig_prim_vf(eqn_idx%B%beg)
726 q_prim_vf(eqn_idx%B%beg + 1)%sf(j, k, &
727 & l) = eta*patch_icpp(patch_id)%Bz + (1._wp - eta)*orig_prim_vf(eqn_idx%B%beg + 1)
728 else ! 2D/3D: Bx, By, Bz
729 q_prim_vf(eqn_idx%B%beg)%sf(j, k, l) = eta*patch_icpp(patch_id)%Bx + (1._wp - eta)*orig_prim_vf(eqn_idx%B%beg)
730 q_prim_vf(eqn_idx%B%beg + 1)%sf(j, k, &
731 & l) = eta*patch_icpp(patch_id)%By + (1._wp - eta)*orig_prim_vf(eqn_idx%B%beg + 1)
732 q_prim_vf(eqn_idx%B%beg + 2)%sf(j, k, &
733 & l) = eta*patch_icpp(patch_id)%Bz + (1._wp - eta)*orig_prim_vf(eqn_idx%B%beg + 2)
734 end if
735 end if
736
737 if (hypoelasticity) then
738 do i = 1, (eqn_idx%stress%end - eqn_idx%stress%beg) + 1
739 q_prim_vf(i + eqn_idx%stress%beg - 1)%sf(j, k, &
740 & l) = (eta*patch_icpp(patch_id)%tau_e(i) + (1._wp - eta)*orig_prim_vf(i + eqn_idx%stress%beg - 1))
741 end do
742 end if
743
744 if (mpp_lim .and. bubbles_euler) then
745 ! adjust volume fractions, according to modeled gas void fraction
746 alf_sum%sf = 0._wp
747 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
748 alf_sum%sf = alf_sum%sf + q_prim_vf(i)%sf
749 end do
750
751 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
752 q_prim_vf(i)%sf = q_prim_vf(i)%sf*(1._wp - q_prim_vf(eqn_idx%alf)%sf)/alf_sum%sf
753 end do
754 end if
755
756 ! mixture density is an input
757 do i = 1, eqn_idx%cont%end
758 q_prim_vf(i)%sf(j, k, l) = eta*patch_icpp(patch_id)%alpha_rho(i) + (1._wp - eta)*orig_prim_vf(i)
759 end do
760
761 call s_convert_to_mixture_variables(q_prim_vf, j, k, l, rho, gamma, pi_inf, qv)
762
763 do i = 1, eqn_idx%E - eqn_idx%mom%beg
764 q_prim_vf(i + eqn_idx%cont%end)%sf(j, k, &
765 & l) = (eta*patch_icpp(patch_id)%vel(i) + (1._wp - eta)*orig_prim_vf(i + eqn_idx%cont%end))
766 end do
767
768 if (chemistry) then
769 block
770 real(wp) :: sum, term
771
772 sum = 0._wp
773 do i = 1, num_species
774 term = eta*patch_icpp(patch_id)%Y(i) + (1._wp - eta)*patch_icpp(smooth_patch_id)%Y(i)
775 q_prim_vf(eqn_idx%species%beg + i - 1)%sf(j, k, l) = term
776 sum = sum + term
777 end do
778
779 if (sum < verysmall) then
780 sum = 1._wp
781 end if
782
783 do i = 1, num_species
784 q_prim_vf(eqn_idx%species%beg + i - 1)%sf(j, k, l) = q_prim_vf(eqn_idx%species%beg + i - 1)%sf(j, k, l)/sum
785 ys(i) = q_prim_vf(eqn_idx%species%beg + i - 1)%sf(j, k, l)
786 end do
787 end block
788 end if
789
790 ! Set streamwise velocity to hyperbolic tangent function of y
791 if (mixlayer_vel_profile) then
792 q_prim_vf(1 + eqn_idx%cont%end)%sf(j, k, &
793 & l) = (eta*patch_icpp(patch_id)%vel(1)*tanh(y_cc(k)*mixlayer_vel_coef) + (1._wp - eta)*orig_prim_vf(1 &
794 & + eqn_idx%cont%end))
795 end if
796
797 ! Set partial pressures to mixture pressure for the 6-eqn model
798 if (model_eqns == model_eqns_6eq) then
799 do i = eqn_idx%int_en%beg, eqn_idx%int_en%end
800 q_prim_vf(i)%sf(j, k, l) = q_prim_vf(eqn_idx%E)%sf(j, k, l)
801 end do
802 end if
803
804 if (bubbles_euler) then
805 do i = 1, nb
806 mur = r0(i)*patch_icpp(patch_id)%r0/r0ref
807 muv = patch_icpp(patch_id)%v0
808 if (qbmm) then
809 ! Initialize the moment set
810 if (dist_type == 1) then
811 q_prim_vf(qbmm_idx%fullmom(i, 0, 0))%sf(j, k, l) = 1._wp
812 q_prim_vf(qbmm_idx%fullmom(i, 1, 0))%sf(j, k, l) = mur
813 q_prim_vf(qbmm_idx%fullmom(i, 0, 1))%sf(j, k, l) = muv
814 q_prim_vf(qbmm_idx%fullmom(i, 2, 0))%sf(j, k, l) = mur**2 + (sigr*r0ref)**2
815 q_prim_vf(qbmm_idx%fullmom(i, 1, 1))%sf(j, k, l) = mur*muv + rhorv*(sigr*r0ref)*(sigv*sqrt(p0ref/rho0ref))
816 q_prim_vf(qbmm_idx%fullmom(i, 0, 2))%sf(j, k, l) = muv**2 + (sigv*sqrt(p0ref/rho0ref))**2
817 else if (dist_type == 2) then
818 q_prim_vf(qbmm_idx%fullmom(i, 0, 0))%sf(j, k, l) = 1._wp
819 q_prim_vf(qbmm_idx%fullmom(i, 1, 0))%sf(j, k, l) = exp((sigr**2)/2._wp)*mur
820 q_prim_vf(qbmm_idx%fullmom(i, 0, 1))%sf(j, k, l) = muv
821 q_prim_vf(qbmm_idx%fullmom(i, 2, 0))%sf(j, k, l) = exp((sigr**2)*2._wp)*(mur**2)
822 q_prim_vf(qbmm_idx%fullmom(i, 1, 1))%sf(j, k, l) = exp((sigr**2)/2._wp)*mur*muv
823 q_prim_vf(qbmm_idx%fullmom(i, 0, 2))%sf(j, k, l) = muv**2 + (sigv*sqrt(p0ref/rho0ref))**2
824 end if
825 else
826 q_prim_vf(qbmm_idx%rs(i))%sf(j, k, l) = mur
827 q_prim_vf(qbmm_idx%vs(i))%sf(j, k, l) = muv
828
829 if (.not. polytropic) then
830 q_prim_vf(qbmm_idx%ps(i))%sf(j, k, l) = patch_icpp(patch_id)%p0
831 q_prim_vf(qbmm_idx%ms(i))%sf(j, k, l) = patch_icpp(patch_id)%m0
832 end if
833 end if
834 end do
835
836 if (adv_n) then
837 ! Initialize number density
838 r3bar = 0._wp
839 do i = 1, nb
840 r3bar = r3bar + weight(i)*(q_prim_vf(qbmm_idx%rs(i))%sf(j, k, l))**3._wp
841 end do
842 q_prim_vf(eqn_idx%n)%sf(j, k, l) = 3*q_prim_vf(eqn_idx%alf)%sf(j, k, l)/(4*pi*r3bar)
843 end if
844 end if
845
846 if (mpp_lim .and. bubbles_euler) then
847 ! adjust volume fractions, according to modeled gas void fraction
848 alf_sum%sf = 0._wp
849 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
850 alf_sum%sf = alf_sum%sf + q_prim_vf(i)%sf
851 end do
852
853 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
854 q_prim_vf(i)%sf = q_prim_vf(i)%sf*(1._wp - q_prim_vf(eqn_idx%alf)%sf)/alf_sum%sf
855 end do
856 end if
857
858 if (bubbles_euler .and. (.not. polytropic) .and. (.not. qbmm)) then
859 do i = 1, nb
860 if (f_is_default(real(q_prim_vf(qbmm_idx%ps(i))%sf(j, k, l), kind=wp))) then
861 q_prim_vf(qbmm_idx%ps(i))%sf(j, k, l) = pb0(i)
862 end if
863 if (f_is_default(real(q_prim_vf(qbmm_idx%ms(i))%sf(j, k, l), kind=wp))) then
864 q_prim_vf(qbmm_idx%ms(i))%sf(j, k, l) = mass_v0(i)
865 end if
866 end do
867 end if
868
869 if (surface_tension) then
870 q_prim_vf(eqn_idx%c)%sf(j, k, l) = eta*patch_icpp(patch_id)%cf_val + (1._wp - eta)*orig_prim_vf(eqn_idx%c)
871 end if
872
873 if (1._wp - eta < 1.e-16_wp) patch_id_fp(j, k, l) = patch_id
874
876
877 !> Nullify the patch primitive variable assignment procedure pointer.
883
884end module m_assign_variables
Abstract interface to the two subroutines that assign the patch primitive variables,...
integer, intent(in) k
integer, intent(in) j
integer, intent(in) l
Assigns initial primitive variables to computational cells based on patch geometry.
procedure(s_assign_patch_xxxxx_primitive_variables), pointer, public s_assign_patch_primitive_variables
Pointer to mixture or species patch assignment routine.
impure subroutine, public s_initialize_assign_variables_module
Allocate volume fraction sum and set the patch primitive variable assignment procedure pointer.
subroutine, public s_assign_patch_mixture_primitive_variables(patch_id, j, k, l, eta, q_prim_vf, patch_id_fp)
Assign the mixture primitive variables of the patch designated by the patch_id to the cell that is de...
impure subroutine, public s_finalize_assign_variables_module
Nullify the patch primitive variable assignment procedure pointer.
impure subroutine, public s_assign_patch_species_primitive_variables(patch_id, j, k, l, eta, q_prim_vf, patch_id_fp)
Assign the species primitive variables, following s_assign_patch_species_primitive_variables with ada...
subroutine, public s_perturb_primitive(j, k, l, q_prim_vf)
Apply a stable pressure perturbation following Ando's method for bubble-laden flows.
Compile-time constant parameters: default values, tolerances, and physical constants.
real(wp), parameter verysmall
Very small number.
integer, parameter model_eqns_6eq
integer, parameter model_eqns_gamma_law
Shared derived types for field data, patch geometry, bubble dynamics, and MPI I/O structures.
Defines global parameters for the computational domain, simulation algorithm, and initial conditions.
Basic floating-point utilities: approximate equality, default detection, and coordinate bounds.
Conservative-to-primitive variable conversion, mixture property evaluation, and pressure computation.
Derived type annexing a scalar field (SF).