MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_chemistry.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
2!>
3!! @file
4!! @brief Contains module m_chemistry
5!! @author Henry Le Berre <hberre3@gatech.edu>
6
7# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
8# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
9# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
10# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
11# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
12# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
13# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
14# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
15
16# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
17# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
18# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
19
20# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
21
22# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
23
24# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
25
26# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
27
28# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
29
30# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
31
32# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
33! New line at end of file is required for FYPP
34# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
35# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
36# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
37# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
38# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
40# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
42
43# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
44# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
46
47# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
48
49# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
50
51# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
52
53# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54
55# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
56
57# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
58
59# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
60! New line at end of file is required for FYPP
61# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
62
63# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
64# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
65# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
66# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
67# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
68
69# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
70
71# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
72
73# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
74
75# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
76
77# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
78
79# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
80
81# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
82
83# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
84
85# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
86
87# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
88
89# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
90
91# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
92
93# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
94
95# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
96
97# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
98
99# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
100
101# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
102
103# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
104
105# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
106
107# 207 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
108
109# 232 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
110
111# 243 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
112
113# 245 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
114# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
115
116# 283 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
117
118# 293 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
119
120# 303 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
121
122# 312 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
123
124# 329 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
125
126# 339 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
127
128# 346 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
129
130# 352 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
131
132# 358 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
133
134# 364 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
135
136# 370 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137
138# 376 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139! New line at end of file is required for FYPP
140# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
141# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
142# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
143# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
144# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
145# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
146# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
147# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
148
149# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
150# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
151# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
152
153# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
154
155# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
156
157# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
158
159# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
160
161# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
162
163# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
164
165# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
166! New line at end of file is required for FYPP
167# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
168
169# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
170
171# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
172
173# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
174
175# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
176
177# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
178
179# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
180
181# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
182
183# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
184
185# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
186
187# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
188
189# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
190
191# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
192
193# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
194
195# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
196
197# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
198
199# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
200
201# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
202
203# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
204
205# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
206
207# 192 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
208
209# 213 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
210
211# 241 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
212
213# 256 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
214
215# 266 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
216
217# 275 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
218
219# 291 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220
221# 301 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222
223# 308 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224! New line at end of file is required for FYPP
225# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
226
227# 21 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
228
229# 37 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
230
231# 50 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
232
233# 76 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
234
235# 91 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
236
237# 102 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
238
239# 115 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
240
241# 143 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
242
243# 154 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
244
245# 165 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
246
247# 176 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
248
249# 187 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
250
251# 198 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
252
253# 208 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
254
255# 214 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
256
257# 220 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
258
259# 226 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
260
261# 232 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
262
263# 234 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
264# 235 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
265! New line at end of file is required for FYPP
266# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
267
268# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
269
270! Caution:
271! This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI rank.
272! That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0.
273! For an example see misc/nvidia_uvm/bind.sh.
274# 63 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
275
276# 81 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
277
278# 88 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
279
280# 111 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
281
282# 127 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
283
284# 153 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
285
286# 159 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
287
288# 167 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
289! New line at end of file is required for FYPP
290# 7 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp" 2
291# 1 "/home/runner/work/MFC/MFC/src/common/include/case.fpp" 1
292! This file exists so that Fypp can be run without generating case.fpp files for
293! each target. This is useful when generating documentation, for example. This
294! should also let MFC be built with CMake directly, without invoking mfc.sh.
295
296! For pre-process.
297# 9 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
298
299! For moving immersed boundaries in simulation
300# 14 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
301# 8 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp" 2
302
303!> @brief Multi-species chemistry interface for thermodynamic properties, reaction rates, and transport coefficients
305
306 use m_thermochem, only: &
307 num_species, molecular_weights, get_temperature, get_net_production_rates, &
308 get_mole_fractions, get_species_binary_mass_diffusivities, &
309 get_species_mass_diffusivities_mixavg, gas_constant, get_mixture_molecular_weight, &
310 get_mixture_energy_mass, get_mixture_thermal_conductivity_mixavg, get_species_enthalpies_rt, &
311 get_mixture_viscosity_mixavg, get_mixture_specific_heat_cp_mass, get_mixture_enthalpy_mass
312
314
315 implicit none
316
317# 29 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
318
319 type(int_bounds_info) :: isc1, isc2, isc3
320
321# 31 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
322#if defined(MFC_OpenACC)
323# 31 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
324!$acc declare create(isc1, isc2, isc3)
325# 31 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
326#elif defined(MFC_OpenMP)
327# 31 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
328!$omp declare target (isc1, isc2, isc3)
329# 31 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
330#endif
331 integer, dimension(3) :: offsets
332
333# 33 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
334#if defined(MFC_OpenACC)
335# 33 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
336!$acc declare create(offsets)
337# 33 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
338#elif defined(MFC_OpenMP)
339# 33 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
340!$omp declare target (offsets)
341# 33 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
342#endif
343
344contains
345
346 !> @brief Computes mixture viscosities for left and right states and inverts them for use as reciprocal Reynolds numbers.
347 subroutine compute_viscosity_and_inversion(T_L, Ys_L, T_R, Ys_R, Re_L, Re_R)
348
349
350# 40 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
351#ifdef _CRAYFTN
352# 40 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
353!DIR$ INLINEALWAYS compute_viscosity_and_inversion
354# 40 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
355#elif MFC_OpenACC
356# 40 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
357!$acc routine seq
358# 40 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
359#elif MFC_OpenMP
360# 40 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
361
362# 40 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
363
364# 40 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
365!$omp declare target device_type(any)
366# 40 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
367#endif
368# 42 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
369
370 real(wp), intent(inout) :: T_L, T_R, Re_L, Re_R
371 real(wp), dimension(num_species), intent(inout) :: Ys_R, Ys_L
372
373 call get_mixture_viscosity_mixavg(t_l, ys_l, re_l)
374 call get_mixture_viscosity_mixavg(t_r, ys_r, re_r)
375 re_l = 1.0_wp/re_l
376 re_r = 1.0_wp/re_r
377
379
380 !> @brief Initializes the temperature field from conservative variables by inverting the energy equation.
381 subroutine s_compute_q_t_sf(q_T_sf, q_cons_vf, bounds)
382
383 ! Initialize the temperature field at the start of the simulation to
384 ! reasonable values. Temperature is computed the regular way using the
385 ! conservative variables.
386
387 type(scalar_field), intent(inout) :: q_T_sf
388 type(scalar_field), dimension(sys_size), intent(in) :: q_cons_vf
389 type(int_bounds_info), dimension(1:3), intent(in) :: bounds
390
391 integer :: x, y, z, eqn
392 real(wp) :: energy, T_in
393 real(wp), dimension(num_species) :: Ys
394
395 do z = bounds(3)%beg, bounds(3)%end
396 do y = bounds(2)%beg, bounds(2)%end
397 do x = bounds(1)%beg, bounds(1)%end
398 do eqn = chemxb, chemxe
399 ys(eqn - chemxb + 1) = &
400 q_cons_vf(eqn)%sf(x, y, z)/q_cons_vf(contxb)%sf(x, y, z)
401 end do
402
403 ! e = E - 1/2*|u|^2
404 ! cons. E_idx = \rho E
405 ! cons. contxb = \rho (1-fluid model)
406 ! cons. momxb + i = \rho u_i
407 energy = q_cons_vf(e_idx)%sf(x, y, z)/q_cons_vf(contxb)%sf(x, y, z)
408 do eqn = momxb, momxe
409 energy = energy - &
410 0.5_wp*(q_cons_vf(eqn)%sf(x, y, z)/q_cons_vf(contxb)%sf(x, y, z))**2._wp
411 end do
412
413 t_in = real(q_t_sf%sf(x, y, z), kind=wp)
414 call get_temperature(energy, dflt_t_guess, ys, .true., t_in)
415 q_t_sf%sf(x, y, z) = t_in
416
417 end do
418 end do
419 end do
420
421 end subroutine s_compute_q_t_sf
422
423 !> @brief Computes the temperature field from primitive variables using the ideal gas law and mixture molecular weight.
424 subroutine s_compute_t_from_primitives(q_T_sf, q_prim_vf, bounds)
425
426 type(scalar_field), intent(inout) :: q_T_sf
427 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf
428 type(int_bounds_info), dimension(1:3), intent(in) :: bounds
429
430 integer :: x, y, z, i
431 real(wp), dimension(num_species) :: Ys
432 real(wp) :: mix_mol_weight
433
434 do z = bounds(3)%beg, bounds(3)%end
435 do y = bounds(2)%beg, bounds(2)%end
436 do x = bounds(1)%beg, bounds(1)%end
437 do i = chemxb, chemxe
438 ys(i - chemxb + 1) = q_prim_vf(i)%sf(x, y, z)
439 end do
440
441 call get_mixture_molecular_weight(ys, mix_mol_weight)
442 q_t_sf%sf(x, y, z) = q_prim_vf(e_idx)%sf(x, y, z)*mix_mol_weight/(gas_constant*q_prim_vf(1)%sf(x, y, z))
443 end do
444 end do
445 end do
446
447 end subroutine s_compute_t_from_primitives
448
449 !> @brief Adds chemical reaction source terms to the species transport RHS using net production rates.
450 subroutine s_compute_chemistry_reaction_flux(rhs_vf, q_cons_qp, q_T_sf, q_prim_qp, bounds)
451
452 type(scalar_field), dimension(sys_size), intent(inout) :: rhs_vf
453 type(scalar_field), intent(inout) :: q_T_sf
454 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_qp, q_prim_qp
455 type(int_bounds_info), dimension(1:3), intent(in) :: bounds
456
457 integer :: x, y, z
458 integer :: eqn
459 real(wp) :: T
460 real(wp) :: rho, omega_m
461# 138 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
462 real(wp), dimension(num_species) :: Ys
463 real(wp), dimension(num_species) :: omega
464# 141 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
465
466
467# 142 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
468
469# 142 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
470#if defined(MFC_OpenACC)
471# 142 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
472!$acc parallel loop collapse(3) gang vector default(present) private(Ys, omega, eqn, T, rho, omega_m) copyin(bounds)
473# 142 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
474#elif defined(MFC_OpenMP)
475# 142 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
476
477# 142 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
478
479# 142 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
480
481# 142 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
482!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(Ys, omega, eqn, T, rho, omega_m) map(to:bounds)
483# 142 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
484#endif
485# 142 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
486
487 do z = bounds(3)%beg, bounds(3)%end
488 do y = bounds(2)%beg, bounds(2)%end
489 do x = bounds(1)%beg, bounds(1)%end
490
491
492# 147 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
493#if defined(MFC_OpenACC)
494# 147 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
495!$acc loop seq
496# 147 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
497#elif defined(MFC_OpenMP)
498# 147 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
499
500# 147 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
501#endif
502 do eqn = chemxb, chemxe
503 ys(eqn - chemxb + 1) = q_prim_qp(eqn)%sf(x, y, z)
504 end do
505
506 rho = q_cons_qp(contxe)%sf(x, y, z)
507 t = q_t_sf%sf(x, y, z)
508
509 call get_net_production_rates(rho, t, ys, omega)
510
511
512# 157 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
513#if defined(MFC_OpenACC)
514# 157 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
515!$acc loop seq
516# 157 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
517#elif defined(MFC_OpenMP)
518# 157 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
519
520# 157 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
521#endif
522 do eqn = chemxb, chemxe
523# 162 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
524 omega_m = molecular_weights(eqn - chemxb + 1)*omega(eqn - chemxb + 1)
525# 164 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
526 rhs_vf(eqn)%sf(x, y, z) = rhs_vf(eqn)%sf(x, y, z) + omega_m
527
528 end do
529
530 end do
531 end do
532 end do
533
534# 171 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
535
536# 171 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
537#if defined(MFC_OpenACC)
538# 171 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
539!$acc end parallel loop
540# 171 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
541#elif defined(MFC_OpenMP)
542# 171 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
543
544# 171 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
545
546# 171 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
547!$omp end target teams loop
548# 171 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
549#endif
550# 171 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
551
552
554
555 !> @brief Computes species mass diffusion fluxes at cell interfaces using mixture-averaged diffusivities.
556 subroutine s_compute_chemistry_diffusion_flux(idir, q_prim_qp, flux_src_vf, irx, iry, irz)
557
558 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_qp
559 type(scalar_field), dimension(sys_size), intent(inout) :: flux_src_vf
560 type(int_bounds_info), intent(in) :: irx, iry, irz
561
562 integer, intent(in) :: idir
563# 189 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
564 real(wp), dimension(num_species) :: Xs_L, Xs_R, Xs_cell, Ys_L, Ys_R, Ys_cell
565 real(wp), dimension(num_species) :: mass_diffusivities_mixavg1, mass_diffusivities_mixavg2
566 real(wp), dimension(num_species) :: mass_diffusivities_mixavg_Cell, dXk_dxi, h_l, h_r, h_k
567 real(wp), dimension(num_species) :: Mass_Diffu_Flux, dYk_dxi
568# 194 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
569
570 real(wp) :: Mass_Diffu_Energy
571 real(wp) :: MW_L, MW_R, MW_cell, Rgas_L, Rgas_R, T_L, T_R, P_L, P_R, rho_L, rho_R, rho_cell, rho_Vic
572 real(wp) :: lambda_L, lambda_R, lambda_Cell, dT_dxi, grid_spacing
573 real(wp) :: Cp_L, Cp_R
574 real(wp) :: diffusivity_L, diffusivity_R, diffusivity_cell
575 real(wp) :: hmix_L, hmix_R, dh_dxi
576
577 integer :: x, y, z, i, n, eqn
578 integer, dimension(3) :: offsets
579
580 isc1 = irx; isc2 = iry; isc3 = irz
581
582
583# 207 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
584#if defined(MFC_OpenACC)
585# 207 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
586!$acc update device(isc1, isc2, isc3)
587# 207 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
588#elif defined(MFC_OpenMP)
589# 207 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
590!$omp target update to(isc1, isc2, isc3)
591# 207 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
592#endif
593
594 if (chemistry .or. dummy) then
595
596 ! Set offsets based on direction using array indexing
597 offsets = 0
598 offsets(idir) = 1
599 ! Model 1: Mixture-Average Transport
600 if (chem_params%transport_model == 1) then
601 ! Note: Added 'i' and 'eqn' to private list.
602
603# 217 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
604
605# 217 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
606#if defined(MFC_OpenACC)
607# 217 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
608!$acc parallel loop collapse(3) gang vector default(present) private(x, y, z, i, eqn, Ys_L, Ys_R, Ys_cell, Xs_L, Xs_R, mass_diffusivities_mixavg1, mass_diffusivities_mixavg2, mass_diffusivities_mixavg_Cell, h_l, h_r, Xs_cell, h_k, dXk_dxi, Mass_Diffu_Flux, Mass_Diffu_Energy, MW_L, MW_R, MW_cell, Rgas_L, Rgas_R, T_L, T_R, P_L, P_R, rho_L, rho_R, rho_cell, rho_Vic, lambda_L, lambda_R, lambda_Cell, dT_dxi, grid_spacing) copyin(offsets)
609# 217 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
610#elif defined(MFC_OpenMP)
611# 217 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
612
613# 217 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
614
615# 217 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
616
617# 217 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
618!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(x, y, z, i, eqn, Ys_L, Ys_R, Ys_cell, Xs_L, Xs_R, mass_diffusivities_mixavg1, mass_diffusivities_mixavg2, mass_diffusivities_mixavg_Cell, h_l, h_r, Xs_cell, h_k, dXk_dxi, Mass_Diffu_Flux, Mass_Diffu_Energy, MW_L, MW_R, MW_cell, Rgas_L, Rgas_R, T_L, T_R, P_L, P_R, rho_L, rho_R, rho_cell, rho_Vic, lambda_L, lambda_R, lambda_Cell, dT_dxi, grid_spacing) map(to:offsets)
619# 217 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
620#endif
621# 217 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
622
623 do z = isc3%beg, isc3%end
624 do y = isc2%beg, isc2%end
625 do x = isc1%beg, isc1%end
626 ! Calculate grid spacing using direction-based indexing
627 select case (idir)
628 case (1)
629 grid_spacing = x_cc(x + 1) - x_cc(x)
630 case (2)
631 grid_spacing = y_cc(y + 1) - y_cc(y)
632 case (3)
633 grid_spacing = z_cc(z + 1) - z_cc(z)
634 end select
635
636 ! Extract species mass fractions
637
638# 232 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
639#if defined(MFC_OpenACC)
640# 232 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
641!$acc loop seq
642# 232 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
643#elif defined(MFC_OpenMP)
644# 232 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
645
646# 232 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
647#endif
648 do i = chemxb, chemxe
649 ys_l(i - chemxb + 1) = q_prim_qp(i)%sf(x, y, z)
650 ys_r(i - chemxb + 1) = q_prim_qp(i)%sf(x + offsets(1), y + offsets(2), z + offsets(3))
651 ys_cell(i - chemxb + 1) = 0.5_wp*(ys_l(i - chemxb + 1) + ys_r(i - chemxb + 1))
652 end do
653
654 ! Calculate molecular weights and mole fractions
655 call get_mixture_molecular_weight(ys_l, mw_l)
656 call get_mixture_molecular_weight(ys_r, mw_r)
657 mw_cell = 0.5_wp*(mw_l + mw_r)
658
659 call get_mole_fractions(mw_l, ys_l, xs_l)
660 call get_mole_fractions(mw_r, ys_r, xs_r)
661
662 ! Calculate gas constants and thermodynamic properties
663 rgas_l = gas_constant/mw_l
664 rgas_r = gas_constant/mw_r
665
666 p_l = q_prim_qp(e_idx)%sf(x, y, z)
667 p_r = q_prim_qp(e_idx)%sf(x + offsets(1), y + offsets(2), z + offsets(3))
668
669 rho_l = q_prim_qp(1)%sf(x, y, z)
670 rho_r = q_prim_qp(1)%sf(x + offsets(1), y + offsets(2), z + offsets(3))
671
672 t_l = p_l/rho_l/rgas_l
673 t_r = p_r/rho_r/rgas_r
674
675 rho_cell = 0.5_wp*(rho_l + rho_r)
676 dt_dxi = (t_r - t_l)/grid_spacing
677
678 ! Get transport properties
679 call get_species_mass_diffusivities_mixavg(p_l, t_l, ys_l, mass_diffusivities_mixavg1)
680 call get_species_mass_diffusivities_mixavg(p_r, t_r, ys_r, mass_diffusivities_mixavg2)
681
682 call get_mixture_thermal_conductivity_mixavg(t_l, ys_l, lambda_l)
683 call get_mixture_thermal_conductivity_mixavg(t_r, ys_r, lambda_r)
684
685 call get_species_enthalpies_rt(t_l, h_l)
686 call get_species_enthalpies_rt(t_r, h_r)
687
688 ! Calculate species properties and gradients
689
690# 274 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
691#if defined(MFC_OpenACC)
692# 274 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
693!$acc loop seq
694# 274 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
695#elif defined(MFC_OpenMP)
696# 274 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
697
698# 274 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
699#endif
700 do i = chemxb, chemxe
701# 280 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
702 h_l(i - chemxb + 1) = h_l(i - chemxb + 1)*gas_constant*t_l/molecular_weights(i - chemxb + 1)
703 h_r(i - chemxb + 1) = h_r(i - chemxb + 1)*gas_constant*t_r/molecular_weights(i - chemxb + 1)
704# 283 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
705 xs_cell(i - chemxb + 1) = 0.5_wp*(xs_l(i - chemxb + 1) + xs_r(i - chemxb + 1))
706 h_k(i - chemxb + 1) = 0.5_wp*(h_l(i - chemxb + 1) + h_r(i - chemxb + 1))
707 dxk_dxi(i - chemxb + 1) = (xs_r(i - chemxb + 1) - xs_l(i - chemxb + 1))/grid_spacing
708 end do
709
710 ! Calculate mixture-averaged diffusivities
711
712# 289 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
713#if defined(MFC_OpenACC)
714# 289 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
715!$acc loop seq
716# 289 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
717#elif defined(MFC_OpenMP)
718# 289 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
719
720# 289 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
721#endif
722 do i = chemxb, chemxe
723 mass_diffusivities_mixavg_cell(i - chemxb + 1) = &
724 (mass_diffusivities_mixavg2(i - chemxb + 1) + mass_diffusivities_mixavg1(i - chemxb + 1))/2.0_wp
725 end do
726
727 lambda_cell = 0.5_wp*(lambda_r + lambda_l)
728
729 ! Calculate mass diffusion fluxes
730 rho_vic = 0.0_wp
731 mass_diffu_energy = 0.0_wp
732
733
734# 301 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
735#if defined(MFC_OpenACC)
736# 301 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
737!$acc loop seq
738# 301 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
739#elif defined(MFC_OpenMP)
740# 301 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
741
742# 301 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
743#endif
744 do eqn = chemxb, chemxe
745# 307 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
746 mass_diffu_flux(eqn - chemxb + 1) = rho_cell*mass_diffusivities_mixavg_cell(eqn - chemxb + 1)* &
747 molecular_weights(eqn - chemxb + 1)/mw_cell*dxk_dxi(eqn - chemxb + 1)
748# 310 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
749 rho_vic = rho_vic + mass_diffu_flux(eqn - chemxb + 1)
750 mass_diffu_energy = mass_diffu_energy + h_k(eqn - chemxb + 1)*mass_diffu_flux(eqn - chemxb + 1)
751 end do
752
753 ! Apply corrections for mass conservation
754
755# 315 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
756#if defined(MFC_OpenACC)
757# 315 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
758!$acc loop seq
759# 315 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
760#elif defined(MFC_OpenMP)
761# 315 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
762
763# 315 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
764#endif
765 do eqn = chemxb, chemxe
766 mass_diffu_energy = mass_diffu_energy - h_k(eqn - chemxb + 1)*ys_cell(eqn - chemxb + 1)*rho_vic
767 mass_diffu_flux(eqn - chemxb + 1) = mass_diffu_flux(eqn - chemxb + 1) - rho_vic*ys_cell(eqn - chemxb + 1)
768 end do
769
770 ! Add thermal conduction contribution
771 mass_diffu_energy = lambda_cell*dt_dxi + mass_diffu_energy
772
773 ! Update flux arrays
774 flux_src_vf(e_idx)%sf(x, y, z) = flux_src_vf(e_idx)%sf(x, y, z) - mass_diffu_energy
775
776
777# 327 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
778#if defined(MFC_OpenACC)
779# 327 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
780!$acc loop seq
781# 327 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
782#elif defined(MFC_OpenMP)
783# 327 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
784
785# 327 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
786#endif
787 do eqn = chemxb, chemxe
788 flux_src_vf(eqn)%sf(x, y, z) = flux_src_vf(eqn)%sf(x, y, z) - mass_diffu_flux(eqn - chemxb + 1)
789 end do
790 end do
791 end do
792 end do
793
794# 334 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
795
796# 334 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
797#if defined(MFC_OpenACC)
798# 334 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
799!$acc end parallel loop
800# 334 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
801#elif defined(MFC_OpenMP)
802# 334 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
803
804# 334 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
805
806# 334 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
807!$omp end target teams loop
808# 334 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
809#endif
810# 334 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
811
812
813 ! Model 2: Unity Lewis Number
814 else if (chem_params%transport_model == 2) then
815 ! Note: Added ALL scalars and 'i'/'eqn' to private list to prevent race conditions.
816
817# 339 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
818
819# 339 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
820#if defined(MFC_OpenACC)
821# 339 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
822!$acc parallel loop collapse(3) gang vector default(present) private(x, y, z, i, eqn, Ys_L, Ys_R, Ys_cell, dYk_dxi, Mass_Diffu_Flux, grid_spacing, MW_L, MW_R, MW_cell, Rgas_L, Rgas_R, P_L, P_R, rho_L, rho_R, rho_cell, T_L, T_R, Cp_L, Cp_R, hmix_L, hmix_R, dh_dxi, lambda_L, lambda_R, lambda_Cell, diffusivity_L, diffusivity_R, diffusivity_cell, Mass_Diffu_Energy) copyin(offsets)
823# 339 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
824#elif defined(MFC_OpenMP)
825# 339 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
826
827# 339 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
828
829# 339 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
830
831# 339 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
832!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(x, y, z, i, eqn, Ys_L, Ys_R, Ys_cell, dYk_dxi, Mass_Diffu_Flux, grid_spacing, MW_L, MW_R, MW_cell, Rgas_L, Rgas_R, P_L, P_R, rho_L, rho_R, rho_cell, T_L, T_R, Cp_L, Cp_R, hmix_L, hmix_R, dh_dxi, lambda_L, lambda_R, lambda_Cell, diffusivity_L, diffusivity_R, diffusivity_cell, Mass_Diffu_Energy) map(to:offsets)
833# 339 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
834#endif
835# 339 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
836
837 do z = isc3%beg, isc3%end
838 do y = isc2%beg, isc2%end
839 do x = isc1%beg, isc1%end
840 ! Calculate grid spacing using direction-based indexing
841 select case (idir)
842 case (1)
843 grid_spacing = x_cc(x + 1) - x_cc(x)
844 case (2)
845 grid_spacing = y_cc(y + 1) - y_cc(y)
846 case (3)
847 grid_spacing = z_cc(z + 1) - z_cc(z)
848 end select
849
850 ! Extract species mass fractions
851
852# 354 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
853#if defined(MFC_OpenACC)
854# 354 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
855!$acc loop seq
856# 354 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
857#elif defined(MFC_OpenMP)
858# 354 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
859
860# 354 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
861#endif
862 do i = chemxb, chemxe
863 ys_l(i - chemxb + 1) = q_prim_qp(i)%sf(x, y, z)
864 ys_r(i - chemxb + 1) = q_prim_qp(i)%sf(x + offsets(1), y + offsets(2), z + offsets(3))
865 ys_cell(i - chemxb + 1) = 0.5_wp*(ys_l(i - chemxb + 1) + ys_r(i - chemxb + 1))
866 end do
867
868 ! Calculate molecular weights and mole fractions
869 call get_mixture_molecular_weight(ys_l, mw_l)
870 call get_mixture_molecular_weight(ys_r, mw_r)
871 mw_cell = 0.5_wp*(mw_l + mw_r)
872
873 ! Calculate gas constants and thermodynamic properties
874 rgas_l = gas_constant/mw_l
875 rgas_r = gas_constant/mw_r
876
877 p_l = q_prim_qp(e_idx)%sf(x, y, z)
878 p_r = q_prim_qp(e_idx)%sf(x + offsets(1), y + offsets(2), z + offsets(3))
879
880 rho_l = q_prim_qp(1)%sf(x, y, z)
881 rho_r = q_prim_qp(1)%sf(x + offsets(1), y + offsets(2), z + offsets(3))
882
883 t_l = p_l/rho_l/rgas_l
884 t_r = p_r/rho_r/rgas_r
885
886 rho_cell = 0.5_wp*(rho_l + rho_r)
887
888 call get_mixture_specific_heat_cp_mass(t_l, ys_l, cp_l)
889 call get_mixture_specific_heat_cp_mass(t_r, ys_r, cp_r)
890 call get_mixture_enthalpy_mass(t_l, ys_l, hmix_l)
891 call get_mixture_enthalpy_mass(t_r, ys_r, hmix_r)
892 dh_dxi = (hmix_r - hmix_l)/grid_spacing
893
894 ! Get transport properties
895 call get_mixture_thermal_conductivity_mixavg(t_l, ys_l, lambda_l)
896 call get_mixture_thermal_conductivity_mixavg(t_r, ys_r, lambda_r)
897
898 ! Calculate species properties and gradients
899
900# 392 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
901#if defined(MFC_OpenACC)
902# 392 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
903!$acc loop seq
904# 392 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
905#elif defined(MFC_OpenMP)
906# 392 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
907
908# 392 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
909#endif
910 do i = chemxb, chemxe
911 dyk_dxi(i - chemxb + 1) = (ys_r(i - chemxb + 1) - &
912 ys_l(i - chemxb + 1))/grid_spacing
913 end do
914
915 ! Calculate mixture-averaged diffusivities
916 diffusivity_l = lambda_l/rho_l/cp_l
917 diffusivity_r = lambda_r/rho_r/cp_r
918
919 lambda_cell = 0.5_wp*(lambda_r + lambda_l)
920 diffusivity_cell = 0.5_wp*(diffusivity_r + diffusivity_l)
921
922 ! Calculate mass diffusion fluxes
923 mass_diffu_energy = 0.0_wp
924
925
926# 408 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
927#if defined(MFC_OpenACC)
928# 408 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
929!$acc loop seq
930# 408 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
931#elif defined(MFC_OpenMP)
932# 408 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
933
934# 408 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
935#endif
936 do eqn = chemxb, chemxe
937 mass_diffu_flux(eqn - chemxb + 1) = rho_cell* &
938 diffusivity_cell* &
939 dyk_dxi(eqn - chemxb + 1)
940 end do
941 mass_diffu_energy = rho_cell*diffusivity_cell*dh_dxi
942
943 ! Update flux arrays
944 flux_src_vf(e_idx)%sf(x, y, z) = flux_src_vf(e_idx)%sf(x, y, z) - mass_diffu_energy
945
946
947# 419 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
948#if defined(MFC_OpenACC)
949# 419 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
950!$acc loop seq
951# 419 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
952#elif defined(MFC_OpenMP)
953# 419 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
954
955# 419 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
956#endif
957 do eqn = chemxb, chemxe
958 flux_src_vf(eqn)%sf(x, y, z) = flux_src_vf(eqn)%sf(x, y, z) - mass_diffu_flux(eqn - chemxb + 1)
959 end do
960 end do
961 end do
962 end do
963
964# 426 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
965
966# 426 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
967#if defined(MFC_OpenACC)
968# 426 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
969!$acc end parallel loop
970# 426 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
971#elif defined(MFC_OpenMP)
972# 426 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
973
974# 426 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
975
976# 426 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
977!$omp end target teams loop
978# 426 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
979#endif
980# 426 "/home/runner/work/MFC/MFC/src/common/m_chemistry.fpp"
981
982 end if
983 end if
984
986
987end module m_chemistry
Multi-species chemistry interface for thermodynamic properties, reaction rates, and transport coeffic...
subroutine s_compute_chemistry_diffusion_flux(idir, q_prim_qp, flux_src_vf, irx, iry, irz)
Computes species mass diffusion fluxes at cell interfaces using mixture-averaged diffusivities.
subroutine s_compute_q_t_sf(q_t_sf, q_cons_vf, bounds)
Initializes the temperature field from conservative variables by inverting the energy equation.
type(int_bounds_info) isc2
subroutine s_compute_chemistry_reaction_flux(rhs_vf, q_cons_qp, q_t_sf, q_prim_qp, bounds)
Adds chemical reaction source terms to the species transport RHS using net production rates.
integer, dimension(3) offsets
type(int_bounds_info) isc1
type(int_bounds_info) isc3
subroutine compute_viscosity_and_inversion(t_l, ys_l, t_r, ys_r, re_l, re_r)
Computes mixture viscosities for left and right states and inverts them for use as reciprocal Reynold...
subroutine s_compute_t_from_primitives(q_t_sf, q_prim_vf, bounds)
Computes the temperature field from primitive variables using the ideal gas law and mixture molecular...
Defines global parameters for the computational domain, simulation algorithm, and initial conditions.
logical, parameter chemistry
Chemistry modeling.
real(wp), dimension(:), allocatable y_cc
logical dummy
AMDFlang workaround: keep a dummy logical to avoid a compiler case-optimization bug when a parameter+...
real(wp), dimension(:), allocatable x_cc
type(chemistry_parameters) chem_params
real(wp), dimension(:), allocatable z_cc
Locations of cell-centers (cc) in x-, y- and z-directions, respectively.
integer e_idx
Index of total energy equation.