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