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