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