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# 207 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 232 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 243 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 245 "/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# 283 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
127
128# 293 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
129
130# 303 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
131
132# 312 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
133
134# 329 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
135
136# 339 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137
138# 346 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139
140# 352 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141
142# 358 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
143
144# 364 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
145
146# 370 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
147
148# 376 "/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# 192 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
218
219# 213 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220
221# 241 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222
223# 256 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224
225# 266 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
226
227# 275 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
228
229# 291 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
230
231# 301 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
232
233# 308 "/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# 21 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
238
239# 37 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
240
241# 50 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
242
243# 104 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
244
245# 119 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
246
247# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
248
249# 143 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
250
251# 171 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
252
253# 182 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
254
255# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
256
257# 204 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
258
259# 214 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
260
261# 225 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
262
263# 236 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
264
265# 246 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
266
267# 252 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
268
269# 258 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
270
271# 264 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
272
273# 270 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
274
275# 272 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
276# 273 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
277! New line at end of file is required for FYPP
278# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
279
280# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
281
282! Caution:
283! This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI rank.
284! That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0.
285! For an example see misc/nvidia_uvm/bind.sh.
286# 63 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
287
288# 81 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
289
290# 88 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
291
292# 111 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
293
294# 127 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
295
296# 153 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
297
298# 159 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
299
300# 167 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
301! New line at end of file is required for FYPP
302# 7 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp" 2
303
304!> @brief Assigns initial primitive variables to computational cells based on patch geometry
306
307 use m_derived_types ! Definitions of the derived types
308
309 use m_global_parameters ! Global parameters for the code
310
311 use m_variables_conversion ! Subroutines to change the state variables from
312
313 use m_helper_basic !< functions to compare floating point numbers
314
315 use m_thermochem, only: num_species, gas_constant, get_mixture_molecular_weight
316
317 implicit none
318
319 public :: s_perturb_primitive
320
322
325 !! Depending on the multicomponent flow model, this variable is a pointer to
326 !! either the subroutine s_assign_patch_mixture_primitive_variables, or the
327 !! subroutine s_assign_patch_species_primitive_variables
328
329 !> Abstract interface to the two subroutines that assign the patch primitive
330 !! variables, either mixture or species, depending on the subroutine, to a
331 !! particular cell in the computational domain
332 abstract interface
333
334 !> Skeleton of s_assign_patch_mixture_primitive_variables
335 !! and s_assign_patch_species_primitive_variables
336 !! @param patch_id is the patch identifier
337 !! @param j (x) cell index in which the mixture or species primitive variables from the indicated patch are assigned
338 !! @param k (y,th) cell index in which the mixture or species primitive variables from the indicated patch are assigned
339 !! @param l (z) cell index in which the mixture or species primitive variables from the indicated patch are assigned
340 !! @param eta pseudo volume fraction
341 !! @param q_prim_vf Primitive variables
342 !! @param patch_id_fp Array to track patch ids
343 subroutine s_assign_patch_xxxxx_primitive_variables(patch_id, j, k, l, &
344 eta, q_prim_vf, patch_id_fp)
345
346 import :: scalar_field, sys_size, n, m, p, wp
347
348 integer, intent(in) :: patch_id
349 integer, intent(in) :: j, k, l
350 real(wp), intent(in) :: eta
351 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
352#ifdef MFC_MIXED_PRECISION
353 integer(kind=1), dimension(0:m, 0:n, 0:p), intent(inout) :: patch_id_fp
354#else
355 integer, dimension(0:m, 0:n, 0:p), intent(inout) :: patch_id_fp
356#endif
357
359
360 end interface
361
362 private;
368
369contains
370
371 !> @brief Allocates volume fraction sum and sets the patch primitive variable assignment procedure pointer.
373
374 if (.not. igr) then
375 allocate (alf_sum%sf(0:m, 0:n, 0:p))
376 end if
377
378 ! Depending on multicomponent flow model, the appropriate procedure
379 ! for assignment of the patch mixture or species primitive variables
380 ! to a cell in the domain is targeted by the procedure pointer
381
382 if (model_eqns == 1) then ! Gamma/pi_inf model
385 else ! Volume fraction model
388 end if
389
391
392 !> This subroutine assigns the mixture primitive variables
393 !! of the patch designated by the patch_id, to the cell that
394 !! is designated by the indexes (j,k,l). In addition, the
395 !! variable bookkeeping the patch identities in the entire
396 !! domain is updated with the new assignment. Note that if
397 !! the smoothing of the patch's boundaries is employed, the
398 !! ensuing primitive variables in the cell will be a type of
399 !! combination of the current patch's primitive variables
400 !! with those of the smoothing patch. The specific details
401 !! of the combination may be found in Shyue's work (1998).
402 !! @param patch_id the patch identifier
403 !! @param j the x-dir node index
404 !! @param k the y-dir node index
405 !! @param l the z-dir node index
406 !! @param eta pseudo volume fraction
407 !! @param q_prim_vf Primitive variables
408 !! @param patch_id_fp Array to track patch ids
409 subroutine s_assign_patch_mixture_primitive_variables(patch_id, j, k, l, &
410 eta, q_prim_vf, patch_id_fp)
411
412# 115 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
413#if MFC_OpenACC
414# 115 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
415!$acc routine seq
416# 115 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
417#elif MFC_OpenMP
418# 115 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
419
420# 115 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
421
422# 115 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
423!$omp declare target device_type(any)
424# 115 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
425#endif
426
427 integer, intent(in) :: patch_id
428 integer, intent(in) :: j, k, l
429 real(wp), intent(in) :: eta
430 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
431#ifdef MFC_MIXED_PRECISION
432 integer(kind=1), dimension(0:m, 0:n, 0:p), intent(inout) :: patch_id_fp
433#else
434 integer, dimension(0:m, 0:n, 0:p), intent(inout) :: patch_id_fp
435#endif
436
437 real(wp) :: ys(1:num_species)
438
439 integer :: smooth_patch_id
440 integer :: i !< generic loop operator
441
442 ! Assigning the mixture primitive variables of a uniform state patch
443
444 ! Transferring the identity of the smoothing patch
445 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
446
447 ! Density
448 q_prim_vf(1)%sf(j, k, l) = &
449 eta*patch_icpp(patch_id)%rho &
450 + (1._wp - eta)*patch_icpp(smooth_patch_id)%rho
451
452 ! Velocity
453 do i = 1, e_idx - mom_idx%beg
454 q_prim_vf(i + 1)%sf(j, k, l) = &
455 1._wp/q_prim_vf(1)%sf(j, k, l)* &
456 (eta*patch_icpp(patch_id)%rho &
457 *patch_icpp(patch_id)%vel(i) &
458 + (1._wp - eta)*patch_icpp(smooth_patch_id)%rho &
459 *patch_icpp(smooth_patch_id)%vel(i))
460 end do
461
462 ! Specific heat ratio function
463 q_prim_vf(gamma_idx)%sf(j, k, l) = &
464 eta*patch_icpp(patch_id)%gamma &
465 + (1._wp - eta)*patch_icpp(smooth_patch_id)%gamma
466
467 ! Pressure
468 q_prim_vf(e_idx)%sf(j, k, l) = &
469 1._wp/q_prim_vf(gamma_idx)%sf(j, k, l)* &
470 (eta*patch_icpp(patch_id)%gamma &
471 *patch_icpp(patch_id)%pres &
472 + (1._wp - eta)*patch_icpp(smooth_patch_id)%gamma &
473 *patch_icpp(smooth_patch_id)%pres)
474
475 ! Liquid stiffness function
476 q_prim_vf(pi_inf_idx)%sf(j, k, l) = &
477 eta*patch_icpp(patch_id)%pi_inf &
478 + (1._wp - eta)*patch_icpp(smooth_patch_id)%pi_inf
479
480 ! Species Concentrations
481 if (chemistry) then
482 block
483 real(wp) :: sum, term
484
485 ! Accumulating the species concentrations
486 sum = 0._wp
487 do i = 1, num_species
488 term = &
489 eta*patch_icpp(patch_id)%Y(i) &
490 + (1._wp - eta)*patch_icpp(smooth_patch_id)%Y(i)
491 q_prim_vf(chemxb + i - 1)%sf(j, k, l) = term
492 sum = sum + term
493 end do
494
495 sum = max(sum, verysmall)
496
497 ! Normalizing the species concentrations
498 do i = 1, num_species
499 q_prim_vf(chemxb + i - 1)%sf(j, k, l) = &
500 q_prim_vf(chemxb + i - 1)%sf(j, k, l)/sum
501 ys(i) = q_prim_vf(chemxb + i - 1)%sf(j, k, l)
502 end do
503 end block
504 end if
505
506 ! Updating the patch identities bookkeeping variable
507 if (1._wp - eta < 1.e-16_wp) patch_id_fp(j, k, l) = patch_id
508
510
511 !> @brief Applies a stable pressure perturbation following Ando's method for bubble-laden flows.
512 !! @param j the x-dir node index
513 !! @param k the y-dir node index
514 !! @param l the z-dir node index
515 !! @param q_prim_vf Primitive variables
516 subroutine s_perturb_primitive(j, k, l, q_prim_vf)
517
518 integer, intent(in) :: j, k, l
519 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
520
521 integer :: i
522 real(wp) :: pres_mag, loc, n_tait, b_tait, p0
523 real(wp) :: r3bar, n0, ratio, nh, vfh, velh, rhoh, deno
524
525 p0 = 101325._wp
526 pres_mag = 1.e-1_wp
527 loc = x_cc(177)
528 n_tait = gs_min(1)
529 b_tait = ps_inf(1)
530
531 if (j < 177) then
532 q_prim_vf(e_idx)%sf(j, k, l) = 0.5_wp*q_prim_vf(e_idx)%sf(j, k, l)
533 end if
534
535 if (qbmm) then
536 do i = 1, nb
537 q_prim_vf(bubxb + 1 + (i - 1)*nmom)%sf(j, k, l) = q_prim_vf(bubxb + 1 + (i - 1)*nmom)%sf(j, k, l)*((p0 - bub_pp%pv)/(q_prim_vf(e_idx)%sf(j, k, l)*p0 - bub_pp%pv))**(1._wp/3._wp)
538 end do
539 end if
540
541 r3bar = 0._wp
542
543 if (qbmm) then
544 do i = 1, nb
545 r3bar = r3bar + weight(i)*0.5_wp*(q_prim_vf(bubxb + 1 + (i - 1)*nmom)%sf(j, k, l))**3._wp
546 end do
547 else
548 do i = 1, nb
549 if (polytropic) then
550 r3bar = r3bar + weight(i)*(q_prim_vf(bubxb + (i - 1)*2)%sf(j, k, l))**3._wp
551 else
552 r3bar = r3bar + weight(i)*(q_prim_vf(bubxb + (i - 1)*4)%sf(j, k, l))**3._wp
553 end if
554 end do
555 end if
556
557 n0 = 3._wp*q_prim_vf(alf_idx)%sf(j, k, l)/(4._wp*pi*r3bar)
558
559 ratio = ((1._wp + b_tait)/(q_prim_vf(e_idx)%sf(j, k, l) + b_tait))**(1._wp/n_tait)
560
561 nh = n0/((1._wp - q_prim_vf(alf_idx)%sf(j, k, l))*ratio + (4._wp*pi/3._wp)*n0*r3bar)
562 vfh = (4._wp*pi/3._wp)*nh*r3bar
563 rhoh = (1._wp - vfh)/ratio
564 deno = 1._wp - (1._wp - q_prim_vf(alf_idx)%sf(j, k, l))/rhoh
565
566 if (f_approx_equal(deno, 0._wp)) then
567 velh = 0._wp
568 else
569 velh = (q_prim_vf(e_idx)%sf(j, k, l) - 1._wp)/(1._wp - q_prim_vf(alf_idx)%sf(j, k, l))/deno
570 velh = sqrt(velh)
571 velh = velh*deno
572 end if
573
574 do i = cont_idx%beg, cont_idx%end
575 q_prim_vf(i)%sf(j, k, l) = rhoh
576 end do
577
578 do i = mom_idx%beg, mom_idx%end
579 q_prim_vf(i)%sf(j, k, l) = velh
580 end do
581
582 q_prim_vf(alf_idx)%sf(j, k, l) = vfh
583
584 end subroutine s_perturb_primitive
585
586 !> This subroutine assigns the species primitive variables. This follows
587 !! s_assign_patch_species_primitive_variables with adaptation for
588 !! ensemble-averaged bubble modeling
589 !! @param patch_id the patch identifier
590 !! @param j the x-dir node index
591 !! @param k the y-dir node index
592 !! @param l the z-dir node index
593 !! @param eta pseudo volume fraction
594 !! @param q_prim_vf Primitive variables
595 !! @param patch_id_fp Array to track patch ids
596 impure subroutine s_assign_patch_species_primitive_variables(patch_id, j, k, l, &
597 eta, q_prim_vf, patch_id_fp)
598
599# 288 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
600#if MFC_OpenACC
601# 288 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
602!$acc routine seq
603# 288 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
604#elif MFC_OpenMP
605# 288 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
606
607# 288 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
608
609# 288 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
610!$omp declare target device_type(any)
611# 288 "/home/runner/work/MFC/MFC/src/pre_process/m_assign_variables.fpp"
612#endif
613
614 integer, intent(in) :: patch_id
615 integer, intent(in) :: j, k, l
616 real(wp), intent(in) :: eta
617#ifdef MFC_MIXED_PRECISION
618 integer(kind=1), dimension(0:m, 0:n, 0:p), intent(inout) :: patch_id_fp
619#else
620 integer, dimension(0:m, 0:n, 0:p), intent(inout) :: patch_id_fp
621#endif
622 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
623
624 ! Density, the specific heat ratio function and the liquid stiffness
625 ! function, respectively, obtained from the combination of primitive
626 ! variables of the current and smoothing patches
627 real(wp) :: rho !< density
628 real(wp) :: gamma
629 real(wp) :: lit_gamma !< specific heat ratio
630 real(wp) :: pi_inf !< stiffness from SEOS
631 real(wp) :: qv !< reference energy from SEOS
632 real(wp) :: orig_rho
633 real(wp) :: orig_gamma
634 real(wp) :: orig_pi_inf
635 real(wp) :: orig_qv
636 real(wp) :: mur, muv
637 real(wp) :: r3bar
638 real(wp) :: rcoord, theta, phi, xi_sph
639 real(wp), dimension(3) :: xi_cart
640
641 real(wp) :: ys(1:num_species)
642
643 real(stp), dimension(sys_size) :: orig_prim_vf !<
644 !! Vector to hold original values of cell for smoothing purposes
645
646 integer :: i !< Generic loop iterator
647 integer :: smooth_patch_id
648
649 ! Transferring the identity of the smoothing patch
650 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
651
652 ! Transferring original primitive variables
653 do i = 1, sys_size
654 orig_prim_vf(i) = q_prim_vf(i)%sf(j, k, l)
655 end do
656
657 if (mpp_lim .and. bubbles_euler) then
658 !adjust volume fractions, according to modeled gas void fraction
659 alf_sum%sf = 0._wp
660 do i = adv_idx%beg, adv_idx%end - 1
661 alf_sum%sf = alf_sum%sf + q_prim_vf(i)%sf
662 end do
663
664 do i = adv_idx%beg, adv_idx%end - 1
665 q_prim_vf(i)%sf = q_prim_vf(i)%sf*(1._wp - q_prim_vf(alf_idx)%sf) &
666 /alf_sum%sf
667 end do
668 end if
669
670 ! Computing Mixture Variables from Original Primitive Variables
671 ! call s_convert_species_to_mixture_variables( &
672 call s_convert_to_mixture_variables( &
673 q_prim_vf, j, k, l, &
674 orig_rho, &
675 orig_gamma, &
676 orig_pi_inf, orig_qv)
677
678 ! Computing Mixture Variables of Current Patch
679
680 if (.not. igr .or. num_fluids > 1) then
681 ! Volume fraction(s)
682 do i = adv_idx%beg, adv_idx%end
683 q_prim_vf(i)%sf(j, k, l) = patch_icpp(patch_id)%alpha(i - e_idx)
684 end do
685 end if
686
687 if (mpp_lim .and. bubbles_euler) then
688 !adjust volume fractions, according to modeled gas void fraction
689 alf_sum%sf = 0._wp
690 do i = adv_idx%beg, adv_idx%end - 1
691 alf_sum%sf = alf_sum%sf + q_prim_vf(i)%sf
692 end do
693
694 do i = adv_idx%beg, adv_idx%end - 1
695 q_prim_vf(i)%sf = q_prim_vf(i)%sf*(1._wp - q_prim_vf(alf_idx)%sf) &
696 /alf_sum%sf
697 end do
698 end if
699
700 ! Partial densities
701 if (model_eqns /= 4) then
702 do i = 1, cont_idx%end
703 q_prim_vf(i)%sf(j, k, l) = patch_icpp(patch_id)%alpha_rho(i)
704 end do
705 end if
706
707 ! Density and the specific heat ratio and liquid stiffness functions
708 ! call s_convert_species_to_mixture_variables( &
709 call s_convert_to_mixture_variables( &
710 q_prim_vf, j, k, l, &
711 patch_icpp(patch_id)%rho, &
712 patch_icpp(patch_id)%gamma, &
713 patch_icpp(patch_id)%pi_inf, &
714 patch_icpp(patch_id)%qv)
715
716 ! Computing Mixture Variables of Smoothing Patch
717
718 if (model_eqns /= 4) then
719 ! Partial densities
720 do i = 1, cont_idx%end
721 q_prim_vf(i)%sf(j, k, l) = patch_icpp(smooth_patch_id)%alpha_rho(i)
722 end do
723 end if
724
725 if (.not. igr .or. num_fluids > 1) then
726 ! Volume fraction(s)
727 do i = adv_idx%beg, adv_idx%end
728 q_prim_vf(i)%sf(j, k, l) = patch_icpp(smooth_patch_id)%alpha(i - e_idx)
729 end do
730 end if
731
732 if (mpp_lim .and. bubbles_euler) then
733 !adjust volume fractions, according to modeled gas void fraction
734 alf_sum%sf = 0._wp
735 do i = adv_idx%beg, adv_idx%end - 1
736 alf_sum%sf = alf_sum%sf + q_prim_vf(i)%sf
737 end do
738
739 do i = adv_idx%beg, adv_idx%end - 1
740 q_prim_vf(i)%sf = q_prim_vf(i)%sf*(1._wp - q_prim_vf(alf_idx)%sf) &
741 /alf_sum%sf
742 end do
743 end if
744
745 ! Bubbles euler variables
746 if (bubbles_euler) then
747 do i = 1, nb
748 mur = r0(i)*patch_icpp(smooth_patch_id)%r0/r0ref
749 muv = patch_icpp(smooth_patch_id)%v0
750 if (qbmm) then
751 ! Initialize the moment set
752 if (dist_type == 1) then
753 q_prim_vf(bub_idx%fullmom(i, 0, 0))%sf(j, k, l) = 1._wp
754 q_prim_vf(bub_idx%fullmom(i, 1, 0))%sf(j, k, l) = mur
755 q_prim_vf(bub_idx%fullmom(i, 0, 1))%sf(j, k, l) = muv
756 q_prim_vf(bub_idx%fullmom(i, 2, 0))%sf(j, k, l) = mur**2 + (sigr*r0ref)**2
757 q_prim_vf(bub_idx%fullmom(i, 1, 1))%sf(j, k, l) = mur*muv + rhorv*(sigr*r0ref)*(sigv*sqrt(p0ref/rho0ref))
758 q_prim_vf(bub_idx%fullmom(i, 0, 2))%sf(j, k, l) = muv**2 + (sigv*sqrt(p0ref/rho0ref))**2
759 else if (dist_type == 2) then
760 q_prim_vf(bub_idx%fullmom(i, 0, 0))%sf(j, k, l) = 1._wp
761 q_prim_vf(bub_idx%fullmom(i, 1, 0))%sf(j, k, l) = exp((sigr**2)/2._wp)*mur
762 q_prim_vf(bub_idx%fullmom(i, 0, 1))%sf(j, k, l) = muv
763 q_prim_vf(bub_idx%fullmom(i, 2, 0))%sf(j, k, l) = exp((sigr**2)*2._wp)*(mur**2)
764 q_prim_vf(bub_idx%fullmom(i, 1, 1))%sf(j, k, l) = exp((sigr**2)/2._wp)*mur*muv
765 q_prim_vf(bub_idx%fullmom(i, 0, 2))%sf(j, k, l) = muv**2 + (sigv*sqrt(p0ref/rho0ref))**2
766 end if
767 else
768 q_prim_vf(bub_idx%rs(i))%sf(j, k, l) = mur
769 q_prim_vf(bub_idx%vs(i))%sf(j, k, l) = muv
770 if (.not. polytropic) then
771 q_prim_vf(bub_idx%ps(i))%sf(j, k, l) = patch_icpp(patch_id)%p0
772 q_prim_vf(bub_idx%ms(i))%sf(j, k, l) = patch_icpp(patch_id)%m0
773 end if
774 end if
775 end do
776
777 if (adv_n) then
778 ! Initialize number density
779 r3bar = 0._wp
780 do i = 1, nb
781 r3bar = r3bar + weight(i)*(q_prim_vf(bub_idx%rs(i))%sf(j, k, l))**3._wp
782 end do
783 q_prim_vf(n_idx)%sf(j, k, l) = 3*q_prim_vf(alf_idx)%sf(j, k, l)/(4*pi*r3bar)
784 end if
785 end if
786
787 ! Density and the specific heat ratio and liquid stiffness functions
788 ! call s_convert_species_to_mixture_variables( &
789 call s_convert_to_mixture_variables( &
790 q_prim_vf, j, k, l, &
791 patch_icpp(smooth_patch_id)%rho, &
792 patch_icpp(smooth_patch_id)%gamma, &
793 patch_icpp(smooth_patch_id)%pi_inf, &
794 patch_icpp(smooth_patch_id)%qv)
795
796 ! Pressure
797 q_prim_vf(e_idx)%sf(j, k, l) = &
798 (eta*patch_icpp(patch_id)%pres &
799 + (1._wp - eta)*orig_prim_vf(e_idx))
800
801 if (.not. igr .or. num_fluids > 1) then
802 ! Volume fractions \alpha
803 do i = adv_idx%beg, adv_idx%end
804 q_prim_vf(i)%sf(j, k, l) = &
805 eta*patch_icpp(patch_id)%alpha(i - e_idx) &
806 + (1._wp - eta)*orig_prim_vf(i)
807 end do
808 end if
809
810 if (mhd) then
811 if (n == 0) then ! 1D: By, Bz
812 q_prim_vf(b_idx%beg)%sf(j, k, l) = &
813 eta*patch_icpp(patch_id)%By &
814 + (1._wp - eta)*orig_prim_vf(b_idx%beg)
815 q_prim_vf(b_idx%beg + 1)%sf(j, k, l) = &
816 eta*patch_icpp(patch_id)%Bz &
817 + (1._wp - eta)*orig_prim_vf(b_idx%beg + 1)
818 else ! 2D/3D: Bx, By, Bz
819 q_prim_vf(b_idx%beg)%sf(j, k, l) = &
820 eta*patch_icpp(patch_id)%Bx &
821 + (1._wp - eta)*orig_prim_vf(b_idx%beg)
822 q_prim_vf(b_idx%beg + 1)%sf(j, k, l) = &
823 eta*patch_icpp(patch_id)%By &
824 + (1._wp - eta)*orig_prim_vf(b_idx%beg + 1)
825 q_prim_vf(b_idx%beg + 2)%sf(j, k, l) = &
826 eta*patch_icpp(patch_id)%Bz &
827 + (1._wp - eta)*orig_prim_vf(b_idx%beg + 2)
828 end if
829 end if
830
831 ! Elastic Shear Stress
832 if (elasticity) then
833 do i = 1, (stress_idx%end - stress_idx%beg) + 1
834 q_prim_vf(i + stress_idx%beg - 1)%sf(j, k, l) = &
835 (eta*patch_icpp(patch_id)%tau_e(i) &
836 + (1._wp - eta)*orig_prim_vf(i + stress_idx%beg - 1))
837 end do
838 end if
839
840 ! Elastic Shear Stress
841 if (hyperelasticity) then
842
843 if (pre_stress) then ! pre stressed initial condition in spatial domain
844 rcoord = sqrt((x_cc(j)**2 + y_cc(k)**2 + z_cc(l)**2))
845 theta = atan2(y_cc(k), x_cc(j))
846 phi = atan2(sqrt(x_cc(j)**2 + y_cc(k)**2), z_cc(l))
847 !spherical coord, assuming Rmax=1
848 xi_sph = (rcoord**3 - r0ref**3 + 1._wp)**(1._wp/3._wp)
849 xi_cart(1) = xi_sph*sin(phi)*cos(theta)
850 xi_cart(2) = xi_sph*sin(phi)*sin(theta)
851 xi_cart(3) = xi_sph*cos(phi)
852 else
853 xi_cart(1) = x_cc(j)
854 xi_cart(2) = y_cc(k)
855 xi_cart(3) = z_cc(l)
856 end if
857
858 ! assigning the reference map to the q_prim vector field
859 do i = 1, num_dims
860 q_prim_vf(i + xibeg - 1)%sf(j, k, l) = eta*xi_cart(i) + &
861 (1._wp - eta)*orig_prim_vf(i + xibeg - 1)
862 end do
863 end if
864
865 if (mpp_lim .and. bubbles_euler) then
866 !adjust volume fractions, according to modeled gas void fraction
867 alf_sum%sf = 0._wp
868 do i = adv_idx%beg, adv_idx%end - 1
869 alf_sum%sf = alf_sum%sf + q_prim_vf(i)%sf
870 end do
871
872 do i = adv_idx%beg, adv_idx%end - 1
873 q_prim_vf(i)%sf = q_prim_vf(i)%sf*(1._wp - q_prim_vf(alf_idx)%sf) &
874 /alf_sum%sf
875 end do
876 end if
877
878 ! Partial densities \alpha \rho
879 if (model_eqns /= 4) then
880 !mixture density is an input
881 do i = 1, cont_idx%end
882 q_prim_vf(i)%sf(j, k, l) = &
883 eta*patch_icpp(patch_id)%alpha_rho(i) &
884 + (1._wp - eta)*orig_prim_vf(i)
885 end do
886 else
887 !get mixture density from pressure via Tait EOS
888 pi_inf = pi_infs(1)
889 gamma = gammas(1)
890 lit_gamma = gs_min(1)
891
892 ! \rho = (( p_l + pi_inf)/( p_ref + pi_inf))**(1/little_gam) * rhoref(1-alf)
893 q_prim_vf(1)%sf(j, k, l) = &
894 (((q_prim_vf(e_idx)%sf(j, k, l) + pi_inf)/(pref + pi_inf))**(1/lit_gamma))* &
895 rhoref*(1 - q_prim_vf(alf_idx)%sf(j, k, l))
896 end if
897
898 ! Density and the specific heat ratio and liquid stiffness functions
899 ! call s_convert_species_to_mixture_variables(q_prim_vf, j, k, l, &
900 call s_convert_to_mixture_variables(q_prim_vf, j, k, l, &
901 rho, gamma, pi_inf, qv)
902
903 ! Velocity
904 do i = 1, e_idx - mom_idx%beg
905 q_prim_vf(i + cont_idx%end)%sf(j, k, l) = &
906 (eta*patch_icpp(patch_id)%vel(i) &
907 + (1._wp - eta)*orig_prim_vf(i + cont_idx%end))
908 end do
909
910 ! Species Concentrations
911 if (chemistry) then
912 block
913 real(wp) :: sum, term
914
915 ! Accumulating the species concentrations
916 sum = 0._wp
917 do i = 1, num_species
918 term = &
919 eta*patch_icpp(patch_id)%Y(i) &
920 + (1._wp - eta)*patch_icpp(smooth_patch_id)%Y(i)
921 q_prim_vf(chemxb + i - 1)%sf(j, k, l) = term
922 sum = sum + term
923 end do
924
925 if (sum < verysmall) then
926 sum = 1._wp
927 end if
928
929 ! Normalizing the species concentrations
930 do i = 1, num_species
931 q_prim_vf(chemxb + i - 1)%sf(j, k, l) = &
932 q_prim_vf(chemxb + i - 1)%sf(j, k, l)/sum
933 ys(i) = q_prim_vf(chemxb + i - 1)%sf(j, k, l)
934 end do
935 end block
936 end if
937
938 ! Set streamwise velocity to hyperbolic tangent function of y
939 if (mixlayer_vel_profile) then
940 q_prim_vf(1 + cont_idx%end)%sf(j, k, l) = &
941 (eta*patch_icpp(patch_id)%vel(1)*tanh(y_cc(k)*mixlayer_vel_coef) &
942 + (1._wp - eta)*orig_prim_vf(1 + cont_idx%end))
943 end if
944
945 ! Set partial pressures to mixture pressure for the 6-eqn model
946 if (model_eqns == 3) then
947 do i = internalenergies_idx%beg, internalenergies_idx%end
948 q_prim_vf(i)%sf(j, k, l) = q_prim_vf(e_idx)%sf(j, k, l)
949 end do
950 end if
951
952 ! Smoothed bubble variables
953 if (bubbles_euler) then
954 do i = 1, nb
955 mur = r0(i)*patch_icpp(patch_id)%r0/r0ref
956 muv = patch_icpp(patch_id)%v0
957 if (qbmm) then
958 ! Initialize the moment set
959 if (dist_type == 1) then
960 q_prim_vf(bub_idx%fullmom(i, 0, 0))%sf(j, k, l) = 1._wp
961 q_prim_vf(bub_idx%fullmom(i, 1, 0))%sf(j, k, l) = mur
962 q_prim_vf(bub_idx%fullmom(i, 0, 1))%sf(j, k, l) = muv
963 q_prim_vf(bub_idx%fullmom(i, 2, 0))%sf(j, k, l) = mur**2 + (sigr*r0ref)**2
964 q_prim_vf(bub_idx%fullmom(i, 1, 1))%sf(j, k, l) = mur*muv + rhorv*(sigr*r0ref)*(sigv*sqrt(p0ref/rho0ref))
965 q_prim_vf(bub_idx%fullmom(i, 0, 2))%sf(j, k, l) = muv**2 + (sigv*sqrt(p0ref/rho0ref))**2
966 else if (dist_type == 2) then
967 q_prim_vf(bub_idx%fullmom(i, 0, 0))%sf(j, k, l) = 1._wp
968 q_prim_vf(bub_idx%fullmom(i, 1, 0))%sf(j, k, l) = exp((sigr**2)/2._wp)*mur
969 q_prim_vf(bub_idx%fullmom(i, 0, 1))%sf(j, k, l) = muv
970 q_prim_vf(bub_idx%fullmom(i, 2, 0))%sf(j, k, l) = exp((sigr**2)*2._wp)*(mur**2)
971 q_prim_vf(bub_idx%fullmom(i, 1, 1))%sf(j, k, l) = exp((sigr**2)/2._wp)*mur*muv
972 q_prim_vf(bub_idx%fullmom(i, 0, 2))%sf(j, k, l) = muv**2 + (sigv*sqrt(p0ref/rho0ref))**2
973 end if
974 else
975 q_prim_vf(bub_idx%rs(i))%sf(j, k, l) = mur
976 q_prim_vf(bub_idx%vs(i))%sf(j, k, l) = muv
977
978 if (.not. polytropic) then
979 q_prim_vf(bub_idx%ps(i))%sf(j, k, l) = patch_icpp(patch_id)%p0
980 q_prim_vf(bub_idx%ms(i))%sf(j, k, l) = patch_icpp(patch_id)%m0
981 end if
982
983 end if
984 end do
985
986 if (adv_n) then
987 ! Initialize number density
988 r3bar = 0._wp
989 do i = 1, nb
990 r3bar = r3bar + weight(i)*(q_prim_vf(bub_idx%rs(i))%sf(j, k, l))**3._wp
991 end do
992 q_prim_vf(n_idx)%sf(j, k, l) = 3*q_prim_vf(alf_idx)%sf(j, k, l)/(4*pi*r3bar)
993 end if
994 end if
995
996 if (mpp_lim .and. bubbles_euler) then
997 !adjust volume fractions, according to modeled gas void fraction
998 alf_sum%sf = 0._wp
999 do i = adv_idx%beg, adv_idx%end - 1
1000 alf_sum%sf = alf_sum%sf + q_prim_vf(i)%sf
1001 end do
1002
1003 do i = adv_idx%beg, adv_idx%end - 1
1004 q_prim_vf(i)%sf = q_prim_vf(i)%sf*(1._wp - q_prim_vf(alf_idx)%sf) &
1005 /alf_sum%sf
1006 end do
1007 end if
1008
1009 if (bubbles_euler .and. (.not. polytropic) .and. (.not. qbmm)) then
1010 do i = 1, nb
1011 if (f_is_default(real(q_prim_vf(bub_idx%ps(i))%sf(j, k, l), kind=wp))) then
1012 q_prim_vf(bub_idx%ps(i))%sf(j, k, l) = pb0(i)
1013 ! print *, 'setting to pb0'
1014 end if
1015 if (f_is_default(real(q_prim_vf(bub_idx%ms(i))%sf(j, k, l), kind=wp))) then
1016 q_prim_vf(bub_idx%ms(i))%sf(j, k, l) = mass_v0(i)
1017 end if
1018 end do
1019 end if
1020
1021 if (surface_tension) then
1022 q_prim_vf(c_idx)%sf(j, k, l) = eta*patch_icpp(patch_id)%cf_val + &
1023 (1._wp - eta)*orig_prim_vf(c_idx)
1024 end if
1025
1026 ! Updating the patch identities bookkeeping variable
1027 if (1._wp - eta < 1.e-16_wp) patch_id_fp(j, k, l) = patch_id
1028
1029 ! if (j == 1) then
1030 ! print *, (q_prim_vf(bub_idx%rs(i))%sf(j, k, l), i = 1, nb)
1031 ! print *, (q_prim_vf(bub_idx%fullmom(i, 1, 0))%sf(j, k, l), i = 1, nb)
1032 ! print *, (R0(i), i = 1, nb)
1033 ! print *, patch_icpp(patch_id)%r0
1034 ! print *, (bub_idx%rs(i), i = 1, nb)
1035 ! print *, (bub_idx%fullmom(i, 1, 0), i = 1, nb)
1036 ! end if
1037
1039
1040 !> @brief Nullifies the patch primitive variable assignment procedure pointer.
1042
1043 ! Nullifying procedure pointer to the subroutine assigning either
1044 ! the patch mixture or species primitive variables to a cell in the
1045 ! computational domain
1047
1049
1050end 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
impure subroutine, public s_initialize_assign_variables_module
Allocates volume fraction sum and sets 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)
This subroutine assigns the mixture primitive variables of the patch designated by the patch_id,...
impure subroutine, public s_finalize_assign_variables_module
Nullifies 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)
This subroutine assigns the species primitive variables. This follows s_assign_patch_species_primitiv...
subroutine, public s_perturb_primitive(j, k, l, q_prim_vf)
Applies 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.
type(int_bounds_info) mom_idx
Indexes of first & last momentum eqns.
integer sys_size
Number of unknowns in the system of equations.
integer gamma_idx
Index of specific heat ratio func. eqn.
integer model_eqns
Multicomponent flow model.
integer pi_inf_idx
Index of liquid stiffness func. eqn.
type(ic_patch_parameters), dimension(num_patches_max) patch_icpp
Database of the initial condition patch parameters (icpp) for each of the patches employed in the con...
integer e_idx
Index of total energy equation.
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).