MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_bubbles_EL.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2!>
3!! @file
4!! @brief Contains module @ref m_bubbles_el "m_bubbles_EL"
5
6# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
7# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
8# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
9# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
10# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
11# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
12# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
13# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
14
15# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
16# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
17# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
18
19# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
20
21# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
22
23# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
24
25# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
26
27# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28
29# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
30
31# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
32! New line at end of file is required for FYPP
33# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
34# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
35# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
36# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
37# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
38# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
40# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41
42# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
44# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45
46# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
47
48# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49
50# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51
52# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53
54# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55
56# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57
58# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
59! New line at end of file is required for FYPP
60# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
61
62# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
63# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
64# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
65# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
66# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
67
68# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
69
70# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
71
72# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
73
74# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
75
76# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
77
78# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
79
80# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
81
82# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
83
84# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
85
86# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
87
88# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
89
90# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
91
92# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
93
94# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
95
96# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
97
98# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
99
100# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
101
102# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
103
104# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
105
106# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107
108# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109
110# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111
112# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
114
115# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116
117# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124
125# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128
129# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130
131# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132
133# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134
135# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136
137# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
138! New line at end of file is required for FYPP
139# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
140# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
141# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
142# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
143# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
144# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
145# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
146# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
147
148# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
149# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
150# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
151
152# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
153
154# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
155
156# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
157
158# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
159
160# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
161
162# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
163
164# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
165! New line at end of file is required for FYPP
166# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
167
168# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
169
170# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
171
172# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
173
174# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
175
176# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
177
178# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
179
180# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
181
182# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
183
184# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
185
186# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
187
188# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
189
190# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
191
192# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
193
194# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
195
196# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
197
198# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
199
200# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
201
202# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
203
204# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
205
206# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
207
208# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
209
210# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
211
212# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
213
214# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
215
216# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
217
218# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
219
220# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221
222# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
223! New line at end of file is required for FYPP
224# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
225
226! GPU parallel region (scalar reductions, maxval/minval)
227# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
228
229! GPU parallel loop over threads (most common GPU macro)
230# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
231
232! Required closing for GPU_PARALLEL_LOOP
233# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
234
235! Mark routine for device compilation
236# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
237
238! Declare device-resident data
239# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
240
241! Inner loop within a GPU parallel region
242# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
243
244! Scoped GPU data region
245# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
246
247! Host code with device pointers (for MPI with GPU buffers)
248# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
249
250! Allocate device memory (unscoped)
251# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
252
253! Free device memory
254# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
255
256! Atomic operation on device
257# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
258
259! End atomic capture block
260# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
261
262! Copy data between host and device
263# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
264
265! Synchronization barrier
266# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
267
268! Import GPU library module (openacc or omp_lib)
269# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
270
271! Emit code only for AMD compiler
272# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
273
274! Emit code for non-Cray compilers
275# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
276
277! Emit code only for Cray compiler
278# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
279
280! Emit code for non-NVIDIA compilers
281# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
282
283# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
285! New line at end of file is required for FYPP
286# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
287
288# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
289
290! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
291! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
292! example see misc/nvidia_uvm/bind.sh. NVIDIA unified memory page placement hint
293# 57 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
294
295! Allocate and create GPU device memory
296# 77 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
297
298! Free GPU device memory and deallocate
299# 85 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
300
301! Cray-specific GPU pointer setup for vector fields
302# 109 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
303
304! Cray-specific GPU pointer setup for scalar fields
305# 125 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
306
307! Cray-specific GPU pointer setup for acoustic source spatials
308# 150 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
309
310# 156 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
311
312# 163 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
313! New line at end of file is required for FYPP
314# 6 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp" 2
315
316!> @brief Tracks Lagrangian bubbles and couples their dynamics to the Eulerian flow via volume averaging
318
320 use m_mpi_proxy
322 use m_bubbles
327 use m_sim_helpers
328 use m_helper
329
330 implicit none
331
332 ! (nBub)
333 integer, allocatable, dimension(:,:) :: lag_id !< Global and local IDs
334 real(wp), allocatable, dimension(:) :: bub_r0 !< Initial bubble radius
335 real(wp), allocatable, dimension(:) :: rmax_stats !< Maximum radius
336 real(wp), allocatable, dimension(:) :: rmin_stats !< Minimum radius
337
338# 28 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
339#if defined(MFC_OpenACC)
340# 28 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
341!$acc declare create(lag_id, bub_R0, Rmax_stats, Rmin_stats)
342# 28 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
343#elif defined(MFC_OpenMP)
344# 28 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
345!$omp declare target (lag_id, bub_R0, Rmax_stats, Rmin_stats)
346# 28 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
347#endif
348
349 real(wp), allocatable, dimension(:) :: gas_mg !< Bubble's gas mass
350 real(wp), allocatable, dimension(:) :: gas_betat !< heatflux model (Preston et al., 2007)
351 real(wp), allocatable, dimension(:) :: gas_betac !< massflux model (Preston et al., 2007)
352 real(wp), allocatable, dimension(:) :: bub_dphidt !< subgrid velocity potential (Maeda & Colonius, 2018)
353
354# 34 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
355#if defined(MFC_OpenACC)
356# 34 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
357!$acc declare create(gas_mg, gas_betaT, gas_betaC, bub_dphidt)
358# 34 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
359#elif defined(MFC_OpenMP)
360# 34 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
361!$omp declare target (gas_mg, gas_betaT, gas_betaC, bub_dphidt)
362# 34 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
363#endif
364
365 ! (nBub, 1 -> actual val or 2 -> temp val)
366 real(wp), allocatable, dimension(:,:) :: gas_p !< Pressure in the bubble
367 real(wp), allocatable, dimension(:,:) :: gas_mv !< Vapor mass in the bubble
368 real(wp), allocatable, dimension(:,:) :: intfc_rad !< Bubble radius
369 real(wp), allocatable, dimension(:,:) :: intfc_vel !< Velocity of the bubble interface
370
371# 41 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
372#if defined(MFC_OpenACC)
373# 41 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
374!$acc declare create(gas_p, gas_mv, intfc_rad, intfc_vel)
375# 41 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
376#elif defined(MFC_OpenMP)
377# 41 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
378!$omp declare target (gas_p, gas_mv, intfc_rad, intfc_vel)
379# 41 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
380#endif
381 ! (nBub, 1-> x or 2->y or 3 ->z, 1 -> actual or 2 -> temporal val)
382 real(wp), allocatable, dimension(:,:,:) :: mtn_pos !< Bubble's position
383 real(wp), allocatable, dimension(:,:,:) :: mtn_posprev !< Bubble's previous position
384 real(wp), allocatable, dimension(:,:,:) :: mtn_vel !< Bubble's velocity
385 real(wp), allocatable, dimension(:,:,:) :: mtn_s !< Bubble's computational cell position in real format
386
387# 47 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
388#if defined(MFC_OpenACC)
389# 47 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
390!$acc declare create(mtn_pos, mtn_posPrev, mtn_vel, mtn_s)
391# 47 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
392#elif defined(MFC_OpenMP)
393# 47 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
394!$omp declare target (mtn_pos, mtn_posPrev, mtn_vel, mtn_s)
395# 47 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
396#endif
397 ! (nBub, 1-> x or 2->y or 3 ->z, time-stage)
398 real(wp), allocatable, dimension(:,:) :: intfc_draddt !< Time derivative of bubble's radius
399 real(wp), allocatable, dimension(:,:) :: intfc_dveldt !< Time derivative of bubble's interface velocity
400 real(wp), allocatable, dimension(:,:) :: gas_dpdt !< Time derivative of gas pressure
401 real(wp), allocatable, dimension(:,:) :: gas_dmvdt !< Time derivative of the vapor mass in the bubble
402 real(wp), allocatable, dimension(:,:,:) :: mtn_dposdt !< Time derivative of the bubble's position
403 real(wp), allocatable, dimension(:,:,:) :: mtn_dveldt !< Time derivative of the bubble's velocity
404
405# 55 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
406#if defined(MFC_OpenACC)
407# 55 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
408!$acc declare create(intfc_draddt, intfc_dveldt, gas_dpdt, gas_dmvdt, mtn_dposdt, mtn_dveldt)
409# 55 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
410#elif defined(MFC_OpenMP)
411# 55 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
412!$omp declare target (intfc_draddt, intfc_dveldt, gas_dpdt, gas_dmvdt, mtn_dposdt, mtn_dveldt)
413# 55 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
414#endif
415
416 integer, private :: lag_num_ts !< Number of time stages in the time-stepping scheme
417
418# 58 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
419#if defined(MFC_OpenACC)
420# 58 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
421!$acc declare create(lag_num_ts)
422# 58 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
423#elif defined(MFC_OpenMP)
424# 58 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
425!$omp declare target (lag_num_ts)
426# 58 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
427#endif
428
429 integer :: nbubs !< Number of bubbles in the local domain
430 real(wp) :: rmax_glb, rmin_glb !< Maximum and minimum bubbe size in the local domain
431 !> Projection of the lagrangian particles in the Eulerian framework
432 type(scalar_field), dimension(:), allocatable :: q_beta
433 integer :: q_beta_idx !< Size of the q_beta vector field
434
435# 65 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
436#if defined(MFC_OpenACC)
437# 65 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
438!$acc declare create(nBubs, Rmax_glb, Rmin_glb, q_beta, q_beta_idx)
439# 65 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
440#elif defined(MFC_OpenMP)
441# 65 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
442!$omp declare target (nBubs, Rmax_glb, Rmin_glb, q_beta, q_beta_idx)
443# 65 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
444#endif
445
446contains
447
448 !> Initializes the lagrangian subgrid bubble solver
449 impure subroutine s_initialize_bubbles_el_module(q_cons_vf)
450
451 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
452 integer :: nbubs_glb, i
453
454 ! Setting number of time-stages for selected time-stepping scheme
455
457
458 ! Allocate space for the Eulerian fields needed to map the effect of the bubbles
459 if (lag_params%solver_approach == 1) then
460 ! One-way coupling
461 q_beta_idx = 3
462 else if (lag_params%solver_approach == 2) then
463 ! Two-way coupling
464 q_beta_idx = 4
465 if (p == 0) then
466 ! Subgrid noise model for 2D approximation
467 q_beta_idx = 6
468 end if
469 else
470 call s_mpi_abort('Please check the lag_params%solver_approach input')
471 end if
472
473
474# 94 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
475#if defined(MFC_OpenACC)
476# 94 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
477!$acc update device(lag_num_ts, q_beta_idx)
478# 94 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
479#elif defined(MFC_OpenMP)
480# 94 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
481!$omp target update to(lag_num_ts, q_beta_idx)
482# 94 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
483#endif
484
485#ifdef MFC_DEBUG
486# 96 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
487 block
488# 96 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
489 use iso_fortran_env, only: output_unit
490# 96 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
491
492# 96 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
493 print *, 'm_bubbles_EL.fpp:96: ', '@:ALLOCATE(q_beta(1:q_beta_idx))'
494# 96 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
495
496# 96 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
497 call flush (output_unit)
498# 96 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
499 end block
500# 96 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
501#endif
502# 96 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
503 allocate (q_beta(1:q_beta_idx))
504# 96 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
505
506# 96 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
507
508# 96 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
509#if defined(MFC_OpenACC)
510# 96 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
511!$acc enter data create(q_beta)
512# 96 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
513#elif defined(MFC_OpenMP)
514# 96 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
515!$omp target enter data map(always,alloc:q_beta)
516# 96 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
517#endif
518
519 do i = 1, q_beta_idx
520#ifdef MFC_DEBUG
521# 99 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
522 block
523# 99 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
524 use iso_fortran_env, only: output_unit
525# 99 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
526
527# 99 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
528 print *, 'm_bubbles_EL.fpp:99: ', '@:ALLOCATE(q_beta(i)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, idwbuff(3)%beg:idwbuff(3)%end))'
529# 99 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
530
531# 99 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
532 call flush (output_unit)
533# 99 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
534 end block
535# 99 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
536#endif
537# 99 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
538 allocate (q_beta(i)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, idwbuff(3)%beg:idwbuff(3)%end))
539# 99 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
540
541# 99 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
542
543# 99 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
544#if defined(MFC_OpenACC)
545# 99 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
546!$acc enter data create(q_beta(i)%sf)
547# 99 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
548#elif defined(MFC_OpenMP)
549# 99 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
550!$omp target enter data map(always,alloc:q_beta(i)%sf)
551# 99 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
552#endif
553 end do
554
555 do i = 1, q_beta_idx
556#ifdef _CRAYFTN
557# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
558 block
559# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
560#ifdef MFC_DEBUG
561# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
562 block
563# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
564 use iso_fortran_env, only: output_unit
565# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
566
567# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
568 print *, 'm_bubbles_EL.fpp:103: ', '@:ACC_SETUP_SFs(q_beta(i))'
569# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
570
571# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
572 call flush (output_unit)
573# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
574 end block
575# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
576#endif
577# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
578
579# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
580
581# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
582#if defined(MFC_OpenACC)
583# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
584!$acc enter data copyin(q_beta(i))
585# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
586#elif defined(MFC_OpenMP)
587# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
588!$omp target enter data map(to:q_beta(i))
589# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
590#endif
591# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
592 if (associated(q_beta(i)%sf)) then
593# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
594
595# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
596#if defined(MFC_OpenACC)
597# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
598!$acc enter data copyin(q_beta(i)%sf)
599# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
600#elif defined(MFC_OpenMP)
601# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
602!$omp target enter data map(to:q_beta(i)%sf)
603# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
604#endif
605# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
606 end if
607# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
608 end block
609# 103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
610#endif
611 end do
612
613 ! Allocating space for lagrangian variables
614 nbubs_glb = lag_params%nBubs_glb
615
616#ifdef MFC_DEBUG
617# 109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
618 block
619# 109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
620 use iso_fortran_env, only: output_unit
621# 109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
622
623# 109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
624 print *, 'm_bubbles_EL.fpp:109: ', '@:ALLOCATE(lag_id(1:nBubs_glb, 1:2))'
625# 109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
626
627# 109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
628 call flush (output_unit)
629# 109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
630 end block
631# 109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
632#endif
633# 109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
634 allocate (lag_id(1:nbubs_glb, 1:2))
635# 109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
636
637# 109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
638
639# 109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
640#if defined(MFC_OpenACC)
641# 109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
642!$acc enter data create(lag_id)
643# 109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
644#elif defined(MFC_OpenMP)
645# 109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
646!$omp target enter data map(always,alloc:lag_id)
647# 109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
648#endif
649#ifdef MFC_DEBUG
650# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
651 block
652# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
653 use iso_fortran_env, only: output_unit
654# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
655
656# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
657 print *, 'm_bubbles_EL.fpp:110: ', '@:ALLOCATE(bub_R0(1:nBubs_glb))'
658# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
659
660# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
661 call flush (output_unit)
662# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
663 end block
664# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
665#endif
666# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
667 allocate (bub_r0(1:nbubs_glb))
668# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
669
670# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
671
672# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
673#if defined(MFC_OpenACC)
674# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
675!$acc enter data create(bub_R0)
676# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
677#elif defined(MFC_OpenMP)
678# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
679!$omp target enter data map(always,alloc:bub_R0)
680# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
681#endif
682#ifdef MFC_DEBUG
683# 111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
684 block
685# 111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
686 use iso_fortran_env, only: output_unit
687# 111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
688
689# 111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
690 print *, 'm_bubbles_EL.fpp:111: ', '@:ALLOCATE(Rmax_stats(1:nBubs_glb))'
691# 111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
692
693# 111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
694 call flush (output_unit)
695# 111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
696 end block
697# 111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
698#endif
699# 111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
700 allocate (rmax_stats(1:nbubs_glb))
701# 111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
702
703# 111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
704
705# 111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
706#if defined(MFC_OpenACC)
707# 111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
708!$acc enter data create(Rmax_stats)
709# 111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
710#elif defined(MFC_OpenMP)
711# 111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
712!$omp target enter data map(always,alloc:Rmax_stats)
713# 111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
714#endif
715#ifdef MFC_DEBUG
716# 112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
717 block
718# 112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
719 use iso_fortran_env, only: output_unit
720# 112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
721
722# 112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
723 print *, 'm_bubbles_EL.fpp:112: ', '@:ALLOCATE(Rmin_stats(1:nBubs_glb))'
724# 112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
725
726# 112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
727 call flush (output_unit)
728# 112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
729 end block
730# 112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
731#endif
732# 112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
733 allocate (rmin_stats(1:nbubs_glb))
734# 112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
735
736# 112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
737
738# 112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
739#if defined(MFC_OpenACC)
740# 112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
741!$acc enter data create(Rmin_stats)
742# 112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
743#elif defined(MFC_OpenMP)
744# 112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
745!$omp target enter data map(always,alloc:Rmin_stats)
746# 112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
747#endif
748#ifdef MFC_DEBUG
749# 113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
750 block
751# 113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
752 use iso_fortran_env, only: output_unit
753# 113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
754
755# 113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
756 print *, 'm_bubbles_EL.fpp:113: ', '@:ALLOCATE(gas_mg(1:nBubs_glb))'
757# 113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
758
759# 113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
760 call flush (output_unit)
761# 113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
762 end block
763# 113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
764#endif
765# 113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
766 allocate (gas_mg(1:nbubs_glb))
767# 113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
768
769# 113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
770
771# 113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
772#if defined(MFC_OpenACC)
773# 113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
774!$acc enter data create(gas_mg)
775# 113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
776#elif defined(MFC_OpenMP)
777# 113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
778!$omp target enter data map(always,alloc:gas_mg)
779# 113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
780#endif
781#ifdef MFC_DEBUG
782# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
783 block
784# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
785 use iso_fortran_env, only: output_unit
786# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
787
788# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
789 print *, 'm_bubbles_EL.fpp:114: ', '@:ALLOCATE(gas_betaT(1:nBubs_glb))'
790# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
791
792# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
793 call flush (output_unit)
794# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
795 end block
796# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
797#endif
798# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
799 allocate (gas_betat(1:nbubs_glb))
800# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
801
802# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
803
804# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
805#if defined(MFC_OpenACC)
806# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
807!$acc enter data create(gas_betaT)
808# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
809#elif defined(MFC_OpenMP)
810# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
811!$omp target enter data map(always,alloc:gas_betaT)
812# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
813#endif
814#ifdef MFC_DEBUG
815# 115 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
816 block
817# 115 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
818 use iso_fortran_env, only: output_unit
819# 115 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
820
821# 115 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
822 print *, 'm_bubbles_EL.fpp:115: ', '@:ALLOCATE(gas_betaC(1:nBubs_glb))'
823# 115 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
824
825# 115 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
826 call flush (output_unit)
827# 115 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
828 end block
829# 115 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
830#endif
831# 115 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
832 allocate (gas_betac(1:nbubs_glb))
833# 115 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
834
835# 115 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
836
837# 115 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
838#if defined(MFC_OpenACC)
839# 115 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
840!$acc enter data create(gas_betaC)
841# 115 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
842#elif defined(MFC_OpenMP)
843# 115 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
844!$omp target enter data map(always,alloc:gas_betaC)
845# 115 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
846#endif
847#ifdef MFC_DEBUG
848# 116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
849 block
850# 116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
851 use iso_fortran_env, only: output_unit
852# 116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
853
854# 116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
855 print *, 'm_bubbles_EL.fpp:116: ', '@:ALLOCATE(bub_dphidt(1:nBubs_glb))'
856# 116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
857
858# 116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
859 call flush (output_unit)
860# 116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
861 end block
862# 116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
863#endif
864# 116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
865 allocate (bub_dphidt(1:nbubs_glb))
866# 116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
867
868# 116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
869
870# 116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
871#if defined(MFC_OpenACC)
872# 116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
873!$acc enter data create(bub_dphidt)
874# 116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
875#elif defined(MFC_OpenMP)
876# 116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
877!$omp target enter data map(always,alloc:bub_dphidt)
878# 116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
879#endif
880#ifdef MFC_DEBUG
881# 117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
882 block
883# 117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
884 use iso_fortran_env, only: output_unit
885# 117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
886
887# 117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
888 print *, 'm_bubbles_EL.fpp:117: ', '@:ALLOCATE(gas_p(1:nBubs_glb, 1:2))'
889# 117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
890
891# 117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
892 call flush (output_unit)
893# 117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
894 end block
895# 117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
896#endif
897# 117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
898 allocate (gas_p(1:nbubs_glb, 1:2))
899# 117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
900
901# 117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
902
903# 117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
904#if defined(MFC_OpenACC)
905# 117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
906!$acc enter data create(gas_p)
907# 117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
908#elif defined(MFC_OpenMP)
909# 117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
910!$omp target enter data map(always,alloc:gas_p)
911# 117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
912#endif
913#ifdef MFC_DEBUG
914# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
915 block
916# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
917 use iso_fortran_env, only: output_unit
918# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
919
920# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
921 print *, 'm_bubbles_EL.fpp:118: ', '@:ALLOCATE(gas_mv(1:nBubs_glb, 1:2))'
922# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
923
924# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
925 call flush (output_unit)
926# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
927 end block
928# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
929#endif
930# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
931 allocate (gas_mv(1:nbubs_glb, 1:2))
932# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
933
934# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
935
936# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
937#if defined(MFC_OpenACC)
938# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
939!$acc enter data create(gas_mv)
940# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
941#elif defined(MFC_OpenMP)
942# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
943!$omp target enter data map(always,alloc:gas_mv)
944# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
945#endif
946#ifdef MFC_DEBUG
947# 119 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
948 block
949# 119 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
950 use iso_fortran_env, only: output_unit
951# 119 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
952
953# 119 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
954 print *, 'm_bubbles_EL.fpp:119: ', '@:ALLOCATE(intfc_rad(1:nBubs_glb, 1:2))'
955# 119 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
956
957# 119 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
958 call flush (output_unit)
959# 119 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
960 end block
961# 119 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
962#endif
963# 119 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
964 allocate (intfc_rad(1:nbubs_glb, 1:2))
965# 119 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
966
967# 119 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
968
969# 119 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
970#if defined(MFC_OpenACC)
971# 119 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
972!$acc enter data create(intfc_rad)
973# 119 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
974#elif defined(MFC_OpenMP)
975# 119 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
976!$omp target enter data map(always,alloc:intfc_rad)
977# 119 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
978#endif
979#ifdef MFC_DEBUG
980# 120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
981 block
982# 120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
983 use iso_fortran_env, only: output_unit
984# 120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
985
986# 120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
987 print *, 'm_bubbles_EL.fpp:120: ', '@:ALLOCATE(intfc_vel(1:nBubs_glb, 1:2))'
988# 120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
989
990# 120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
991 call flush (output_unit)
992# 120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
993 end block
994# 120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
995#endif
996# 120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
997 allocate (intfc_vel(1:nbubs_glb, 1:2))
998# 120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
999
1000# 120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1001
1002# 120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1003#if defined(MFC_OpenACC)
1004# 120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1005!$acc enter data create(intfc_vel)
1006# 120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1007#elif defined(MFC_OpenMP)
1008# 120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1009!$omp target enter data map(always,alloc:intfc_vel)
1010# 120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1011#endif
1012#ifdef MFC_DEBUG
1013# 121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1014 block
1015# 121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1016 use iso_fortran_env, only: output_unit
1017# 121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1018
1019# 121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1020 print *, 'm_bubbles_EL.fpp:121: ', '@:ALLOCATE(mtn_pos(1:nBubs_glb, 1:3, 1:2))'
1021# 121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1022
1023# 121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1024 call flush (output_unit)
1025# 121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1026 end block
1027# 121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1028#endif
1029# 121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1030 allocate (mtn_pos(1:nbubs_glb, 1:3, 1:2))
1031# 121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1032
1033# 121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1034
1035# 121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1036#if defined(MFC_OpenACC)
1037# 121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1038!$acc enter data create(mtn_pos)
1039# 121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1040#elif defined(MFC_OpenMP)
1041# 121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1042!$omp target enter data map(always,alloc:mtn_pos)
1043# 121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1044#endif
1045#ifdef MFC_DEBUG
1046# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1047 block
1048# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1049 use iso_fortran_env, only: output_unit
1050# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1051
1052# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1053 print *, 'm_bubbles_EL.fpp:122: ', '@:ALLOCATE(mtn_posPrev(1:nBubs_glb, 1:3, 1:2))'
1054# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1055
1056# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1057 call flush (output_unit)
1058# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1059 end block
1060# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1061#endif
1062# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1063 allocate (mtn_posprev(1:nbubs_glb, 1:3, 1:2))
1064# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1065
1066# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1067
1068# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1069#if defined(MFC_OpenACC)
1070# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1071!$acc enter data create(mtn_posPrev)
1072# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1073#elif defined(MFC_OpenMP)
1074# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1075!$omp target enter data map(always,alloc:mtn_posPrev)
1076# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1077#endif
1078#ifdef MFC_DEBUG
1079# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1080 block
1081# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1082 use iso_fortran_env, only: output_unit
1083# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1084
1085# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1086 print *, 'm_bubbles_EL.fpp:123: ', '@:ALLOCATE(mtn_vel(1:nBubs_glb, 1:3, 1:2))'
1087# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1088
1089# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1090 call flush (output_unit)
1091# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1092 end block
1093# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1094#endif
1095# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1096 allocate (mtn_vel(1:nbubs_glb, 1:3, 1:2))
1097# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1098
1099# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1100
1101# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1102#if defined(MFC_OpenACC)
1103# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1104!$acc enter data create(mtn_vel)
1105# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1106#elif defined(MFC_OpenMP)
1107# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1108!$omp target enter data map(always,alloc:mtn_vel)
1109# 123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1110#endif
1111#ifdef MFC_DEBUG
1112# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1113 block
1114# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1115 use iso_fortran_env, only: output_unit
1116# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1117
1118# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1119 print *, 'm_bubbles_EL.fpp:124: ', '@:ALLOCATE(mtn_s(1:nBubs_glb, 1:3, 1:2))'
1120# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1121
1122# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1123 call flush (output_unit)
1124# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1125 end block
1126# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1127#endif
1128# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1129 allocate (mtn_s(1:nbubs_glb, 1:3, 1:2))
1130# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1131
1132# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1133
1134# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1135#if defined(MFC_OpenACC)
1136# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1137!$acc enter data create(mtn_s)
1138# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1139#elif defined(MFC_OpenMP)
1140# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1141!$omp target enter data map(always,alloc:mtn_s)
1142# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1143#endif
1144#ifdef MFC_DEBUG
1145# 125 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1146 block
1147# 125 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1148 use iso_fortran_env, only: output_unit
1149# 125 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1150
1151# 125 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1152 print *, 'm_bubbles_EL.fpp:125: ', '@:ALLOCATE(intfc_draddt(1:nBubs_glb, 1:lag_num_ts))'
1153# 125 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1154
1155# 125 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1156 call flush (output_unit)
1157# 125 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1158 end block
1159# 125 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1160#endif
1161# 125 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1162 allocate (intfc_draddt(1:nbubs_glb, 1:lag_num_ts))
1163# 125 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1164
1165# 125 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1166
1167# 125 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1168#if defined(MFC_OpenACC)
1169# 125 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1170!$acc enter data create(intfc_draddt)
1171# 125 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1172#elif defined(MFC_OpenMP)
1173# 125 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1174!$omp target enter data map(always,alloc:intfc_draddt)
1175# 125 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1176#endif
1177#ifdef MFC_DEBUG
1178# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1179 block
1180# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1181 use iso_fortran_env, only: output_unit
1182# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1183
1184# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1185 print *, 'm_bubbles_EL.fpp:126: ', '@:ALLOCATE(intfc_dveldt(1:nBubs_glb, 1:lag_num_ts))'
1186# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1187
1188# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1189 call flush (output_unit)
1190# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1191 end block
1192# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1193#endif
1194# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1195 allocate (intfc_dveldt(1:nbubs_glb, 1:lag_num_ts))
1196# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1197
1198# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1199
1200# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1201#if defined(MFC_OpenACC)
1202# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1203!$acc enter data create(intfc_dveldt)
1204# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1205#elif defined(MFC_OpenMP)
1206# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1207!$omp target enter data map(always,alloc:intfc_dveldt)
1208# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1209#endif
1210#ifdef MFC_DEBUG
1211# 127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1212 block
1213# 127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1214 use iso_fortran_env, only: output_unit
1215# 127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1216
1217# 127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1218 print *, 'm_bubbles_EL.fpp:127: ', '@:ALLOCATE(gas_dpdt(1:nBubs_glb, 1:lag_num_ts))'
1219# 127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1220
1221# 127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1222 call flush (output_unit)
1223# 127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1224 end block
1225# 127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1226#endif
1227# 127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1228 allocate (gas_dpdt(1:nbubs_glb, 1:lag_num_ts))
1229# 127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1230
1231# 127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1232
1233# 127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1234#if defined(MFC_OpenACC)
1235# 127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1236!$acc enter data create(gas_dpdt)
1237# 127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1238#elif defined(MFC_OpenMP)
1239# 127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1240!$omp target enter data map(always,alloc:gas_dpdt)
1241# 127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1242#endif
1243#ifdef MFC_DEBUG
1244# 128 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1245 block
1246# 128 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1247 use iso_fortran_env, only: output_unit
1248# 128 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1249
1250# 128 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1251 print *, 'm_bubbles_EL.fpp:128: ', '@:ALLOCATE(gas_dmvdt(1:nBubs_glb, 1:lag_num_ts))'
1252# 128 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1253
1254# 128 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1255 call flush (output_unit)
1256# 128 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1257 end block
1258# 128 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1259#endif
1260# 128 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1261 allocate (gas_dmvdt(1:nbubs_glb, 1:lag_num_ts))
1262# 128 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1263
1264# 128 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1265
1266# 128 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1267#if defined(MFC_OpenACC)
1268# 128 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1269!$acc enter data create(gas_dmvdt)
1270# 128 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1271#elif defined(MFC_OpenMP)
1272# 128 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1273!$omp target enter data map(always,alloc:gas_dmvdt)
1274# 128 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1275#endif
1276#ifdef MFC_DEBUG
1277# 129 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1278 block
1279# 129 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1280 use iso_fortran_env, only: output_unit
1281# 129 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1282
1283# 129 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1284 print *, 'm_bubbles_EL.fpp:129: ', '@:ALLOCATE(mtn_dposdt(1:nBubs_glb, 1:3, 1:lag_num_ts))'
1285# 129 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1286
1287# 129 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1288 call flush (output_unit)
1289# 129 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1290 end block
1291# 129 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1292#endif
1293# 129 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1294 allocate (mtn_dposdt(1:nbubs_glb, 1:3, 1:lag_num_ts))
1295# 129 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1296
1297# 129 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1298
1299# 129 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1300#if defined(MFC_OpenACC)
1301# 129 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1302!$acc enter data create(mtn_dposdt)
1303# 129 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1304#elif defined(MFC_OpenMP)
1305# 129 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1306!$omp target enter data map(always,alloc:mtn_dposdt)
1307# 129 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1308#endif
1309#ifdef MFC_DEBUG
1310# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1311 block
1312# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1313 use iso_fortran_env, only: output_unit
1314# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1315
1316# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1317 print *, 'm_bubbles_EL.fpp:130: ', '@:ALLOCATE(mtn_dveldt(1:nBubs_glb, 1:3, 1:lag_num_ts))'
1318# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1319
1320# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1321 call flush (output_unit)
1322# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1323 end block
1324# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1325#endif
1326# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1327 allocate (mtn_dveldt(1:nbubs_glb, 1:3, 1:lag_num_ts))
1328# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1329
1330# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1331
1332# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1333#if defined(MFC_OpenACC)
1334# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1335!$acc enter data create(mtn_dveldt)
1336# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1337#elif defined(MFC_OpenMP)
1338# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1339!$omp target enter data map(always,alloc:mtn_dveldt)
1340# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1341#endif
1342
1343 if (adap_dt .and. f_is_default(adap_dt_tol)) adap_dt_tol = dflt_adap_dt_tol
1344
1345 ! Starting bubbles
1347
1348 end subroutine s_initialize_bubbles_el_module
1349
1350 !> Read initial bubble data from input files
1351 impure subroutine s_read_input_bubbles(q_cons_vf)
1352
1353 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
1354 real(wp), dimension(8) :: inputbubble
1355 real(wp) :: qtime
1356 integer :: id, bub_id, save_count
1357 integer :: i, ios
1358 logical :: file_exist, indomain
1359 character(LEN=path_len + 2*name_len) :: path_d_dir
1360 ! Initialize number of particles
1361
1362 bub_id = 0
1363 id = 0
1364
1365 ! Read the input lag_bubble file or restart point
1366 if (cfl_dt) then
1367 save_count = n_start
1368 qtime = n_start*t_save
1369 else
1370 save_count = t_step_start
1371 qtime = t_step_start*dt
1372 end if
1373
1374 if (save_count == 0) then
1375 if (proc_rank == 0) print *, 'Reading lagrange bubbles input file.'
1376 inquire (file='input/lag_bubbles.dat', exist=file_exist)
1377 if (file_exist) then
1378 open (94, file='input/lag_bubbles.dat', form='formatted', iostat=ios)
1379 do while (ios == 0)
1380 read (94, *, iostat=ios) (inputbubble(i), i=1, 8)
1381 if (ios /= 0) cycle
1382 indomain = particle_in_domain_physical(inputbubble(1:3))
1383 id = id + 1
1384 if (id > lag_params%nBubs_glb .and. proc_rank == 0) then
1385 call s_mpi_abort("Current number of bubbles is larger than nBubs_glb")
1386 end if
1387 if (indomain) then
1388 bub_id = bub_id + 1
1389 call s_add_bubbles(inputbubble, q_cons_vf, bub_id)
1390 lag_id(bub_id, 1) = id ! global ID
1391 lag_id(bub_id, 2) = bub_id ! local ID
1392 nbubs = bub_id ! local number of bubbles
1393 end if
1394 end do
1395 close (94)
1396 else
1397 call s_mpi_abort("Initialize the lagrange bubbles in input/lag_bubbles.dat")
1398 end if
1399 else
1400 if (proc_rank == 0) print *, 'Restarting lagrange bubbles at save_count: ', save_count
1401 call s_restart_bubbles(bub_id, save_count)
1402 end if
1403
1404 print *, " Lagrange bubbles running, in proc", proc_rank, "number:", bub_id, "/", id
1405
1406
1407# 195 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1408#if defined(MFC_OpenACC)
1409# 195 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1410!$acc update device(bubbles_lagrange, lag_params)
1411# 195 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1412#elif defined(MFC_OpenMP)
1413# 195 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1414!$omp target update to(bubbles_lagrange, lag_params)
1415# 195 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1416#endif
1417
1418
1419# 197 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1420#if defined(MFC_OpenACC)
1421# 197 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1422!$acc update device(lag_id, bub_R0, Rmax_stats, Rmin_stats, gas_mg, gas_betaT, gas_betaC, bub_dphidt, gas_p, gas_mv, intfc_rad, intfc_vel, mtn_pos, mtn_posPrev, mtn_vel, mtn_s, intfc_draddt, intfc_dveldt, gas_dpdt, gas_dmvdt, mtn_dposdt, mtn_dveldt, nBubs)
1423# 197 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1424#elif defined(MFC_OpenMP)
1425# 197 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1426!$omp target update to(lag_id, bub_R0, Rmax_stats, Rmin_stats, gas_mg, gas_betaT, gas_betaC, bub_dphidt, gas_p, gas_mv, intfc_rad, intfc_vel, mtn_pos, mtn_posPrev, mtn_vel, mtn_s, intfc_draddt, intfc_dveldt, gas_dpdt, gas_dmvdt, mtn_dposdt, mtn_dveldt, nBubs)
1427# 197 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1428#endif
1429# 200 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1430
1431 rmax_glb = min(dflt_real, -dflt_real)
1432 rmin_glb = max(dflt_real, -dflt_real)
1433
1434# 203 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1435#if defined(MFC_OpenACC)
1436# 203 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1437!$acc update device(Rmax_glb, Rmin_glb)
1438# 203 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1439#elif defined(MFC_OpenMP)
1440# 203 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1441!$omp target update to(Rmax_glb, Rmin_glb)
1442# 203 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1443#endif
1444
1445
1446# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1447#if defined(MFC_OpenACC)
1448# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1449!$acc update device(dx, dy, dz, x_cb, x_cc, y_cb, y_cc, z_cb, z_cc)
1450# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1451#elif defined(MFC_OpenMP)
1452# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1453!$omp target update to(dx, dy, dz, x_cb, x_cc, y_cb, y_cc, z_cb, z_cc)
1454# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1455#endif
1456
1457 ! Populate temporal variables
1460
1461 if (lag_params%write_bubbles) call s_write_lag_particles(qtime)
1462
1463 if (save_count == 0) then
1464 ! Create ./D directory
1465 write (path_d_dir, '(A,I0,A,I0)') trim(case_dir) // '/D'
1466 call my_inquire(path_d_dir, file_exist)
1467 if (.not. file_exist) call s_create_directory(trim(path_d_dir))
1468 call s_write_restart_lag_bubbles(save_count) ! Needed for post_processing
1469 call s_write_void_evol(qtime)
1470 end if
1471
1472 end subroutine s_read_input_bubbles
1473
1474 !> Add a new bubble from input data for a fresh start
1475 impure subroutine s_add_bubbles(inputBubble, q_cons_vf, bub_id)
1476
1477 type(scalar_field), dimension(sys_size), intent(in) :: q_cons_vf
1478 real(wp), dimension(8), intent(in) :: inputbubble
1479 integer, intent(in) :: bub_id
1480 integer :: i
1481 real(wp) :: pliq, volparticle, concvap, totalmass, kparticle, cpparticle
1482 real(wp) :: omegan_local, peg, pet, rhol, pcrit, qv, gamma, pi_inf, dynp
1483 integer, dimension(3) :: cell
1484 real(wp), dimension(2) :: re
1485 real(wp) :: massflag, heatflag, re_trans, im_trans
1486
1487 massflag = 0._wp
1488 heatflag = 0._wp
1489 if (lag_params%massTransfer_model) massflag = 1._wp
1490 if (lag_params%heatTransfer_model) heatflag = 1._wp
1491
1492 bub_r0(bub_id) = inputbubble(7)
1493 rmax_stats(bub_id) = min(dflt_real, -dflt_real)
1494 rmin_stats(bub_id) = max(dflt_real, -dflt_real)
1495 bub_dphidt(bub_id) = 0._wp
1496 intfc_rad(bub_id, 1) = inputbubble(7)
1497 intfc_vel(bub_id, 1) = inputbubble(8)
1498 mtn_pos(bub_id,1:3,1) = inputbubble(1:3)
1499 mtn_posprev(bub_id,1:3,1) = mtn_pos(bub_id,1:3,1)
1500 mtn_vel(bub_id,1:3,1) = inputbubble(4:6)
1501
1502 if (cyl_coord .and. p == 0) then
1503 mtn_pos(bub_id, 2, 1) = sqrt(mtn_pos(bub_id, 2, 1)**2._wp + mtn_pos(bub_id, 3, 1)**2._wp)
1504 ! Storing azimuthal angle (-Pi to Pi)) into the third coordinate variable
1505 mtn_pos(bub_id, 3, 1) = atan2(inputbubble(3), inputbubble(2))
1506 mtn_posprev(bub_id,1:3,1) = mtn_pos(bub_id,1:3,1)
1507 end if
1508
1509 cell = -buff_size
1510 call s_locate_cell(mtn_pos(bub_id,1:3,1), cell, mtn_s(bub_id,1:3,1))
1511
1512 ! Check if the bubble is located in the ghost cell of a symmetric, or wall boundary
1513 if ((any(bc_x%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, &
1514 & bc_no_slip_wall/)) .and. cell(1) < 0) .or. (any(bc_x%end == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, &
1515 & bc_no_slip_wall/)) .and. cell(1) > m) .or. (any(bc_y%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, &
1516 & bc_no_slip_wall/)) .and. cell(2) < 0) .or. (any(bc_y%end == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, &
1517 & bc_no_slip_wall/)) .and. cell(2) > n)) then
1518 call s_mpi_abort("Lagrange bubble is in the ghost cells of a symmetric or wall boundary.")
1519 end if
1520
1521 if (p > 0) then
1522 if ((any(bc_z%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, &
1523 & bc_no_slip_wall/)) .and. cell(3) < 0) .or. (any(bc_z%end == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, &
1524 & bc_no_slip_wall/)) .and. cell(3) > p)) then
1525 call s_mpi_abort("Lagrange bubble is in the ghost cells of a symmetric or wall boundary.")
1526 end if
1527 end if
1528
1529 call s_convert_to_mixture_variables(q_cons_vf, cell(1), cell(2), cell(3), rhol, gamma, pi_inf, qv, re)
1530 dynp = 0._wp
1531 do i = 1, num_dims
1532 dynp = dynp + 0.5_wp*q_cons_vf(contxe + i)%sf(cell(1), cell(2), cell(3))**2/rhol
1533 end do
1534 pliq = (q_cons_vf(e_idx)%sf(cell(1), cell(2), cell(3)) - dynp - pi_inf)/gamma
1535 if (pliq < 0) print *, "Negative pressure", proc_rank, q_cons_vf(e_idx)%sf(cell(1), cell(2), cell(3)), pi_inf, gamma, &
1536 & pliq, cell, dynp
1537
1538 ! Initial particle pressure
1539 gas_p(bub_id, 1) = pliq + 2._wp*(1._wp/web)/bub_r0(bub_id)
1540 if (.not. f_approx_equal((1._wp/web), 0._wp)) then
1541 pcrit = pv - 4._wp*(1._wp/web)/(3._wp*sqrt(3._wp*gas_p(bub_id, 1)*bub_r0(bub_id)**3._wp/(2._wp*(1._wp/web))))
1542 pref = gas_p(bub_id, 1)
1543 else
1544 pcrit = 0._wp
1545 end if
1546
1547 ! Initial particle mass
1548 volparticle = 4._wp/3._wp*pi*bub_r0(bub_id)**3._wp ! volume
1549 gas_mv(bub_id, 1) = pv*volparticle*(1._wp/(r_v*tw))*(massflag) ! vapermass
1550 gas_mg(bub_id) = (gas_p(bub_id, 1) - pv*(massflag))*volparticle*(1._wp/(r_g*tw)) ! gasmass
1551 if (gas_mg(bub_id) <= 0._wp) then
1552 call s_mpi_abort("The initial mass of gas inside the bubble is negative. Check the initial conditions.")
1553 end if
1554 totalmass = gas_mg(bub_id) + gas_mv(bub_id, 1) ! totalmass
1555
1556 ! Bubble natural frequency
1557 concvap = gas_mv(bub_id, 1)/(gas_mv(bub_id, 1) + gas_mg(bub_id))
1558 omegan_local = (3._wp*(gas_p(bub_id, 1) - pv*(massflag)) + 4._wp*(1._wp/web)/bub_r0(bub_id))/rhol
1559 if (pv*(massflag) > gas_p(bub_id, 1)) then
1560 call s_mpi_abort("Lagrange bubble initially located in a region with pressure below the vapor pressure.")
1561 end if
1562 omegan_local = sqrt(omegan_local/bub_r0(bub_id)**2._wp)
1563
1564 cpparticle = concvap*cp_v + (1._wp - concvap)*cp_g
1565 kparticle = concvap*k_vl + (1._wp - concvap)*k_gl
1566
1567 ! Mass and heat transfer coefficients (based on Preston 2007)
1568 pet = totalmass/volparticle*cpparticle*bub_r0(bub_id)**2._wp*omegan_local/kparticle
1569 call s_transcoeff(1._wp, pet, re_trans, im_trans)
1570 gas_betat(bub_id) = re_trans*(heatflag)*kparticle
1571
1572 peg = bub_r0(bub_id)**2._wp*omegan_local/vd
1573 call s_transcoeff(1._wp, peg, re_trans, im_trans)
1574 gas_betac(bub_id) = re_trans*(massflag)*vd
1575
1576 if (gas_mg(bub_id) <= 0._wp) then
1577 call s_mpi_abort("Negative gas mass in the bubble, check if the bubble is in the domain.")
1578 end if
1579
1580 end subroutine s_add_bubbles
1581
1582 !> Restore bubble data from a restart file
1583 impure subroutine s_restart_bubbles(bub_id, save_count)
1584
1585 integer, intent(inout) :: bub_id, save_count
1586 character(LEN=path_len + 2*name_len) :: file_loc
1587 real(wp) :: file_time, file_dt
1588 integer :: file_num_procs, file_tot_part, tot_part
1589
1590#ifdef MFC_MPI
1591 real(wp), dimension(20) :: inputvals
1592 integer, dimension(MPI_STATUS_SIZE) :: status
1593 integer(kind=MPI_OFFSET_KIND) :: disp
1594 integer :: view
1595 integer, dimension(3) :: cell
1596 logical :: indomain, particle_file, file_exist
1597 integer, dimension(2) :: gsizes, lsizes, start_idx_part
1598 integer :: ifile, ierr, tot_data, id
1599 integer :: i
1600 integer, dimension(:), allocatable :: proc_bubble_counts
1601 real(wp), dimension(1:1,1:lag_io_vars) :: dummy
1602
1603 dummy = 0._wp
1604
1605 ! Construct file path
1606 write (file_loc, '(A,I0,A)') 'lag_bubbles_', save_count, '.dat'
1607 file_loc = trim(case_dir) // '/restart_data' // trim(mpiiofs) // trim(file_loc)
1608
1609 ! Check if file exists
1610 inquire (file=trim(file_loc), exist=file_exist)
1611 if (.not. file_exist) then
1612 call s_mpi_abort('Restart file ' // trim(file_loc) // ' does not exist!')
1613 end if
1614
1615 if (.not. parallel_io) return
1616
1617 if (proc_rank == 0) then
1618 call mpi_file_open(mpi_comm_self, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
1619
1620 call mpi_file_read(ifile, file_tot_part, 1, mpi_integer, status, ierr)
1621 call mpi_file_read(ifile, file_time, 1, mpi_p, status, ierr)
1622 call mpi_file_read(ifile, file_dt, 1, mpi_p, status, ierr)
1623 call mpi_file_read(ifile, file_num_procs, 1, mpi_integer, status, ierr)
1624
1625 call mpi_file_close(ifile, ierr)
1626 end if
1627
1628 call mpi_bcast(file_tot_part, 1, mpi_integer, 0, mpi_comm_world, ierr)
1629 call mpi_bcast(file_time, 1, mpi_p, 0, mpi_comm_world, ierr)
1630 call mpi_bcast(file_dt, 1, mpi_p, 0, mpi_comm_world, ierr)
1631 call mpi_bcast(file_num_procs, 1, mpi_integer, 0, mpi_comm_world, ierr)
1632
1633 allocate (proc_bubble_counts(file_num_procs))
1634
1635 if (proc_rank == 0) then
1636 call mpi_file_open(mpi_comm_self, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
1637
1638 ! Skip to processor counts position
1639 disp = int(sizeof(file_tot_part) + 2*sizeof(file_time) + sizeof(file_num_procs), mpi_offset_kind)
1640 call mpi_file_seek(ifile, disp, mpi_seek_set, ierr)
1641 call mpi_file_read(ifile, proc_bubble_counts, file_num_procs, mpi_integer, status, ierr)
1642
1643 call mpi_file_close(ifile, ierr)
1644 end if
1645
1646 call mpi_bcast(proc_bubble_counts, file_num_procs, mpi_integer, 0, mpi_comm_world, ierr)
1647
1648 ! Set time variables from file
1649 mytime = file_time
1650 dt = file_dt
1651
1652 bub_id = proc_bubble_counts(proc_rank + 1)
1653
1654 start_idx_part(1) = 0
1655 do i = 1, proc_rank
1656 start_idx_part(1) = start_idx_part(1) + proc_bubble_counts(i)
1657 end do
1658
1659 start_idx_part(2) = 0
1660 lsizes(1) = bub_id
1661 lsizes(2) = lag_io_vars
1662
1663 gsizes(1) = file_tot_part
1664 gsizes(2) = lag_io_vars
1665
1666 if (bub_id > 0) then
1667 allocate (mpi_io_data_lag_bubbles(bub_id,1:lag_io_vars))
1668
1669 call mpi_type_create_subarray(2, gsizes, lsizes, start_idx_part, mpi_order_fortran, mpi_p, view, ierr)
1670 call mpi_type_commit(view, ierr)
1671
1672 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
1673
1674 ! Skip extended header
1675 disp = int(sizeof(file_tot_part) + 2*sizeof(file_time) + sizeof(file_num_procs) &
1676 & + file_num_procs*sizeof(proc_bubble_counts(1)), mpi_offset_kind)
1677 call mpi_file_set_view(ifile, disp, mpi_p, view, 'native', mpi_info_int, ierr)
1678
1679 call mpi_file_read_all(ifile, mpi_io_data_lag_bubbles, lag_io_vars*bub_id, mpi_p, status, ierr)
1680
1681 call mpi_file_close(ifile, ierr)
1682 call mpi_type_free(view, ierr)
1683
1684 nbubs = bub_id
1685
1686 do i = 1, bub_id
1687 lag_id(i, 1) = int(mpi_io_data_lag_bubbles(i, 1))
1688 mtn_pos(i,1:3,1) = mpi_io_data_lag_bubbles(i,2:4)
1689 mtn_posprev(i,1:3,1) = mpi_io_data_lag_bubbles(i,5:7)
1690 mtn_vel(i,1:3,1) = mpi_io_data_lag_bubbles(i,8:10)
1691 intfc_rad(i, 1) = mpi_io_data_lag_bubbles(i, 11)
1692 intfc_vel(i, 1) = mpi_io_data_lag_bubbles(i, 12)
1693 bub_r0(i) = mpi_io_data_lag_bubbles(i, 13)
1694 rmax_stats(i) = mpi_io_data_lag_bubbles(i, 14)
1695 rmin_stats(i) = mpi_io_data_lag_bubbles(i, 15)
1696 bub_dphidt(i) = mpi_io_data_lag_bubbles(i, 16)
1697 gas_p(i, 1) = mpi_io_data_lag_bubbles(i, 17)
1698 gas_mv(i, 1) = mpi_io_data_lag_bubbles(i, 18)
1699 gas_mg(i) = mpi_io_data_lag_bubbles(i, 19)
1700 gas_betat(i) = mpi_io_data_lag_bubbles(i, 20)
1701 gas_betac(i) = mpi_io_data_lag_bubbles(i, 21)
1702 cell = -buff_size
1703 call s_locate_cell(mtn_pos(i,1:3,1), cell, mtn_s(i,1:3,1))
1704 end do
1705
1706 deallocate (mpi_io_data_lag_bubbles)
1707 else
1708 nbubs = 0
1709
1710 call mpi_type_contiguous(0, mpi_p, view, ierr)
1711 call mpi_type_commit(view, ierr)
1712
1713 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
1714
1715 ! Skip extended header
1716 disp = int(sizeof(file_tot_part) + 2*sizeof(file_time) + sizeof(file_num_procs) &
1717 & + file_num_procs*sizeof(proc_bubble_counts(1)), mpi_offset_kind)
1718 call mpi_file_set_view(ifile, disp, mpi_p, view, 'native', mpi_info_int, ierr)
1719
1720 call mpi_file_read_all(ifile, dummy, 0, mpi_p, status, ierr)
1721
1722 call mpi_file_close(ifile, ierr)
1723 call mpi_type_free(view, ierr)
1724 end if
1725
1726 if (proc_rank == 0) then
1727 write (*, '(A,I0,A,I0)') 'Read ', file_tot_part, ' particles from restart file at t_step = ', save_count
1728 write (*, '(A,E15.7,A,E15.7)') 'Restart time = ', mytime, ', dt = ', dt
1729 end if
1730
1731 deallocate (proc_bubble_counts)
1732#endif
1733
1734 end subroutine s_restart_bubbles
1735
1736 !> Contains the bubble dynamics subroutines.
1737 subroutine s_compute_bubble_el_dynamics(q_prim_vf, stage)
1738
1739 type(scalar_field), dimension(sys_size), intent(inout) :: q_prim_vf
1740 integer, intent(in) :: stage
1741 real(wp) :: myVapFlux
1742 real(wp) :: preterm1, term2, paux, pint, Romega, term1_fac
1743 real(wp) :: myR_m, mygamma_m, myPb, myMass_n, myMass_v
1744 real(wp) :: myR, myV, myBeta_c, myBeta_t, myR0, myPbdot, myMvdot
1745 real(wp) :: myPinf, aux1, aux2, myCson, myRho
1746 real(wp) :: gamma, pi_inf, qv
1747
1748# 501 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1749 real(wp), dimension(num_fluids) :: myalpha_rho, myalpha
1750# 503 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1751 real(wp), dimension(2) :: Re
1752 integer, dimension(3) :: cell
1753 integer :: adap_dt_stop_max, adap_dt_stop !< Fail-safe exit if max iteration count reached
1754 real(wp) :: dmalf, dmntait, dmBtait, dm_bub_adv_src, dm_divu !< Dummy variables for unified subgrid bubble subroutines
1755 integer :: i, k, l
1756
1757 call nvtxstartrange("LAGRANGE-BUBBLE-DYNAMICS")
1758
1759 ! Subgrid p_inf model based on Maeda and Colonius (2018).
1760 if (lag_params%pressure_corrector) then
1761 ! Calculate velocity potentials (valid for one bubble per cell)
1762
1763# 514 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1764
1765# 514 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1766#if defined(MFC_OpenACC)
1767# 514 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1768!$acc parallel loop gang vector default(present) private(k, cell, paux, preterm1, term2, Romega, myR0, myR, myV, myPb, pint, term1_fac)
1769# 514 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1770#elif defined(MFC_OpenMP)
1771# 514 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1772
1773# 514 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1774
1775# 514 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1776
1777# 514 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1778!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k, cell, paux, preterm1, term2, Romega, myR0, myR, myV, myPb, pint, term1_fac)
1779# 514 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1780#endif
1781 do k = 1, nbubs
1782 call s_get_pinf(k, q_prim_vf, 2, paux, cell, preterm1, term2, romega)
1783 myr0 = bub_r0(k)
1784 myr = intfc_rad(k, 2)
1785 myv = intfc_vel(k, 2)
1786 mypb = gas_p(k, 2)
1787 pint = f_cpbw_km(myr0, myr, myv, mypb)
1788 pint = pint + 0.5_wp*myv**2._wp
1789 if (lag_params%cluster_type == 2) then
1790 bub_dphidt(k) = (paux - pint) + term2
1791 ! Accounting for the potential induced by the bubble averaged over the control volume Note that this is based on
1792 ! the incompressible flow assumption near the bubble.
1793 term1_fac = 3._wp/2._wp*(myr*(romega**2._wp - myr**2._wp))/(romega**3._wp - myr**3._wp)
1794 bub_dphidt(k) = bub_dphidt(k)/(1._wp - term1_fac)
1795 end if
1796 end do
1797
1798# 531 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1799#if defined(MFC_OpenACC)
1800# 531 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1801!$acc end parallel loop
1802# 531 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1803#elif defined(MFC_OpenMP)
1804# 531 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1805
1806# 531 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1807!$omp end target teams loop
1808# 531 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1809#endif
1810 end if
1811
1812 ! Radial motion model
1813 adap_dt_stop_max = 0
1814
1815# 536 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1816
1817# 536 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1818#if defined(MFC_OpenACC)
1819# 536 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1820!$acc parallel loop gang vector default(present) private(k, i, myalpha_rho, myalpha, Re, cell, myVapFlux, preterm1, term2, paux, pint, Romega, term1_fac, myR_m, mygamma_m, myPb, myMass_n, myMass_v, myR, myV, myBeta_c, myBeta_t, myR0, myPbdot, myMvdot, myPinf, aux1, aux2, myCson, myRho, gamma, pi_inf, qv, dmalf, dmntait, dmBtait, dm_bub_adv_src, dm_divu, adap_dt_stop) reduction(MAX:adap_dt_stop_max) copy(adap_dt_stop_max) copyin(stage)
1821# 536 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1822#elif defined(MFC_OpenMP)
1823# 536 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1824
1825# 536 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1826
1827# 536 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1828
1829# 536 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1830!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k, i, myalpha_rho, myalpha, Re, cell, myVapFlux, preterm1, term2, paux, pint, Romega, term1_fac, myR_m, mygamma_m, myPb, myMass_n, myMass_v, myR, myV, myBeta_c, myBeta_t, myR0, myPbdot, myMvdot, myPinf, aux1, aux2, myCson, myRho, gamma, pi_inf, qv, dmalf, dmntait, dmBtait, dm_bub_adv_src, dm_divu, adap_dt_stop) reduction(MAX:adap_dt_stop_max) map(tofrom:adap_dt_stop_max) map(to:stage)
1831# 536 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1832#endif
1833# 541 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1834 do k = 1, nbubs
1835 ! Keller-Miksis model
1836
1837 ! Current bubble state
1838 mypb = gas_p(k, 2)
1839 mymass_n = gas_mg(k)
1840 mymass_v = gas_mv(k, 2)
1841 myr = intfc_rad(k, 2)
1842 myv = intfc_vel(k, 2)
1843 mybeta_c = gas_betac(k)
1844 mybeta_t = gas_betat(k)
1845 myr0 = bub_r0(k)
1846
1847 ! Vapor and heat fluxes
1848 call s_vflux(myr, myv, mypb, mymass_v, k, myvapflux, mymass_n, mybeta_c, myr_m, mygamma_m)
1849 mypbdot = f_bpres_dot(myvapflux, myr, myv, mypb, mymass_v, k, mybeta_t, myr_m, mygamma_m)
1850 mymvdot = 4._wp*pi*myr**2._wp*myvapflux
1851
1852 ! Obtaining driving pressure
1853 call s_get_pinf(k, q_prim_vf, 1, mypinf, cell, aux1, aux2)
1854
1855 ! Obtain liquid density and computing speed of sound from pinf
1856 call s_compute_species_fraction(q_prim_vf, cell(1), cell(2), cell(3), myalpha_rho, myalpha)
1857 call s_convert_species_to_mixture_variables_acc(myrho, gamma, pi_inf, qv, myalpha, myalpha_rho, re)
1858 call s_compute_cson_from_pinf(q_prim_vf, mypinf, cell, myrho, gamma, pi_inf, mycson)
1859
1860 ! Adaptive time stepping
1861 adap_dt_stop = 0
1862
1863 if (adap_dt) then
1864 call s_advance_step(myrho, mypinf, myr, myv, myr0, mypb, mypbdot, dmalf, dmntait, dmbtait, dm_bub_adv_src, &
1865 & dm_divu, k, mymass_v, mymass_n, mybeta_c, mybeta_t, mycson, adap_dt_stop)
1866
1867 ! Update bubble state
1868 intfc_rad(k, 1) = myr
1869 intfc_vel(k, 1) = myv
1870 gas_p(k, 1) = mypb
1871 gas_mv(k, 1) = mymass_v
1872 else
1873 ! Radial acceleration from bubble models
1874 intfc_dveldt(k, stage) = f_rddot(myrho, mypinf, myr, myv, myr0, mypb, mypbdot, dmalf, dmntait, dmbtait, &
1875 & dm_bub_adv_src, dm_divu, mycson)
1876 intfc_draddt(k, stage) = myv
1877 gas_dmvdt(k, stage) = mymvdot
1878 gas_dpdt(k, stage) = mypbdot
1879 end if
1880
1881 adap_dt_stop_max = max(adap_dt_stop_max, adap_dt_stop)
1882 end do
1883
1884# 590 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1885#if defined(MFC_OpenACC)
1886# 590 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1887!$acc end parallel loop
1888# 590 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1889#elif defined(MFC_OpenMP)
1890# 590 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1891
1892# 590 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1893!$omp end target teams loop
1894# 590 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1895#endif
1896
1897 if (adap_dt .and. adap_dt_stop_max > 0) call s_mpi_abort("Adaptive time stepping failed to converge.")
1898
1899 ! Bubbles remain in a fixed position
1900
1901# 595 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1902
1903# 595 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1904#if defined(MFC_OpenACC)
1905# 595 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1906!$acc parallel loop collapse(2) gang vector default(present) private(k, l) copyin(stage)
1907# 595 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1908#elif defined(MFC_OpenMP)
1909# 595 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1910
1911# 595 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1912
1913# 595 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1914
1915# 595 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1916!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(2) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k, l) map(to:stage)
1917# 595 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1918#endif
1919 do k = 1, nbubs
1920 do l = 1, 3
1921 mtn_dposdt(k, l, stage) = 0._wp
1922 mtn_dveldt(k, l, stage) = 0._wp
1923 end do
1924 end do
1925
1926# 602 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1927#if defined(MFC_OpenACC)
1928# 602 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1929!$acc end parallel loop
1930# 602 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1931#elif defined(MFC_OpenMP)
1932# 602 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1933
1934# 602 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1935!$omp end target teams loop
1936# 602 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1937#endif
1938
1939 call nvtxendrange
1940
1941 end subroutine s_compute_bubble_el_dynamics
1942
1943 !> Compute the Lagrangian bubble source terms and add them to the RHS
1944 subroutine s_compute_bubbles_el_source(q_cons_vf, q_prim_vf, rhs_vf)
1945
1946 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
1947 type(scalar_field), dimension(sys_size), intent(inout) :: q_prim_vf
1948 type(scalar_field), dimension(sys_size), intent(inout) :: rhs_vf
1949 integer :: i, j, k, l
1950
1951 if (.not. adap_dt) call s_smear_voidfraction()
1952
1953 if (lag_params%solver_approach == 2) then
1954 ! (q / (1 - beta)) * d(beta)/dt source
1955 if (p == 0) then
1956
1957# 621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1958
1959# 621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1960#if defined(MFC_OpenACC)
1961# 621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1962!$acc parallel loop collapse(4) gang vector default(present) private(i, j, k, l)
1963# 621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1964#elif defined(MFC_OpenMP)
1965# 621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1966
1967# 621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1968
1969# 621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1970
1971# 621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1972!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(4) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(i, j, k, l)
1973# 621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1974#endif
1975 do k = 0, p
1976 do j = 0, n
1977 do i = 0, m
1978 do l = 1, e_idx
1979 if (q_beta(1)%sf(i, j, k) > (1._wp - lag_params%valmaxvoid)) then
1980 rhs_vf(l)%sf(i, j, k) = rhs_vf(l)%sf(i, j, k) + q_cons_vf(l)%sf(i, j, k)*(q_beta(2)%sf(i, j, &
1981 & k) + q_beta(5)%sf(i, j, k))
1982 end if
1983 end do
1984 end do
1985 end do
1986 end do
1987
1988# 634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1989#if defined(MFC_OpenACC)
1990# 634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1991!$acc end parallel loop
1992# 634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1993#elif defined(MFC_OpenMP)
1994# 634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1995
1996# 634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1997!$omp end target teams loop
1998# 634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1999#endif
2000 else
2001
2002# 636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2003
2004# 636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2005#if defined(MFC_OpenACC)
2006# 636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2007!$acc parallel loop collapse(4) gang vector default(present) private(i, j, k, l)
2008# 636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2009#elif defined(MFC_OpenMP)
2010# 636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2011
2012# 636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2013
2014# 636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2015
2016# 636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2017!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(4) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(i, j, k, l)
2018# 636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2019#endif
2020 do k = 0, p
2021 do j = 0, n
2022 do i = 0, m
2023 do l = 1, e_idx
2024 if (q_beta(1)%sf(i, j, k) > (1._wp - lag_params%valmaxvoid)) then
2025 rhs_vf(l)%sf(i, j, k) = rhs_vf(l)%sf(i, j, k) + q_cons_vf(l)%sf(i, j, k)/q_beta(1)%sf(i, j, &
2026 & k)*q_beta(2)%sf(i, j, k)
2027 end if
2028 end do
2029 end do
2030 end do
2031 end do
2032
2033# 649 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2034#if defined(MFC_OpenACC)
2035# 649 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2036!$acc end parallel loop
2037# 649 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2038#elif defined(MFC_OpenMP)
2039# 649 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2040
2041# 649 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2042!$omp end target teams loop
2043# 649 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2044#endif
2045 end if
2046
2047 do l = 1, num_dims
2048 call s_gradient_dir(q_prim_vf(e_idx)%sf, q_beta(3)%sf, l)
2049
2050 ! (q / (1 - beta)) * d(beta)/dt source
2051
2052# 656 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2053
2054# 656 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2055#if defined(MFC_OpenACC)
2056# 656 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2057!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
2058# 656 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2059#elif defined(MFC_OpenMP)
2060# 656 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2061
2062# 656 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2063
2064# 656 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2065
2066# 656 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2067!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(i, j, k)
2068# 656 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2069#endif
2070 do k = 0, p
2071 do j = 0, n
2072 do i = 0, m
2073 if (q_beta(1)%sf(i, j, k) > (1._wp - lag_params%valmaxvoid)) then
2074 rhs_vf(contxe + l)%sf(i, j, k) = rhs_vf(contxe + l)%sf(i, j, k) - (1._wp - q_beta(1)%sf(i, j, &
2075 & k))/q_beta(1)%sf(i, j, k)*q_beta(3)%sf(i, j, k)
2076 end if
2077 end do
2078 end do
2079 end do
2080
2081# 667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2082#if defined(MFC_OpenACC)
2083# 667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2084!$acc end parallel loop
2085# 667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2086#elif defined(MFC_OpenMP)
2087# 667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2088
2089# 667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2090!$omp end target teams loop
2091# 667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2092#endif
2093
2094 ! source in energy
2095
2096# 670 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2097
2098# 670 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2099#if defined(MFC_OpenACC)
2100# 670 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2101!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
2102# 670 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2103#elif defined(MFC_OpenMP)
2104# 670 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2105
2106# 670 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2107
2108# 670 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2109
2110# 670 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2111!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(i, j, k)
2112# 670 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2113#endif
2114 do k = idwbuff(3)%beg, idwbuff(3)%end
2115 do j = idwbuff(2)%beg, idwbuff(2)%end
2116 do i = idwbuff(1)%beg, idwbuff(1)%end
2117 q_beta(3)%sf(i, j, k) = q_prim_vf(e_idx)%sf(i, j, k)*q_prim_vf(contxe + l)%sf(i, j, k)
2118 end do
2119 end do
2120 end do
2121
2122# 678 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2123#if defined(MFC_OpenACC)
2124# 678 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2125!$acc end parallel loop
2126# 678 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2127#elif defined(MFC_OpenMP)
2128# 678 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2129
2130# 678 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2131!$omp end target teams loop
2132# 678 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2133#endif
2134
2135 call s_gradient_dir(q_beta(3)%sf, q_beta(4)%sf, l)
2136
2137 ! (beta / (1 - beta)) * d(Pu)/dl source
2138
2139# 683 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2140
2141# 683 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2142#if defined(MFC_OpenACC)
2143# 683 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2144!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
2145# 683 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2146#elif defined(MFC_OpenMP)
2147# 683 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2148
2149# 683 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2150
2151# 683 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2152
2153# 683 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2154!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(i, j, k)
2155# 683 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2156#endif
2157 do k = 0, p
2158 do j = 0, n
2159 do i = 0, m
2160 if (q_beta(1)%sf(i, j, k) > (1._wp - lag_params%valmaxvoid)) then
2161 rhs_vf(e_idx)%sf(i, j, k) = rhs_vf(e_idx)%sf(i, j, k) - q_beta(4)%sf(i, j, &
2162 & k)*(1._wp - q_beta(1)%sf(i, j, k))/q_beta(1)%sf(i, j, k)
2163 end if
2164 end do
2165 end do
2166 end do
2167
2168# 694 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2169#if defined(MFC_OpenACC)
2170# 694 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2171!$acc end parallel loop
2172# 694 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2173#elif defined(MFC_OpenMP)
2174# 694 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2175
2176# 694 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2177!$omp end target teams loop
2178# 694 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2179#endif
2180 end do
2181 end if
2182
2183 end subroutine s_compute_bubbles_el_source
2184
2185 !> Compute the speed of sound from a given driving pressure
2186 subroutine s_compute_cson_from_pinf(q_prim_vf, pinf, cell, rhol, gamma, pi_inf, cson)
2187
2188
2189# 703 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2190#ifdef _CRAYFTN
2191# 703 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2192#if MFC_OpenACC
2193# 703 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2194!$acc routine seq
2195# 703 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2196#elif MFC_OpenMP
2197# 703 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2198
2199# 703 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2200
2201# 703 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2202!$omp declare target device_type(any)
2203# 703 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2204#else
2205# 703 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2206!DIR$ INLINEALWAYS s_compute_cson_from_pinf
2207# 703 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2208#endif
2209# 703 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2210#elif MFC_OpenACC
2211# 703 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2212!$acc routine seq
2213# 703 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2214#elif MFC_OpenMP
2215# 703 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2216
2217# 703 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2218
2219# 703 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2220!$omp declare target device_type(any)
2221# 703 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2222#endif
2223
2224 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf
2225 real(wp), intent(in) :: pinf, rhol, gamma, pi_inf
2226 integer, dimension(3), intent(in) :: cell
2227 real(wp), intent(out) :: cson
2228 real(wp) :: E, H
2229# 713 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2230 real(wp), dimension(num_dims) :: vel
2231# 715 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2232 integer :: i
2233
2234 vel(:) = 0._wp
2235
2236# 718 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2237#if defined(MFC_OpenACC)
2238# 718 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2239!$acc loop seq
2240# 718 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2241#elif defined(MFC_OpenMP)
2242# 718 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2243
2244# 718 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2245#endif
2246 do i = 1, num_dims
2247 vel(i) = q_prim_vf(i + contxe)%sf(cell(1), cell(2), cell(3))
2248 end do
2249 e = gamma*pinf + pi_inf + 0.5_wp*rhol*dot_product(vel, vel)
2250 h = (e + pinf)/rhol
2251 cson = sqrt((h - 0.5_wp*dot_product(vel, vel))/gamma)
2252
2253 end subroutine s_compute_cson_from_pinf
2254
2255 !> Smear the bubble effects onto the Eulerian grid
2257
2258 integer :: i, j, k, l
2259
2260 call nvtxstartrange("BUBBLES-LAGRANGE-KERNELS")
2261
2262
2263# 735 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2264
2265# 735 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2266#if defined(MFC_OpenACC)
2267# 735 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2268!$acc parallel loop collapse(4) gang vector default(present) private(i, j, k, l)
2269# 735 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2270#elif defined(MFC_OpenMP)
2271# 735 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2272
2273# 735 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2274
2275# 735 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2276
2277# 735 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2278!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(4) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(i, j, k, l)
2279# 735 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2280#endif
2281 do i = 1, q_beta_idx
2282 do l = idwbuff(3)%beg, idwbuff(3)%end
2283 do k = idwbuff(2)%beg, idwbuff(2)%end
2284 do j = idwbuff(1)%beg, idwbuff(1)%end
2285 q_beta(i)%sf(j, k, l) = 0._wp
2286 end do
2287 end do
2288 end do
2289 end do
2290
2291# 745 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2292#if defined(MFC_OpenACC)
2293# 745 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2294!$acc end parallel loop
2295# 745 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2296#elif defined(MFC_OpenMP)
2297# 745 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2298
2299# 745 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2300!$omp end target teams loop
2301# 745 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2302#endif
2303
2304 call s_smoothfunction(nbubs, intfc_rad, intfc_vel, mtn_s, mtn_pos, q_beta)
2305
2306 ! Store 1-beta
2307
2308# 750 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2309
2310# 750 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2311#if defined(MFC_OpenACC)
2312# 750 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2313!$acc parallel loop collapse(3) gang vector default(present) private(j, k, l)
2314# 750 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2315#elif defined(MFC_OpenMP)
2316# 750 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2317
2318# 750 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2319
2320# 750 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2321
2322# 750 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2323!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(j, k, l)
2324# 750 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2325#endif
2326 do l = idwbuff(3)%beg, idwbuff(3)%end
2327 do k = idwbuff(2)%beg, idwbuff(2)%end
2328 do j = idwbuff(1)%beg, idwbuff(1)%end
2329 q_beta(1)%sf(j, k, l) = 1._wp - q_beta(1)%sf(j, k, l)
2330 ! Limiting void fraction given max value
2331 q_beta(1)%sf(j, k, l) = max(q_beta(1)%sf(j, k, l), 1._wp - lag_params%valmaxvoid)
2332 end do
2333 end do
2334 end do
2335
2336# 760 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2337#if defined(MFC_OpenACC)
2338# 760 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2339!$acc end parallel loop
2340# 760 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2341#elif defined(MFC_OpenMP)
2342# 760 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2343
2344# 760 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2345!$omp end target teams loop
2346# 760 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2347#endif
2348
2349 call nvtxendrange
2350
2351 end subroutine s_smear_voidfraction
2352
2353 !> Compute the bubble driving pressure p_inf
2354 subroutine s_get_pinf(bub_id, q_prim_vf, ptype, f_pinfl, cell, preterm1, term2, Romega)
2355
2356
2357# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2358#ifdef _CRAYFTN
2359# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2360#if MFC_OpenACC
2361# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2362!$acc routine seq
2363# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2364#elif MFC_OpenMP
2365# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2366
2367# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2368
2369# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2370!$omp declare target device_type(any)
2371# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2372#else
2373# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2374!DIR$ INLINEALWAYS s_get_pinf
2375# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2376#endif
2377# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2378#elif MFC_OpenACC
2379# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2380!$acc routine seq
2381# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2382#elif MFC_OpenMP
2383# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2384
2385# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2386
2387# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2388!$omp declare target device_type(any)
2389# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2390#endif
2391
2392 integer, intent(in) :: bub_id, ptype
2393 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf
2394 real(wp), intent(out) :: f_pinfl
2395 integer, dimension(3), intent(out) :: cell
2396 real(wp), intent(out), optional :: preterm1, term2, Romega
2397 real(wp), dimension(3) :: scoord, psi
2398 real(wp) :: dc, vol, aux
2399 real(wp) :: volgas, term1, Rbeq, denom
2400 real(wp) :: charvol, charpres, charvol2, charpres2
2401 integer, dimension(3) :: cellaux
2402 integer :: i, j, k
2403 integer :: smearGrid, smearGridz
2404 logical :: celloutside
2405
2406 scoord = mtn_s(bub_id,1:3,2)
2407 f_pinfl = 0._wp
2408
2409 !> Find current bubble cell
2410 cell(:) = int(scoord(:))
2411
2412# 790 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2413#if defined(MFC_OpenACC)
2414# 790 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2415!$acc loop seq
2416# 790 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2417#elif defined(MFC_OpenMP)
2418# 790 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2419
2420# 790 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2421#endif
2422 do i = 1, num_dims
2423 if (scoord(i) < 0._wp) cell(i) = cell(i) - 1
2424 end do
2425
2426 if ((lag_params%cluster_type == 1)) then
2427 !> Getting p_cell in terms of only the current cell by interpolation
2428 !> Getting the cell volulme as Omega
2429 if (p > 0) then
2430 vol = dx(cell(1))*dy(cell(2))*dz(cell(3))
2431 else
2432 if (cyl_coord) then
2433 vol = dx(cell(1))*dy(cell(2))*y_cc(cell(2))*2._wp*pi
2434 else
2435 vol = dx(cell(1))*dy(cell(2))*lag_params%charwidth
2436 end if
2437 end if
2438
2439 !> Obtain bilinear interpolation coefficients, based on the current location of the bubble.
2440 psi(1) = (scoord(1) - real(cell(1)))*dx(cell(1)) + x_cb(cell(1) - 1)
2441 if (cell(1) == (m + buff_size)) then
2442 cell(1) = cell(1) - 1
2443 psi(1) = 1._wp
2444 else if (cell(1) == (-buff_size)) then
2445 psi(1) = 0._wp
2446 else
2447 if (psi(1) < x_cc(cell(1))) cell(1) = cell(1) - 1
2448 psi(1) = abs((psi(1) - x_cc(cell(1)))/(x_cc(cell(1) + 1) - x_cc(cell(1))))
2449 end if
2450
2451 psi(2) = (scoord(2) - real(cell(2)))*dy(cell(2)) + y_cb(cell(2) - 1)
2452 if (cell(2) == (n + buff_size)) then
2453 cell(2) = cell(2) - 1
2454 psi(2) = 1._wp
2455 else if (cell(2) == (-buff_size)) then
2456 psi(2) = 0._wp
2457 else
2458 if (psi(2) < y_cc(cell(2))) cell(2) = cell(2) - 1
2459 psi(2) = abs((psi(2) - y_cc(cell(2)))/(y_cc(cell(2) + 1) - y_cc(cell(2))))
2460 end if
2461
2462 if (p > 0) then
2463 psi(3) = (scoord(3) - real(cell(3)))*dz(cell(3)) + z_cb(cell(3) - 1)
2464 if (cell(3) == (p + buff_size)) then
2465 cell(3) = cell(3) - 1
2466 psi(3) = 1._wp
2467 else if (cell(3) == (-buff_size)) then
2468 psi(3) = 0._wp
2469 else
2470 if (psi(3) < z_cc(cell(3))) cell(3) = cell(3) - 1
2471 psi(3) = abs((psi(3) - z_cc(cell(3)))/(z_cc(cell(3) + 1) - z_cc(cell(3))))
2472 end if
2473 else
2474 psi(3) = 0._wp
2475 end if
2476
2477 !> Perform bilinear interpolation
2478 if (p == 0) then ! 2D
2479 f_pinfl = q_prim_vf(e_idx)%sf(cell(1), cell(2), cell(3))*(1._wp - psi(1))*(1._wp - psi(2))
2480 f_pinfl = f_pinfl + q_prim_vf(e_idx)%sf(cell(1) + 1, cell(2), cell(3))*psi(1)*(1._wp - psi(2))
2481 f_pinfl = f_pinfl + q_prim_vf(e_idx)%sf(cell(1) + 1, cell(2) + 1, cell(3))*psi(1)*psi(2)
2482 f_pinfl = f_pinfl + q_prim_vf(e_idx)%sf(cell(1), cell(2) + 1, cell(3))*(1._wp - psi(1))*psi(2)
2483 else ! 3D
2484 f_pinfl = q_prim_vf(e_idx)%sf(cell(1), cell(2), cell(3))*(1._wp - psi(1))*(1._wp - psi(2))*(1._wp - psi(3))
2485 f_pinfl = f_pinfl + q_prim_vf(e_idx)%sf(cell(1) + 1, cell(2), cell(3))*psi(1)*(1._wp - psi(2))*(1._wp - psi(3))
2486 f_pinfl = f_pinfl + q_prim_vf(e_idx)%sf(cell(1) + 1, cell(2) + 1, cell(3))*psi(1)*psi(2)*(1._wp - psi(3))
2487 f_pinfl = f_pinfl + q_prim_vf(e_idx)%sf(cell(1), cell(2) + 1, cell(3))*(1._wp - psi(1))*psi(2)*(1._wp - psi(3))
2488 f_pinfl = f_pinfl + q_prim_vf(e_idx)%sf(cell(1), cell(2), cell(3) + 1)*(1._wp - psi(1))*(1._wp - psi(2))*psi(3)
2489 f_pinfl = f_pinfl + q_prim_vf(e_idx)%sf(cell(1) + 1, cell(2), cell(3) + 1)*psi(1)*(1._wp - psi(2))*psi(3)
2490 f_pinfl = f_pinfl + q_prim_vf(e_idx)%sf(cell(1) + 1, cell(2) + 1, cell(3) + 1)*psi(1)*psi(2)*psi(3)
2491 f_pinfl = f_pinfl + q_prim_vf(e_idx)%sf(cell(1), cell(2) + 1, cell(3) + 1)*(1._wp - psi(1))*psi(2)*psi(3)
2492 end if
2493
2494 ! R_Omega
2495 dc = (3._wp*vol/(4._wp*pi))**(1._wp/3._wp)
2496 else if (lag_params%cluster_type >= 2) then
2497 ! Bubble dynamic closure from Maeda and Colonius (2018)
2498
2499 ! Include the cell that contains the bubble (mapCells+1+mapCells)
2500 smeargrid = mapcells - (-mapcells) + 1
2501 smeargridz = smeargrid
2502 if (p == 0) smeargridz = 1
2503
2504 charvol = 0._wp
2505 charpres = 0._wp
2506 charvol2 = 0._wp
2507 charpres2 = 0._wp
2508 vol = 0._wp
2509
2510
2511# 879 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2512#if defined(MFC_OpenACC)
2513# 879 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2514!$acc loop seq
2515# 879 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2516#elif defined(MFC_OpenMP)
2517# 879 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2518
2519# 879 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2520#endif
2521 do i = 1, smeargrid
2522
2523# 881 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2524#if defined(MFC_OpenACC)
2525# 881 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2526!$acc loop seq
2527# 881 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2528#elif defined(MFC_OpenMP)
2529# 881 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2530
2531# 881 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2532#endif
2533 do j = 1, smeargrid
2534
2535# 883 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2536#if defined(MFC_OpenACC)
2537# 883 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2538!$acc loop seq
2539# 883 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2540#elif defined(MFC_OpenMP)
2541# 883 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2542
2543# 883 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2544#endif
2545 do k = 1, smeargridz
2546 cellaux(1) = cell(1) + i - (mapcells + 1)
2547 cellaux(2) = cell(2) + j - (mapcells + 1)
2548 cellaux(3) = cell(3) + k - (mapcells + 1)
2549 if (p == 0) cellaux(3) = 0
2550
2551 !> check if the current cell is outside the computational domain or not (including ghost cells)
2552 celloutside = .false.
2553 if (num_dims == 2) then
2554 if ((cellaux(1) < -buff_size) .or. (cellaux(2) < -buff_size)) then
2555 celloutside = .true.
2556 end if
2557 if (cyl_coord .and. y_cc(cellaux(2)) < 0._wp) then
2558 celloutside = .true.
2559 end if
2560 if ((cellaux(2) > n + buff_size) .or. (cellaux(1) > m + buff_size)) then
2561 celloutside = .true.
2562 end if
2563 else
2564 if ((cellaux(3) < -buff_size) .or. (cellaux(1) < -buff_size) .or. (cellaux(2) < -buff_size)) then
2565 celloutside = .true.
2566 end if
2567
2568 if ((cellaux(3) > p + buff_size) .or. (cellaux(2) > n + buff_size) .or. (cellaux(1) > m + buff_size)) &
2569 & then
2570 celloutside = .true.
2571 end if
2572 end if
2573 if (.not. celloutside) then
2574 if (cyl_coord .and. (p == 0) .and. (y_cc(cellaux(2)) < 0._wp)) then
2575 celloutside = .true.
2576 end if
2577 end if
2578
2579 if (.not. celloutside) then
2580 !> Obtaining the cell volulme
2581 if (p > 0) then
2582 vol = dx(cellaux(1))*dy(cellaux(2))*dz(cellaux(3))
2583 else
2584 if (cyl_coord) then
2585 vol = dx(cellaux(1))*dy(cellaux(2))*y_cc(cellaux(2))*2._wp*pi
2586 else
2587 vol = dx(cellaux(1))*dy(cellaux(2))*lag_params%charwidth
2588 end if
2589 end if
2590 !> Update values
2591 charvol = charvol + vol
2592 charpres = charpres + q_prim_vf(e_idx)%sf(cellaux(1), cellaux(2), cellaux(3))*vol
2593 charvol2 = charvol2 + vol*q_beta(1)%sf(cellaux(1), cellaux(2), cellaux(3))
2594 charpres2 = charpres2 + q_prim_vf(e_idx)%sf(cellaux(1), cellaux(2), &
2595 & cellaux(3))*vol*q_beta(1)%sf(cellaux(1), cellaux(2), cellaux(3))
2596 end if
2597 end do
2598 end do
2599 end do
2600
2601 f_pinfl = charpres2/charvol2
2602 vol = charvol
2603 dc = (3._wp*abs(vol)/(4._wp*pi))**(1._wp/3._wp)
2604 end if
2605
2606 if (lag_params%pressure_corrector) then
2607 ! Valid if only one bubble exists per cell
2608 volgas = intfc_rad(bub_id, 2)**3._wp
2609 denom = intfc_rad(bub_id, 2)**2._wp
2610 term1 = bub_dphidt(bub_id)*intfc_rad(bub_id, 2)**2._wp
2611 term2 = intfc_vel(bub_id, 2)*intfc_rad(bub_id, 2)**2._wp
2612
2613 rbeq = volgas**(1._wp/3._wp) ! surrogate bubble radius
2614 aux = dc**3._wp - rbeq**3._wp
2615 term2 = term2/denom
2616 term2 = 3._wp/2._wp*term2**2._wp*rbeq**3._wp*(1._wp - rbeq/dc)/aux
2617 preterm1 = 3._wp/2._wp*rbeq*(dc**2._wp - rbeq**2._wp)/(aux*denom)
2618
2619 ! Control volume radius
2620 if (ptype == 2) romega = dc
2621
2622 ! Getting p_inf
2623 if (ptype == 1) then
2624 f_pinfl = f_pinfl + preterm1*term1 + term2
2625 end if
2626 end if
2627
2628 end subroutine s_get_pinf
2629
2630 !> Update Lagrangian bubble variables using TVD Runge-Kutta time stepping
2631 impure subroutine s_update_lagrange_tdv_rk(stage)
2632
2633 integer, intent(in) :: stage
2634 integer :: k
2635
2636 if (time_stepper == 1) then ! 1st order TVD RK
2637
2638# 976 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2639
2640# 976 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2641#if defined(MFC_OpenACC)
2642# 976 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2643!$acc parallel loop gang vector default(present) private(k)
2644# 976 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2645#elif defined(MFC_OpenMP)
2646# 976 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2647
2648# 976 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2649
2650# 976 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2651
2652# 976 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2653!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
2654# 976 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2655#endif
2656 do k = 1, nbubs
2657 ! u{1} = u{n} + dt * RHS{n}
2658 intfc_rad(k, 1) = intfc_rad(k, 1) + dt*intfc_draddt(k, 1)
2659 intfc_vel(k, 1) = intfc_vel(k, 1) + dt*intfc_dveldt(k, 1)
2660 mtn_pos(k,1:3,1) = mtn_pos(k,1:3,1) + dt*mtn_dposdt(k,1:3,1)
2661 mtn_vel(k,1:3,1) = mtn_vel(k,1:3,1) + dt*mtn_dveldt(k,1:3,1)
2662 gas_p(k, 1) = gas_p(k, 1) + dt*gas_dpdt(k, 1)
2663 gas_mv(k, 1) = gas_mv(k, 1) + dt*gas_dmvdt(k, 1)
2664 end do
2665
2666# 986 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2667#if defined(MFC_OpenACC)
2668# 986 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2669!$acc end parallel loop
2670# 986 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2671#elif defined(MFC_OpenMP)
2672# 986 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2673
2674# 986 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2675!$omp end target teams loop
2676# 986 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2677#endif
2678
2680 call s_write_void_evol(mytime)
2681 if (lag_params%write_bubbles_stats) call s_calculate_lag_bubble_stats()
2682
2683 if (lag_params%write_bubbles) then
2684
2685# 993 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2686#if defined(MFC_OpenACC)
2687# 993 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2688!$acc update host(gas_p, gas_mv, intfc_rad, intfc_vel)
2689# 993 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2690#elif defined(MFC_OpenMP)
2691# 993 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2692!$omp target update from(gas_p, gas_mv, intfc_rad, intfc_vel)
2693# 993 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2694#endif
2695 call s_write_lag_particles(mytime)
2696 end if
2697 else if (time_stepper == 2) then ! 2nd order TVD RK
2698 if (stage == 1) then
2699
2700# 998 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2701
2702# 998 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2703#if defined(MFC_OpenACC)
2704# 998 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2705!$acc parallel loop gang vector default(present) private(k)
2706# 998 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2707#elif defined(MFC_OpenMP)
2708# 998 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2709
2710# 998 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2711
2712# 998 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2713
2714# 998 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2715!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
2716# 998 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2717#endif
2718 do k = 1, nbubs
2719 ! u{1} = u{n} + dt * RHS{n}
2720 intfc_rad(k, 2) = intfc_rad(k, 1) + dt*intfc_draddt(k, 1)
2721 intfc_vel(k, 2) = intfc_vel(k, 1) + dt*intfc_dveldt(k, 1)
2722 mtn_pos(k,1:3,2) = mtn_pos(k,1:3,1) + dt*mtn_dposdt(k,1:3,1)
2723 mtn_vel(k,1:3,2) = mtn_vel(k,1:3,1) + dt*mtn_dveldt(k,1:3,1)
2724 gas_p(k, 2) = gas_p(k, 1) + dt*gas_dpdt(k, 1)
2725 gas_mv(k, 2) = gas_mv(k, 1) + dt*gas_dmvdt(k, 1)
2726 end do
2727
2728# 1008 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2729#if defined(MFC_OpenACC)
2730# 1008 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2731!$acc end parallel loop
2732# 1008 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2733#elif defined(MFC_OpenMP)
2734# 1008 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2735
2736# 1008 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2737!$omp end target teams loop
2738# 1008 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2739#endif
2740 else if (stage == 2) then
2741
2742# 1010 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2743
2744# 1010 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2745#if defined(MFC_OpenACC)
2746# 1010 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2747!$acc parallel loop gang vector default(present) private(k)
2748# 1010 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2749#elif defined(MFC_OpenMP)
2750# 1010 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2751
2752# 1010 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2753
2754# 1010 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2755
2756# 1010 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2757!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
2758# 1010 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2759#endif
2760 do k = 1, nbubs
2761 ! u{1} = u{n} + (1/2) * dt * (RHS{n} + RHS{1})
2762 intfc_rad(k, 1) = intfc_rad(k, 1) + dt*(intfc_draddt(k, 1) + intfc_draddt(k, 2))/2._wp
2763 intfc_vel(k, 1) = intfc_vel(k, 1) + dt*(intfc_dveldt(k, 1) + intfc_dveldt(k, 2))/2._wp
2764 mtn_pos(k,1:3,1) = mtn_pos(k,1:3,1) + dt*(mtn_dposdt(k,1:3,1) + mtn_dposdt(k,1:3,2))/2._wp
2765 mtn_vel(k,1:3,1) = mtn_vel(k,1:3,1) + dt*(mtn_dveldt(k,1:3,1) + mtn_dveldt(k,1:3,2))/2._wp
2766 gas_p(k, 1) = gas_p(k, 1) + dt*(gas_dpdt(k, 1) + gas_dpdt(k, 2))/2._wp
2767 gas_mv(k, 1) = gas_mv(k, 1) + dt*(gas_dmvdt(k, 1) + gas_dmvdt(k, 2))/2._wp
2768 end do
2769
2770# 1020 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2771#if defined(MFC_OpenACC)
2772# 1020 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2773!$acc end parallel loop
2774# 1020 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2775#elif defined(MFC_OpenMP)
2776# 1020 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2777
2778# 1020 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2779!$omp end target teams loop
2780# 1020 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2781#endif
2782
2784 call s_write_void_evol(mytime)
2785 if (lag_params%write_bubbles_stats) call s_calculate_lag_bubble_stats()
2786
2787 if (lag_params%write_bubbles) then
2788
2789# 1027 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2790#if defined(MFC_OpenACC)
2791# 1027 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2792!$acc update host(gas_p, gas_mv, intfc_rad, intfc_vel)
2793# 1027 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2794#elif defined(MFC_OpenMP)
2795# 1027 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2796!$omp target update from(gas_p, gas_mv, intfc_rad, intfc_vel)
2797# 1027 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2798#endif
2799 call s_write_lag_particles(mytime)
2800 end if
2801 end if
2802 else if (time_stepper == 3) then ! 3rd order TVD RK
2803 if (stage == 1) then
2804
2805# 1033 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2806
2807# 1033 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2808#if defined(MFC_OpenACC)
2809# 1033 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2810!$acc parallel loop gang vector default(present) private(k)
2811# 1033 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2812#elif defined(MFC_OpenMP)
2813# 1033 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2814
2815# 1033 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2816
2817# 1033 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2818
2819# 1033 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2820!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
2821# 1033 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2822#endif
2823 do k = 1, nbubs
2824 ! u{1} = u{n} + dt * RHS{n}
2825 intfc_rad(k, 2) = intfc_rad(k, 1) + dt*intfc_draddt(k, 1)
2826 intfc_vel(k, 2) = intfc_vel(k, 1) + dt*intfc_dveldt(k, 1)
2827 mtn_pos(k,1:3,2) = mtn_pos(k,1:3,1) + dt*mtn_dposdt(k,1:3,1)
2828 mtn_vel(k,1:3,2) = mtn_vel(k,1:3,1) + dt*mtn_dveldt(k,1:3,1)
2829 gas_p(k, 2) = gas_p(k, 1) + dt*gas_dpdt(k, 1)
2830 gas_mv(k, 2) = gas_mv(k, 1) + dt*gas_dmvdt(k, 1)
2831 end do
2832
2833# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2834#if defined(MFC_OpenACC)
2835# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2836!$acc end parallel loop
2837# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2838#elif defined(MFC_OpenMP)
2839# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2840
2841# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2842!$omp end target teams loop
2843# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2844#endif
2845 else if (stage == 2) then
2846
2847# 1045 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2848
2849# 1045 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2850#if defined(MFC_OpenACC)
2851# 1045 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2852!$acc parallel loop gang vector default(present) private(k)
2853# 1045 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2854#elif defined(MFC_OpenMP)
2855# 1045 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2856
2857# 1045 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2858
2859# 1045 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2860
2861# 1045 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2862!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
2863# 1045 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2864#endif
2865 do k = 1, nbubs
2866 ! u{2} = u{n} + (1/4) * dt * [RHS{n} + RHS{1}]
2867 intfc_rad(k, 2) = intfc_rad(k, 1) + dt*(intfc_draddt(k, 1) + intfc_draddt(k, 2))/4._wp
2868 intfc_vel(k, 2) = intfc_vel(k, 1) + dt*(intfc_dveldt(k, 1) + intfc_dveldt(k, 2))/4._wp
2869 mtn_pos(k,1:3,2) = mtn_pos(k,1:3,1) + dt*(mtn_dposdt(k,1:3,1) + mtn_dposdt(k,1:3,2))/4._wp
2870 mtn_vel(k,1:3,2) = mtn_vel(k,1:3,1) + dt*(mtn_dveldt(k,1:3,1) + mtn_dveldt(k,1:3,2))/4._wp
2871 gas_p(k, 2) = gas_p(k, 1) + dt*(gas_dpdt(k, 1) + gas_dpdt(k, 2))/4._wp
2872 gas_mv(k, 2) = gas_mv(k, 1) + dt*(gas_dmvdt(k, 1) + gas_dmvdt(k, 2))/4._wp
2873 end do
2874
2875# 1055 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2876#if defined(MFC_OpenACC)
2877# 1055 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2878!$acc end parallel loop
2879# 1055 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2880#elif defined(MFC_OpenMP)
2881# 1055 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2882
2883# 1055 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2884!$omp end target teams loop
2885# 1055 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2886#endif
2887 else if (stage == 3) then
2888
2889# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2890
2891# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2892#if defined(MFC_OpenACC)
2893# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2894!$acc parallel loop gang vector default(present) private(k)
2895# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2896#elif defined(MFC_OpenMP)
2897# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2898
2899# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2900
2901# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2902
2903# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2904!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
2905# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2906#endif
2907 do k = 1, nbubs
2908 ! u{n+1} = u{n} + (2/3) * dt * [(1/4)* RHS{n} + (1/4)* RHS{1} + RHS{2}]
2909 intfc_rad(k, 1) = intfc_rad(k, 1) + (2._wp/3._wp)*dt*(intfc_draddt(k, 1)/4._wp + intfc_draddt(k, &
2910 & 2)/4._wp + intfc_draddt(k, 3))
2911 intfc_vel(k, 1) = intfc_vel(k, 1) + (2._wp/3._wp)*dt*(intfc_dveldt(k, 1)/4._wp + intfc_dveldt(k, &
2912 & 2)/4._wp + intfc_dveldt(k, 3))
2913 mtn_pos(k,1:3,1) = mtn_pos(k,1:3,1) + (2._wp/3._wp)*dt*(mtn_dposdt(k,1:3,1)/4._wp + mtn_dposdt(k,1:3, &
2914 & 2)/4._wp + mtn_dposdt(k,1:3,3))
2915 mtn_vel(k,1:3,1) = mtn_vel(k,1:3,1) + (2._wp/3._wp)*dt*(mtn_dveldt(k,1:3,1)/4._wp + mtn_dveldt(k,1:3, &
2916 & 2)/4._wp + mtn_dveldt(k,1:3,3))
2917 gas_p(k, 1) = gas_p(k, 1) + (2._wp/3._wp)*dt*(gas_dpdt(k, 1)/4._wp + gas_dpdt(k, 2)/4._wp + gas_dpdt(k, 3))
2918 gas_mv(k, 1) = gas_mv(k, 1) + (2._wp/3._wp)*dt*(gas_dmvdt(k, 1)/4._wp + gas_dmvdt(k, 2)/4._wp + gas_dmvdt(k, 3))
2919 end do
2920
2921# 1071 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2922#if defined(MFC_OpenACC)
2923# 1071 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2924!$acc end parallel loop
2925# 1071 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2926#elif defined(MFC_OpenMP)
2927# 1071 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2928
2929# 1071 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2930!$omp end target teams loop
2931# 1071 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2932#endif
2933
2935 call s_write_void_evol(mytime)
2936 if (lag_params%write_bubbles_stats) call s_calculate_lag_bubble_stats()
2937
2938 if (lag_params%write_bubbles) then
2939
2940# 1078 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2941#if defined(MFC_OpenACC)
2942# 1078 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2943!$acc update host(gas_p, gas_mv, gas_mg, intfc_rad, intfc_vel)
2944# 1078 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2945#elif defined(MFC_OpenMP)
2946# 1078 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2947!$omp target update from(gas_p, gas_mv, gas_mg, intfc_rad, intfc_vel)
2948# 1078 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2949#endif
2950 call s_write_lag_particles(mytime)
2951 end if
2952 end if
2953 end if
2954
2955 end subroutine s_update_lagrange_tdv_rk
2956
2957 !> Locate the cell index for a given physical position
2958 subroutine s_locate_cell(pos, cell, scoord)
2959
2960 real(wp), dimension(3), intent(in) :: pos
2961 real(wp), dimension(3), intent(out) :: scoord
2962 integer, dimension(3), intent(inout) :: cell
2963 integer :: i
2964
2965 do while (pos(1) < x_cb(cell(1) - 1))
2966 cell(1) = cell(1) - 1
2967 end do
2968
2969 do while (pos(1) > x_cb(cell(1)))
2970 cell(1) = cell(1) + 1
2971 end do
2972
2973 do while (pos(2) < y_cb(cell(2) - 1))
2974 cell(2) = cell(2) - 1
2975 end do
2976
2977 do while (pos(2) > y_cb(cell(2)))
2978 cell(2) = cell(2) + 1
2979 end do
2980
2981 if (p > 0) then
2982 do while (pos(3) < z_cb(cell(3) - 1))
2983 cell(3) = cell(3) - 1
2984 end do
2985 do while (pos(3) > z_cb(cell(3)))
2986 cell(3) = cell(3) + 1
2987 end do
2988 end if
2989
2990 ! The numbering of the cell of which left boundary is the domain boundary is 0. if comp.coord of the pos is s, the real
2991 ! coordinate of s is (the coordinate of the left boundary of the Floor(s)-th cell) + (s-(int(s))*(cell-width). In other
2992 ! words, the coordinate of the center of the cell is x_cc(cell).
2993
2994 ! coordinates in computational space
2995 scoord(1) = cell(1) + (pos(1) - x_cb(cell(1) - 1))/dx(cell(1))
2996 scoord(2) = cell(2) + (pos(2) - y_cb(cell(2) - 1))/dy(cell(2))
2997 scoord(3) = 0._wp
2998 if (p > 0) scoord(3) = cell(3) + (pos(3) - z_cb(cell(3) - 1))/dz(cell(3))
2999 cell(:) = int(scoord(:))
3000 do i = 1, num_dims
3001 if (scoord(i) < 0._wp) cell(i) = cell(i) - 1
3002 end do
3003
3004 end subroutine s_locate_cell
3005
3006 !> Transfer data into the temporal variables
3007 impure subroutine s_transfer_data_to_tmp()
3008
3009 integer :: k
3010
3011
3012# 1140 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3013
3014# 1140 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3015#if defined(MFC_OpenACC)
3016# 1140 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3017!$acc parallel loop gang vector default(present) private(k)
3018# 1140 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3019#elif defined(MFC_OpenMP)
3020# 1140 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3021
3022# 1140 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3023
3024# 1140 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3025
3026# 1140 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3027!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
3028# 1140 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3029#endif
3030 do k = 1, nbubs
3031 gas_p(k, 2) = gas_p(k, 1)
3032 gas_mv(k, 2) = gas_mv(k, 1)
3033 intfc_rad(k, 2) = intfc_rad(k, 1)
3034 intfc_vel(k, 2) = intfc_vel(k, 1)
3035 mtn_pos(k,1:3,2) = mtn_pos(k,1:3,1)
3036 mtn_posprev(k,1:3,2) = mtn_posprev(k,1:3,1)
3037 mtn_vel(k,1:3,2) = mtn_vel(k,1:3,1)
3038 mtn_s(k,1:3,2) = mtn_s(k,1:3,1)
3039 end do
3040
3041# 1151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3042#if defined(MFC_OpenACC)
3043# 1151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3044!$acc end parallel loop
3045# 1151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3046#elif defined(MFC_OpenMP)
3047# 1151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3048
3049# 1151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3050!$omp end target teams loop
3051# 1151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3052#endif
3053
3054 end subroutine s_transfer_data_to_tmp
3055
3056 !> Determine if a bubble position lies within the current MPI subdomain including ghost cells
3057 function particle_in_domain(pos_part)
3058
3059 logical :: particle_in_domain
3060 real(wp), dimension(3), intent(in) :: pos_part
3061
3062 ! 2D
3063
3064 if (p == 0 .and. cyl_coord .neqv. .true.) then
3065 ! Defining a virtual z-axis that has the same dimensions as y-axis defined in the input file
3066 particle_in_domain = ((pos_part(1) < x_cb(m + buff_size)) .and. (pos_part(1) >= x_cb(-buff_size - 1)) &
3067 & .and. (pos_part(2) < y_cb(n + buff_size)) .and. (pos_part(2) >= y_cb(-buff_size - 1)) &
3068 & .and. (pos_part(3) < lag_params%charwidth/2._wp) .and. (pos_part(3) >= &
3069 & -lag_params%charwidth/2._wp))
3070 else
3071 ! cyl_coord
3072 particle_in_domain = ((pos_part(1) < x_cb(m + buff_size)) .and. (pos_part(1) >= x_cb(-buff_size - 1)) &
3073 & .and. (abs(pos_part(2)) < y_cb(n + buff_size)) .and. (abs(pos_part(2)) >= max(y_cb(-buff_size &
3074 & - 1), 0._wp)))
3075 end if
3076
3077 ! 3D
3078 if (p > 0) then
3079 particle_in_domain = ((pos_part(1) < x_cb(m + buff_size)) .and. (pos_part(1) >= x_cb(-buff_size - 1)) &
3080 & .and. (pos_part(2) < y_cb(n + buff_size)) .and. (pos_part(2) >= y_cb(-buff_size - 1)) &
3081 & .and. (pos_part(3) < z_cb(p + buff_size)) .and. (pos_part(3) >= z_cb(-buff_size - 1)))
3082 end if
3083
3084 ! For symmetric and wall boundary condition
3085 if (any(bc_x%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/))) then
3086 particle_in_domain = (particle_in_domain .and. (pos_part(1) >= x_cb(-1)))
3087 end if
3088 if (any(bc_x%end == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/))) then
3089 particle_in_domain = (particle_in_domain .and. (pos_part(1) < x_cb(m)))
3090 end if
3091 if (any(bc_y%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/)) .and. (.not. cyl_coord)) then
3092 particle_in_domain = (particle_in_domain .and. (pos_part(2) >= y_cb(-1)))
3093 end if
3094 if (any(bc_y%end == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/)) .and. (.not. cyl_coord)) then
3095 particle_in_domain = (particle_in_domain .and. (pos_part(2) < y_cb(n)))
3096 end if
3097 if (p > 0) then
3098 if (any(bc_z%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/))) then
3099 particle_in_domain = (particle_in_domain .and. (pos_part(3) >= z_cb(-1)))
3100 end if
3101 if (any(bc_z%end == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/))) then
3102 particle_in_domain = (particle_in_domain .and. (pos_part(3) < z_cb(p)))
3103 end if
3104 end if
3105
3106 end function particle_in_domain
3107
3108 !> Determine if a Lagrangian bubble is within the physical domain excluding ghost cells
3110
3112 real(wp), dimension(3), intent(in) :: pos_part
3113
3114 particle_in_domain_physical = ((pos_part(1) < x_cb(m)) .and. (pos_part(1) >= x_cb(-1)) .and. (pos_part(2) < y_cb(n)) &
3115 & .and. (pos_part(2) >= y_cb(-1)))
3116
3117 if (p > 0) then
3118 particle_in_domain_physical = (particle_in_domain_physical .and. (pos_part(3) < z_cb(p)) .and. (pos_part(3) &
3119 & >= z_cb(-1)))
3120 end if
3121
3122 end function particle_in_domain_physical
3123
3124 !> Compute the gradient of a scalar field using second-order central differences on a non-uniform grid
3125 subroutine s_gradient_dir(q, dq, dir)
3126
3127 real(stp), dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:), intent(inout) :: q, dq
3128 integer, intent(in) :: dir
3129 integer :: i, j, k
3130
3131 if (dir == 1) then
3132 ! Gradient in x dir.
3133
3134# 1232 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3135
3136# 1232 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3137#if defined(MFC_OpenACC)
3138# 1232 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3139!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
3140# 1232 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3141#elif defined(MFC_OpenMP)
3142# 1232 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3143
3144# 1232 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3145
3146# 1232 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3147
3148# 1232 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3149!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(i, j, k)
3150# 1232 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3151#endif
3152 do k = 0, p
3153 do j = 0, n
3154 do i = 0, m
3155 dq(i, j, k) = q(i, j, k)*(dx(i + 1) - dx(i - 1)) + q(i + 1, j, k)*(dx(i) + dx(i - 1)) - q(i - 1, j, &
3156 & k)*(dx(i) + dx(i + 1))
3157 dq(i, j, k) = dq(i, j, k)/((dx(i) + dx(i - 1))*(dx(i) + dx(i + 1)))
3158 end do
3159 end do
3160 end do
3161
3162# 1242 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3163#if defined(MFC_OpenACC)
3164# 1242 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3165!$acc end parallel loop
3166# 1242 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3167#elif defined(MFC_OpenMP)
3168# 1242 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3169
3170# 1242 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3171!$omp end target teams loop
3172# 1242 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3173#endif
3174 else if (dir == 2) then
3175 ! Gradient in y dir.
3176
3177# 1245 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3178
3179# 1245 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3180#if defined(MFC_OpenACC)
3181# 1245 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3182!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
3183# 1245 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3184#elif defined(MFC_OpenMP)
3185# 1245 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3186
3187# 1245 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3188
3189# 1245 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3190
3191# 1245 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3192!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(i, j, k)
3193# 1245 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3194#endif
3195 do k = 0, p
3196 do j = 0, n
3197 do i = 0, m
3198 dq(i, j, k) = q(i, j, k)*(dy(j + 1) - dy(j - 1)) + q(i, j + 1, k)*(dy(j) + dy(j - 1)) - q(i, j - 1, &
3199 & k)*(dy(j) + dy(j + 1))
3200 dq(i, j, k) = dq(i, j, k)/((dy(j) + dy(j - 1))*(dy(j) + dy(j + 1)))
3201 end do
3202 end do
3203 end do
3204
3205# 1255 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3206#if defined(MFC_OpenACC)
3207# 1255 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3208!$acc end parallel loop
3209# 1255 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3210#elif defined(MFC_OpenMP)
3211# 1255 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3212
3213# 1255 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3214!$omp end target teams loop
3215# 1255 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3216#endif
3217 else if (dir == 3) then
3218 ! Gradient in z dir.
3219
3220# 1258 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3221
3222# 1258 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3223#if defined(MFC_OpenACC)
3224# 1258 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3225!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
3226# 1258 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3227#elif defined(MFC_OpenMP)
3228# 1258 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3229
3230# 1258 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3231
3232# 1258 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3233
3234# 1258 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3235!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(i, j, k)
3236# 1258 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3237#endif
3238 do k = 0, p
3239 do j = 0, n
3240 do i = 0, m
3241 dq(i, j, k) = q(i, j, k)*(dz(k + 1) - dz(k - 1)) + q(i, j, k + 1)*(dz(k) + dz(k - 1)) - q(i, j, &
3242 & k - 1)*(dz(k) + dz(k + 1))
3243 dq(i, j, k) = dq(i, j, k)/((dz(k) + dz(k - 1))*(dz(k) + dz(k + 1)))
3244 end do
3245 end do
3246 end do
3247
3248# 1268 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3249#if defined(MFC_OpenACC)
3250# 1268 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3251!$acc end parallel loop
3252# 1268 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3253#elif defined(MFC_OpenMP)
3254# 1268 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3255
3256# 1268 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3257!$omp end target teams loop
3258# 1268 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3259#endif
3260 end if
3261
3262 end subroutine s_gradient_dir
3263
3264 !> Write Lagrangian bubble state data at each time step
3265 impure subroutine s_write_lag_particles(qtime)
3266
3267 real(wp), intent(in) :: qtime
3268 integer :: k
3269 character(LEN=path_len + 2*name_len) :: file_loc
3270 logical :: file_exist
3271 character(LEN=25) :: fmt
3272
3273 write (file_loc, '(A,I0,A)') 'lag_bubble_evol_', proc_rank, '.dat'
3274 file_loc = trim(case_dir) // '/D/' // trim(file_loc)
3275 inquire (file=trim(file_loc), exist=file_exist)
3276
3277 if (precision == 1) then
3278 fmt = "(A16,A14,8A16)"
3279 else
3280 fmt = "(A24,A14,8A24)"
3281 end if
3282
3283 if (.not. file_exist) then
3284 open (11, file=trim(file_loc), form='formatted', position='rewind')
3285 write (11, fmt) 'currentTime', 'particleID', 'x', 'y', 'z', 'coreVaporMass', 'coreVaporConcentration', 'radius', &
3286 & 'interfaceVelocity', 'corePressure'
3287 else
3288 open (11, file=trim(file_loc), form='formatted', position='append')
3289 end if
3290
3291 if (precision == 1) then
3292 fmt = "(F16.8,I14,8F16.8)"
3293 else
3294 fmt = "(F24.16,I14,8F24.16)"
3295 end if
3296
3297 ! Cycle through list
3298 do k = 1, nbubs
3299 write (11, fmt) qtime, lag_id(k, 1), mtn_pos(k, 1, 1), mtn_pos(k, 2, 1), mtn_pos(k, 3, 1), gas_mv(k, 1), gas_mv(k, &
3300 & 1)/(gas_mv(k, 1) + gas_mg(k)), intfc_rad(k, 1), intfc_vel(k, 1), gas_p(k, 1)
3301 end do
3302
3303 close (11)
3304
3305 end subroutine s_write_lag_particles
3306
3307 !> Write void fraction statistics at each time step
3308 impure subroutine s_write_void_evol(qtime)
3309
3310 real(wp), intent(in) :: qtime
3311 real(wp) :: volcell, voltot
3312 real(wp) :: lag_void_max, lag_void_avg, lag_vol
3313 real(wp) :: void_max_glb, void_avg_glb, vol_glb
3314 integer :: i, j, k
3315 character(LEN=path_len + 2*name_len) :: file_loc
3316 logical :: file_exist
3317
3318 if (proc_rank == 0) then
3319 write (file_loc, '(A)') 'voidfraction.dat'
3320 file_loc = trim(case_dir) // '/D/' // trim(file_loc)
3321 inquire (file=trim(file_loc), exist=file_exist)
3322 if (.not. file_exist) then
3323 open (12, file=trim(file_loc), form='formatted', position='rewind')
3324 else
3325 open (12, file=trim(file_loc), form='formatted', position='append')
3326 end if
3327 end if
3328
3329 lag_void_max = 0._wp
3330 lag_void_avg = 0._wp
3331 lag_vol = 0._wp
3332
3333# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3334
3335# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3336#if defined(MFC_OpenACC)
3337# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3338!$acc parallel loop collapse(3) gang vector default(present) private(volcell) reduction(+:lag_vol, lag_void_avg) reduction(MAX:lag_void_max) copy(lag_vol, lag_void_avg, lag_void_max)
3339# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3340#elif defined(MFC_OpenMP)
3341# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3342
3343# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3344
3345# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3346
3347# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3348!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(volcell) reduction(+:lag_vol, lag_void_avg) reduction(MAX:lag_void_max) map(tofrom:lag_vol, lag_void_avg, lag_void_max)
3349# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3350#endif
3351# 1343 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3352 do k = 0, p
3353 do j = 0, n
3354 do i = 0, m
3355 lag_void_max = max(lag_void_max, 1._wp - q_beta(1)%sf(i, j, k))
3356 call s_get_char_vol(i, j, k, volcell)
3357 if ((1._wp - q_beta(1)%sf(i, j, k)) > 5.0d-11) then
3358 lag_void_avg = lag_void_avg + (1._wp - q_beta(1)%sf(i, j, k))*volcell
3359 lag_vol = lag_vol + volcell
3360 end if
3361 end do
3362 end do
3363 end do
3364
3365# 1355 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3366#if defined(MFC_OpenACC)
3367# 1355 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3368!$acc end parallel loop
3369# 1355 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3370#elif defined(MFC_OpenMP)
3371# 1355 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3372
3373# 1355 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3374!$omp end target teams loop
3375# 1355 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3376#endif
3377
3378#ifdef MFC_MPI
3379 if (num_procs > 1) then
3380 call s_mpi_allreduce_max(lag_void_max, void_max_glb)
3381 lag_void_max = void_max_glb
3382 call s_mpi_allreduce_sum(lag_vol, vol_glb)
3383 lag_vol = vol_glb
3384 call s_mpi_allreduce_sum(lag_void_avg, void_avg_glb)
3385 lag_void_avg = void_avg_glb
3386 end if
3387#endif
3388 voltot = lag_void_avg
3389 ! This voidavg value does not reflect the real void fraction in the cloud since the cell which does not have bubbles are not
3390 ! accounted
3391 if (lag_vol > 0._wp) lag_void_avg = lag_void_avg/lag_vol
3392
3393 if (proc_rank == 0) then
3394 write (12, '(6X,4e24.8)') qtime, lag_void_avg, lag_void_max, voltot
3395 close (12)
3396 end if
3397
3398 end subroutine s_write_void_evol
3399
3400 !> Write restart files for the Lagrangian bubble solver
3401 impure subroutine s_write_restart_lag_bubbles(t_step)
3402
3403 ! Generic string used to store the address of a particular file
3404 integer, intent(in) :: t_step
3405 character(LEN=path_len + 2*name_len) :: file_loc
3406 logical :: file_exist
3407 integer :: bub_id, tot_part
3408 integer :: i, k
3409
3410#ifdef MFC_MPI
3411 ! For Parallel I/O
3412 integer :: ifile, ierr
3413 integer, dimension(MPI_STATUS_SIZE) :: status
3414 integer(KIND=MPI_OFFSET_KIND) :: disp
3415 integer :: view
3416 integer, dimension(2) :: gsizes, lsizes, start_idx_part
3417 integer, allocatable :: proc_bubble_counts(:)
3418 real(wp), dimension(1:1,1:lag_io_vars) :: dummy
3419
3420 dummy = 0._wp
3421
3422 bub_id = 0._wp
3423 if (nbubs /= 0) then
3424 do k = 1, nbubs
3425 if (particle_in_domain_physical(mtn_pos(k,1:3,1))) then
3426 bub_id = bub_id + 1
3427 end if
3428 end do
3429 end if
3430
3431 if (.not. parallel_io) return
3432
3433 allocate (proc_bubble_counts(num_procs))
3434
3435 lsizes(1) = bub_id
3436 lsizes(2) = lag_io_vars
3437
3438 ! Total number of particles
3439 call mpi_allreduce(bub_id, tot_part, 1, mpi_integer, mpi_sum, mpi_comm_world, ierr)
3440
3441 call mpi_allgather(bub_id, 1, mpi_integer, proc_bubble_counts, 1, mpi_integer, mpi_comm_world, ierr)
3442
3443 ! Calculate starting index for this processor's particles
3444 call mpi_exscan(lsizes(1), start_idx_part(1), 1, mpi_integer, mpi_sum, mpi_comm_world, ierr)
3445 if (proc_rank == 0) start_idx_part(1) = 0
3446 start_idx_part(2) = 0
3447
3448 gsizes(1) = tot_part
3449 gsizes(2) = lag_io_vars
3450
3451 write (file_loc, '(A,I0,A)') 'lag_bubbles_', t_step, '.dat'
3452 file_loc = trim(case_dir) // '/restart_data' // trim(mpiiofs) // trim(file_loc)
3453
3454 ! Clean up existing file
3455 if (proc_rank == 0) then
3456 inquire (file=trim(file_loc), exist=file_exist)
3457 if (file_exist) then
3458 call mpi_file_delete(file_loc, mpi_info_int, ierr)
3459 end if
3460 end if
3461
3462 call mpi_barrier(mpi_comm_world, ierr)
3463
3464 if (proc_rank == 0) then
3465 call mpi_file_open(mpi_comm_self, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
3466
3467 ! Write header using MPI I/O for consistency
3468 call mpi_file_write(ifile, tot_part, 1, mpi_integer, status, ierr)
3469 call mpi_file_write(ifile, mytime, 1, mpi_p, status, ierr)
3470 call mpi_file_write(ifile, dt, 1, mpi_p, status, ierr)
3471 call mpi_file_write(ifile, num_procs, 1, mpi_integer, status, ierr)
3472 call mpi_file_write(ifile, proc_bubble_counts, num_procs, mpi_integer, status, ierr)
3473
3474 call mpi_file_close(ifile, ierr)
3475 end if
3476
3477 call mpi_barrier(mpi_comm_world, ierr)
3478
3479 if (bub_id > 0) then
3480 allocate (mpi_io_data_lag_bubbles(max(1, bub_id),1:lag_io_vars))
3481
3482 i = 1
3483 do k = 1, nbubs
3484 if (particle_in_domain_physical(mtn_pos(k,1:3,1))) then
3485 mpi_io_data_lag_bubbles(i, 1) = real(lag_id(k, 1))
3486 mpi_io_data_lag_bubbles(i,2:4) = mtn_pos(k,1:3,1)
3487 mpi_io_data_lag_bubbles(i,5:7) = mtn_posprev(k,1:3,1)
3488 mpi_io_data_lag_bubbles(i,8:10) = mtn_vel(k,1:3,1)
3489 mpi_io_data_lag_bubbles(i, 11) = intfc_rad(k, 1)
3490 mpi_io_data_lag_bubbles(i, 12) = intfc_vel(k, 1)
3491 mpi_io_data_lag_bubbles(i, 13) = bub_r0(k)
3492 mpi_io_data_lag_bubbles(i, 14) = rmax_stats(k)
3493 mpi_io_data_lag_bubbles(i, 15) = rmin_stats(k)
3494 mpi_io_data_lag_bubbles(i, 16) = bub_dphidt(k)
3495 mpi_io_data_lag_bubbles(i, 17) = gas_p(k, 1)
3496 mpi_io_data_lag_bubbles(i, 18) = gas_mv(k, 1)
3497 mpi_io_data_lag_bubbles(i, 19) = gas_mg(k)
3498 mpi_io_data_lag_bubbles(i, 20) = gas_betat(k)
3499 mpi_io_data_lag_bubbles(i, 21) = gas_betac(k)
3500 i = i + 1
3501 end if
3502 end do
3503
3504 call mpi_type_create_subarray(2, gsizes, lsizes, start_idx_part, mpi_order_fortran, mpi_p, view, ierr)
3505 call mpi_type_commit(view, ierr)
3506
3507 call mpi_file_open(mpi_comm_world, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
3508
3509 ! Skip header (written by rank 0)
3510 disp = int(sizeof(tot_part) + 2*sizeof(mytime) + sizeof(num_procs) + num_procs*sizeof(proc_bubble_counts(1)), &
3511 & mpi_offset_kind)
3512 call mpi_file_set_view(ifile, disp, mpi_p, view, 'native', mpi_info_int, ierr)
3513
3514 call mpi_file_write_all(ifile, mpi_io_data_lag_bubbles, lag_io_vars*bub_id, mpi_p, status, ierr)
3515
3516 call mpi_file_close(ifile, ierr)
3517
3518 deallocate (mpi_io_data_lag_bubbles)
3519 else
3520 call mpi_type_contiguous(0, mpi_p, view, ierr)
3521 call mpi_type_commit(view, ierr)
3522
3523 call mpi_file_open(mpi_comm_world, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
3524
3525 ! Skip header (written by rank 0)
3526 disp = int(sizeof(tot_part) + 2*sizeof(mytime) + sizeof(num_procs) + num_procs*sizeof(proc_bubble_counts(1)), &
3527 & mpi_offset_kind)
3528 call mpi_file_set_view(ifile, disp, mpi_p, view, 'native', mpi_info_int, ierr)
3529
3530 call mpi_file_write_all(ifile, dummy, 0, mpi_p, status, ierr)
3531
3532 call mpi_file_close(ifile, ierr)
3533 end if
3534
3535 deallocate (proc_bubble_counts)
3536#endif
3537
3538 end subroutine s_write_restart_lag_bubbles
3539
3540 !> Compute the maximum and minimum radius of each bubble
3542
3543 integer :: k
3544
3545
3546# 1524 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3547
3548# 1524 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3549#if defined(MFC_OpenACC)
3550# 1524 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3551!$acc parallel loop gang vector default(present) private(k) reduction(MAX:Rmax_glb) reduction(MIN:Rmin_glb) copy(Rmax_glb, Rmin_glb)
3552# 1524 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3553#elif defined(MFC_OpenMP)
3554# 1524 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3555
3556# 1524 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3557
3558# 1524 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3559
3560# 1524 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3561!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k) reduction(MAX:Rmax_glb) reduction(MIN:Rmin_glb) map(tofrom:Rmax_glb, Rmin_glb)
3562# 1524 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3563#endif
3564# 1526 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3565 do k = 1, nbubs
3566 rmax_glb = max(rmax_glb, intfc_rad(k, 1)/bub_r0(k))
3567 rmin_glb = min(rmin_glb, intfc_rad(k, 1)/bub_r0(k))
3568 rmax_stats(k) = max(rmax_stats(k), intfc_rad(k, 1)/bub_r0(k))
3569 rmin_stats(k) = min(rmin_stats(k), intfc_rad(k, 1)/bub_r0(k))
3570 end do
3571
3572# 1532 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3573#if defined(MFC_OpenACC)
3574# 1532 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3575!$acc end parallel loop
3576# 1532 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3577#elif defined(MFC_OpenMP)
3578# 1532 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3579
3580# 1532 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3581!$omp end target teams loop
3582# 1532 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3583#endif
3584
3585 end subroutine s_calculate_lag_bubble_stats
3586
3587 !> Write the maximum and minimum radius statistics for each bubble
3588 impure subroutine s_write_lag_bubble_stats()
3589
3590 integer :: k
3591 character(LEN=path_len + 2*name_len) :: file_loc
3592 character(len=20) :: fmt
3593
3594 write (file_loc, '(A,I0,A)') 'stats_lag_bubbles_', proc_rank, '.dat'
3595 file_loc = trim(case_dir) // '/D/' // trim(file_loc)
3596
3597
3598# 1546 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3599#if defined(MFC_OpenACC)
3600# 1546 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3601!$acc update host(Rmax_glb, Rmin_glb)
3602# 1546 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3603#elif defined(MFC_OpenMP)
3604# 1546 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3605!$omp target update from(Rmax_glb, Rmin_glb)
3606# 1546 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3607#endif
3608
3609 if (precision == 1) then
3610 fmt = "(A10,A14,5A16)"
3611 else
3612 fmt = "(A10,A14,5A24)"
3613 end if
3614
3615 open (13, file=trim(file_loc), form='formatted', position='rewind')
3616 write (13, fmt) 'proc_rank', 'particleID', 'x', 'y', 'z', 'Rmax_glb', 'Rmin_glb'
3617
3618 if (precision == 1) then
3619 fmt = "(I10,I14,5F16.8)"
3620 else
3621 fmt = "(I10,I14,5F24.16)"
3622 end if
3623
3624 do k = 1, nbubs
3625 write (13, fmt) proc_rank, lag_id(k, 1), mtn_pos(k, 1, 1), mtn_pos(k, 2, 1), mtn_pos(k, 3, 1), rmax_stats(k), &
3626 & rmin_stats(k)
3627 end do
3628
3629 close (13)
3630
3631 end subroutine s_write_lag_bubble_stats
3632
3633 !> Remove a specific Lagrangian bubble when dt becomes too small
3634 impure subroutine s_remove_lag_bubble(bub_id)
3635
3636 integer, intent(in) :: bub_id
3637 integer :: i
3638
3639
3640# 1578 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3641#if defined(MFC_OpenACC)
3642# 1578 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3643!$acc loop seq
3644# 1578 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3645#elif defined(MFC_OpenMP)
3646# 1578 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3647
3648# 1578 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3649#endif
3650 do i = bub_id, nbubs - 1
3651 lag_id(i, 1) = lag_id(i + 1, 1)
3652 bub_r0(i) = bub_r0(i + 1)
3653 rmax_stats(i) = rmax_stats(i + 1)
3654 rmin_stats(i) = rmin_stats(i + 1)
3655 gas_mg(i) = gas_mg(i + 1)
3656 gas_betat(i) = gas_betat(i + 1)
3657 gas_betac(i) = gas_betac(i + 1)
3658 bub_dphidt(i) = bub_dphidt(i + 1)
3659 gas_p(i,1:2) = gas_p(i + 1,1:2)
3660 gas_mv(i,1:2) = gas_mv(i + 1,1:2)
3661 intfc_rad(i,1:2) = intfc_rad(i + 1,1:2)
3662 intfc_vel(i,1:2) = intfc_vel(i + 1,1:2)
3663 mtn_pos(i,1:3,1:2) = mtn_pos(i + 1,1:3,1:2)
3664 mtn_posprev(i,1:3,1:2) = mtn_posprev(i + 1,1:3,1:2)
3665 mtn_vel(i,1:3,1:2) = mtn_vel(i + 1,1:3,1:2)
3666 mtn_s(i,1:3,1:2) = mtn_s(i + 1,1:3,1:2)
3669 gas_dpdt(i,1:lag_num_ts) = gas_dpdt(i + 1,1:lag_num_ts)
3671 end do
3672
3673 nbubs = nbubs - 1
3674
3675# 1603 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3676#if defined(MFC_OpenACC)
3677# 1603 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3678!$acc update device(nBubs)
3679# 1603 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3680#elif defined(MFC_OpenMP)
3681# 1603 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3682!$omp target update to(nBubs)
3683# 1603 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3684#endif
3685
3686 end subroutine s_remove_lag_bubble
3687
3688 !> Finalize the Lagrangian bubble solver
3690
3691 integer :: i
3692
3693 do i = 1, q_beta_idx
3694#ifdef MFC_DEBUG
3695# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3696 block
3697# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3698 use iso_fortran_env, only: output_unit
3699# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3700
3701# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3702 print *, 'm_bubbles_EL.fpp:1613: ', '@:DEALLOCATE(q_beta(i)%sf)'
3703# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3704
3705# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3706 call flush (output_unit)
3707# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3708 end block
3709# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3710#endif
3711# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3712
3713# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3714#if defined(MFC_OpenACC)
3715# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3716!$acc exit data delete(q_beta(i)%sf)
3717# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3718#elif defined(MFC_OpenMP)
3719# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3720!$omp target exit data map(release:q_beta(i)%sf)
3721# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3722#endif
3723# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3724 deallocate (q_beta(i)%sf)
3725 end do
3726#ifdef MFC_DEBUG
3727# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3728 block
3729# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3730 use iso_fortran_env, only: output_unit
3731# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3732
3733# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3734 print *, 'm_bubbles_EL.fpp:1615: ', '@:DEALLOCATE(q_beta)'
3735# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3736
3737# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3738 call flush (output_unit)
3739# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3740 end block
3741# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3742#endif
3743# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3744
3745# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3746#if defined(MFC_OpenACC)
3747# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3748!$acc exit data delete(q_beta)
3749# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3750#elif defined(MFC_OpenMP)
3751# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3752!$omp target exit data map(release:q_beta)
3753# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3754#endif
3755# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3756 deallocate (q_beta)
3757
3758 ! Deallocating space
3759#ifdef MFC_DEBUG
3760# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3761 block
3762# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3763 use iso_fortran_env, only: output_unit
3764# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3765
3766# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3767 print *, 'm_bubbles_EL.fpp:1618: ', '@:DEALLOCATE(lag_id)'
3768# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3769
3770# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3771 call flush (output_unit)
3772# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3773 end block
3774# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3775#endif
3776# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3777
3778# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3779#if defined(MFC_OpenACC)
3780# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3781!$acc exit data delete(lag_id)
3782# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3783#elif defined(MFC_OpenMP)
3784# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3785!$omp target exit data map(release:lag_id)
3786# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3787#endif
3788# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3789 deallocate (lag_id)
3790#ifdef MFC_DEBUG
3791# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3792 block
3793# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3794 use iso_fortran_env, only: output_unit
3795# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3796
3797# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3798 print *, 'm_bubbles_EL.fpp:1619: ', '@:DEALLOCATE(bub_R0)'
3799# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3800
3801# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3802 call flush (output_unit)
3803# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3804 end block
3805# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3806#endif
3807# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3808
3809# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3810#if defined(MFC_OpenACC)
3811# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3812!$acc exit data delete(bub_R0)
3813# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3814#elif defined(MFC_OpenMP)
3815# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3816!$omp target exit data map(release:bub_R0)
3817# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3818#endif
3819# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3820 deallocate (bub_r0)
3821#ifdef MFC_DEBUG
3822# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3823 block
3824# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3825 use iso_fortran_env, only: output_unit
3826# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3827
3828# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3829 print *, 'm_bubbles_EL.fpp:1620: ', '@:DEALLOCATE(Rmax_stats)'
3830# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3831
3832# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3833 call flush (output_unit)
3834# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3835 end block
3836# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3837#endif
3838# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3839
3840# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3841#if defined(MFC_OpenACC)
3842# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3843!$acc exit data delete(Rmax_stats)
3844# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3845#elif defined(MFC_OpenMP)
3846# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3847!$omp target exit data map(release:Rmax_stats)
3848# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3849#endif
3850# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3851 deallocate (rmax_stats)
3852#ifdef MFC_DEBUG
3853# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3854 block
3855# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3856 use iso_fortran_env, only: output_unit
3857# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3858
3859# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3860 print *, 'm_bubbles_EL.fpp:1621: ', '@:DEALLOCATE(Rmin_stats)'
3861# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3862
3863# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3864 call flush (output_unit)
3865# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3866 end block
3867# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3868#endif
3869# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3870
3871# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3872#if defined(MFC_OpenACC)
3873# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3874!$acc exit data delete(Rmin_stats)
3875# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3876#elif defined(MFC_OpenMP)
3877# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3878!$omp target exit data map(release:Rmin_stats)
3879# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3880#endif
3881# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3882 deallocate (rmin_stats)
3883#ifdef MFC_DEBUG
3884# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3885 block
3886# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3887 use iso_fortran_env, only: output_unit
3888# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3889
3890# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3891 print *, 'm_bubbles_EL.fpp:1622: ', '@:DEALLOCATE(gas_mg)'
3892# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3893
3894# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3895 call flush (output_unit)
3896# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3897 end block
3898# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3899#endif
3900# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3901
3902# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3903#if defined(MFC_OpenACC)
3904# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3905!$acc exit data delete(gas_mg)
3906# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3907#elif defined(MFC_OpenMP)
3908# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3909!$omp target exit data map(release:gas_mg)
3910# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3911#endif
3912# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3913 deallocate (gas_mg)
3914#ifdef MFC_DEBUG
3915# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3916 block
3917# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3918 use iso_fortran_env, only: output_unit
3919# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3920
3921# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3922 print *, 'm_bubbles_EL.fpp:1623: ', '@:DEALLOCATE(gas_betaT)'
3923# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3924
3925# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3926 call flush (output_unit)
3927# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3928 end block
3929# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3930#endif
3931# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3932
3933# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3934#if defined(MFC_OpenACC)
3935# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3936!$acc exit data delete(gas_betaT)
3937# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3938#elif defined(MFC_OpenMP)
3939# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3940!$omp target exit data map(release:gas_betaT)
3941# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3942#endif
3943# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3944 deallocate (gas_betat)
3945#ifdef MFC_DEBUG
3946# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3947 block
3948# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3949 use iso_fortran_env, only: output_unit
3950# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3951
3952# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3953 print *, 'm_bubbles_EL.fpp:1624: ', '@:DEALLOCATE(gas_betaC)'
3954# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3955
3956# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3957 call flush (output_unit)
3958# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3959 end block
3960# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3961#endif
3962# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3963
3964# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3965#if defined(MFC_OpenACC)
3966# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3967!$acc exit data delete(gas_betaC)
3968# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3969#elif defined(MFC_OpenMP)
3970# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3971!$omp target exit data map(release:gas_betaC)
3972# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3973#endif
3974# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3975 deallocate (gas_betac)
3976#ifdef MFC_DEBUG
3977# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3978 block
3979# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3980 use iso_fortran_env, only: output_unit
3981# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3982
3983# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3984 print *, 'm_bubbles_EL.fpp:1625: ', '@:DEALLOCATE(bub_dphidt)'
3985# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3986
3987# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3988 call flush (output_unit)
3989# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3990 end block
3991# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3992#endif
3993# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3994
3995# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3996#if defined(MFC_OpenACC)
3997# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3998!$acc exit data delete(bub_dphidt)
3999# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4000#elif defined(MFC_OpenMP)
4001# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4002!$omp target exit data map(release:bub_dphidt)
4003# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4004#endif
4005# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4006 deallocate (bub_dphidt)
4007#ifdef MFC_DEBUG
4008# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4009 block
4010# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4011 use iso_fortran_env, only: output_unit
4012# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4013
4014# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4015 print *, 'm_bubbles_EL.fpp:1626: ', '@:DEALLOCATE(gas_p)'
4016# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4017
4018# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4019 call flush (output_unit)
4020# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4021 end block
4022# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4023#endif
4024# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4025
4026# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4027#if defined(MFC_OpenACC)
4028# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4029!$acc exit data delete(gas_p)
4030# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4031#elif defined(MFC_OpenMP)
4032# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4033!$omp target exit data map(release:gas_p)
4034# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4035#endif
4036# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4037 deallocate (gas_p)
4038#ifdef MFC_DEBUG
4039# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4040 block
4041# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4042 use iso_fortran_env, only: output_unit
4043# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4044
4045# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4046 print *, 'm_bubbles_EL.fpp:1627: ', '@:DEALLOCATE(gas_mv)'
4047# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4048
4049# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4050 call flush (output_unit)
4051# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4052 end block
4053# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4054#endif
4055# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4056
4057# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4058#if defined(MFC_OpenACC)
4059# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4060!$acc exit data delete(gas_mv)
4061# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4062#elif defined(MFC_OpenMP)
4063# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4064!$omp target exit data map(release:gas_mv)
4065# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4066#endif
4067# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4068 deallocate (gas_mv)
4069#ifdef MFC_DEBUG
4070# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4071 block
4072# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4073 use iso_fortran_env, only: output_unit
4074# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4075
4076# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4077 print *, 'm_bubbles_EL.fpp:1628: ', '@:DEALLOCATE(intfc_rad)'
4078# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4079
4080# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4081 call flush (output_unit)
4082# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4083 end block
4084# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4085#endif
4086# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4087
4088# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4089#if defined(MFC_OpenACC)
4090# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4091!$acc exit data delete(intfc_rad)
4092# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4093#elif defined(MFC_OpenMP)
4094# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4095!$omp target exit data map(release:intfc_rad)
4096# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4097#endif
4098# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4099 deallocate (intfc_rad)
4100#ifdef MFC_DEBUG
4101# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4102 block
4103# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4104 use iso_fortran_env, only: output_unit
4105# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4106
4107# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4108 print *, 'm_bubbles_EL.fpp:1629: ', '@:DEALLOCATE(intfc_vel)'
4109# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4110
4111# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4112 call flush (output_unit)
4113# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4114 end block
4115# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4116#endif
4117# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4118
4119# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4120#if defined(MFC_OpenACC)
4121# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4122!$acc exit data delete(intfc_vel)
4123# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4124#elif defined(MFC_OpenMP)
4125# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4126!$omp target exit data map(release:intfc_vel)
4127# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4128#endif
4129# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4130 deallocate (intfc_vel)
4131#ifdef MFC_DEBUG
4132# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4133 block
4134# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4135 use iso_fortran_env, only: output_unit
4136# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4137
4138# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4139 print *, 'm_bubbles_EL.fpp:1630: ', '@:DEALLOCATE(mtn_pos)'
4140# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4141
4142# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4143 call flush (output_unit)
4144# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4145 end block
4146# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4147#endif
4148# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4149
4150# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4151#if defined(MFC_OpenACC)
4152# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4153!$acc exit data delete(mtn_pos)
4154# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4155#elif defined(MFC_OpenMP)
4156# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4157!$omp target exit data map(release:mtn_pos)
4158# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4159#endif
4160# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4161 deallocate (mtn_pos)
4162#ifdef MFC_DEBUG
4163# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4164 block
4165# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4166 use iso_fortran_env, only: output_unit
4167# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4168
4169# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4170 print *, 'm_bubbles_EL.fpp:1631: ', '@:DEALLOCATE(mtn_posPrev)'
4171# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4172
4173# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4174 call flush (output_unit)
4175# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4176 end block
4177# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4178#endif
4179# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4180
4181# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4182#if defined(MFC_OpenACC)
4183# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4184!$acc exit data delete(mtn_posPrev)
4185# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4186#elif defined(MFC_OpenMP)
4187# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4188!$omp target exit data map(release:mtn_posPrev)
4189# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4190#endif
4191# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4192 deallocate (mtn_posprev)
4193#ifdef MFC_DEBUG
4194# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4195 block
4196# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4197 use iso_fortran_env, only: output_unit
4198# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4199
4200# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4201 print *, 'm_bubbles_EL.fpp:1632: ', '@:DEALLOCATE(mtn_vel)'
4202# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4203
4204# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4205 call flush (output_unit)
4206# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4207 end block
4208# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4209#endif
4210# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4211
4212# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4213#if defined(MFC_OpenACC)
4214# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4215!$acc exit data delete(mtn_vel)
4216# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4217#elif defined(MFC_OpenMP)
4218# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4219!$omp target exit data map(release:mtn_vel)
4220# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4221#endif
4222# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4223 deallocate (mtn_vel)
4224#ifdef MFC_DEBUG
4225# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4226 block
4227# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4228 use iso_fortran_env, only: output_unit
4229# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4230
4231# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4232 print *, 'm_bubbles_EL.fpp:1633: ', '@:DEALLOCATE(mtn_s)'
4233# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4234
4235# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4236 call flush (output_unit)
4237# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4238 end block
4239# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4240#endif
4241# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4242
4243# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4244#if defined(MFC_OpenACC)
4245# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4246!$acc exit data delete(mtn_s)
4247# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4248#elif defined(MFC_OpenMP)
4249# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4250!$omp target exit data map(release:mtn_s)
4251# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4252#endif
4253# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4254 deallocate (mtn_s)
4255#ifdef MFC_DEBUG
4256# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4257 block
4258# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4259 use iso_fortran_env, only: output_unit
4260# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4261
4262# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4263 print *, 'm_bubbles_EL.fpp:1634: ', '@:DEALLOCATE(intfc_draddt)'
4264# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4265
4266# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4267 call flush (output_unit)
4268# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4269 end block
4270# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4271#endif
4272# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4273
4274# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4275#if defined(MFC_OpenACC)
4276# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4277!$acc exit data delete(intfc_draddt)
4278# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4279#elif defined(MFC_OpenMP)
4280# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4281!$omp target exit data map(release:intfc_draddt)
4282# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4283#endif
4284# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4285 deallocate (intfc_draddt)
4286#ifdef MFC_DEBUG
4287# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4288 block
4289# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4290 use iso_fortran_env, only: output_unit
4291# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4292
4293# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4294 print *, 'm_bubbles_EL.fpp:1635: ', '@:DEALLOCATE(intfc_dveldt)'
4295# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4296
4297# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4298 call flush (output_unit)
4299# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4300 end block
4301# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4302#endif
4303# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4304
4305# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4306#if defined(MFC_OpenACC)
4307# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4308!$acc exit data delete(intfc_dveldt)
4309# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4310#elif defined(MFC_OpenMP)
4311# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4312!$omp target exit data map(release:intfc_dveldt)
4313# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4314#endif
4315# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4316 deallocate (intfc_dveldt)
4317#ifdef MFC_DEBUG
4318# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4319 block
4320# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4321 use iso_fortran_env, only: output_unit
4322# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4323
4324# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4325 print *, 'm_bubbles_EL.fpp:1636: ', '@:DEALLOCATE(gas_dpdt)'
4326# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4327
4328# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4329 call flush (output_unit)
4330# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4331 end block
4332# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4333#endif
4334# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4335
4336# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4337#if defined(MFC_OpenACC)
4338# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4339!$acc exit data delete(gas_dpdt)
4340# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4341#elif defined(MFC_OpenMP)
4342# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4343!$omp target exit data map(release:gas_dpdt)
4344# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4345#endif
4346# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4347 deallocate (gas_dpdt)
4348#ifdef MFC_DEBUG
4349# 1637 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4350 block
4351# 1637 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4352 use iso_fortran_env, only: output_unit
4353# 1637 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4354
4355# 1637 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4356 print *, 'm_bubbles_EL.fpp:1637: ', '@:DEALLOCATE(gas_dmvdt)'
4357# 1637 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4358
4359# 1637 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4360 call flush (output_unit)
4361# 1637 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4362 end block
4363# 1637 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4364#endif
4365# 1637 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4366
4367# 1637 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4368#if defined(MFC_OpenACC)
4369# 1637 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4370!$acc exit data delete(gas_dmvdt)
4371# 1637 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4372#elif defined(MFC_OpenMP)
4373# 1637 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4374!$omp target exit data map(release:gas_dmvdt)
4375# 1637 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4376#endif
4377# 1637 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4378 deallocate (gas_dmvdt)
4379#ifdef MFC_DEBUG
4380# 1638 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4381 block
4382# 1638 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4383 use iso_fortran_env, only: output_unit
4384# 1638 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4385
4386# 1638 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4387 print *, 'm_bubbles_EL.fpp:1638: ', '@:DEALLOCATE(mtn_dposdt)'
4388# 1638 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4389
4390# 1638 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4391 call flush (output_unit)
4392# 1638 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4393 end block
4394# 1638 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4395#endif
4396# 1638 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4397
4398# 1638 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4399#if defined(MFC_OpenACC)
4400# 1638 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4401!$acc exit data delete(mtn_dposdt)
4402# 1638 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4403#elif defined(MFC_OpenMP)
4404# 1638 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4405!$omp target exit data map(release:mtn_dposdt)
4406# 1638 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4407#endif
4408# 1638 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4409 deallocate (mtn_dposdt)
4410#ifdef MFC_DEBUG
4411# 1639 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4412 block
4413# 1639 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4414 use iso_fortran_env, only: output_unit
4415# 1639 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4416
4417# 1639 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4418 print *, 'm_bubbles_EL.fpp:1639: ', '@:DEALLOCATE(mtn_dveldt)'
4419# 1639 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4420
4421# 1639 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4422 call flush (output_unit)
4423# 1639 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4424 end block
4425# 1639 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4426#endif
4427# 1639 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4428
4429# 1639 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4430#if defined(MFC_OpenACC)
4431# 1639 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4432!$acc exit data delete(mtn_dveldt)
4433# 1639 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4434#elif defined(MFC_OpenMP)
4435# 1639 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4436!$omp target exit data map(release:mtn_dveldt)
4437# 1639 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4438#endif
4439# 1639 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4440 deallocate (mtn_dveldt)
4441
4442 end subroutine s_finalize_lagrangian_solver
4443
4444end module m_bubbles_el
type(scalar_field), dimension(sys_size), intent(inout) q_cons_vf
integer, intent(in) k
integer, intent(in) j
Noncharacteristic and processor boundary condition application for ghost cells and buffer regions.
Kernel functions (Gaussian, delta) that smear Lagrangian bubble effects onto the Eulerian grid.
Tracks Lagrangian bubbles and couples their dynamics to the Eulerian flow via volume averaging.
real(wp), dimension(:,:), allocatable intfc_draddt
Time derivative of bubble's radius.
impure subroutine s_write_lag_bubble_stats()
Write the maximum and minimum radius statistics for each bubble.
subroutine s_gradient_dir(q, dq, dir)
Compute the gradient of a scalar field using second-order central differences on a non-uniform grid.
real(wp) rmin_glb
Maximum and minimum bubbe size in the local domain.
real(wp), dimension(:,:,:), allocatable mtn_vel
Bubble's velocity.
real(wp), dimension(:), allocatable gas_betat
heatflux model (Preston et al., 2007)
real(wp), dimension(:), allocatable bub_dphidt
subgrid velocity potential (Maeda & Colonius, 2018)
real(wp), dimension(:,:,:), allocatable mtn_dveldt
Time derivative of the bubble's velocity.
integer q_beta_idx
Size of the q_beta vector field.
real(wp), dimension(:,:), allocatable gas_dpdt
Time derivative of gas pressure.
real(wp), dimension(:), allocatable gas_mg
Bubble's gas mass.
subroutine s_compute_bubble_el_dynamics(q_prim_vf, stage)
Contains the bubble dynamics subroutines.
impure subroutine s_write_restart_lag_bubbles(t_step)
Write restart files for the Lagrangian bubble solver.
impure subroutine s_read_input_bubbles(q_cons_vf)
Read initial bubble data from input files.
integer nbubs
Number of bubbles in the local domain.
real(wp), dimension(:,:), allocatable intfc_dveldt
Time derivative of bubble's interface velocity.
integer, private lag_num_ts
Number of time stages in the time-stepping scheme.
real(wp), dimension(:), allocatable bub_r0
Initial bubble radius.
impure subroutine s_add_bubbles(inputbubble, q_cons_vf, bub_id)
Add a new bubble from input data for a fresh start.
impure subroutine s_initialize_bubbles_el_module(q_cons_vf)
Initializes the lagrangian subgrid bubble solver.
real(wp), dimension(:), allocatable rmin_stats
Minimum radius.
real(wp), dimension(:,:), allocatable gas_mv
Vapor mass in the bubble.
impure subroutine s_update_lagrange_tdv_rk(stage)
Update Lagrangian bubble variables using TVD Runge-Kutta time stepping.
logical function particle_in_domain_physical(pos_part)
Determine if a Lagrangian bubble is within the physical domain excluding ghost cells.
impure subroutine s_restart_bubbles(bub_id, save_count)
Restore bubble data from a restart file.
real(wp), dimension(:,:), allocatable gas_dmvdt
Time derivative of the vapor mass in the bubble.
subroutine s_smear_voidfraction()
Smear the bubble effects onto the Eulerian grid.
logical function particle_in_domain(pos_part)
Determine if a bubble position lies within the current MPI subdomain including ghost cells.
subroutine s_compute_bubbles_el_source(q_cons_vf, q_prim_vf, rhs_vf)
Compute the Lagrangian bubble source terms and add them to the RHS.
subroutine s_locate_cell(pos, cell, scoord)
Locate the cell index for a given physical position.
subroutine s_compute_cson_from_pinf(q_prim_vf, pinf, cell, rhol, gamma, pi_inf, cson)
Compute the speed of sound from a given driving pressure.
real(wp), dimension(:), allocatable rmax_stats
Maximum radius.
impure subroutine s_write_void_evol(qtime)
Write void fraction statistics at each time step.
impure subroutine s_transfer_data_to_tmp()
Transfer data into the temporal variables.
integer, dimension(:,:), allocatable lag_id
Global and local IDs.
real(wp), dimension(:,:,:), allocatable mtn_s
Bubble's computational cell position in real format.
subroutine s_calculate_lag_bubble_stats()
Compute the maximum and minimum radius of each bubble.
impure subroutine s_remove_lag_bubble(bub_id)
Remove a specific Lagrangian bubble when dt becomes too small.
type(scalar_field), dimension(:), allocatable q_beta
Projection of the lagrangian particles in the Eulerian framework.
real(wp), dimension(:), allocatable gas_betac
massflux model (Preston et al., 2007)
real(wp), dimension(:,:), allocatable intfc_vel
Velocity of the bubble interface.
real(wp), dimension(:,:), allocatable gas_p
Pressure in the bubble.
real(wp), dimension(:,:), allocatable intfc_rad
Bubble radius.
impure subroutine s_write_lag_particles(qtime)
Write Lagrangian bubble state data at each time step.
impure subroutine s_finalize_lagrangian_solver()
Finalize the Lagrangian bubble solver.
real(wp), dimension(:,:,:), allocatable mtn_dposdt
Time derivative of the bubble's position.
real(wp), dimension(:,:,:), allocatable mtn_pos
Bubble's position.
real(wp), dimension(:,:,:), allocatable mtn_posprev
Bubble's previous position.
subroutine s_get_pinf(bub_id, q_prim_vf, ptype, f_pinfl, cell, preterm1, term2, romega)
Compute the bubble driving pressure p_inf.
Shared bubble-dynamics procedures (radial acceleration, wall pressure, sound speed) for ensemble- and...
Platform-specific file and directory operations: create, delete, inquire, getcwd, and basename.
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
type(bubbles_lagrange_parameters) lag_params
Lagrange bubbles' parameters.
integer time_stepper
Time-stepper algorithm.
Basic floating-point utilities: approximate equality, default detection, and coordinate bounds.
Utility routines for bubble model setup, coordinate transforms, array sampling, and special functions...
MPI halo exchange, domain decomposition, and buffer packing/unpacking for the simulation solver.
Simulation helper routines for enthalpy computation, CFL calculation, and stability checks.
Conservative-to-primitive variable conversion, mixture property evaluation, and pressure computation.