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# 8 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
13
14! For moving immersed boundaries in simulation
15# 12 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
16# 6 "/home/runner/work/MFC/MFC/src/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
44# 167 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45! New line at end of file is required for FYPP
46# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
47# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
48# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
49# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
50# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
52# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54
55# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
56# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
58
59# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
60
61# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
62
63# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
64
65# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
66
67# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
68
69# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
70
71# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
72
73# 167 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
74! New line at end of file is required for FYPP
75# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
76
77# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
78# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
79# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
80# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
81# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
82
83# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
84
85# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
86
87# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
88
89# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
90
91# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
92
93# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
94
95# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
96
97# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
98
99# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
100
101# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
102
103# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
104
105# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
106
107# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
108
109# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
110
111# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
112
113# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
114
115# 126 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116
117# 156 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 197 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 211 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 236 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124
125# 247 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 249 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128# 260 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
129
130# 310 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
131
132# 320 "/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# 339 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137
138# 356 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139
140# 366 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141
142# 373 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
143
144# 379 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
145
146# 385 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
147
148# 391 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
149
150# 397 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
151
152# 403 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
153! New line at end of file is required for FYPP
154# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
155# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
156# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
157# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
158# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
159# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
160# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
161# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
162
163# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
164# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
165# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
166
167# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
168
169# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
170
171# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
172
173# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
174
175# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
176
177# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
178
179# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
180
181# 167 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
182! New line at end of file is required for FYPP
183# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
184
185# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
186
187# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
188
189# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
190
191# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
192
193# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
194
195# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
196
197# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
198
199# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
200
201# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
202
203# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
204
205# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
206
207# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
208
209# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
210
211# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
212
213# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
214
215# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
216
217# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
218
219# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220
221# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222
223# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224
225# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
226
227# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
228
229# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
230
231# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
232
233# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
234
235# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
236
237# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
238
239# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
240! New line at end of file is required for FYPP
241# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
242
243! GPU parallel region (scalar reductions, maxval/minval)
244# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
245
246! GPU parallel loop over threads (most common GPU macro)
247# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
248
249! Required closing for GPU_PARALLEL_LOOP
250# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
251
252! Mark routine for device compilation
253# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
254
255! Declare device-resident data
256# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
257
258! Inner loop within a GPU parallel region
259# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
260
261! Scoped GPU data region
262# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
263
264! Host code with device pointers (for MPI with GPU buffers)
265# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
266
267! Allocate device memory (unscoped)
268# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
269
270! Free device memory
271# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
272
273! Atomic operation on device
274# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
275
276! End atomic capture block
277# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
278
279! Copy data between host and device
280# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
281
282! Synchronization barrier
283# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284
285! Import GPU library module (openacc or omp_lib)
286# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
287
288! Emit code only for AMD compiler
289# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
290
291! Emit code for non-Cray compilers
292# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
293
294! Emit code only for Cray compiler
295# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
296
297! Emit code for non-NVIDIA compilers
298# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
299
300# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
301# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
302! New line at end of file is required for FYPP
303# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
304
305# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
306
307! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
308! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
309! example see misc/nvidia_uvm/bind.sh.
310# 55 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
311
312! Allocate and create GPU device memory
313# 75 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
314
315! Free GPU device memory and deallocate
316# 83 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
317
318! Cray-specific GPU pointer setup for vector fields
319# 107 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
320
321! Cray-specific GPU pointer setup for scalar fields
322# 123 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
323
324! Cray-specific GPU pointer setup for acoustic source spatials
325# 148 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
326
327# 154 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
328
329# 161 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
330! New line at end of file is required for FYPP
331# 7 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp" 2
332
333!> @brief Simulation helper routines for enthalpy computation, CFL calculation, and stability checks
335
339
340 implicit none
341
343
344contains
345
346 !> Computes the modified dtheta for Fourier filtering in azimuthal direction
347 function f_compute_filtered_dtheta(k, l) result(fltr_dtheta)
348
349
350# 24 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
351#if MFC_OpenACC
352# 24 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
353!$acc routine seq
354# 24 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
355#elif MFC_OpenMP
356# 24 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
357
358# 24 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
359
360# 24 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
361!$omp declare target device_type(any)
362# 24 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
363#endif
364 integer, intent(in) :: k, l
365 real(wp) :: fltr_dtheta
366 integer :: nfq
367
368 if (grid_geometry == 3) then
369 if (k == 0) then
370 fltr_dtheta = 2._wp*pi*y_cb(0)/3._wp
371 else if (k <= fourier_rings) then
372 nfq = min(floor(2._wp*real(k, wp)*pi), (p + 1)/2 + 1)
373 fltr_dtheta = 2._wp*pi*y_cb(k - 1)/real(nfq, wp)
374 else
375 fltr_dtheta = y_cb(k - 1)*dz(l)
376 end if
377 else
378 fltr_dtheta = 0._wp
379 end if
380
381 end function f_compute_filtered_dtheta
382
383 !> Computes enthalpy
384 subroutine s_compute_enthalpy(q_prim_vf, pres, rho, gamma, pi_inf, Re, H, alpha, vel, vel_sum, qv, j, k, l)
385
386
387# 47 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
388#ifdef _CRAYFTN
389# 47 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
390#if MFC_OpenACC
391# 47 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
392!$acc routine seq
393# 47 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
394#elif MFC_OpenMP
395# 47 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
396
397# 47 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
398
399# 47 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
400!$omp declare target device_type(any)
401# 47 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
402#else
403# 47 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
404!DIR$ INLINEALWAYS s_compute_enthalpy
405# 47 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
406#endif
407# 47 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
408#elif MFC_OpenACC
409# 47 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
410!$acc routine seq
411# 47 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
412#elif MFC_OpenMP
413# 47 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
414
415# 47 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
416
417# 47 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
418!$omp declare target device_type(any)
419# 47 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
420#endif
421
422 type(scalar_field), intent(in), dimension(sys_size) :: q_prim_vf
423# 54 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
424 real(wp), intent(inout), dimension(num_fluids) :: alpha
425 real(wp), intent(inout), dimension(num_vels) :: vel
426# 57 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
427 real(wp), intent(inout) :: rho, gamma, pi_inf, vel_sum, h, pres
428 real(wp), intent(out) :: qv
429 integer, intent(in) :: j, k, l
430 real(wp), dimension(2), intent(inout) :: re
431# 64 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
432 real(wp), dimension(num_fluids) :: alpha_rho, gs
433# 66 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
434 real(wp) :: e, g_local
435 integer :: i
436
437 call s_compute_species_fraction(q_prim_vf, j, k, l, alpha_rho, alpha)
438
439 if (hypoelasticity) then
440 call s_convert_species_to_mixture_variables_kernel(rho, gamma, pi_inf, qv, alpha, alpha_rho, re, g_local, gs)
441 else
442 call s_convert_species_to_mixture_variables_kernel(rho, gamma, pi_inf, qv, alpha, alpha_rho, re)
443 end if
444
445 if (igr) then
446
447# 78 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
448#if defined(MFC_OpenACC)
449# 78 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
450!$acc loop seq
451# 78 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
452#elif defined(MFC_OpenMP)
453# 78 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
454
455# 78 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
456#endif
457 do i = 1, num_vels
458 vel(i) = q_prim_vf(eqn_idx%cont%end + i)%sf(j, k, l)/rho
459 end do
460 else
461
462# 83 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
463#if defined(MFC_OpenACC)
464# 83 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
465!$acc loop seq
466# 83 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
467#elif defined(MFC_OpenMP)
468# 83 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
469
470# 83 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
471#endif
472 do i = 1, num_vels
473 vel(i) = q_prim_vf(eqn_idx%cont%end + i)%sf(j, k, l)
474 end do
475 end if
476
477 vel_sum = 0._wp
478
479# 90 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
480#if defined(MFC_OpenACC)
481# 90 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
482!$acc loop seq
483# 90 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
484#elif defined(MFC_OpenMP)
485# 90 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
486
487# 90 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
488#endif
489 do i = 1, num_vels
490 vel_sum = vel_sum + vel(i)**2._wp
491 end do
492
493 if (igr) then
494 e = q_prim_vf(eqn_idx%E)%sf(j, k, l)
495 pres = (e - pi_inf - qv - 5.e-1_wp*rho*vel_sum)/gamma
496 else
497 pres = q_prim_vf(eqn_idx%E)%sf(j, k, l)
498 e = gamma*pres + pi_inf + 5.e-1_wp*rho*vel_sum + qv
499 end if
500
501 h = (e + pres)/rho
502
503 end subroutine s_compute_enthalpy
504
505 !> Computes stability criterion for a specified dt
506 subroutine s_compute_stability_from_dt(vel, c, rho, Re_l, j, k, l, icfl, vcfl, Rc, ccfl)
507
508
509# 110 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
510#if MFC_OpenACC
511# 110 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
512!$acc routine seq
513# 110 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
514#elif MFC_OpenMP
515# 110 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
516
517# 110 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
518
519# 110 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
520!$omp declare target device_type(any)
521# 110 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
522#endif
523 real(wp), intent(in), dimension(num_vels) :: vel
524 real(wp), intent(in) :: c, rho
525 real(wp), intent(inout) :: icfl
526 real(wp), intent(inout) :: vcfl, rc, ccfl
527 real(wp), dimension(2), intent(in) :: re_l
528 integer, intent(in) :: j, k, l
529 real(wp) :: fltr_dtheta
530
531 ! Inviscid CFL calculation
532 ! The multi-dimensional CFL terms are written out here rather than
533 ! obtained from a shared helper procedure: NVHPC 25.5's fort2 segfaults
534 ! when a routine containing a call to that helper is cross-file inlined
535 ! by -Minline (the IPO setup in cmake/MFCTargets.cmake).
536 if (p > 0) then
537# 126 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
538 if (grid_geometry == 3) then
539 fltr_dtheta = f_compute_filtered_dtheta(k, l)
540 icfl = dt/min(dx(j)/(abs(vel(1)) + c), dy(k)/(abs(vel(2)) + c), fltr_dtheta/(abs(vel(3)) + c))
541 else
542 icfl = dt/min(dx(j)/(abs(vel(1)) + c), dy(k)/(abs(vel(2)) + c), dz(l)/(abs(vel(3)) + c))
543 end if
544# 133 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
545 else if (n > 0) then
546 icfl = dt/min(dx(j)/(abs(vel(1)) + c), dy(k)/(abs(vel(2)) + c))
547 else
548 icfl = (dt/dx(j))*(abs(vel(1)) + c)
549 end if
550
551 ! Viscous calculations
552 if (viscous) then
553 if (p > 0) then
554# 143 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
555 if (grid_geometry == 3) then
556 fltr_dtheta = f_compute_filtered_dtheta(k, l)
557 vcfl = maxval(dt/re_l/rho)/min(dx(j), dy(k), fltr_dtheta)**2._wp
558 rc = min(dx(j)*(abs(vel(1)) + c), dy(k)*(abs(vel(2)) + c), fltr_dtheta*(abs(vel(3)) + c))/maxval(1._wp/re_l)
559 else
560 vcfl = maxval(dt/re_l/rho)/min(dx(j), dy(k), dz(l))**2._wp
561 rc = min(dx(j)*(abs(vel(1)) + c), dy(k)*(abs(vel(2)) + c), dz(l)*(abs(vel(3)) + c))/maxval(1._wp/re_l)
562 end if
563# 152 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
564 else if (n > 0) then
565 vcfl = maxval(dt/re_l/rho)/min(dx(j), dy(k))**2._wp
566 rc = min(dx(j)*(abs(vel(1)) + c), dy(k)*(abs(vel(2)) + c))/maxval(1._wp/re_l)
567 else
568 vcfl = maxval(dt/re_l/rho)/dx(j)**2._wp
569 rc = dx(j)*(abs(vel(1)) + c)/maxval(1._wp/re_l)
570 end if
571 end if
572
573 ! Capillary CFL calculation
574 if (surface_tension) then
575 if (p > 0) then
576# 165 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
577 if (grid_geometry == 3) then
578 fltr_dtheta = f_compute_filtered_dtheta(k, l)
579 ccfl = dt*sqrt(2._wp*pi*sigma/(rho*min(dx(j), dy(k), fltr_dtheta)**3._wp))
580 else
581 ccfl = dt*sqrt(2._wp*pi*sigma/(rho*min(dx(j), dy(k), dz(l))**3._wp))
582 end if
583# 172 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
584 else if (n > 0) then
585 ccfl = dt*sqrt(2._wp*pi*sigma/(rho*min(dx(j), dy(k))**3._wp))
586 else
587 ccfl = dt*sqrt(2._wp*pi*sigma/(rho*dx(j)**3._wp))
588 end if
589 end if
590
591 end subroutine s_compute_stability_from_dt
592
593 !> Computes dt for a specified CFL number
594 subroutine s_compute_dt_from_cfl(vel, c, max_dt, rho, Re_l, j, k, l)
595
596
597# 184 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
598#if MFC_OpenACC
599# 184 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
600!$acc routine seq
601# 184 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
602#elif MFC_OpenMP
603# 184 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
604
605# 184 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
606
607# 184 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
608!$omp declare target device_type(any)
609# 184 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
610#endif
611 real(wp), dimension(num_vels), intent(in) :: vel
612 real(wp), intent(in) :: c, rho
613 real(wp), intent(inout) :: max_dt
614 real(wp), dimension(2), intent(in) :: re_l
615 integer, intent(in) :: j, k, l
616 real(wp) :: vcfl_dt, ccfl_dt
617 real(wp) :: fltr_dtheta
618
619 ! Inviscid CFL calculation
620 ! The multi-dimensional CFL terms are written out here rather than
621 ! obtained from a shared helper procedure: NVHPC 25.5's fort2 segfaults
622 ! when a routine containing a call to that helper is cross-file inlined
623 ! by -Minline (the IPO setup in cmake/MFCTargets.cmake).
624 if (p > 0) then
625# 200 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
626 if (grid_geometry == 3) then
627 fltr_dtheta = f_compute_filtered_dtheta(k, l)
628 max_dt = cfl_target*min(dx(j)/(abs(vel(1)) + c), dy(k)/(abs(vel(2)) + c), fltr_dtheta/(abs(vel(3)) + c))
629 else
630 max_dt = cfl_target*min(dx(j)/(abs(vel(1)) + c), dy(k)/(abs(vel(2)) + c), dz(l)/(abs(vel(3)) + c))
631 end if
632# 207 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
633 else if (n > 0) then
634 max_dt = cfl_target*min(dx(j)/(abs(vel(1)) + c), dy(k)/(abs(vel(2)) + c))
635 else
636 max_dt = cfl_target*(dx(j)/(abs(vel(1)) + c))
637 end if
638
639 ! Viscous calculations
640 if (viscous) then
641 if (p > 0) then
642 if (grid_geometry == 3) then
643 fltr_dtheta = f_compute_filtered_dtheta(k, l)
644 vcfl_dt = cfl_target*(min(dx(j), dy(k), fltr_dtheta)**2._wp)/maxval(1/(rho*re_l))
645 else
646 vcfl_dt = cfl_target*(min(dx(j), dy(k), dz(l))**2._wp)/maxval(1/(rho*re_l))
647 end if
648 else if (n > 0) then
649 vcfl_dt = cfl_target*(min(dx(j), dy(k))**2._wp)/maxval((1/re_l)/rho)
650 else
651 vcfl_dt = cfl_target*(dx(j)**2._wp)/maxval(1/(rho*re_l))
652 end if
653 max_dt = min(max_dt, vcfl_dt)
654 end if
655
656 ! Capillary CFL calculations
657 if (surface_tension) then
658 if (p > 0) then
659# 234 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
660 if (grid_geometry == 3) then
661 fltr_dtheta = f_compute_filtered_dtheta(k, l)
662 ccfl_dt = cfl_target*sqrt(rho*min(dx(j), dy(k), fltr_dtheta)**3._wp/(2._wp*pi*sigma))
663 else
664 ccfl_dt = cfl_target*sqrt(rho*min(dx(j), dy(k), dz(l))**3._wp/(2._wp*pi*sigma))
665 end if
666# 241 "/home/runner/work/MFC/MFC/src/simulation/m_sim_helpers.fpp"
667 else if (n > 0) then
668 ccfl_dt = cfl_target*sqrt(rho*min(dx(j), dy(k))**3._wp/(2._wp*pi*sigma))
669 else
670 ccfl_dt = cfl_target*sqrt(rho*dx(j)**3._wp/(2._wp*pi*sigma))
671 end if
672 max_dt = min(max_dt, ccfl_dt)
673 end if
674
675 end subroutine s_compute_dt_from_cfl
676
677end 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...
real(wp), dimension(:), allocatable, target y_cb
real(wp), dimension(:), allocatable, target dy
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.
subroutine, public s_compute_stability_from_dt(vel, c, rho, re_l, j, k, l, icfl, vcfl, rc, ccfl)
Computes stability criterion for a specified dt.
real(wp) function f_compute_filtered_dtheta(k, l)
Computes the modified dtheta for Fourier filtering in azimuthal direction.
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)
Compute partial densities and volume fractions.
subroutine, public s_convert_species_to_mixture_variables_kernel(rho_k, gamma_k, pi_inf_k, qv_k, alpha_k, alpha_rho_k, re_k, g_k, g)
Host- and device-callable conversion kernel for species and mixture variables.
Derived type annexing a scalar field (SF).