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# 9 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
13
14! For moving immersed boundaries in simulation
15# 14 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
16# 6 "/home/runner/work/MFC/MFC/src/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# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
31
32# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
33
34# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
35
36# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
37
38# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39
40# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41
42# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43! New line at end of file is required for FYPP
44# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
45# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
46# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
47# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
48# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
50# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
52
53# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
56
57# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
58
59# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
60
61# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
62
63# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
64
65# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
66
67# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
68
69# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
70! New line at end of file is required for FYPP
71# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
72
73# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
74# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
75# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
76# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
77# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
78
79# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
80
81# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
82
83# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
84
85# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
86
87# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
88
89# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
90
91# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
92
93# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
94
95# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
96
97# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
98
99# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
100
101# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
102
103# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
104
105# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
106
107# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
108
109# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
110
111# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
112
113# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
114
115# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116
117# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
125
126# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
127
128# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
129
130# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
131
132# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
133
134# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
135
136# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137
138# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139
140# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141
142# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
143
144# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
145
146# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
147
148# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
149! New line at end of file is required for FYPP
150# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
151# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
152# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
153# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
154# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
155# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
156# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
157# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
158
159# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
160# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
161# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
162
163# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
164
165# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
166
167# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
168
169# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
170
171# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
172
173# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
174
175# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
176! New line at end of file is required for FYPP
177# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
178
179# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
180
181# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
182
183# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
184
185# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
186
187# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
188
189# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
190
191# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
192
193# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
194
195# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
196
197# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
198
199# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
200
201# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
202
203# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
204
205# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
206
207# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
208
209# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
210
211# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
212
213# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
214
215# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
216
217# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
218
219# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220
221# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222
223# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224
225# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
226
227# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
228
229# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
230
231# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
232
233# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
234! New line at end of file is required for FYPP
235# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
236
237! GPU parallel region (scalar reductions, maxval/minval)
238# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
239
240! GPU parallel loop over threads (most common GPU macro)
241# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
242
243! Required closing for GPU_PARALLEL_LOOP
244# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
245
246! Mark routine for device compilation
247# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
248
249! Declare device-resident data
250# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
251
252! Inner loop within a GPU parallel region
253# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
254
255! Scoped GPU data region
256# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
257
258! Host code with device pointers (for MPI with GPU buffers)
259# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
260
261! Allocate device memory (unscoped)
262# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
263
264! Free device memory
265# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
266
267! Atomic operation on device
268# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
269
270! End atomic capture block
271# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
272
273! Copy data between host and device
274# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
275
276! Synchronization barrier
277# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
278
279! Import GPU library module (openacc or omp_lib)
280# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
281
282! Emit code only for AMD compiler
283# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284
285! Emit code for non-Cray compilers
286# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
287
288! Emit code only for Cray compiler
289# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
290
291! Emit code for non-NVIDIA compilers
292# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
293
294# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
295# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
296! New line at end of file is required for FYPP
297# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
298
299# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
300
301! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
302! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
303! example see misc/nvidia_uvm/bind.sh. NVIDIA unified memory page placement hint
304# 57 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
305
306! Allocate and create GPU device memory
307# 77 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
308
309! Free GPU device memory and deallocate
310# 85 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
311
312! Cray-specific GPU pointer setup for vector fields
313# 109 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
314
315! Cray-specific GPU pointer setup for scalar fields
316# 125 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
317
318! Cray-specific GPU pointer setup for acoustic source spatials
319# 150 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
320
321# 156 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
322
323# 163 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
324! New line at end of file is required for FYPP
325# 7 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp" 2
326
327!> @brief Assigns initial primitive variables to computational cells based on patch geometry
329
334 use m_thermochem, only: num_species, gas_constant, get_mixture_molecular_weight
335
336 implicit none
337
338 public :: s_perturb_primitive
339
341
342 !> Pointer to mixture or species patch assignment routine
344 !> Abstract interface to the two subroutines that assign the patch primitive variables, either mixture or species, depending on
345 !! the subroutine, to a particular cell in the computational domain
346 abstract interface
347
348 !> Skeleton of s_assign_patch_mixture_primitive_variables and s_assign_patch_species_primitive_variables
349 subroutine s_assign_patch_xxxxx_primitive_variables(patch_id, j, k, l, eta, q_prim_vf, patch_id_fp)
350
351 import :: scalar_field, sys_size, n, m, p, wp
352
353 integer, intent(in) :: patch_id
354 integer, intent(in) :: j, k, l
355 real(wp), intent(in) :: eta
356 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
357
358#ifdef MFC_MIXED_PRECISION
359 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
360#else
361 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
362#endif
363
365 end interface
366
367 private
370
371contains
372
373 !> Allocate volume fraction sum and set the patch primitive variable assignment procedure pointer.
375
376 if (.not. igr) then
377 allocate (alf_sum%sf(0:m,0:n,0:p))
378 end if
379
380 ! Select procedure pointer based on multicomponent flow model
381
382 if (model_eqns == 1) then ! Gamma/pi_inf model
384 else ! Volume fraction model
386 end if
387
389
390 !> Assign the mixture primitive variables of the patch designated by the patch_id to the cell that is designated by the indexes
391 !! (j,k,l). In addition, the variable bookkeeping the patch identities in the entire domain is updated with the new assignment.
392 !! Note that if the smoothing of the patch's boundaries is employed, the ensuing primitive variables in the cell will be a type
393 !! of combination of the current patch's primitive variables with those of the smoothing patch. The specific details of the
394 !! combination may be found in Shyue's work (1998).
395 subroutine s_assign_patch_mixture_primitive_variables(patch_id, j, k, l, eta, q_prim_vf, patch_id_fp)
396
397
398# 78 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
399#if MFC_OpenACC
400# 78 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
401!$acc routine seq
402# 78 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
403#elif MFC_OpenMP
404# 78 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
405
406# 78 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
407
408# 78 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
409!$omp declare target device_type(any)
410# 78 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
411#endif
412
413 integer, intent(in) :: patch_id
414 integer, intent(in) :: j, k, l
415 real(wp), intent(in) :: eta
416 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
417#ifdef MFC_MIXED_PRECISION
418 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
419#else
420 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
421#endif
422
423 real(wp) :: ys(1:num_species)
424 integer :: smooth_patch_id
425 integer :: i
426
427 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
428
429 q_prim_vf(1)%sf(j, k, l) = eta*patch_icpp(patch_id)%rho + (1._wp - eta)*patch_icpp(smooth_patch_id)%rho
430
431 do i = 1, eqn_idx%E - eqn_idx%mom%beg
432 q_prim_vf(i + 1)%sf(j, k, l) = 1._wp/q_prim_vf(1)%sf(j, k, &
433 & l)*(eta*patch_icpp(patch_id)%rho*patch_icpp(patch_id)%vel(i) + (1._wp - eta)*patch_icpp(smooth_patch_id) &
434 & %rho*patch_icpp(smooth_patch_id)%vel(i))
435 end do
436
437 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
438
439 q_prim_vf(eqn_idx%E)%sf(j, k, l) = 1._wp/q_prim_vf(eqn_idx%gamma)%sf(j, k, &
440 & l)*(eta*patch_icpp(patch_id)%gamma*patch_icpp(patch_id)%pres + (1._wp - eta)*patch_icpp(smooth_patch_id) &
441 & %gamma*patch_icpp(smooth_patch_id)%pres)
442
443 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
444
445 if (chemistry) then
446 block
447 real(wp) :: sum, term
448
449 sum = 0._wp
450 do i = 1, num_species
451 term = eta*patch_icpp(patch_id)%Y(i) + (1._wp - eta)*patch_icpp(smooth_patch_id)%Y(i)
452 q_prim_vf(eqn_idx%species%beg + i - 1)%sf(j, k, l) = term
453 sum = sum + term
454 end do
455
456 sum = max(sum, verysmall)
457
458 do i = 1, num_species
459 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
460 ys(i) = q_prim_vf(eqn_idx%species%beg + i - 1)%sf(j, k, l)
461 end do
462 end block
463 end if
464
465 if (1._wp - eta < 1.e-16_wp) patch_id_fp(j, k, l) = patch_id
466
468
469 !> Apply a stable pressure perturbation following Ando's method for bubble-laden flows.
470 subroutine s_perturb_primitive(j, k, l, q_prim_vf)
471
472 integer, intent(in) :: j, k, l
473 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
474 integer :: i
475 real(wp) :: n_tait, b_tait, p0
476 real(wp) :: r3bar, n0, ratio, nh, vfh, velh, rhoh, deno
477
478 p0 = 101325._wp
479 n_tait = gs_min(1)
480 b_tait = ps_inf(1)
481
482 if (j < 177) then
483 q_prim_vf(eqn_idx%E)%sf(j, k, l) = 0.5_wp*q_prim_vf(eqn_idx%E)%sf(j, k, l)
484 end if
485
486 if (qbmm) then
487 do i = 1, nb
488 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, &
489 & k, l)*((p0 - bub_pp%pv)/(q_prim_vf(eqn_idx%E)%sf(j, k, l)*p0 - bub_pp%pv))**(1._wp/3._wp)
490 end do
491 end if
492
493 r3bar = 0._wp
494
495 if (qbmm) then
496 do i = 1, nb
497 r3bar = r3bar + weight(i)*0.5_wp*(q_prim_vf(eqn_idx%bub%beg + 1 + (i - 1)*nmom)%sf(j, k, l))**3._wp
498 end do
499 else
500 do i = 1, nb
501 if (polytropic) then
502 r3bar = r3bar + weight(i)*(q_prim_vf(eqn_idx%bub%beg + (i - 1)*2)%sf(j, k, l))**3._wp
503 else
504 r3bar = r3bar + weight(i)*(q_prim_vf(eqn_idx%bub%beg + (i - 1)*4)%sf(j, k, l))**3._wp
505 end if
506 end do
507 end if
508
509 n0 = 3._wp*q_prim_vf(eqn_idx%alf)%sf(j, k, l)/(4._wp*pi*r3bar)
510
511 ratio = ((1._wp + b_tait)/(q_prim_vf(eqn_idx%E)%sf(j, k, l) + b_tait))**(1._wp/n_tait)
512
513 nh = n0/((1._wp - q_prim_vf(eqn_idx%alf)%sf(j, k, l))*ratio + (4._wp*pi/3._wp)*n0*r3bar)
514 vfh = (4._wp*pi/3._wp)*nh*r3bar
515 rhoh = (1._wp - vfh)/ratio
516 deno = 1._wp - (1._wp - q_prim_vf(eqn_idx%alf)%sf(j, k, l))/rhoh
517
518 if (f_approx_equal(deno, 0._wp)) then
519 velh = 0._wp
520 else
521 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
522 velh = sqrt(velh)
523 velh = velh*deno
524 end if
525
526 do i = eqn_idx%cont%beg, eqn_idx%cont%end
527 q_prim_vf(i)%sf(j, k, l) = rhoh
528 end do
529
530 do i = eqn_idx%mom%beg, eqn_idx%mom%end
531 q_prim_vf(i)%sf(j, k, l) = velh
532 end do
533
534 q_prim_vf(eqn_idx%alf)%sf(j, k, l) = vfh
535
536 end subroutine s_perturb_primitive
537
538 !> Assign the species primitive variables, following s_assign_patch_species_primitive_variables with adaptation for
539 !! ensemble-averaged bubble modeling
540 impure subroutine s_assign_patch_species_primitive_variables(patch_id, j, k, l, eta, q_prim_vf, patch_id_fp)
541
542
543# 209 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
544#if MFC_OpenACC
545# 209 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
546!$acc routine seq
547# 209 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
548#elif MFC_OpenMP
549# 209 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
550
551# 209 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
552
553# 209 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
554!$omp declare target device_type(any)
555# 209 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
556#endif
557
558 integer, intent(in) :: patch_id
559 integer, intent(in) :: j, k, l
560 real(wp), intent(in) :: eta
561#ifdef MFC_MIXED_PRECISION
562 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
563#else
564 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
565#endif
566 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
567
568 ! Density, gamma, and liquid stiffness from current and smoothing patches
569 real(wp) :: rho !< density
570 real(wp) :: gamma
571 real(wp) :: lit_gamma !< specific heat ratio
572 real(wp) :: pi_inf !< stiffness from SEOS
573 real(wp) :: qv !< reference energy from SEOS
574 real(wp) :: orig_rho
575 real(wp) :: orig_gamma
576 real(wp) :: orig_pi_inf
577 real(wp) :: orig_qv
578 real(wp) :: mur, muv
579 real(wp) :: r3bar
580 real(wp) :: rcoord, theta, phi, xi_sph
581 real(wp), dimension(3) :: xi_cart
582 real(wp) :: ys(1:num_species)
583 real(stp), dimension(sys_size) :: orig_prim_vf !< Vector to hold original values of cell for smoothing purposes
584 integer :: i
585 integer :: smooth_patch_id
586
587 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
588
589 do i = 1, sys_size
590 orig_prim_vf(i) = q_prim_vf(i)%sf(j, k, l)
591 end do
592
593 if (mpp_lim .and. bubbles_euler) then
594 ! adjust volume fractions, according to modeled gas void fraction
595 alf_sum%sf = 0._wp
596 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
597 alf_sum%sf = alf_sum%sf + q_prim_vf(i)%sf
598 end do
599
600 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
601 q_prim_vf(i)%sf = q_prim_vf(i)%sf*(1._wp - q_prim_vf(eqn_idx%alf)%sf)/alf_sum%sf
602 end do
603 end if
604
605 call s_convert_to_mixture_variables(q_prim_vf, j, k, l, orig_rho, orig_gamma, orig_pi_inf, orig_qv)
606
607 if (.not. igr .or. num_fluids > 1) then
608 do i = eqn_idx%adv%beg, eqn_idx%adv%end
609 q_prim_vf(i)%sf(j, k, l) = patch_icpp(patch_id)%alpha(i - eqn_idx%E)
610 end do
611 end if
612
613 if (mpp_lim .and. bubbles_euler) then
614 ! adjust volume fractions, according to modeled gas void fraction
615 alf_sum%sf = 0._wp
616 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
617 alf_sum%sf = alf_sum%sf + q_prim_vf(i)%sf
618 end do
619
620 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
621 q_prim_vf(i)%sf = q_prim_vf(i)%sf*(1._wp - q_prim_vf(eqn_idx%alf)%sf)/alf_sum%sf
622 end do
623 end if
624
625 if (model_eqns /= 4) then
626 do i = 1, eqn_idx%cont%end
627 q_prim_vf(i)%sf(j, k, l) = patch_icpp(patch_id)%alpha_rho(i)
628 end do
629 end if
630
631 call s_convert_to_mixture_variables(q_prim_vf, j, k, l, patch_icpp(patch_id)%rho, patch_icpp(patch_id)%gamma, &
632 & patch_icpp(patch_id)%pi_inf, patch_icpp(patch_id)%qv)
633
634 if (model_eqns /= 4) then
635 do i = 1, eqn_idx%cont%end
636 q_prim_vf(i)%sf(j, k, l) = patch_icpp(smooth_patch_id)%alpha_rho(i)
637 end do
638 end if
639
640 if (.not. igr .or. num_fluids > 1) then
641 do i = eqn_idx%adv%beg, eqn_idx%adv%end
642 q_prim_vf(i)%sf(j, k, l) = patch_icpp(smooth_patch_id)%alpha(i - eqn_idx%E)
643 end do
644 end if
645
646 if (mpp_lim .and. bubbles_euler) then
647 ! adjust volume fractions, according to modeled gas void fraction
648 alf_sum%sf = 0._wp
649 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
650 alf_sum%sf = alf_sum%sf + q_prim_vf(i)%sf
651 end do
652
653 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
654 q_prim_vf(i)%sf = q_prim_vf(i)%sf*(1._wp - q_prim_vf(eqn_idx%alf)%sf)/alf_sum%sf
655 end do
656 end if
657
658 if (bubbles_euler) then
659 do i = 1, nb
660 mur = r0(i)*patch_icpp(smooth_patch_id)%r0/r0ref
661 muv = patch_icpp(smooth_patch_id)%v0
662 if (qbmm) then
663 ! Initialize the moment set
664 if (dist_type == 1) then
665 q_prim_vf(qbmm_idx%fullmom(i, 0, 0))%sf(j, k, l) = 1._wp
666 q_prim_vf(qbmm_idx%fullmom(i, 1, 0))%sf(j, k, l) = mur
667 q_prim_vf(qbmm_idx%fullmom(i, 0, 1))%sf(j, k, l) = muv
668 q_prim_vf(qbmm_idx%fullmom(i, 2, 0))%sf(j, k, l) = mur**2 + (sigr*r0ref)**2
669 q_prim_vf(qbmm_idx%fullmom(i, 1, 1))%sf(j, k, l) = mur*muv + rhorv*(sigr*r0ref)*(sigv*sqrt(p0ref/rho0ref))
670 q_prim_vf(qbmm_idx%fullmom(i, 0, 2))%sf(j, k, l) = muv**2 + (sigv*sqrt(p0ref/rho0ref))**2
671 else if (dist_type == 2) then
672 q_prim_vf(qbmm_idx%fullmom(i, 0, 0))%sf(j, k, l) = 1._wp
673 q_prim_vf(qbmm_idx%fullmom(i, 1, 0))%sf(j, k, l) = exp((sigr**2)/2._wp)*mur
674 q_prim_vf(qbmm_idx%fullmom(i, 0, 1))%sf(j, k, l) = muv
675 q_prim_vf(qbmm_idx%fullmom(i, 2, 0))%sf(j, k, l) = exp((sigr**2)*2._wp)*(mur**2)
676 q_prim_vf(qbmm_idx%fullmom(i, 1, 1))%sf(j, k, l) = exp((sigr**2)/2._wp)*mur*muv
677 q_prim_vf(qbmm_idx%fullmom(i, 0, 2))%sf(j, k, l) = muv**2 + (sigv*sqrt(p0ref/rho0ref))**2
678 end if
679 else
680 q_prim_vf(qbmm_idx%rs(i))%sf(j, k, l) = mur
681 q_prim_vf(qbmm_idx%vs(i))%sf(j, k, l) = muv
682 if (.not. polytropic) then
683 q_prim_vf(qbmm_idx%ps(i))%sf(j, k, l) = patch_icpp(patch_id)%p0
684 q_prim_vf(qbmm_idx%ms(i))%sf(j, k, l) = patch_icpp(patch_id)%m0
685 end if
686 end if
687 end do
688
689 if (adv_n) then
690 ! Initialize number density
691 r3bar = 0._wp
692 do i = 1, nb
693 r3bar = r3bar + weight(i)*(q_prim_vf(qbmm_idx%rs(i))%sf(j, k, l))**3._wp
694 end do
695 q_prim_vf(eqn_idx%n)%sf(j, k, l) = 3*q_prim_vf(eqn_idx%alf)%sf(j, k, l)/(4*pi*r3bar)
696 end if
697 end if
698
699 call s_convert_to_mixture_variables(q_prim_vf, j, k, l, patch_icpp(smooth_patch_id)%rho, &
700 & patch_icpp(smooth_patch_id)%gamma, patch_icpp(smooth_patch_id)%pi_inf, &
701 & patch_icpp(smooth_patch_id)%qv)
702
703 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))
704
705 if (.not. igr .or. num_fluids > 1) then
706 do i = eqn_idx%adv%beg, eqn_idx%adv%end
707 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)
708 end do
709 end if
710
711 if (mhd) then
712 if (n == 0) then ! 1D: By, Bz
713 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)
714 q_prim_vf(eqn_idx%B%beg + 1)%sf(j, k, &
715 & l) = eta*patch_icpp(patch_id)%Bz + (1._wp - eta)*orig_prim_vf(eqn_idx%B%beg + 1)
716 else ! 2D/3D: Bx, By, Bz
717 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)
718 q_prim_vf(eqn_idx%B%beg + 1)%sf(j, k, &
719 & l) = eta*patch_icpp(patch_id)%By + (1._wp - eta)*orig_prim_vf(eqn_idx%B%beg + 1)
720 q_prim_vf(eqn_idx%B%beg + 2)%sf(j, k, &
721 & l) = eta*patch_icpp(patch_id)%Bz + (1._wp - eta)*orig_prim_vf(eqn_idx%B%beg + 2)
722 end if
723 end if
724
725 if (elasticity) then
726 do i = 1, (eqn_idx%stress%end - eqn_idx%stress%beg) + 1
727 q_prim_vf(i + eqn_idx%stress%beg - 1)%sf(j, k, &
728 & l) = (eta*patch_icpp(patch_id)%tau_e(i) + (1._wp - eta)*orig_prim_vf(i + eqn_idx%stress%beg - 1))
729 end do
730 end if
731
732 if (hyperelasticity) then
733 if (pre_stress) then ! pre stressed initial condition in spatial domain
734 rcoord = sqrt((x_cc(j)**2 + y_cc(k)**2 + z_cc(l)**2))
735 theta = atan2(y_cc(k), x_cc(j))
736 phi = atan2(sqrt(x_cc(j)**2 + y_cc(k)**2), z_cc(l))
737 ! spherical coord, assuming Rmax=1
738 xi_sph = (rcoord**3 - r0ref**3 + 1._wp)**(1._wp/3._wp)
739 xi_cart(1) = xi_sph*sin(phi)*cos(theta)
740 xi_cart(2) = xi_sph*sin(phi)*sin(theta)
741 xi_cart(3) = xi_sph*cos(phi)
742 else
743 xi_cart(1) = x_cc(j)
744 xi_cart(2) = y_cc(k)
745 xi_cart(3) = z_cc(l)
746 end if
747
748 ! assigning the reference map to the q_prim vector field
749 do i = 1, num_dims
750 q_prim_vf(i + eqn_idx%xi%beg - 1)%sf(j, k, l) = eta*xi_cart(i) + (1._wp - eta)*orig_prim_vf(i + eqn_idx%xi%beg - 1)
751 end do
752 end if
753
754 if (mpp_lim .and. bubbles_euler) then
755 ! adjust volume fractions, according to modeled gas void fraction
756 alf_sum%sf = 0._wp
757 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
758 alf_sum%sf = alf_sum%sf + q_prim_vf(i)%sf
759 end do
760
761 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
762 q_prim_vf(i)%sf = q_prim_vf(i)%sf*(1._wp - q_prim_vf(eqn_idx%alf)%sf)/alf_sum%sf
763 end do
764 end if
765
766 if (model_eqns /= 4) then
767 ! mixture density is an input
768 do i = 1, eqn_idx%cont%end
769 q_prim_vf(i)%sf(j, k, l) = eta*patch_icpp(patch_id)%alpha_rho(i) + (1._wp - eta)*orig_prim_vf(i)
770 end do
771 else
772 ! get mixture density from pressure via Tait EOS
773 pi_inf = pi_infs(1)
774 gamma = gammas(1)
775 lit_gamma = gs_min(1)
776
777 ! \rho = (( p_l + pi_inf)/( p_ref + pi_inf))**(1/little_gam) * rhoref(1-alf)
778 q_prim_vf(1)%sf(j, k, l) = (((q_prim_vf(eqn_idx%E)%sf(j, k, &
779 & l) + pi_inf)/(pref + pi_inf))**(1/lit_gamma))*rhoref*(1 - q_prim_vf(eqn_idx%alf)%sf(j, k, l))
780 end if
781
782 call s_convert_to_mixture_variables(q_prim_vf, j, k, l, rho, gamma, pi_inf, qv)
783
784 do i = 1, eqn_idx%E - eqn_idx%mom%beg
785 q_prim_vf(i + eqn_idx%cont%end)%sf(j, k, &
786 & l) = (eta*patch_icpp(patch_id)%vel(i) + (1._wp - eta)*orig_prim_vf(i + eqn_idx%cont%end))
787 end do
788
789 if (chemistry) then
790 block
791 real(wp) :: sum, term
792
793 sum = 0._wp
794 do i = 1, num_species
795 term = eta*patch_icpp(patch_id)%Y(i) + (1._wp - eta)*patch_icpp(smooth_patch_id)%Y(i)
796 q_prim_vf(eqn_idx%species%beg + i - 1)%sf(j, k, l) = term
797 sum = sum + term
798 end do
799
800 if (sum < verysmall) then
801 sum = 1._wp
802 end if
803
804 do i = 1, num_species
805 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
806 ys(i) = q_prim_vf(eqn_idx%species%beg + i - 1)%sf(j, k, l)
807 end do
808 end block
809 end if
810
811 ! Set streamwise velocity to hyperbolic tangent function of y
812 if (mixlayer_vel_profile) then
813 q_prim_vf(1 + eqn_idx%cont%end)%sf(j, k, &
814 & l) = (eta*patch_icpp(patch_id)%vel(1)*tanh(y_cc(k)*mixlayer_vel_coef) + (1._wp - eta)*orig_prim_vf(1 &
815 & + eqn_idx%cont%end))
816 end if
817
818 ! Set partial pressures to mixture pressure for the 6-eqn model
819 if (model_eqns == 3) then
820 do i = eqn_idx%int_en%beg, eqn_idx%int_en%end
821 q_prim_vf(i)%sf(j, k, l) = q_prim_vf(eqn_idx%E)%sf(j, k, l)
822 end do
823 end if
824
825 if (bubbles_euler) then
826 do i = 1, nb
827 mur = r0(i)*patch_icpp(patch_id)%r0/r0ref
828 muv = patch_icpp(patch_id)%v0
829 if (qbmm) then
830 ! Initialize the moment set
831 if (dist_type == 1) then
832 q_prim_vf(qbmm_idx%fullmom(i, 0, 0))%sf(j, k, l) = 1._wp
833 q_prim_vf(qbmm_idx%fullmom(i, 1, 0))%sf(j, k, l) = mur
834 q_prim_vf(qbmm_idx%fullmom(i, 0, 1))%sf(j, k, l) = muv
835 q_prim_vf(qbmm_idx%fullmom(i, 2, 0))%sf(j, k, l) = mur**2 + (sigr*r0ref)**2
836 q_prim_vf(qbmm_idx%fullmom(i, 1, 1))%sf(j, k, l) = mur*muv + rhorv*(sigr*r0ref)*(sigv*sqrt(p0ref/rho0ref))
837 q_prim_vf(qbmm_idx%fullmom(i, 0, 2))%sf(j, k, l) = muv**2 + (sigv*sqrt(p0ref/rho0ref))**2
838 else if (dist_type == 2) then
839 q_prim_vf(qbmm_idx%fullmom(i, 0, 0))%sf(j, k, l) = 1._wp
840 q_prim_vf(qbmm_idx%fullmom(i, 1, 0))%sf(j, k, l) = exp((sigr**2)/2._wp)*mur
841 q_prim_vf(qbmm_idx%fullmom(i, 0, 1))%sf(j, k, l) = muv
842 q_prim_vf(qbmm_idx%fullmom(i, 2, 0))%sf(j, k, l) = exp((sigr**2)*2._wp)*(mur**2)
843 q_prim_vf(qbmm_idx%fullmom(i, 1, 1))%sf(j, k, l) = exp((sigr**2)/2._wp)*mur*muv
844 q_prim_vf(qbmm_idx%fullmom(i, 0, 2))%sf(j, k, l) = muv**2 + (sigv*sqrt(p0ref/rho0ref))**2
845 end if
846 else
847 q_prim_vf(qbmm_idx%rs(i))%sf(j, k, l) = mur
848 q_prim_vf(qbmm_idx%vs(i))%sf(j, k, l) = muv
849
850 if (.not. polytropic) then
851 q_prim_vf(qbmm_idx%ps(i))%sf(j, k, l) = patch_icpp(patch_id)%p0
852 q_prim_vf(qbmm_idx%ms(i))%sf(j, k, l) = patch_icpp(patch_id)%m0
853 end if
854 end if
855 end do
856
857 if (adv_n) then
858 ! Initialize number density
859 r3bar = 0._wp
860 do i = 1, nb
861 r3bar = r3bar + weight(i)*(q_prim_vf(qbmm_idx%rs(i))%sf(j, k, l))**3._wp
862 end do
863 q_prim_vf(eqn_idx%n)%sf(j, k, l) = 3*q_prim_vf(eqn_idx%alf)%sf(j, k, l)/(4*pi*r3bar)
864 end if
865 end if
866
867 if (mpp_lim .and. bubbles_euler) then
868 ! adjust volume fractions, according to modeled gas void fraction
869 alf_sum%sf = 0._wp
870 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
871 alf_sum%sf = alf_sum%sf + q_prim_vf(i)%sf
872 end do
873
874 do i = eqn_idx%adv%beg, eqn_idx%adv%end - 1
875 q_prim_vf(i)%sf = q_prim_vf(i)%sf*(1._wp - q_prim_vf(eqn_idx%alf)%sf)/alf_sum%sf
876 end do
877 end if
878
879 if (bubbles_euler .and. (.not. polytropic) .and. (.not. qbmm)) then
880 do i = 1, nb
881 if (f_is_default(real(q_prim_vf(qbmm_idx%ps(i))%sf(j, k, l), kind=wp))) then
882 q_prim_vf(qbmm_idx%ps(i))%sf(j, k, l) = pb0(i)
883 end if
884 if (f_is_default(real(q_prim_vf(qbmm_idx%ms(i))%sf(j, k, l), kind=wp))) then
885 q_prim_vf(qbmm_idx%ms(i))%sf(j, k, l) = mass_v0(i)
886 end if
887 end do
888 end if
889
890 if (surface_tension) then
891 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)
892 end if
893
894 if (1._wp - eta < 1.e-16_wp) patch_id_fp(j, k, l) = patch_id
895
897
898 !> Nullify the patch primitive variable assignment procedure pointer.
904
905end 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.
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.
logical igr
Use information geometric regularization.
logical, parameter chemistry
Chemistry modeling.
integer sys_size
Number of unknowns in the system of equations.
integer model_eqns
Multicomponent flow model.
type(ic_patch_parameters), dimension(num_patches_max) patch_icpp
IC patch parameters (max: num_patches_max).
type(eqn_idx_info) eqn_idx
All conserved-variable equation index ranges and scalars.
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).