MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_sim_helpers.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
2!>
3!! @file
4!! @brief Contains module m_sim_helpers
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/simulation/m_sim_helpers.fpp" 2
17# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
18# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
19# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
20# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
21# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
22# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
23# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
24# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
25
26# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
27# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
29
30# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
31
32# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
33
34# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
35
36# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
37
38# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39
40# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41
42# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43! New line at end of file is required for FYPP
44# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
45# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
46# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
47# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
48# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
50# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
52
53# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
56
57# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
58
59# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
60
61# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
62
63# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
64
65# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
66
67# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
68
69# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
70! New line at end of file is required for FYPP
71# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
72
73# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
74# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
75# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
76# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
77# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
78
79# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
80
81# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
82
83# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
84
85# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
86
87# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
88
89# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
90
91# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
92
93# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
94
95# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
96
97# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
98
99# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
100
101# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
102
103# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
104
105# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
106
107# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
108
109# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
110
111# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
112
113# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
114
115# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116
117# 207 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 232 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 243 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 245 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
125
126# 283 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
127
128# 293 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
129
130# 303 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
131
132# 312 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
133
134# 329 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
135
136# 339 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137
138# 346 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139
140# 352 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141
142# 358 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
143
144# 364 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
145
146# 370 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
147
148# 376 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
149! New line at end of file is required for FYPP
150# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
151# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
152# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
153# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
154# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
155# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
156# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
157# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
158
159# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
160# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
161# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
162
163# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
164
165# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
166
167# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
168
169# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
170
171# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
172
173# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
174
175# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
176! New line at end of file is required for FYPP
177# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
178
179# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
180
181# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
182
183# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
184
185# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
186
187# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
188
189# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
190
191# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
192
193# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
194
195# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
196
197# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
198
199# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
200
201# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
202
203# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
204
205# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
206
207# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
208
209# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
210
211# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
212
213# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
214
215# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
216
217# 192 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
218
219# 213 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220
221# 241 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222
223# 256 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224
225# 266 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
226
227# 275 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
228
229# 291 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
230
231# 301 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
232
233# 308 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
234! New line at end of file is required for FYPP
235# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
236
237# 21 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
238
239# 37 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
240
241# 50 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
242
243# 76 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
244
245# 91 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
246
247# 102 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
248
249# 115 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
250
251# 143 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
252
253# 154 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
254
255# 165 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
256
257# 176 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
258
259# 187 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
260
261# 198 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
262
263# 208 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
264
265# 214 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
266
267# 220 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
268
269# 226 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
270
271# 232 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
272
273# 234 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
274# 235 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
275! New line at end of file is required for FYPP
276# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
277
278# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
279
280! Caution:
281! This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI rank.
282! That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0.
283! For an example see misc/nvidia_uvm/bind.sh.
284# 63 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
285
286# 81 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
287
288# 88 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
289
290# 111 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
291
292# 127 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
293
294# 153 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
295
296# 159 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
297
298# 167 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
299! New line at end of file is required for FYPP
300# 7 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp" 2
301
302!> @brief Simulation helper routines for enthalpy computation, CFL calculation, and stability checks
304
305 use m_derived_types !< definitions of the derived types
306
308
310
311 implicit none
312
313 private; public :: s_compute_enthalpy, &
316
317contains
318
319 !> Computes the modified dtheta for Fourier filtering in azimuthal direction
320 !! @param k y coordinate index
321 !! @param l z coordinate index
322 !! @return fltr_dtheta Modified dtheta value for cylindrical coordinates
323 function f_compute_filtered_dtheta(k, l) result(fltr_dtheta)
324
325# 30 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
326#if MFC_OpenACC
327# 30 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
328!$acc routine seq
329# 30 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
330#elif MFC_OpenMP
331# 30 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
332
333# 30 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
334
335# 30 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
336!$omp declare target device_type(any)
337# 30 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
338#endif
339 integer, intent(in) :: k, l
340 real(wp) :: fltr_dtheta
341 integer :: nfq
342
343 if (grid_geometry == 3) then
344 if (k == 0) then
345 fltr_dtheta = 2._wp*pi*y_cb(0)/3._wp
346 elseif (k <= fourier_rings) then
347 nfq = min(floor(2._wp*real(k, wp)*pi), (p + 1)/2 + 1)
348 fltr_dtheta = 2._wp*pi*y_cb(k - 1)/real(nfq, wp)
349 else
350 fltr_dtheta = y_cb(k - 1)*dz(l)
351 end if
352 else
353 fltr_dtheta = 0._wp
354 end if
355 end function f_compute_filtered_dtheta
356
357 !> Computes inviscid CFL terms for multi-dimensional cases (2D/3D only)
358 !! @param vel directional velocities
359 !! @param c mixture speed of sound
360 !! @param j x coordinate index
361 !! @param k y coordinate index
362 !! @param l z coordinate index
363 !! @return cfl_terms computed CFL terms for 2D/3D cases
364 function f_compute_multidim_cfl_terms(vel, c, j, k, l) result(cfl_terms)
365
366# 57 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
367#if MFC_OpenACC
368# 57 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
369!$acc routine seq
370# 57 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
371#elif MFC_OpenMP
372# 57 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
373
374# 57 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
375
376# 57 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
377!$omp declare target device_type(any)
378# 57 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
379#endif
380 real(wp), dimension(num_vels), intent(in) :: vel
381 real(wp), intent(in) :: c
382 integer, intent(in) :: j, k, l
383 real(wp) :: cfl_terms
384 real(wp) :: fltr_dtheta
385
386 fltr_dtheta = f_compute_filtered_dtheta(k, l)
387
388 if (p > 0) then
389 !3D
390# 69 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
391 if (grid_geometry == 3) then
392 cfl_terms = min(dx(j)/(abs(vel(1)) + c), &
393 dy(k)/(abs(vel(2)) + c), &
394 fltr_dtheta/(abs(vel(3)) + c))
395 else
396 cfl_terms = min(dx(j)/(abs(vel(1)) + c), &
397 dy(k)/(abs(vel(2)) + c), &
398 dz(l)/(abs(vel(3)) + c))
399 end if
400# 79 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
401 else
402 !2D
403 cfl_terms = min(dx(j)/(abs(vel(1)) + c), &
404 dy(k)/(abs(vel(2)) + c))
405 end if
407
408 !> Computes enthalpy
409 !! @param q_prim_vf cell centered primitive variables
410 !! @param pres mixture pressure
411 !! @param rho mixture density
412 !! @param gamma mixture gamma
413 !! @param pi_inf mixture pi_inf
414 !! @param Re mixture reynolds number
415 !! @param H mixture enthalpy
416 !! @param alpha component alphas
417 !! @param vel directional velocities
418 !! @param vel_sum squard sum of velocity components
419 !! @param qv Fluid reference energy
420 !! @param j x index
421 !! @param k y index
422 !! @param l z index
423 subroutine s_compute_enthalpy(q_prim_vf, pres, rho, gamma, pi_inf, Re, H, alpha, vel, vel_sum, qv, j, k, l)
424
425# 102 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
426#ifdef _CRAYFTN
427# 102 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
428!DIR$ INLINEALWAYS s_compute_enthalpy
429# 102 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
430#elif MFC_OpenACC
431# 102 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
432!$acc routine seq
433# 102 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
434#elif MFC_OpenMP
435# 102 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
436
437# 102 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
438
439# 102 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
440!$omp declare target device_type(any)
441# 102 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
442#endif
443# 104 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
444
445 type(scalar_field), intent(in), dimension(sys_size) :: q_prim_vf
446# 110 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
447 real(wp), intent(inout), dimension(num_fluids) :: alpha
448 real(wp), intent(inout), dimension(num_vels) :: vel
449# 113 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
450 real(wp), intent(inout) :: rho, gamma, pi_inf, vel_sum, h, pres
451 real(wp), intent(out) :: qv
452 integer, intent(in) :: j, k, l
453 real(wp), dimension(2), intent(inout) :: re
454# 120 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
455 real(wp), dimension(num_fluids) :: alpha_rho, gs
456# 122 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
457 real(wp) :: e, g_local
458
459 integer :: i
460
461 call s_compute_species_fraction(q_prim_vf, j, k, l, alpha_rho, alpha)
462
463 if (elasticity) then
464 call s_convert_species_to_mixture_variables_acc(rho, gamma, pi_inf, qv, alpha, &
465 alpha_rho, re, g_local, gs)
466 else
467 call s_convert_species_to_mixture_variables_acc(rho, gamma, pi_inf, qv, alpha, alpha_rho, re)
468 end if
469
470 if (igr) then
471
472# 136 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
473#if defined(MFC_OpenACC)
474# 136 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
475!$acc loop seq
476# 136 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
477#elif defined(MFC_OpenMP)
478# 136 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
479
480# 136 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
481#endif
482 do i = 1, num_vels
483 vel(i) = q_prim_vf(contxe + i)%sf(j, k, l)/rho
484 end do
485 else
486
487# 141 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
488#if defined(MFC_OpenACC)
489# 141 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
490!$acc loop seq
491# 141 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
492#elif defined(MFC_OpenMP)
493# 141 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
494
495# 141 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
496#endif
497 do i = 1, num_vels
498 vel(i) = q_prim_vf(contxe + i)%sf(j, k, l)
499 end do
500 end if
501
502 vel_sum = 0._wp
503
504# 148 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
505#if defined(MFC_OpenACC)
506# 148 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
507!$acc loop seq
508# 148 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
509#elif defined(MFC_OpenMP)
510# 148 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
511
512# 148 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
513#endif
514 do i = 1, num_vels
515 vel_sum = vel_sum + vel(i)**2._wp
516 end do
517
518 if (igr) then
519 e = q_prim_vf(e_idx)%sf(j, k, l)
520 pres = (e - pi_inf - qv - 5.e-1_wp*rho*vel_sum)/gamma
521 else
522 pres = q_prim_vf(e_idx)%sf(j, k, l)
523 e = gamma*pres + pi_inf + 5.e-1_wp*rho*vel_sum + qv
524 end if
525
526 ! Adjust energy for hyperelasticity
527 if (hyperelasticity) then
528 e = e + g_local*q_prim_vf(xiend + 1)%sf(j, k, l)
529 end if
530
531 h = (e + pres)/rho
532
533 end subroutine s_compute_enthalpy
534
535 !> Computes stability criterion for a specified dt
536 !! @param vel directional velocities
537 !! @param c mixture speed of sound
538 !! @param rho Density
539 !! @param Re_l mixture Reynolds number
540 !! @param j x index
541 !! @param k y index
542 !! @param l z index
543 !! @param icfl_sf cell-centered inviscid cfl number
544 !! @param vcfl_sf (optional) cell-centered viscous CFL number
545 !! @param Rc_sf (optional) cell centered Rc
546 subroutine s_compute_stability_from_dt(vel, c, rho, Re_l, j, k, l, icfl_sf, vcfl_sf, Rc_sf)
547
548# 182 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
549#if MFC_OpenACC
550# 182 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
551!$acc routine seq
552# 182 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
553#elif MFC_OpenMP
554# 182 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
555
556# 182 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
557
558# 182 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
559!$omp declare target device_type(any)
560# 182 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
561#endif
562 real(wp), intent(in), dimension(num_vels) :: vel
563 real(wp), intent(in) :: c, rho
564 real(wp), dimension(0:m, 0:n, 0:p), intent(inout) :: icfl_sf
565 real(wp), dimension(0:m, 0:n, 0:p), intent(inout), optional :: vcfl_sf, rc_sf
566 real(wp), dimension(2), intent(in) :: re_l
567 integer, intent(in) :: j, k, l
568
569 real(wp) :: fltr_dtheta
570
571 ! Inviscid CFL calculation
572 if (p > 0 .or. n > 0) then
573 ! 2D/3D
574 icfl_sf(j, k, l) = dt/f_compute_multidim_cfl_terms(vel, c, j, k, l)
575 else
576 ! 1D
577 icfl_sf(j, k, l) = (dt/dx(j))*(abs(vel(1)) + c)
578 end if
579
580 ! Viscous calculations
581 if (viscous) then
582 if (p > 0) then
583# 205 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
584 !3D
585 if (grid_geometry == 3) then
586 fltr_dtheta = f_compute_filtered_dtheta(k, l)
587 vcfl_sf(j, k, l) = maxval(dt/re_l/rho) &
588 /min(dx(j), dy(k), fltr_dtheta)**2._wp
589 rc_sf(j, k, l) = min(dx(j)*(abs(vel(1)) + c), &
590 dy(k)*(abs(vel(2)) + c), &
591 fltr_dtheta*(abs(vel(3)) + c)) &
592 /maxval(1._wp/re_l)
593 else
594 vcfl_sf(j, k, l) = maxval(dt/re_l/rho) &
595 /min(dx(j), dy(k), dz(l))**2._wp
596 rc_sf(j, k, l) = min(dx(j)*(abs(vel(1)) + c), &
597 dy(k)*(abs(vel(2)) + c), &
598 dz(l)*(abs(vel(3)) + c)) &
599 /maxval(1._wp/re_l)
600 end if
601# 223 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
602 elseif (n > 0) then
603 !2D
604 vcfl_sf(j, k, l) = maxval(dt/re_l/rho)/min(dx(j), dy(k))**2._wp
605 rc_sf(j, k, l) = min(dx(j)*(abs(vel(1)) + c), &
606 dy(k)*(abs(vel(2)) + c)) &
607 /maxval(1._wp/re_l)
608 else
609 !1D
610 vcfl_sf(j, k, l) = maxval(dt/re_l/rho)/dx(j)**2._wp
611 rc_sf(j, k, l) = dx(j)*(abs(vel(1)) + c)/maxval(1._wp/re_l)
612 end if
613 end if
614
615 end subroutine s_compute_stability_from_dt
616
617 !> Computes dt for a specified CFL number
618 !! @param vel directional velocities
619 !! @param c Speed of sound
620 !! @param max_dt cell centered maximum dt
621 !! @param rho cell centered density
622 !! @param Re_l cell centered Reynolds number
623 !! @param j x coordinate
624 !! @param k y coordinate
625 !! @param l z coordinate
626 subroutine s_compute_dt_from_cfl(vel, c, max_dt, rho, Re_l, j, k, l)
627
628# 248 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
629#if MFC_OpenACC
630# 248 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
631!$acc routine seq
632# 248 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
633#elif MFC_OpenMP
634# 248 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
635
636# 248 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
637
638# 248 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
639!$omp declare target device_type(any)
640# 248 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
641#endif
642 real(wp), dimension(num_vels), intent(in) :: vel
643 real(wp), intent(in) :: c, rho
644 real(wp), dimension(0:m, 0:n, 0:p), intent(inout) :: max_dt
645 real(wp), dimension(2), intent(in) :: re_l
646 integer, intent(in) :: j, k, l
647
648 real(wp) :: icfl_dt, vcfl_dt
649 real(wp) :: fltr_dtheta
650
651 ! Inviscid CFL calculation
652 if (p > 0 .or. n > 0) then
653 ! 2D/3D cases
654 icfl_dt = cfl_target*f_compute_multidim_cfl_terms(vel, c, j, k, l)
655 else
656 ! 1D case
657 icfl_dt = cfl_target*(dx(j)/(abs(vel(1)) + c))
658 end if
659
660 ! Viscous calculations
661 if (viscous) then
662 if (p > 0) then
663 !3D
664 if (grid_geometry == 3) then
665 fltr_dtheta = f_compute_filtered_dtheta(k, l)
666 vcfl_dt = cfl_target*(min(dx(j), dy(k), fltr_dtheta)**2._wp) &
667 /maxval(1/(rho*re_l))
668 else
669 vcfl_dt = cfl_target*(min(dx(j), dy(k), dz(l))**2._wp) &
670 /maxval(1/(rho*re_l))
671 end if
672 elseif (n > 0) then
673 !2D
674 vcfl_dt = cfl_target*(min(dx(j), dy(k))**2._wp)/maxval((1/re_l)/rho)
675 else
676 !1D
677 vcfl_dt = cfl_target*(dx(j)**2._wp)/maxval(1/(rho*re_l))
678 end if
679 end if
680
681 if (any(re_size > 0)) then
682 max_dt(j, k, l) = min(icfl_dt, vcfl_dt)
683 else
684 max_dt(j, k, l) = icfl_dt
685 end if
686
687 end subroutine s_compute_dt_from_cfl
688
689end module m_sim_helpers
integer, intent(in) k
integer, intent(in) j
integer, intent(in) l
Shared derived types for field data, patch geometry, bubble dynamics, and MPI I/O structures.
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
integer, dimension(2) re_size
logical igr
Use information geometric regularization.
logical viscous
Viscous effects.
logical hyperelasticity
hyperelasticity modeling
integer num_vels
Number of velocity components (different from num_dims for mhd).
real(wp), dimension(:), allocatable, target y_cb
integer e_idx
Index of energy equation.
logical elasticity
elasticity modeling, true for hyper or hypo
real(wp), dimension(:), allocatable, target dy
real(wp) dt
Size of the time-step.
real(wp), dimension(:), allocatable, target dz
real(wp), dimension(:), allocatable, target dx
Simulation helper routines for enthalpy computation, CFL calculation, and stability checks.
subroutine, public s_compute_enthalpy(q_prim_vf, pres, rho, gamma, pi_inf, re, h, alpha, vel, vel_sum, qv, j, k, l)
Computes enthalpy.
subroutine, public s_compute_dt_from_cfl(vel, c, max_dt, rho, re_l, j, k, l)
Computes dt for a specified CFL number.
real(wp) function f_compute_filtered_dtheta(k, l)
Computes the modified dtheta for Fourier filtering in azimuthal direction.
subroutine, public s_compute_stability_from_dt(vel, c, rho, re_l, j, k, l, icfl_sf, vcfl_sf, rc_sf)
Computes stability criterion for a specified dt.
real(wp) function f_compute_multidim_cfl_terms(vel, c, j, k, l)
Computes inviscid CFL terms for multi-dimensional cases (2D/3D only).
Conservative-to-primitive variable conversion, mixture property evaluation, and pressure computation.
subroutine, public s_compute_species_fraction(q_vf, k, l, r, alpha_rho_k, alpha_k)
This subroutine computes partial densities and volume fractions.
subroutine, public s_convert_species_to_mixture_variables_acc(rho_k, gamma_k, pi_inf_k, qv_k, alpha_k, alpha_rho_k, re_k, g_k, g)
GPU-accelerated conversion of species volume fractions and partial densities to mixture density,...
Derived type annexing a scalar field (SF).