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, 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(eqn_idx%cont%end + i)%sf(cell(1), cell(2), cell(3))**2/rhol
1533 end do
1534 pliq = (q_cons_vf(eqn_idx%E)%sf(cell(1), cell(2), cell(3)) - dynp - pi_inf)/gamma
1535 if (pliq < 0) print *, "Negative pressure", proc_rank, q_cons_vf(eqn_idx%E)%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 pref = gas_p(bub_id, 1)
1542 end if
1543
1544 ! Initial particle mass
1545 volparticle = 4._wp/3._wp*pi*bub_r0(bub_id)**3._wp ! volume
1546 gas_mv(bub_id, 1) = pv*volparticle*(1._wp/(r_v*tw))*(massflag) ! vapermass
1547 gas_mg(bub_id) = (gas_p(bub_id, 1) - pv*(massflag))*volparticle*(1._wp/(r_g*tw)) ! gasmass
1548 if (gas_mg(bub_id) <= 0._wp) then
1549 call s_mpi_abort("The initial mass of gas inside the bubble is negative. Check the initial conditions.")
1550 end if
1551 totalmass = gas_mg(bub_id) + gas_mv(bub_id, 1) ! totalmass
1552
1553 ! Bubble natural frequency
1554 concvap = gas_mv(bub_id, 1)/(gas_mv(bub_id, 1) + gas_mg(bub_id))
1555 omegan_local = (3._wp*(gas_p(bub_id, 1) - pv*(massflag)) + 4._wp*(1._wp/web)/bub_r0(bub_id))/rhol
1556 if (pv*(massflag) > gas_p(bub_id, 1)) then
1557 call s_mpi_abort("Lagrange bubble initially located in a region with pressure below the vapor pressure.")
1558 end if
1559 omegan_local = sqrt(omegan_local/bub_r0(bub_id)**2._wp)
1560
1561 cpparticle = concvap*cp_v + (1._wp - concvap)*cp_g
1562 kparticle = concvap*k_vl + (1._wp - concvap)*k_gl
1563
1564 ! Mass and heat transfer coefficients (based on Preston 2007)
1565 pet = totalmass/volparticle*cpparticle*bub_r0(bub_id)**2._wp*omegan_local/kparticle
1566 call s_transcoeff(1._wp, pet, re_trans, im_trans)
1567 gas_betat(bub_id) = re_trans*(heatflag)*kparticle
1568
1569 peg = bub_r0(bub_id)**2._wp*omegan_local/vd
1570 call s_transcoeff(1._wp, peg, re_trans, im_trans)
1571 gas_betac(bub_id) = re_trans*(massflag)*vd
1572
1573 if (gas_mg(bub_id) <= 0._wp) then
1574 call s_mpi_abort("Negative gas mass in the bubble, check if the bubble is in the domain.")
1575 end if
1576
1577 end subroutine s_add_bubbles
1578
1579 !> Restore bubble data from a restart file
1580 impure subroutine s_restart_bubbles(bub_id, save_count)
1581
1582 integer, intent(inout) :: bub_id, save_count
1583 character(LEN=path_len + 2*name_len) :: file_loc
1584 real(wp) :: file_time, file_dt
1585 integer :: file_num_procs, file_tot_part, tot_part
1586
1587#ifdef MFC_MPI
1588 real(wp), dimension(20) :: inputvals
1589 integer, dimension(MPI_STATUS_SIZE) :: status
1590 integer(kind=MPI_OFFSET_KIND) :: disp
1591 integer :: view
1592 integer, dimension(3) :: cell
1593 logical :: indomain, particle_file, file_exist
1594 integer, dimension(2) :: gsizes, lsizes, start_idx_part
1595 integer :: ifile, ierr, tot_data, id
1596 integer :: i
1597 integer, dimension(:), allocatable :: proc_bubble_counts
1598 real(wp), dimension(1:1,1:lag_io_vars) :: dummy
1599
1600 dummy = 0._wp
1601
1602 ! Construct file path
1603 write (file_loc, '(A,I0,A)') 'lag_bubbles_', save_count, '.dat'
1604 file_loc = trim(case_dir) // '/restart_data' // trim(mpiiofs) // trim(file_loc)
1605
1606 ! Check if file exists
1607 inquire (file=trim(file_loc), exist=file_exist)
1608 if (.not. file_exist) then
1609 call s_mpi_abort('Restart file ' // trim(file_loc) // ' does not exist!')
1610 end if
1611
1612 if (.not. parallel_io) return
1613
1614 if (proc_rank == 0) then
1615 call mpi_file_open(mpi_comm_self, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
1616
1617 call mpi_file_read(ifile, file_tot_part, 1, mpi_integer, status, ierr)
1618 call mpi_file_read(ifile, file_time, 1, mpi_p, status, ierr)
1619 call mpi_file_read(ifile, file_dt, 1, mpi_p, status, ierr)
1620 call mpi_file_read(ifile, file_num_procs, 1, mpi_integer, status, ierr)
1621
1622 call mpi_file_close(ifile, ierr)
1623 end if
1624
1625 call mpi_bcast(file_tot_part, 1, mpi_integer, 0, mpi_comm_world, ierr)
1626 call mpi_bcast(file_time, 1, mpi_p, 0, mpi_comm_world, ierr)
1627 call mpi_bcast(file_dt, 1, mpi_p, 0, mpi_comm_world, ierr)
1628 call mpi_bcast(file_num_procs, 1, mpi_integer, 0, mpi_comm_world, ierr)
1629
1630 allocate (proc_bubble_counts(file_num_procs))
1631
1632 if (proc_rank == 0) then
1633 call mpi_file_open(mpi_comm_self, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
1634
1635 ! Skip to processor counts position
1636 disp = int(sizeof(file_tot_part) + 2*sizeof(file_time) + sizeof(file_num_procs), mpi_offset_kind)
1637 call mpi_file_seek(ifile, disp, mpi_seek_set, ierr)
1638 call mpi_file_read(ifile, proc_bubble_counts, file_num_procs, mpi_integer, status, ierr)
1639
1640 call mpi_file_close(ifile, ierr)
1641 end if
1642
1643 call mpi_bcast(proc_bubble_counts, file_num_procs, mpi_integer, 0, mpi_comm_world, ierr)
1644
1645 ! Set time variables from file
1646 mytime = file_time
1647 dt = file_dt
1648
1649 bub_id = proc_bubble_counts(proc_rank + 1)
1650
1651 start_idx_part(1) = 0
1652 do i = 1, proc_rank
1653 start_idx_part(1) = start_idx_part(1) + proc_bubble_counts(i)
1654 end do
1655
1656 start_idx_part(2) = 0
1657 lsizes(1) = bub_id
1658 lsizes(2) = lag_io_vars
1659
1660 gsizes(1) = file_tot_part
1661 gsizes(2) = lag_io_vars
1662
1663 if (bub_id > 0) then
1664 allocate (mpi_io_data_lag_bubbles(bub_id,1:lag_io_vars))
1665
1666 call mpi_type_create_subarray(2, gsizes, lsizes, start_idx_part, mpi_order_fortran, mpi_p, view, ierr)
1667 call mpi_type_commit(view, ierr)
1668
1669 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
1670
1671 ! Skip extended header
1672 disp = int(sizeof(file_tot_part) + 2*sizeof(file_time) + sizeof(file_num_procs) &
1673 & + file_num_procs*sizeof(proc_bubble_counts(1)), mpi_offset_kind)
1674 call mpi_file_set_view(ifile, disp, mpi_p, view, 'native', mpi_info_int, ierr)
1675
1676 call mpi_file_read_all(ifile, mpi_io_data_lag_bubbles, lag_io_vars*bub_id, mpi_p, status, ierr)
1677
1678 call mpi_file_close(ifile, ierr)
1679 call mpi_type_free(view, ierr)
1680
1681 nbubs = bub_id
1682
1683 do i = 1, bub_id
1684 lag_id(i, 1) = int(mpi_io_data_lag_bubbles(i, 1))
1685 mtn_pos(i,1:3,1) = mpi_io_data_lag_bubbles(i,2:4)
1686 mtn_posprev(i,1:3,1) = mpi_io_data_lag_bubbles(i,5:7)
1687 mtn_vel(i,1:3,1) = mpi_io_data_lag_bubbles(i,8:10)
1688 intfc_rad(i, 1) = mpi_io_data_lag_bubbles(i, 11)
1689 intfc_vel(i, 1) = mpi_io_data_lag_bubbles(i, 12)
1690 bub_r0(i) = mpi_io_data_lag_bubbles(i, 13)
1691 rmax_stats(i) = mpi_io_data_lag_bubbles(i, 14)
1692 rmin_stats(i) = mpi_io_data_lag_bubbles(i, 15)
1693 bub_dphidt(i) = mpi_io_data_lag_bubbles(i, 16)
1694 gas_p(i, 1) = mpi_io_data_lag_bubbles(i, 17)
1695 gas_mv(i, 1) = mpi_io_data_lag_bubbles(i, 18)
1696 gas_mg(i) = mpi_io_data_lag_bubbles(i, 19)
1697 gas_betat(i) = mpi_io_data_lag_bubbles(i, 20)
1698 gas_betac(i) = mpi_io_data_lag_bubbles(i, 21)
1699 cell = -buff_size
1700 call s_locate_cell(mtn_pos(i,1:3,1), cell, mtn_s(i,1:3,1))
1701 end do
1702
1703 deallocate (mpi_io_data_lag_bubbles)
1704 else
1705 nbubs = 0
1706
1707 call mpi_type_contiguous(0, mpi_p, view, ierr)
1708 call mpi_type_commit(view, ierr)
1709
1710 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
1711
1712 ! Skip extended header
1713 disp = int(sizeof(file_tot_part) + 2*sizeof(file_time) + sizeof(file_num_procs) &
1714 & + file_num_procs*sizeof(proc_bubble_counts(1)), mpi_offset_kind)
1715 call mpi_file_set_view(ifile, disp, mpi_p, view, 'native', mpi_info_int, ierr)
1716
1717 call mpi_file_read_all(ifile, dummy, 0, mpi_p, status, ierr)
1718
1719 call mpi_file_close(ifile, ierr)
1720 call mpi_type_free(view, ierr)
1721 end if
1722
1723 if (proc_rank == 0) then
1724 write (*, '(A,I0,A,I0)') 'Read ', file_tot_part, ' particles from restart file at t_step = ', save_count
1725 write (*, '(A,E15.7,A,E15.7)') 'Restart time = ', mytime, ', dt = ', dt
1726 end if
1727
1728 deallocate (proc_bubble_counts)
1729#endif
1730
1731 end subroutine s_restart_bubbles
1732
1733 !> Contains the bubble dynamics subroutines.
1734 subroutine s_compute_bubble_el_dynamics(q_prim_vf, stage)
1735
1736 type(scalar_field), dimension(sys_size), intent(inout) :: q_prim_vf
1737 integer, intent(in) :: stage
1738 real(wp) :: myVapFlux
1739 real(wp) :: preterm1, term2, paux, pint, Romega, term1_fac
1740 real(wp) :: myR_m, mygamma_m, myPb, myMass_n, myMass_v
1741 real(wp) :: myR, myV, myBeta_c, myBeta_t, myR0, myPbdot, myMvdot
1742 real(wp) :: myPinf, aux1, aux2, myCson, myRho
1743 real(wp) :: gamma, pi_inf, qv
1744
1745# 498 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1746 real(wp), dimension(num_fluids) :: myalpha_rho, myalpha
1747# 500 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1748 real(wp), dimension(2) :: Re
1749 integer, dimension(3) :: cell
1750 integer :: adap_dt_stop_max, adap_dt_stop !< Fail-safe exit if max iteration count reached
1751 real(wp) :: dmalf, dmntait, dmBtait, dm_bub_adv_src, dm_divu !< Dummy variables for unified subgrid bubble subroutines
1752 integer :: i, k, l
1753
1754 call nvtxstartrange("LAGRANGE-BUBBLE-DYNAMICS")
1755
1756 ! Subgrid p_inf model based on Maeda and Colonius (2018).
1757 if (lag_params%pressure_corrector) then
1758 ! Calculate velocity potentials (valid for one bubble per cell)
1759
1760# 511 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1761
1762# 511 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1763#if defined(MFC_OpenACC)
1764# 511 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1765!$acc parallel loop gang vector default(present) private(k, cell, paux, preterm1, term2, Romega, myR0, myR, myV, myPb, pint, term1_fac)
1766# 511 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1767#elif defined(MFC_OpenMP)
1768# 511 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1769
1770# 511 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1771
1772# 511 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1773
1774# 511 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1775!$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)
1776# 511 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1777#endif
1778 do k = 1, nbubs
1779 call s_get_pinf(k, q_prim_vf, 2, paux, cell, preterm1, term2, romega)
1780 myr0 = bub_r0(k)
1781 myr = intfc_rad(k, 2)
1782 myv = intfc_vel(k, 2)
1783 mypb = gas_p(k, 2)
1784 pint = f_cpbw_km(myr0, myr, myv, mypb)
1785 pint = pint + 0.5_wp*myv**2._wp
1786 if (lag_params%cluster_type == 2) then
1787 bub_dphidt(k) = (paux - pint) + term2
1788 ! Accounting for the potential induced by the bubble averaged over the control volume Note that this is based on
1789 ! the incompressible flow assumption near the bubble.
1790 term1_fac = 3._wp/2._wp*(myr*(romega**2._wp - myr**2._wp))/(romega**3._wp - myr**3._wp)
1791 bub_dphidt(k) = bub_dphidt(k)/(1._wp - term1_fac)
1792 end if
1793 end do
1794
1795# 528 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1796#if defined(MFC_OpenACC)
1797# 528 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1798!$acc end parallel loop
1799# 528 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1800#elif defined(MFC_OpenMP)
1801# 528 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1802
1803# 528 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1804!$omp end target teams loop
1805# 528 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1806#endif
1807 end if
1808
1809 ! Radial motion model
1810 adap_dt_stop_max = 0
1811
1812# 533 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1813
1814# 533 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1815#if defined(MFC_OpenACC)
1816# 533 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1817!$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)
1818# 533 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1819#elif defined(MFC_OpenMP)
1820# 533 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1821
1822# 533 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1823
1824# 533 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1825
1826# 533 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1827!$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)
1828# 533 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1829#endif
1830# 538 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1831 do k = 1, nbubs
1832 ! Keller-Miksis model
1833
1834 ! Current bubble state
1835 mypb = gas_p(k, 2)
1836 mymass_n = gas_mg(k)
1837 mymass_v = gas_mv(k, 2)
1838 myr = intfc_rad(k, 2)
1839 myv = intfc_vel(k, 2)
1840 mybeta_c = gas_betac(k)
1841 mybeta_t = gas_betat(k)
1842 myr0 = bub_r0(k)
1843
1844 ! Vapor and heat fluxes
1845 call s_vflux(myr, myv, mypb, mymass_v, k, myvapflux, mymass_n, mybeta_c, myr_m, mygamma_m)
1846 mypbdot = f_bpres_dot(myvapflux, myr, myv, mypb, mymass_v, k, mybeta_t, myr_m, mygamma_m)
1847 mymvdot = 4._wp*pi*myr**2._wp*myvapflux
1848
1849 ! Obtaining driving pressure
1850 call s_get_pinf(k, q_prim_vf, 1, mypinf, cell, aux1, aux2)
1851
1852 ! Obtain liquid density and computing speed of sound from pinf
1853 call s_compute_species_fraction(q_prim_vf, cell(1), cell(2), cell(3), myalpha_rho, myalpha)
1854 call s_convert_species_to_mixture_variables_acc(myrho, gamma, pi_inf, qv, myalpha, myalpha_rho, re)
1855 call s_compute_cson_from_pinf(q_prim_vf, mypinf, cell, myrho, gamma, pi_inf, mycson)
1856
1857 ! Adaptive time stepping
1858 adap_dt_stop = 0
1859
1860 if (adap_dt) then
1861 call s_advance_step(myrho, mypinf, myr, myv, myr0, mypb, mypbdot, dmalf, dmntait, dmbtait, dm_bub_adv_src, &
1862 & dm_divu, k, mymass_v, mymass_n, mybeta_c, mybeta_t, mycson, adap_dt_stop)
1863
1864 ! Update bubble state
1865 intfc_rad(k, 1) = myr
1866 intfc_vel(k, 1) = myv
1867 gas_p(k, 1) = mypb
1868 gas_mv(k, 1) = mymass_v
1869 else
1870 ! Radial acceleration from bubble models
1871 intfc_dveldt(k, stage) = f_rddot(myrho, mypinf, myr, myv, myr0, mypb, mypbdot, dmalf, dmntait, dmbtait, &
1872 & dm_bub_adv_src, dm_divu, mycson)
1873 intfc_draddt(k, stage) = myv
1874 gas_dmvdt(k, stage) = mymvdot
1875 gas_dpdt(k, stage) = mypbdot
1876 end if
1877
1878 adap_dt_stop_max = max(adap_dt_stop_max, adap_dt_stop)
1879 end do
1880
1881# 587 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1882#if defined(MFC_OpenACC)
1883# 587 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1884!$acc end parallel loop
1885# 587 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1886#elif defined(MFC_OpenMP)
1887# 587 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1888
1889# 587 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1890!$omp end target teams loop
1891# 587 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1892#endif
1893
1894 if (adap_dt .and. adap_dt_stop_max > 0) call s_mpi_abort("Adaptive time stepping failed to converge.")
1895
1896 ! Bubbles remain in a fixed position
1897
1898# 592 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1899
1900# 592 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1901#if defined(MFC_OpenACC)
1902# 592 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1903!$acc parallel loop collapse(2) gang vector default(present) private(k, l) copyin(stage)
1904# 592 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1905#elif defined(MFC_OpenMP)
1906# 592 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1907
1908# 592 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1909
1910# 592 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1911
1912# 592 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1913!$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)
1914# 592 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1915#endif
1916 do k = 1, nbubs
1917 do l = 1, 3
1918 mtn_dposdt(k, l, stage) = 0._wp
1919 mtn_dveldt(k, l, stage) = 0._wp
1920 end do
1921 end do
1922
1923# 599 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1924#if defined(MFC_OpenACC)
1925# 599 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1926!$acc end parallel loop
1927# 599 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1928#elif defined(MFC_OpenMP)
1929# 599 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1930
1931# 599 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1932!$omp end target teams loop
1933# 599 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1934#endif
1935
1936 call nvtxendrange
1937
1938 end subroutine s_compute_bubble_el_dynamics
1939
1940 !> Compute the Lagrangian bubble source terms and add them to the RHS
1941 subroutine s_compute_bubbles_el_source(q_cons_vf, q_prim_vf, rhs_vf)
1942
1943 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
1944 type(scalar_field), dimension(sys_size), intent(inout) :: q_prim_vf
1945 type(scalar_field), dimension(sys_size), intent(inout) :: rhs_vf
1946 integer :: i, j, k, l
1947
1948 if (.not. adap_dt) call s_smear_voidfraction()
1949
1950 if (lag_params%solver_approach == 2) then
1951 ! (q / (1 - beta)) * d(beta)/dt source
1952 if (p == 0) then
1953
1954# 618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1955
1956# 618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1957#if defined(MFC_OpenACC)
1958# 618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1959!$acc parallel loop collapse(4) gang vector default(present) private(i, j, k, l)
1960# 618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1961#elif defined(MFC_OpenMP)
1962# 618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1963
1964# 618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1965
1966# 618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1967
1968# 618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1969!$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)
1970# 618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1971#endif
1972 do k = 0, p
1973 do j = 0, n
1974 do i = 0, m
1975 do l = 1, eqn_idx%E
1976 if (q_beta(1)%sf(i, j, k) > (1._wp - lag_params%valmaxvoid)) then
1977 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, &
1978 & k) + q_beta(5)%sf(i, j, k))
1979 end if
1980 end do
1981 end do
1982 end do
1983 end do
1984
1985# 631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1986#if defined(MFC_OpenACC)
1987# 631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1988!$acc end parallel loop
1989# 631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1990#elif defined(MFC_OpenMP)
1991# 631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1992
1993# 631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1994!$omp end target teams loop
1995# 631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1996#endif
1997 else
1998
1999# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2000
2001# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2002#if defined(MFC_OpenACC)
2003# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2004!$acc parallel loop collapse(4) gang vector default(present) private(i, j, k, l)
2005# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2006#elif defined(MFC_OpenMP)
2007# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2008
2009# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2010
2011# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2012
2013# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2014!$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)
2015# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2016#endif
2017 do k = 0, p
2018 do j = 0, n
2019 do i = 0, m
2020 do l = 1, eqn_idx%E
2021 if (q_beta(1)%sf(i, j, k) > (1._wp - lag_params%valmaxvoid)) then
2022 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, &
2023 & k)*q_beta(2)%sf(i, j, k)
2024 end if
2025 end do
2026 end do
2027 end do
2028 end do
2029
2030# 646 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2031#if defined(MFC_OpenACC)
2032# 646 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2033!$acc end parallel loop
2034# 646 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2035#elif defined(MFC_OpenMP)
2036# 646 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2037
2038# 646 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2039!$omp end target teams loop
2040# 646 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2041#endif
2042 end if
2043
2044 do l = 1, num_dims
2045 call s_gradient_dir(q_prim_vf(eqn_idx%E)%sf, q_beta(3)%sf, l)
2046
2047 ! (q / (1 - beta)) * d(beta)/dt source
2048
2049# 653 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2050
2051# 653 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2052#if defined(MFC_OpenACC)
2053# 653 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2054!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
2055# 653 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2056#elif defined(MFC_OpenMP)
2057# 653 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2058
2059# 653 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2060
2061# 653 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2062
2063# 653 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2064!$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)
2065# 653 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2066#endif
2067 do k = 0, p
2068 do j = 0, n
2069 do i = 0, m
2070 if (q_beta(1)%sf(i, j, k) > (1._wp - lag_params%valmaxvoid)) then
2071 rhs_vf(eqn_idx%cont%end + l)%sf(i, j, k) = rhs_vf(eqn_idx%cont%end + l)%sf(i, j, &
2072 & k) - (1._wp - q_beta(1)%sf(i, j, k))/q_beta(1)%sf(i, j, k)*q_beta(3)%sf(i, j, k)
2073 end if
2074 end do
2075 end do
2076 end do
2077
2078# 664 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2079#if defined(MFC_OpenACC)
2080# 664 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2081!$acc end parallel loop
2082# 664 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2083#elif defined(MFC_OpenMP)
2084# 664 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2085
2086# 664 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2087!$omp end target teams loop
2088# 664 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2089#endif
2090
2091 ! source in energy
2092
2093# 667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2094
2095# 667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2096#if defined(MFC_OpenACC)
2097# 667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2098!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
2099# 667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2100#elif defined(MFC_OpenMP)
2101# 667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2102
2103# 667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2104
2105# 667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2106
2107# 667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2108!$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)
2109# 667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2110#endif
2111 do k = idwbuff(3)%beg, idwbuff(3)%end
2112 do j = idwbuff(2)%beg, idwbuff(2)%end
2113 do i = idwbuff(1)%beg, idwbuff(1)%end
2114 q_beta(3)%sf(i, j, k) = q_prim_vf(eqn_idx%E)%sf(i, j, k)*q_prim_vf(eqn_idx%cont%end + l)%sf(i, j, k)
2115 end do
2116 end do
2117 end do
2118
2119# 675 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2120#if defined(MFC_OpenACC)
2121# 675 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2122!$acc end parallel loop
2123# 675 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2124#elif defined(MFC_OpenMP)
2125# 675 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2126
2127# 675 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2128!$omp end target teams loop
2129# 675 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2130#endif
2131
2132 call s_gradient_dir(q_beta(3)%sf, q_beta(4)%sf, l)
2133
2134 ! (beta / (1 - beta)) * d(Pu)/dl source
2135
2136# 680 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2137
2138# 680 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2139#if defined(MFC_OpenACC)
2140# 680 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2141!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
2142# 680 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2143#elif defined(MFC_OpenMP)
2144# 680 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2145
2146# 680 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2147
2148# 680 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2149
2150# 680 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2151!$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)
2152# 680 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2153#endif
2154 do k = 0, p
2155 do j = 0, n
2156 do i = 0, m
2157 if (q_beta(1)%sf(i, j, k) > (1._wp - lag_params%valmaxvoid)) then
2158 rhs_vf(eqn_idx%E)%sf(i, j, k) = rhs_vf(eqn_idx%E)%sf(i, j, k) - q_beta(4)%sf(i, j, &
2159 & k)*(1._wp - q_beta(1)%sf(i, j, k))/q_beta(1)%sf(i, j, k)
2160 end if
2161 end do
2162 end do
2163 end do
2164
2165# 691 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2166#if defined(MFC_OpenACC)
2167# 691 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2168!$acc end parallel loop
2169# 691 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2170#elif defined(MFC_OpenMP)
2171# 691 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2172
2173# 691 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2174!$omp end target teams loop
2175# 691 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2176#endif
2177 end do
2178 end if
2179
2180 end subroutine s_compute_bubbles_el_source
2181
2182 !> Compute the speed of sound from a given driving pressure
2183 subroutine s_compute_cson_from_pinf(q_prim_vf, pinf, cell, rhol, gamma, pi_inf, cson)
2184
2185
2186# 700 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2187#ifdef _CRAYFTN
2188# 700 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2189#if MFC_OpenACC
2190# 700 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2191!$acc routine seq
2192# 700 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2193#elif MFC_OpenMP
2194# 700 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2195
2196# 700 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2197
2198# 700 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2199!$omp declare target device_type(any)
2200# 700 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2201#else
2202# 700 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2203!DIR$ INLINEALWAYS s_compute_cson_from_pinf
2204# 700 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2205#endif
2206# 700 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2207#elif MFC_OpenACC
2208# 700 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2209!$acc routine seq
2210# 700 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2211#elif MFC_OpenMP
2212# 700 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2213
2214# 700 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2215
2216# 700 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2217!$omp declare target device_type(any)
2218# 700 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2219#endif
2220
2221 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf
2222 real(wp), intent(in) :: pinf, rhol, gamma, pi_inf
2223 integer, dimension(3), intent(in) :: cell
2224 real(wp), intent(out) :: cson
2225 real(wp) :: E, H
2226# 710 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2227 real(wp), dimension(num_dims) :: vel
2228# 712 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2229 integer :: i
2230
2231 vel(:) = 0._wp
2232
2233# 715 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2234#if defined(MFC_OpenACC)
2235# 715 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2236!$acc loop seq
2237# 715 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2238#elif defined(MFC_OpenMP)
2239# 715 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2240
2241# 715 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2242#endif
2243 do i = 1, num_dims
2244 vel(i) = q_prim_vf(i + eqn_idx%cont%end)%sf(cell(1), cell(2), cell(3))
2245 end do
2246 e = gamma*pinf + pi_inf + 0.5_wp*rhol*dot_product(vel, vel)
2247 h = (e + pinf)/rhol
2248 cson = sqrt((h - 0.5_wp*dot_product(vel, vel))/gamma)
2249
2250 end subroutine s_compute_cson_from_pinf
2251
2252 !> Smear the bubble effects onto the Eulerian grid
2254
2255 integer :: i, j, k, l
2256
2257 call nvtxstartrange("BUBBLES-LAGRANGE-KERNELS")
2258
2259
2260# 732 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2261
2262# 732 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2263#if defined(MFC_OpenACC)
2264# 732 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2265!$acc parallel loop collapse(4) gang vector default(present) private(i, j, k, l)
2266# 732 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2267#elif defined(MFC_OpenMP)
2268# 732 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2269
2270# 732 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2271
2272# 732 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2273
2274# 732 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2275!$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)
2276# 732 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2277#endif
2278 do i = 1, q_beta_idx
2279 do l = idwbuff(3)%beg, idwbuff(3)%end
2280 do k = idwbuff(2)%beg, idwbuff(2)%end
2281 do j = idwbuff(1)%beg, idwbuff(1)%end
2282 q_beta(i)%sf(j, k, l) = 0._wp
2283 end do
2284 end do
2285 end do
2286 end do
2287
2288# 742 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2289#if defined(MFC_OpenACC)
2290# 742 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2291!$acc end parallel loop
2292# 742 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2293#elif defined(MFC_OpenMP)
2294# 742 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2295
2296# 742 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2297!$omp end target teams loop
2298# 742 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2299#endif
2300
2301 call s_smoothfunction(nbubs, intfc_rad, intfc_vel, mtn_s, mtn_pos, q_beta)
2302
2303 ! Store 1-beta
2304
2305# 747 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2306
2307# 747 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2308#if defined(MFC_OpenACC)
2309# 747 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2310!$acc parallel loop collapse(3) gang vector default(present) private(j, k, l)
2311# 747 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2312#elif defined(MFC_OpenMP)
2313# 747 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2314
2315# 747 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2316
2317# 747 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2318
2319# 747 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2320!$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)
2321# 747 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2322#endif
2323 do l = idwbuff(3)%beg, idwbuff(3)%end
2324 do k = idwbuff(2)%beg, idwbuff(2)%end
2325 do j = idwbuff(1)%beg, idwbuff(1)%end
2326 q_beta(1)%sf(j, k, l) = 1._wp - q_beta(1)%sf(j, k, l)
2327 ! Limiting void fraction given max value
2328 q_beta(1)%sf(j, k, l) = max(q_beta(1)%sf(j, k, l), 1._wp - lag_params%valmaxvoid)
2329 end do
2330 end do
2331 end do
2332
2333# 757 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2334#if defined(MFC_OpenACC)
2335# 757 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2336!$acc end parallel loop
2337# 757 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2338#elif defined(MFC_OpenMP)
2339# 757 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2340
2341# 757 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2342!$omp end target teams loop
2343# 757 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2344#endif
2345
2346 call nvtxendrange
2347
2348 end subroutine s_smear_voidfraction
2349
2350 !> Compute the bubble driving pressure p_inf
2351 subroutine s_get_pinf(bub_id, q_prim_vf, ptype, f_pinfl, cell, preterm1, term2, Romega)
2352
2353
2354# 766 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2355#ifdef _CRAYFTN
2356# 766 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2357#if MFC_OpenACC
2358# 766 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2359!$acc routine seq
2360# 766 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2361#elif MFC_OpenMP
2362# 766 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2363
2364# 766 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2365
2366# 766 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2367!$omp declare target device_type(any)
2368# 766 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2369#else
2370# 766 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2371!DIR$ INLINEALWAYS s_get_pinf
2372# 766 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2373#endif
2374# 766 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2375#elif MFC_OpenACC
2376# 766 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2377!$acc routine seq
2378# 766 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2379#elif MFC_OpenMP
2380# 766 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2381
2382# 766 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2383
2384# 766 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2385!$omp declare target device_type(any)
2386# 766 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2387#endif
2388
2389 integer, intent(in) :: bub_id, ptype
2390 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf
2391 real(wp), intent(out) :: f_pinfl
2392 integer, dimension(3), intent(out) :: cell
2393 real(wp), intent(out), optional :: preterm1, term2, Romega
2394 real(wp), dimension(3) :: scoord, psi
2395 real(wp) :: dc, vol, aux
2396 real(wp) :: volgas, term1, Rbeq, denom
2397 real(wp) :: charvol, charpres, charvol2, charpres2
2398 integer, dimension(3) :: cellaux
2399 integer :: i, j, k
2400 integer :: smearGrid, smearGridz
2401 logical :: celloutside
2402
2403 scoord = mtn_s(bub_id,1:3,2)
2404 f_pinfl = 0._wp
2405
2406 !> Find current bubble cell
2407 cell(:) = int(scoord(:))
2408
2409# 787 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2410#if defined(MFC_OpenACC)
2411# 787 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2412!$acc loop seq
2413# 787 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2414#elif defined(MFC_OpenMP)
2415# 787 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2416
2417# 787 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2418#endif
2419 do i = 1, num_dims
2420 if (scoord(i) < 0._wp) cell(i) = cell(i) - 1
2421 end do
2422
2423 if ((lag_params%cluster_type == 1)) then
2424 !> Getting p_cell in terms of only the current cell by interpolation
2425 !> Getting the cell volulme as Omega
2426 if (p > 0) then
2427 vol = dx(cell(1))*dy(cell(2))*dz(cell(3))
2428 else
2429 if (cyl_coord) then
2430 vol = dx(cell(1))*dy(cell(2))*y_cc(cell(2))*2._wp*pi
2431 else
2432 vol = dx(cell(1))*dy(cell(2))*lag_params%charwidth
2433 end if
2434 end if
2435
2436 !> Obtain bilinear interpolation coefficients, based on the current location of the bubble.
2437 psi(1) = (scoord(1) - real(cell(1)))*dx(cell(1)) + x_cb(cell(1) - 1)
2438 if (cell(1) == (m + buff_size)) then
2439 cell(1) = cell(1) - 1
2440 psi(1) = 1._wp
2441 else if (cell(1) == (-buff_size)) then
2442 psi(1) = 0._wp
2443 else
2444 if (psi(1) < x_cc(cell(1))) cell(1) = cell(1) - 1
2445 psi(1) = abs((psi(1) - x_cc(cell(1)))/(x_cc(cell(1) + 1) - x_cc(cell(1))))
2446 end if
2447
2448 psi(2) = (scoord(2) - real(cell(2)))*dy(cell(2)) + y_cb(cell(2) - 1)
2449 if (cell(2) == (n + buff_size)) then
2450 cell(2) = cell(2) - 1
2451 psi(2) = 1._wp
2452 else if (cell(2) == (-buff_size)) then
2453 psi(2) = 0._wp
2454 else
2455 if (psi(2) < y_cc(cell(2))) cell(2) = cell(2) - 1
2456 psi(2) = abs((psi(2) - y_cc(cell(2)))/(y_cc(cell(2) + 1) - y_cc(cell(2))))
2457 end if
2458
2459 if (p > 0) then
2460 psi(3) = (scoord(3) - real(cell(3)))*dz(cell(3)) + z_cb(cell(3) - 1)
2461 if (cell(3) == (p + buff_size)) then
2462 cell(3) = cell(3) - 1
2463 psi(3) = 1._wp
2464 else if (cell(3) == (-buff_size)) then
2465 psi(3) = 0._wp
2466 else
2467 if (psi(3) < z_cc(cell(3))) cell(3) = cell(3) - 1
2468 psi(3) = abs((psi(3) - z_cc(cell(3)))/(z_cc(cell(3) + 1) - z_cc(cell(3))))
2469 end if
2470 else
2471 psi(3) = 0._wp
2472 end if
2473
2474 !> Perform bilinear interpolation
2475 if (p == 0) then ! 2D
2476 f_pinfl = q_prim_vf(eqn_idx%E)%sf(cell(1), cell(2), cell(3))*(1._wp - psi(1))*(1._wp - psi(2))
2477 f_pinfl = f_pinfl + q_prim_vf(eqn_idx%E)%sf(cell(1) + 1, cell(2), cell(3))*psi(1)*(1._wp - psi(2))
2478 f_pinfl = f_pinfl + q_prim_vf(eqn_idx%E)%sf(cell(1) + 1, cell(2) + 1, cell(3))*psi(1)*psi(2)
2479 f_pinfl = f_pinfl + q_prim_vf(eqn_idx%E)%sf(cell(1), cell(2) + 1, cell(3))*(1._wp - psi(1))*psi(2)
2480 else ! 3D
2481 f_pinfl = q_prim_vf(eqn_idx%E)%sf(cell(1), cell(2), cell(3))*(1._wp - psi(1))*(1._wp - psi(2))*(1._wp - psi(3))
2482 f_pinfl = f_pinfl + q_prim_vf(eqn_idx%E)%sf(cell(1) + 1, cell(2), cell(3))*psi(1)*(1._wp - psi(2))*(1._wp - psi(3))
2483 f_pinfl = f_pinfl + q_prim_vf(eqn_idx%E)%sf(cell(1) + 1, cell(2) + 1, cell(3))*psi(1)*psi(2)*(1._wp - psi(3))
2484 f_pinfl = f_pinfl + q_prim_vf(eqn_idx%E)%sf(cell(1), cell(2) + 1, cell(3))*(1._wp - psi(1))*psi(2)*(1._wp - psi(3))
2485 f_pinfl = f_pinfl + q_prim_vf(eqn_idx%E)%sf(cell(1), cell(2), cell(3) + 1)*(1._wp - psi(1))*(1._wp - psi(2))*psi(3)
2486 f_pinfl = f_pinfl + q_prim_vf(eqn_idx%E)%sf(cell(1) + 1, cell(2), cell(3) + 1)*psi(1)*(1._wp - psi(2))*psi(3)
2487 f_pinfl = f_pinfl + q_prim_vf(eqn_idx%E)%sf(cell(1) + 1, cell(2) + 1, cell(3) + 1)*psi(1)*psi(2)*psi(3)
2488 f_pinfl = f_pinfl + q_prim_vf(eqn_idx%E)%sf(cell(1), cell(2) + 1, cell(3) + 1)*(1._wp - psi(1))*psi(2)*psi(3)
2489 end if
2490
2491 ! R_Omega
2492 dc = (3._wp*vol/(4._wp*pi))**(1._wp/3._wp)
2493 else if (lag_params%cluster_type >= 2) then
2494 ! Bubble dynamic closure from Maeda and Colonius (2018)
2495
2496 ! Include the cell that contains the bubble (mapCells+1+mapCells)
2497 smeargrid = mapcells - (-mapcells) + 1
2498 smeargridz = smeargrid
2499 if (p == 0) smeargridz = 1
2500
2501 charvol = 0._wp
2502 charpres = 0._wp
2503 charvol2 = 0._wp
2504 charpres2 = 0._wp
2505 vol = 0._wp
2506
2507
2508# 876 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2509#if defined(MFC_OpenACC)
2510# 876 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2511!$acc loop seq
2512# 876 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2513#elif defined(MFC_OpenMP)
2514# 876 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2515
2516# 876 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2517#endif
2518 do i = 1, smeargrid
2519
2520# 878 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2521#if defined(MFC_OpenACC)
2522# 878 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2523!$acc loop seq
2524# 878 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2525#elif defined(MFC_OpenMP)
2526# 878 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2527
2528# 878 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2529#endif
2530 do j = 1, smeargrid
2531
2532# 880 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2533#if defined(MFC_OpenACC)
2534# 880 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2535!$acc loop seq
2536# 880 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2537#elif defined(MFC_OpenMP)
2538# 880 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2539
2540# 880 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2541#endif
2542 do k = 1, smeargridz
2543 cellaux(1) = cell(1) + i - (mapcells + 1)
2544 cellaux(2) = cell(2) + j - (mapcells + 1)
2545 cellaux(3) = cell(3) + k - (mapcells + 1)
2546 if (p == 0) cellaux(3) = 0
2547
2548 !> check if the current cell is outside the computational domain or not (including ghost cells)
2549 celloutside = .false.
2550 if (num_dims == 2) then
2551 if ((cellaux(1) < -buff_size) .or. (cellaux(2) < -buff_size)) then
2552 celloutside = .true.
2553 end if
2554 if (cyl_coord .and. y_cc(cellaux(2)) < 0._wp) then
2555 celloutside = .true.
2556 end if
2557 if ((cellaux(2) > n + buff_size) .or. (cellaux(1) > m + buff_size)) then
2558 celloutside = .true.
2559 end if
2560 else
2561 if ((cellaux(3) < -buff_size) .or. (cellaux(1) < -buff_size) .or. (cellaux(2) < -buff_size)) then
2562 celloutside = .true.
2563 end if
2564
2565 if ((cellaux(3) > p + buff_size) .or. (cellaux(2) > n + buff_size) .or. (cellaux(1) > m + buff_size)) &
2566 & then
2567 celloutside = .true.
2568 end if
2569 end if
2570 if (.not. celloutside) then
2571 if (cyl_coord .and. (p == 0) .and. (y_cc(cellaux(2)) < 0._wp)) then
2572 celloutside = .true.
2573 end if
2574 end if
2575
2576 if (.not. celloutside) then
2577 !> Obtaining the cell volulme
2578 if (p > 0) then
2579 vol = dx(cellaux(1))*dy(cellaux(2))*dz(cellaux(3))
2580 else
2581 if (cyl_coord) then
2582 vol = dx(cellaux(1))*dy(cellaux(2))*y_cc(cellaux(2))*2._wp*pi
2583 else
2584 vol = dx(cellaux(1))*dy(cellaux(2))*lag_params%charwidth
2585 end if
2586 end if
2587 !> Update values
2588 charvol = charvol + vol
2589 charpres = charpres + q_prim_vf(eqn_idx%E)%sf(cellaux(1), cellaux(2), cellaux(3))*vol
2590 charvol2 = charvol2 + vol*q_beta(1)%sf(cellaux(1), cellaux(2), cellaux(3))
2591 charpres2 = charpres2 + q_prim_vf(eqn_idx%E)%sf(cellaux(1), cellaux(2), &
2592 & cellaux(3))*vol*q_beta(1)%sf(cellaux(1), cellaux(2), cellaux(3))
2593 end if
2594 end do
2595 end do
2596 end do
2597
2598 f_pinfl = charpres2/charvol2
2599 vol = charvol
2600 dc = (3._wp*abs(vol)/(4._wp*pi))**(1._wp/3._wp)
2601 end if
2602
2603 if (lag_params%pressure_corrector) then
2604 ! Valid if only one bubble exists per cell
2605 volgas = intfc_rad(bub_id, 2)**3._wp
2606 denom = intfc_rad(bub_id, 2)**2._wp
2607 term1 = bub_dphidt(bub_id)*intfc_rad(bub_id, 2)**2._wp
2608 term2 = intfc_vel(bub_id, 2)*intfc_rad(bub_id, 2)**2._wp
2609
2610 rbeq = volgas**(1._wp/3._wp) ! surrogate bubble radius
2611 aux = dc**3._wp - rbeq**3._wp
2612 term2 = term2/denom
2613 term2 = 3._wp/2._wp*term2**2._wp*rbeq**3._wp*(1._wp - rbeq/dc)/aux
2614 preterm1 = 3._wp/2._wp*rbeq*(dc**2._wp - rbeq**2._wp)/(aux*denom)
2615
2616 ! Control volume radius
2617 if (ptype == 2) romega = dc
2618
2619 ! Getting p_inf
2620 if (ptype == 1) then
2621 f_pinfl = f_pinfl + preterm1*term1 + term2
2622 end if
2623 end if
2624
2625 end subroutine s_get_pinf
2626
2627 !> Update Lagrangian bubble variables using TVD Runge-Kutta time stepping
2628 impure subroutine s_update_lagrange_tdv_rk(stage)
2629
2630 integer, intent(in) :: stage
2631 integer :: k
2632
2633 if (time_stepper == 1) then ! 1st order TVD RK
2634
2635# 973 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2636
2637# 973 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2638#if defined(MFC_OpenACC)
2639# 973 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2640!$acc parallel loop gang vector default(present) private(k)
2641# 973 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2642#elif defined(MFC_OpenMP)
2643# 973 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2644
2645# 973 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2646
2647# 973 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2648
2649# 973 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2650!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
2651# 973 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2652#endif
2653 do k = 1, nbubs
2654 ! u{1} = u{n} + dt * RHS{n}
2655 intfc_rad(k, 1) = intfc_rad(k, 1) + dt*intfc_draddt(k, 1)
2656 intfc_vel(k, 1) = intfc_vel(k, 1) + dt*intfc_dveldt(k, 1)
2657 mtn_pos(k,1:3,1) = mtn_pos(k,1:3,1) + dt*mtn_dposdt(k,1:3,1)
2658 mtn_vel(k,1:3,1) = mtn_vel(k,1:3,1) + dt*mtn_dveldt(k,1:3,1)
2659 gas_p(k, 1) = gas_p(k, 1) + dt*gas_dpdt(k, 1)
2660 gas_mv(k, 1) = gas_mv(k, 1) + dt*gas_dmvdt(k, 1)
2661 end do
2662
2663# 983 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2664#if defined(MFC_OpenACC)
2665# 983 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2666!$acc end parallel loop
2667# 983 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2668#elif defined(MFC_OpenMP)
2669# 983 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2670
2671# 983 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2672!$omp end target teams loop
2673# 983 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2674#endif
2675
2677 call s_write_void_evol(mytime)
2678 if (lag_params%write_bubbles_stats) call s_calculate_lag_bubble_stats()
2679
2680 if (lag_params%write_bubbles) then
2681
2682# 990 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2683#if defined(MFC_OpenACC)
2684# 990 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2685!$acc update host(gas_p, gas_mv, intfc_rad, intfc_vel)
2686# 990 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2687#elif defined(MFC_OpenMP)
2688# 990 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2689!$omp target update from(gas_p, gas_mv, intfc_rad, intfc_vel)
2690# 990 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2691#endif
2692 call s_write_lag_particles(mytime)
2693 end if
2694 else if (time_stepper == 2) then ! 2nd order TVD RK
2695 if (stage == 1) then
2696
2697# 995 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2698
2699# 995 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2700#if defined(MFC_OpenACC)
2701# 995 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2702!$acc parallel loop gang vector default(present) private(k)
2703# 995 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2704#elif defined(MFC_OpenMP)
2705# 995 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2706
2707# 995 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2708
2709# 995 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2710
2711# 995 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2712!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
2713# 995 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2714#endif
2715 do k = 1, nbubs
2716 ! u{1} = u{n} + dt * RHS{n}
2717 intfc_rad(k, 2) = intfc_rad(k, 1) + dt*intfc_draddt(k, 1)
2718 intfc_vel(k, 2) = intfc_vel(k, 1) + dt*intfc_dveldt(k, 1)
2719 mtn_pos(k,1:3,2) = mtn_pos(k,1:3,1) + dt*mtn_dposdt(k,1:3,1)
2720 mtn_vel(k,1:3,2) = mtn_vel(k,1:3,1) + dt*mtn_dveldt(k,1:3,1)
2721 gas_p(k, 2) = gas_p(k, 1) + dt*gas_dpdt(k, 1)
2722 gas_mv(k, 2) = gas_mv(k, 1) + dt*gas_dmvdt(k, 1)
2723 end do
2724
2725# 1005 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2726#if defined(MFC_OpenACC)
2727# 1005 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2728!$acc end parallel loop
2729# 1005 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2730#elif defined(MFC_OpenMP)
2731# 1005 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2732
2733# 1005 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2734!$omp end target teams loop
2735# 1005 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2736#endif
2737 else if (stage == 2) then
2738
2739# 1007 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2740
2741# 1007 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2742#if defined(MFC_OpenACC)
2743# 1007 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2744!$acc parallel loop gang vector default(present) private(k)
2745# 1007 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2746#elif defined(MFC_OpenMP)
2747# 1007 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2748
2749# 1007 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2750
2751# 1007 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2752
2753# 1007 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2754!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
2755# 1007 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2756#endif
2757 do k = 1, nbubs
2758 ! u{1} = u{n} + (1/2) * dt * (RHS{n} + RHS{1})
2759 intfc_rad(k, 1) = intfc_rad(k, 1) + dt*(intfc_draddt(k, 1) + intfc_draddt(k, 2))/2._wp
2760 intfc_vel(k, 1) = intfc_vel(k, 1) + dt*(intfc_dveldt(k, 1) + intfc_dveldt(k, 2))/2._wp
2761 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
2762 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
2763 gas_p(k, 1) = gas_p(k, 1) + dt*(gas_dpdt(k, 1) + gas_dpdt(k, 2))/2._wp
2764 gas_mv(k, 1) = gas_mv(k, 1) + dt*(gas_dmvdt(k, 1) + gas_dmvdt(k, 2))/2._wp
2765 end do
2766
2767# 1017 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2768#if defined(MFC_OpenACC)
2769# 1017 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2770!$acc end parallel loop
2771# 1017 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2772#elif defined(MFC_OpenMP)
2773# 1017 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2774
2775# 1017 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2776!$omp end target teams loop
2777# 1017 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2778#endif
2779
2781 call s_write_void_evol(mytime)
2782 if (lag_params%write_bubbles_stats) call s_calculate_lag_bubble_stats()
2783
2784 if (lag_params%write_bubbles) then
2785
2786# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2787#if defined(MFC_OpenACC)
2788# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2789!$acc update host(gas_p, gas_mv, intfc_rad, intfc_vel)
2790# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2791#elif defined(MFC_OpenMP)
2792# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2793!$omp target update from(gas_p, gas_mv, intfc_rad, intfc_vel)
2794# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2795#endif
2796 call s_write_lag_particles(mytime)
2797 end if
2798 end if
2799 else if (time_stepper == 3) then ! 3rd order TVD RK
2800 if (stage == 1) then
2801
2802# 1030 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2803
2804# 1030 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2805#if defined(MFC_OpenACC)
2806# 1030 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2807!$acc parallel loop gang vector default(present) private(k)
2808# 1030 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2809#elif defined(MFC_OpenMP)
2810# 1030 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2811
2812# 1030 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2813
2814# 1030 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2815
2816# 1030 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2817!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
2818# 1030 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2819#endif
2820 do k = 1, nbubs
2821 ! u{1} = u{n} + dt * RHS{n}
2822 intfc_rad(k, 2) = intfc_rad(k, 1) + dt*intfc_draddt(k, 1)
2823 intfc_vel(k, 2) = intfc_vel(k, 1) + dt*intfc_dveldt(k, 1)
2824 mtn_pos(k,1:3,2) = mtn_pos(k,1:3,1) + dt*mtn_dposdt(k,1:3,1)
2825 mtn_vel(k,1:3,2) = mtn_vel(k,1:3,1) + dt*mtn_dveldt(k,1:3,1)
2826 gas_p(k, 2) = gas_p(k, 1) + dt*gas_dpdt(k, 1)
2827 gas_mv(k, 2) = gas_mv(k, 1) + dt*gas_dmvdt(k, 1)
2828 end do
2829
2830# 1040 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2831#if defined(MFC_OpenACC)
2832# 1040 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2833!$acc end parallel loop
2834# 1040 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2835#elif defined(MFC_OpenMP)
2836# 1040 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2837
2838# 1040 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2839!$omp end target teams loop
2840# 1040 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2841#endif
2842 else if (stage == 2) then
2843
2844# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2845
2846# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2847#if defined(MFC_OpenACC)
2848# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2849!$acc parallel loop gang vector default(present) private(k)
2850# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2851#elif defined(MFC_OpenMP)
2852# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2853
2854# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2855
2856# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2857
2858# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2859!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
2860# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2861#endif
2862 do k = 1, nbubs
2863 ! u{2} = u{n} + (1/4) * dt * [RHS{n} + RHS{1}]
2864 intfc_rad(k, 2) = intfc_rad(k, 1) + dt*(intfc_draddt(k, 1) + intfc_draddt(k, 2))/4._wp
2865 intfc_vel(k, 2) = intfc_vel(k, 1) + dt*(intfc_dveldt(k, 1) + intfc_dveldt(k, 2))/4._wp
2866 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
2867 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
2868 gas_p(k, 2) = gas_p(k, 1) + dt*(gas_dpdt(k, 1) + gas_dpdt(k, 2))/4._wp
2869 gas_mv(k, 2) = gas_mv(k, 1) + dt*(gas_dmvdt(k, 1) + gas_dmvdt(k, 2))/4._wp
2870 end do
2871
2872# 1052 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2873#if defined(MFC_OpenACC)
2874# 1052 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2875!$acc end parallel loop
2876# 1052 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2877#elif defined(MFC_OpenMP)
2878# 1052 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2879
2880# 1052 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2881!$omp end target teams loop
2882# 1052 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2883#endif
2884 else if (stage == 3) then
2885
2886# 1054 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2887
2888# 1054 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2889#if defined(MFC_OpenACC)
2890# 1054 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2891!$acc parallel loop gang vector default(present) private(k)
2892# 1054 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2893#elif defined(MFC_OpenMP)
2894# 1054 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2895
2896# 1054 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2897
2898# 1054 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2899
2900# 1054 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2901!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
2902# 1054 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2903#endif
2904 do k = 1, nbubs
2905 ! u{n+1} = u{n} + (2/3) * dt * [(1/4)* RHS{n} + (1/4)* RHS{1} + RHS{2}]
2906 intfc_rad(k, 1) = intfc_rad(k, 1) + (2._wp/3._wp)*dt*(intfc_draddt(k, 1)/4._wp + intfc_draddt(k, &
2907 & 2)/4._wp + intfc_draddt(k, 3))
2908 intfc_vel(k, 1) = intfc_vel(k, 1) + (2._wp/3._wp)*dt*(intfc_dveldt(k, 1)/4._wp + intfc_dveldt(k, &
2909 & 2)/4._wp + intfc_dveldt(k, 3))
2910 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, &
2911 & 2)/4._wp + mtn_dposdt(k,1:3,3))
2912 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, &
2913 & 2)/4._wp + mtn_dveldt(k,1:3,3))
2914 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))
2915 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))
2916 end do
2917
2918# 1068 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2919#if defined(MFC_OpenACC)
2920# 1068 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2921!$acc end parallel loop
2922# 1068 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2923#elif defined(MFC_OpenMP)
2924# 1068 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2925
2926# 1068 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2927!$omp end target teams loop
2928# 1068 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2929#endif
2930
2932 call s_write_void_evol(mytime)
2933 if (lag_params%write_bubbles_stats) call s_calculate_lag_bubble_stats()
2934
2935 if (lag_params%write_bubbles) then
2936
2937# 1075 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2938#if defined(MFC_OpenACC)
2939# 1075 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2940!$acc update host(gas_p, gas_mv, gas_mg, intfc_rad, intfc_vel)
2941# 1075 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2942#elif defined(MFC_OpenMP)
2943# 1075 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2944!$omp target update from(gas_p, gas_mv, gas_mg, intfc_rad, intfc_vel)
2945# 1075 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2946#endif
2947 call s_write_lag_particles(mytime)
2948 end if
2949 end if
2950 end if
2951
2952 end subroutine s_update_lagrange_tdv_rk
2953
2954 !> Locate the cell index for a given physical position
2955 subroutine s_locate_cell(pos, cell, scoord)
2956
2957 real(wp), dimension(3), intent(in) :: pos
2958 real(wp), dimension(3), intent(out) :: scoord
2959 integer, dimension(3), intent(inout) :: cell
2960 integer :: i
2961
2962 do while (pos(1) < x_cb(cell(1) - 1))
2963 cell(1) = cell(1) - 1
2964 end do
2965
2966 do while (pos(1) > x_cb(cell(1)))
2967 cell(1) = cell(1) + 1
2968 end do
2969
2970 do while (pos(2) < y_cb(cell(2) - 1))
2971 cell(2) = cell(2) - 1
2972 end do
2973
2974 do while (pos(2) > y_cb(cell(2)))
2975 cell(2) = cell(2) + 1
2976 end do
2977
2978 if (p > 0) then
2979 do while (pos(3) < z_cb(cell(3) - 1))
2980 cell(3) = cell(3) - 1
2981 end do
2982 do while (pos(3) > z_cb(cell(3)))
2983 cell(3) = cell(3) + 1
2984 end do
2985 end if
2986
2987 ! 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
2988 ! coordinate of s is (the coordinate of the left boundary of the Floor(s)-th cell) + (s-(int(s))*(cell-width). In other
2989 ! words, the coordinate of the center of the cell is x_cc(cell).
2990
2991 ! coordinates in computational space
2992 scoord(1) = cell(1) + (pos(1) - x_cb(cell(1) - 1))/dx(cell(1))
2993 scoord(2) = cell(2) + (pos(2) - y_cb(cell(2) - 1))/dy(cell(2))
2994 scoord(3) = 0._wp
2995 if (p > 0) scoord(3) = cell(3) + (pos(3) - z_cb(cell(3) - 1))/dz(cell(3))
2996 cell(:) = int(scoord(:))
2997 do i = 1, num_dims
2998 if (scoord(i) < 0._wp) cell(i) = cell(i) - 1
2999 end do
3000
3001 end subroutine s_locate_cell
3002
3003 !> Transfer data into the temporal variables
3004 impure subroutine s_transfer_data_to_tmp()
3005
3006 integer :: k
3007
3008
3009# 1137 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3010
3011# 1137 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3012#if defined(MFC_OpenACC)
3013# 1137 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3014!$acc parallel loop gang vector default(present) private(k)
3015# 1137 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3016#elif defined(MFC_OpenMP)
3017# 1137 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3018
3019# 1137 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3020
3021# 1137 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3022
3023# 1137 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3024!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
3025# 1137 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3026#endif
3027 do k = 1, nbubs
3028 gas_p(k, 2) = gas_p(k, 1)
3029 gas_mv(k, 2) = gas_mv(k, 1)
3030 intfc_rad(k, 2) = intfc_rad(k, 1)
3031 intfc_vel(k, 2) = intfc_vel(k, 1)
3032 mtn_pos(k,1:3,2) = mtn_pos(k,1:3,1)
3033 mtn_posprev(k,1:3,2) = mtn_posprev(k,1:3,1)
3034 mtn_vel(k,1:3,2) = mtn_vel(k,1:3,1)
3035 mtn_s(k,1:3,2) = mtn_s(k,1:3,1)
3036 end do
3037
3038# 1148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3039#if defined(MFC_OpenACC)
3040# 1148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3041!$acc end parallel loop
3042# 1148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3043#elif defined(MFC_OpenMP)
3044# 1148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3045
3046# 1148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3047!$omp end target teams loop
3048# 1148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3049#endif
3050
3051 end subroutine s_transfer_data_to_tmp
3052
3053 !> Determine if a bubble position lies within the current MPI subdomain including ghost cells
3054 function particle_in_domain(pos_part)
3055
3056 logical :: particle_in_domain
3057 real(wp), dimension(3), intent(in) :: pos_part
3058
3059 ! 2D
3060
3061 if (p == 0 .and. cyl_coord .neqv. .true.) then
3062 ! Defining a virtual z-axis that has the same dimensions as y-axis defined in the input file
3063 particle_in_domain = ((pos_part(1) < x_cb(m + buff_size)) .and. (pos_part(1) >= x_cb(-buff_size - 1)) &
3064 & .and. (pos_part(2) < y_cb(n + buff_size)) .and. (pos_part(2) >= y_cb(-buff_size - 1)) &
3065 & .and. (pos_part(3) < lag_params%charwidth/2._wp) .and. (pos_part(3) >= &
3066 & -lag_params%charwidth/2._wp))
3067 else
3068 ! cyl_coord
3069 particle_in_domain = ((pos_part(1) < x_cb(m + buff_size)) .and. (pos_part(1) >= x_cb(-buff_size - 1)) &
3070 & .and. (abs(pos_part(2)) < y_cb(n + buff_size)) .and. (abs(pos_part(2)) >= max(y_cb(-buff_size &
3071 & - 1), 0._wp)))
3072 end if
3073
3074 ! 3D
3075 if (p > 0) then
3076 particle_in_domain = ((pos_part(1) < x_cb(m + buff_size)) .and. (pos_part(1) >= x_cb(-buff_size - 1)) &
3077 & .and. (pos_part(2) < y_cb(n + buff_size)) .and. (pos_part(2) >= y_cb(-buff_size - 1)) &
3078 & .and. (pos_part(3) < z_cb(p + buff_size)) .and. (pos_part(3) >= z_cb(-buff_size - 1)))
3079 end if
3080
3081 ! For symmetric and wall boundary condition
3082 if (any(bc_x%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/))) then
3083 particle_in_domain = (particle_in_domain .and. (pos_part(1) >= x_cb(-1)))
3084 end if
3085 if (any(bc_x%end == (/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(m)))
3087 end if
3088 if (any(bc_y%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/)) .and. (.not. cyl_coord)) then
3089 particle_in_domain = (particle_in_domain .and. (pos_part(2) >= y_cb(-1)))
3090 end if
3091 if (any(bc_y%end == (/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(n)))
3093 end if
3094 if (p > 0) then
3095 if (any(bc_z%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/))) then
3096 particle_in_domain = (particle_in_domain .and. (pos_part(3) >= z_cb(-1)))
3097 end if
3098 if (any(bc_z%end == (/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(p)))
3100 end if
3101 end if
3102
3103 end function particle_in_domain
3104
3105 !> Determine if a Lagrangian bubble is within the physical domain excluding ghost cells
3107
3109 real(wp), dimension(3), intent(in) :: pos_part
3110
3111 particle_in_domain_physical = ((pos_part(1) < x_cb(m)) .and. (pos_part(1) >= x_cb(-1)) .and. (pos_part(2) < y_cb(n)) &
3112 & .and. (pos_part(2) >= y_cb(-1)))
3113
3114 if (p > 0) then
3115 particle_in_domain_physical = (particle_in_domain_physical .and. (pos_part(3) < z_cb(p)) .and. (pos_part(3) &
3116 & >= z_cb(-1)))
3117 end if
3118
3119 end function particle_in_domain_physical
3120
3121 !> Compute the gradient of a scalar field using second-order central differences on a non-uniform grid
3122 subroutine s_gradient_dir(q, dq, dir)
3123
3124 real(stp), dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:), intent(inout) :: q, dq
3125 integer, intent(in) :: dir
3126 integer :: i, j, k
3127
3128 if (dir == 1) then
3129 ! Gradient in x dir.
3130
3131# 1229 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3132
3133# 1229 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3134#if defined(MFC_OpenACC)
3135# 1229 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3136!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
3137# 1229 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3138#elif defined(MFC_OpenMP)
3139# 1229 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3140
3141# 1229 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3142
3143# 1229 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3144
3145# 1229 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3146!$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)
3147# 1229 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3148#endif
3149 do k = 0, p
3150 do j = 0, n
3151 do i = 0, m
3152 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, &
3153 & k)*(dx(i) + dx(i + 1))
3154 dq(i, j, k) = dq(i, j, k)/((dx(i) + dx(i - 1))*(dx(i) + dx(i + 1)))
3155 end do
3156 end do
3157 end do
3158
3159# 1239 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3160#if defined(MFC_OpenACC)
3161# 1239 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3162!$acc end parallel loop
3163# 1239 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3164#elif defined(MFC_OpenMP)
3165# 1239 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3166
3167# 1239 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3168!$omp end target teams loop
3169# 1239 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3170#endif
3171 else if (dir == 2) then
3172 ! Gradient in y dir.
3173
3174# 1242 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3175
3176# 1242 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3177#if defined(MFC_OpenACC)
3178# 1242 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3179!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
3180# 1242 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3181#elif defined(MFC_OpenMP)
3182# 1242 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3183
3184# 1242 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3185
3186# 1242 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3187
3188# 1242 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3189!$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)
3190# 1242 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3191#endif
3192 do k = 0, p
3193 do j = 0, n
3194 do i = 0, m
3195 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, &
3196 & k)*(dy(j) + dy(j + 1))
3197 dq(i, j, k) = dq(i, j, k)/((dy(j) + dy(j - 1))*(dy(j) + dy(j + 1)))
3198 end do
3199 end do
3200 end do
3201
3202# 1252 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3203#if defined(MFC_OpenACC)
3204# 1252 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3205!$acc end parallel loop
3206# 1252 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3207#elif defined(MFC_OpenMP)
3208# 1252 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3209
3210# 1252 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3211!$omp end target teams loop
3212# 1252 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3213#endif
3214 else if (dir == 3) then
3215 ! Gradient in z dir.
3216
3217# 1255 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3218
3219# 1255 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3220#if defined(MFC_OpenACC)
3221# 1255 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3222!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
3223# 1255 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3224#elif defined(MFC_OpenMP)
3225# 1255 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3226
3227# 1255 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3228
3229# 1255 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3230
3231# 1255 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3232!$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)
3233# 1255 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3234#endif
3235 do k = 0, p
3236 do j = 0, n
3237 do i = 0, m
3238 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, &
3239 & k - 1)*(dz(k) + dz(k + 1))
3240 dq(i, j, k) = dq(i, j, k)/((dz(k) + dz(k - 1))*(dz(k) + dz(k + 1)))
3241 end do
3242 end do
3243 end do
3244
3245# 1265 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3246#if defined(MFC_OpenACC)
3247# 1265 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3248!$acc end parallel loop
3249# 1265 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3250#elif defined(MFC_OpenMP)
3251# 1265 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3252
3253# 1265 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3254!$omp end target teams loop
3255# 1265 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3256#endif
3257 end if
3258
3259 end subroutine s_gradient_dir
3260
3261 !> Write Lagrangian bubble state data at each time step
3262 impure subroutine s_write_lag_particles(qtime)
3263
3264 real(wp), intent(in) :: qtime
3265 integer :: k
3266 character(LEN=path_len + 2*name_len) :: file_loc
3267 logical :: file_exist
3268 character(LEN=25) :: fmt
3269
3270 write (file_loc, '(A,I0,A)') 'lag_bubble_evol_', proc_rank, '.dat'
3271 file_loc = trim(case_dir) // '/D/' // trim(file_loc)
3272 inquire (file=trim(file_loc), exist=file_exist)
3273
3274 if (precision == 1) then
3275 fmt = "(A16,A14,8A16)"
3276 else
3277 fmt = "(A24,A14,8A24)"
3278 end if
3279
3280 if (.not. file_exist) then
3281 open (11, file=trim(file_loc), form='formatted', position='rewind')
3282 write (11, fmt) 'currentTime', 'particleID', 'x', 'y', 'z', 'coreVaporMass', 'coreVaporConcentration', 'radius', &
3283 & 'interfaceVelocity', 'corePressure'
3284 else
3285 open (11, file=trim(file_loc), form='formatted', position='append')
3286 end if
3287
3288 if (precision == 1) then
3289 fmt = "(F16.8,I14,8F16.8)"
3290 else
3291 fmt = "(F24.16,I14,8F24.16)"
3292 end if
3293
3294 ! Cycle through list
3295 do k = 1, nbubs
3296 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, &
3297 & 1)/(gas_mv(k, 1) + gas_mg(k)), intfc_rad(k, 1), intfc_vel(k, 1), gas_p(k, 1)
3298 end do
3299
3300 close (11)
3301
3302 end subroutine s_write_lag_particles
3303
3304 !> Write void fraction statistics at each time step
3305 impure subroutine s_write_void_evol(qtime)
3306
3307 real(wp), intent(in) :: qtime
3308 real(wp) :: volcell, voltot
3309 real(wp) :: lag_void_max, lag_void_avg, lag_vol
3310 real(wp) :: void_max_glb, void_avg_glb, vol_glb
3311 integer :: i, j, k
3312 character(LEN=path_len + 2*name_len) :: file_loc
3313 logical :: file_exist
3314
3315 if (proc_rank == 0) then
3316 write (file_loc, '(A)') 'voidfraction.dat'
3317 file_loc = trim(case_dir) // '/D/' // trim(file_loc)
3318 inquire (file=trim(file_loc), exist=file_exist)
3319 if (.not. file_exist) then
3320 open (12, file=trim(file_loc), form='formatted', position='rewind')
3321 else
3322 open (12, file=trim(file_loc), form='formatted', position='append')
3323 end if
3324 end if
3325
3326 lag_void_max = 0._wp
3327 lag_void_avg = 0._wp
3328 lag_vol = 0._wp
3329
3330# 1338 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3331
3332# 1338 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3333#if defined(MFC_OpenACC)
3334# 1338 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3335!$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)
3336# 1338 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3337#elif defined(MFC_OpenMP)
3338# 1338 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3339
3340# 1338 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3341
3342# 1338 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3343
3344# 1338 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3345!$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)
3346# 1338 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3347#endif
3348# 1340 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3349 do k = 0, p
3350 do j = 0, n
3351 do i = 0, m
3352 lag_void_max = max(lag_void_max, 1._wp - q_beta(1)%sf(i, j, k))
3353 call s_get_char_vol(i, j, k, volcell)
3354 if ((1._wp - q_beta(1)%sf(i, j, k)) > 5.0d-11) then
3355 lag_void_avg = lag_void_avg + (1._wp - q_beta(1)%sf(i, j, k))*volcell
3356 lag_vol = lag_vol + volcell
3357 end if
3358 end do
3359 end do
3360 end do
3361
3362# 1352 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3363#if defined(MFC_OpenACC)
3364# 1352 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3365!$acc end parallel loop
3366# 1352 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3367#elif defined(MFC_OpenMP)
3368# 1352 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3369
3370# 1352 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3371!$omp end target teams loop
3372# 1352 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3373#endif
3374
3375#ifdef MFC_MPI
3376 if (num_procs > 1) then
3377 call s_mpi_allreduce_max(lag_void_max, void_max_glb)
3378 lag_void_max = void_max_glb
3379 call s_mpi_allreduce_sum(lag_vol, vol_glb)
3380 lag_vol = vol_glb
3381 call s_mpi_allreduce_sum(lag_void_avg, void_avg_glb)
3382 lag_void_avg = void_avg_glb
3383 end if
3384#endif
3385 voltot = lag_void_avg
3386 ! This voidavg value does not reflect the real void fraction in the cloud since the cell which does not have bubbles are not
3387 ! accounted
3388 if (lag_vol > 0._wp) lag_void_avg = lag_void_avg/lag_vol
3389
3390 if (proc_rank == 0) then
3391 write (12, '(6X,4e24.8)') qtime, lag_void_avg, lag_void_max, voltot
3392 close (12)
3393 end if
3394
3395 end subroutine s_write_void_evol
3396
3397 !> Write restart files for the Lagrangian bubble solver
3398 impure subroutine s_write_restart_lag_bubbles(t_step)
3399
3400 ! Generic string used to store the address of a particular file
3401 integer, intent(in) :: t_step
3402 character(LEN=path_len + 2*name_len) :: file_loc
3403 logical :: file_exist
3404 integer :: bub_id, tot_part
3405 integer :: i, k
3406
3407#ifdef MFC_MPI
3408 ! For Parallel I/O
3409 integer :: ifile, ierr
3410 integer, dimension(MPI_STATUS_SIZE) :: status
3411 integer(KIND=MPI_OFFSET_KIND) :: disp
3412 integer :: view
3413 integer, dimension(2) :: gsizes, lsizes, start_idx_part
3414 integer, allocatable :: proc_bubble_counts(:)
3415 real(wp), dimension(1:1,1:lag_io_vars) :: dummy
3416
3417 dummy = 0._wp
3418
3419 bub_id = 0._wp
3420 if (nbubs /= 0) then
3421 do k = 1, nbubs
3422 if (particle_in_domain_physical(mtn_pos(k,1:3,1))) then
3423 bub_id = bub_id + 1
3424 end if
3425 end do
3426 end if
3427
3428 if (.not. parallel_io) return
3429
3430 allocate (proc_bubble_counts(num_procs))
3431
3432 lsizes(1) = bub_id
3433 lsizes(2) = lag_io_vars
3434
3435 ! Total number of particles
3436 call mpi_allreduce(bub_id, tot_part, 1, mpi_integer, mpi_sum, mpi_comm_world, ierr)
3437
3438 call mpi_allgather(bub_id, 1, mpi_integer, proc_bubble_counts, 1, mpi_integer, mpi_comm_world, ierr)
3439
3440 ! Calculate starting index for this processor's particles
3441 call mpi_exscan(lsizes(1), start_idx_part(1), 1, mpi_integer, mpi_sum, mpi_comm_world, ierr)
3442 if (proc_rank == 0) start_idx_part(1) = 0
3443 start_idx_part(2) = 0
3444
3445 gsizes(1) = tot_part
3446 gsizes(2) = lag_io_vars
3447
3448 write (file_loc, '(A,I0,A)') 'lag_bubbles_', t_step, '.dat'
3449 file_loc = trim(case_dir) // '/restart_data' // trim(mpiiofs) // trim(file_loc)
3450
3451 ! Clean up existing file
3452 if (proc_rank == 0) then
3453 inquire (file=trim(file_loc), exist=file_exist)
3454 if (file_exist) then
3455 call mpi_file_delete(file_loc, mpi_info_int, ierr)
3456 end if
3457 end if
3458
3459 call mpi_barrier(mpi_comm_world, ierr)
3460
3461 if (proc_rank == 0) then
3462 call mpi_file_open(mpi_comm_self, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
3463
3464 ! Write header using MPI I/O for consistency
3465 call mpi_file_write(ifile, tot_part, 1, mpi_integer, status, ierr)
3466 call mpi_file_write(ifile, mytime, 1, mpi_p, status, ierr)
3467 call mpi_file_write(ifile, dt, 1, mpi_p, status, ierr)
3468 call mpi_file_write(ifile, num_procs, 1, mpi_integer, status, ierr)
3469 call mpi_file_write(ifile, proc_bubble_counts, num_procs, mpi_integer, status, ierr)
3470
3471 call mpi_file_close(ifile, ierr)
3472 end if
3473
3474 call mpi_barrier(mpi_comm_world, ierr)
3475
3476 if (bub_id > 0) then
3477 allocate (mpi_io_data_lag_bubbles(max(1, bub_id),1:lag_io_vars))
3478
3479 i = 1
3480 do k = 1, nbubs
3481 if (particle_in_domain_physical(mtn_pos(k,1:3,1))) then
3482 mpi_io_data_lag_bubbles(i, 1) = real(lag_id(k, 1))
3483 mpi_io_data_lag_bubbles(i,2:4) = mtn_pos(k,1:3,1)
3484 mpi_io_data_lag_bubbles(i,5:7) = mtn_posprev(k,1:3,1)
3485 mpi_io_data_lag_bubbles(i,8:10) = mtn_vel(k,1:3,1)
3486 mpi_io_data_lag_bubbles(i, 11) = intfc_rad(k, 1)
3487 mpi_io_data_lag_bubbles(i, 12) = intfc_vel(k, 1)
3488 mpi_io_data_lag_bubbles(i, 13) = bub_r0(k)
3489 mpi_io_data_lag_bubbles(i, 14) = rmax_stats(k)
3490 mpi_io_data_lag_bubbles(i, 15) = rmin_stats(k)
3491 mpi_io_data_lag_bubbles(i, 16) = bub_dphidt(k)
3492 mpi_io_data_lag_bubbles(i, 17) = gas_p(k, 1)
3493 mpi_io_data_lag_bubbles(i, 18) = gas_mv(k, 1)
3494 mpi_io_data_lag_bubbles(i, 19) = gas_mg(k)
3495 mpi_io_data_lag_bubbles(i, 20) = gas_betat(k)
3496 mpi_io_data_lag_bubbles(i, 21) = gas_betac(k)
3497 i = i + 1
3498 end if
3499 end do
3500
3501 call mpi_type_create_subarray(2, gsizes, lsizes, start_idx_part, mpi_order_fortran, mpi_p, view, ierr)
3502 call mpi_type_commit(view, ierr)
3503
3504 call mpi_file_open(mpi_comm_world, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
3505
3506 ! Skip header (written by rank 0)
3507 disp = int(sizeof(tot_part) + 2*sizeof(mytime) + sizeof(num_procs) + num_procs*sizeof(proc_bubble_counts(1)), &
3508 & mpi_offset_kind)
3509 call mpi_file_set_view(ifile, disp, mpi_p, view, 'native', mpi_info_int, ierr)
3510
3511 call mpi_file_write_all(ifile, mpi_io_data_lag_bubbles, lag_io_vars*bub_id, mpi_p, status, ierr)
3512
3513 call mpi_file_close(ifile, ierr)
3514
3515 deallocate (mpi_io_data_lag_bubbles)
3516 else
3517 call mpi_type_contiguous(0, mpi_p, view, ierr)
3518 call mpi_type_commit(view, ierr)
3519
3520 call mpi_file_open(mpi_comm_world, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
3521
3522 ! Skip header (written by rank 0)
3523 disp = int(sizeof(tot_part) + 2*sizeof(mytime) + sizeof(num_procs) + num_procs*sizeof(proc_bubble_counts(1)), &
3524 & mpi_offset_kind)
3525 call mpi_file_set_view(ifile, disp, mpi_p, view, 'native', mpi_info_int, ierr)
3526
3527 call mpi_file_write_all(ifile, dummy, 0, mpi_p, status, ierr)
3528
3529 call mpi_file_close(ifile, ierr)
3530 end if
3531
3532 deallocate (proc_bubble_counts)
3533#endif
3534
3535 end subroutine s_write_restart_lag_bubbles
3536
3537 !> Compute the maximum and minimum radius of each bubble
3539
3540 integer :: k
3541
3542
3543# 1521 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3544
3545# 1521 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3546#if defined(MFC_OpenACC)
3547# 1521 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3548!$acc parallel loop gang vector default(present) private(k) reduction(MAX:Rmax_glb) reduction(MIN:Rmin_glb) copy(Rmax_glb, Rmin_glb)
3549# 1521 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3550#elif defined(MFC_OpenMP)
3551# 1521 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3552
3553# 1521 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3554
3555# 1521 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3556
3557# 1521 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3558!$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)
3559# 1521 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3560#endif
3561# 1523 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3562 do k = 1, nbubs
3563 rmax_glb = max(rmax_glb, intfc_rad(k, 1)/bub_r0(k))
3564 rmin_glb = min(rmin_glb, intfc_rad(k, 1)/bub_r0(k))
3565 rmax_stats(k) = max(rmax_stats(k), intfc_rad(k, 1)/bub_r0(k))
3566 rmin_stats(k) = min(rmin_stats(k), intfc_rad(k, 1)/bub_r0(k))
3567 end do
3568
3569# 1529 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3570#if defined(MFC_OpenACC)
3571# 1529 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3572!$acc end parallel loop
3573# 1529 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3574#elif defined(MFC_OpenMP)
3575# 1529 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3576
3577# 1529 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3578!$omp end target teams loop
3579# 1529 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3580#endif
3581
3582 end subroutine s_calculate_lag_bubble_stats
3583
3584 !> Write the maximum and minimum radius statistics for each bubble
3585 impure subroutine s_write_lag_bubble_stats()
3586
3587 integer :: k
3588 character(LEN=path_len + 2*name_len) :: file_loc
3589 character(len=20) :: fmt
3590
3591 write (file_loc, '(A,I0,A)') 'stats_lag_bubbles_', proc_rank, '.dat'
3592 file_loc = trim(case_dir) // '/D/' // trim(file_loc)
3593
3594
3595# 1543 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3596#if defined(MFC_OpenACC)
3597# 1543 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3598!$acc update host(Rmax_glb, Rmin_glb)
3599# 1543 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3600#elif defined(MFC_OpenMP)
3601# 1543 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3602!$omp target update from(Rmax_glb, Rmin_glb)
3603# 1543 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3604#endif
3605
3606 if (precision == 1) then
3607 fmt = "(A10,A14,5A16)"
3608 else
3609 fmt = "(A10,A14,5A24)"
3610 end if
3611
3612 open (13, file=trim(file_loc), form='formatted', position='rewind')
3613 write (13, fmt) 'proc_rank', 'particleID', 'x', 'y', 'z', 'Rmax_glb', 'Rmin_glb'
3614
3615 if (precision == 1) then
3616 fmt = "(I10,I14,5F16.8)"
3617 else
3618 fmt = "(I10,I14,5F24.16)"
3619 end if
3620
3621 do k = 1, nbubs
3622 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), &
3623 & rmin_stats(k)
3624 end do
3625
3626 close (13)
3627
3628 end subroutine s_write_lag_bubble_stats
3629
3630 !> Remove a specific Lagrangian bubble when dt becomes too small
3631 impure subroutine s_remove_lag_bubble(bub_id)
3632
3633 integer, intent(in) :: bub_id
3634 integer :: i
3635
3636
3637# 1575 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3638#if defined(MFC_OpenACC)
3639# 1575 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3640!$acc loop seq
3641# 1575 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3642#elif defined(MFC_OpenMP)
3643# 1575 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3644
3645# 1575 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3646#endif
3647 do i = bub_id, nbubs - 1
3648 lag_id(i, 1) = lag_id(i + 1, 1)
3649 bub_r0(i) = bub_r0(i + 1)
3650 rmax_stats(i) = rmax_stats(i + 1)
3651 rmin_stats(i) = rmin_stats(i + 1)
3652 gas_mg(i) = gas_mg(i + 1)
3653 gas_betat(i) = gas_betat(i + 1)
3654 gas_betac(i) = gas_betac(i + 1)
3655 bub_dphidt(i) = bub_dphidt(i + 1)
3656 gas_p(i,1:2) = gas_p(i + 1,1:2)
3657 gas_mv(i,1:2) = gas_mv(i + 1,1:2)
3658 intfc_rad(i,1:2) = intfc_rad(i + 1,1:2)
3659 intfc_vel(i,1:2) = intfc_vel(i + 1,1:2)
3660 mtn_pos(i,1:3,1:2) = mtn_pos(i + 1,1:3,1:2)
3661 mtn_posprev(i,1:3,1:2) = mtn_posprev(i + 1,1:3,1:2)
3662 mtn_vel(i,1:3,1:2) = mtn_vel(i + 1,1:3,1:2)
3663 mtn_s(i,1:3,1:2) = mtn_s(i + 1,1:3,1:2)
3666 gas_dpdt(i,1:lag_num_ts) = gas_dpdt(i + 1,1:lag_num_ts)
3668 end do
3669
3670 nbubs = nbubs - 1
3671
3672# 1600 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3673#if defined(MFC_OpenACC)
3674# 1600 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3675!$acc update device(nBubs)
3676# 1600 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3677#elif defined(MFC_OpenMP)
3678# 1600 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3679!$omp target update to(nBubs)
3680# 1600 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3681#endif
3682
3683 end subroutine s_remove_lag_bubble
3684
3685 !> Finalize the Lagrangian bubble solver
3687
3688 integer :: i
3689
3690 do i = 1, q_beta_idx
3691#ifdef MFC_DEBUG
3692# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3693 block
3694# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3695 use iso_fortran_env, only: output_unit
3696# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3697
3698# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3699 print *, 'm_bubbles_EL.fpp:1610: ', '@:DEALLOCATE(q_beta(i)%sf)'
3700# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3701
3702# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3703 call flush (output_unit)
3704# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3705 end block
3706# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3707#endif
3708# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3709
3710# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3711#if defined(MFC_OpenACC)
3712# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3713!$acc exit data delete(q_beta(i)%sf)
3714# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3715#elif defined(MFC_OpenMP)
3716# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3717!$omp target exit data map(release:q_beta(i)%sf)
3718# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3719#endif
3720# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3721 deallocate (q_beta(i)%sf)
3722 end do
3723#ifdef MFC_DEBUG
3724# 1612 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3725 block
3726# 1612 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3727 use iso_fortran_env, only: output_unit
3728# 1612 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3729
3730# 1612 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3731 print *, 'm_bubbles_EL.fpp:1612: ', '@:DEALLOCATE(q_beta)'
3732# 1612 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3733
3734# 1612 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3735 call flush (output_unit)
3736# 1612 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3737 end block
3738# 1612 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3739#endif
3740# 1612 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3741
3742# 1612 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3743#if defined(MFC_OpenACC)
3744# 1612 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3745!$acc exit data delete(q_beta)
3746# 1612 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3747#elif defined(MFC_OpenMP)
3748# 1612 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3749!$omp target exit data map(release:q_beta)
3750# 1612 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3751#endif
3752# 1612 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3753 deallocate (q_beta)
3754
3755 ! Deallocating space
3756#ifdef MFC_DEBUG
3757# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3758 block
3759# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3760 use iso_fortran_env, only: output_unit
3761# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3762
3763# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3764 print *, 'm_bubbles_EL.fpp:1615: ', '@:DEALLOCATE(lag_id)'
3765# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3766
3767# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3768 call flush (output_unit)
3769# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3770 end block
3771# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3772#endif
3773# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3774
3775# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3776#if defined(MFC_OpenACC)
3777# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3778!$acc exit data delete(lag_id)
3779# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3780#elif defined(MFC_OpenMP)
3781# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3782!$omp target exit data map(release:lag_id)
3783# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3784#endif
3785# 1615 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3786 deallocate (lag_id)
3787#ifdef MFC_DEBUG
3788# 1616 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3789 block
3790# 1616 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3791 use iso_fortran_env, only: output_unit
3792# 1616 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3793
3794# 1616 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3795 print *, 'm_bubbles_EL.fpp:1616: ', '@:DEALLOCATE(bub_R0)'
3796# 1616 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3797
3798# 1616 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3799 call flush (output_unit)
3800# 1616 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3801 end block
3802# 1616 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3803#endif
3804# 1616 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3805
3806# 1616 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3807#if defined(MFC_OpenACC)
3808# 1616 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3809!$acc exit data delete(bub_R0)
3810# 1616 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3811#elif defined(MFC_OpenMP)
3812# 1616 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3813!$omp target exit data map(release:bub_R0)
3814# 1616 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3815#endif
3816# 1616 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3817 deallocate (bub_r0)
3818#ifdef MFC_DEBUG
3819# 1617 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3820 block
3821# 1617 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3822 use iso_fortran_env, only: output_unit
3823# 1617 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3824
3825# 1617 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3826 print *, 'm_bubbles_EL.fpp:1617: ', '@:DEALLOCATE(Rmax_stats)'
3827# 1617 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3828
3829# 1617 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3830 call flush (output_unit)
3831# 1617 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3832 end block
3833# 1617 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3834#endif
3835# 1617 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3836
3837# 1617 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3838#if defined(MFC_OpenACC)
3839# 1617 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3840!$acc exit data delete(Rmax_stats)
3841# 1617 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3842#elif defined(MFC_OpenMP)
3843# 1617 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3844!$omp target exit data map(release:Rmax_stats)
3845# 1617 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3846#endif
3847# 1617 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3848 deallocate (rmax_stats)
3849#ifdef MFC_DEBUG
3850# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3851 block
3852# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3853 use iso_fortran_env, only: output_unit
3854# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3855
3856# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3857 print *, 'm_bubbles_EL.fpp:1618: ', '@:DEALLOCATE(Rmin_stats)'
3858# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3859
3860# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3861 call flush (output_unit)
3862# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3863 end block
3864# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3865#endif
3866# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3867
3868# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3869#if defined(MFC_OpenACC)
3870# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3871!$acc exit data delete(Rmin_stats)
3872# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3873#elif defined(MFC_OpenMP)
3874# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3875!$omp target exit data map(release:Rmin_stats)
3876# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3877#endif
3878# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3879 deallocate (rmin_stats)
3880#ifdef MFC_DEBUG
3881# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3882 block
3883# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3884 use iso_fortran_env, only: output_unit
3885# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3886
3887# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3888 print *, 'm_bubbles_EL.fpp:1619: ', '@:DEALLOCATE(gas_mg)'
3889# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3890
3891# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3892 call flush (output_unit)
3893# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3894 end block
3895# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3896#endif
3897# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3898
3899# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3900#if defined(MFC_OpenACC)
3901# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3902!$acc exit data delete(gas_mg)
3903# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3904#elif defined(MFC_OpenMP)
3905# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3906!$omp target exit data map(release:gas_mg)
3907# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3908#endif
3909# 1619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3910 deallocate (gas_mg)
3911#ifdef MFC_DEBUG
3912# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3913 block
3914# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3915 use iso_fortran_env, only: output_unit
3916# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3917
3918# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3919 print *, 'm_bubbles_EL.fpp:1620: ', '@:DEALLOCATE(gas_betaT)'
3920# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3921
3922# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3923 call flush (output_unit)
3924# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3925 end block
3926# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3927#endif
3928# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3929
3930# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3931#if defined(MFC_OpenACC)
3932# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3933!$acc exit data delete(gas_betaT)
3934# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3935#elif defined(MFC_OpenMP)
3936# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3937!$omp target exit data map(release:gas_betaT)
3938# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3939#endif
3940# 1620 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3941 deallocate (gas_betat)
3942#ifdef MFC_DEBUG
3943# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3944 block
3945# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3946 use iso_fortran_env, only: output_unit
3947# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3948
3949# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3950 print *, 'm_bubbles_EL.fpp:1621: ', '@:DEALLOCATE(gas_betaC)'
3951# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3952
3953# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3954 call flush (output_unit)
3955# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3956 end block
3957# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3958#endif
3959# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3960
3961# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3962#if defined(MFC_OpenACC)
3963# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3964!$acc exit data delete(gas_betaC)
3965# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3966#elif defined(MFC_OpenMP)
3967# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3968!$omp target exit data map(release:gas_betaC)
3969# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3970#endif
3971# 1621 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3972 deallocate (gas_betac)
3973#ifdef MFC_DEBUG
3974# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3975 block
3976# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3977 use iso_fortran_env, only: output_unit
3978# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3979
3980# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3981 print *, 'm_bubbles_EL.fpp:1622: ', '@:DEALLOCATE(bub_dphidt)'
3982# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3983
3984# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3985 call flush (output_unit)
3986# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3987 end block
3988# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3989#endif
3990# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3991
3992# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3993#if defined(MFC_OpenACC)
3994# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3995!$acc exit data delete(bub_dphidt)
3996# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3997#elif defined(MFC_OpenMP)
3998# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3999!$omp target exit data map(release:bub_dphidt)
4000# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4001#endif
4002# 1622 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4003 deallocate (bub_dphidt)
4004#ifdef MFC_DEBUG
4005# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4006 block
4007# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4008 use iso_fortran_env, only: output_unit
4009# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4010
4011# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4012 print *, 'm_bubbles_EL.fpp:1623: ', '@:DEALLOCATE(gas_p)'
4013# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4014
4015# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4016 call flush (output_unit)
4017# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4018 end block
4019# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4020#endif
4021# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4022
4023# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4024#if defined(MFC_OpenACC)
4025# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4026!$acc exit data delete(gas_p)
4027# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4028#elif defined(MFC_OpenMP)
4029# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4030!$omp target exit data map(release:gas_p)
4031# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4032#endif
4033# 1623 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4034 deallocate (gas_p)
4035#ifdef MFC_DEBUG
4036# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4037 block
4038# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4039 use iso_fortran_env, only: output_unit
4040# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4041
4042# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4043 print *, 'm_bubbles_EL.fpp:1624: ', '@:DEALLOCATE(gas_mv)'
4044# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4045
4046# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4047 call flush (output_unit)
4048# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4049 end block
4050# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4051#endif
4052# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4053
4054# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4055#if defined(MFC_OpenACC)
4056# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4057!$acc exit data delete(gas_mv)
4058# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4059#elif defined(MFC_OpenMP)
4060# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4061!$omp target exit data map(release:gas_mv)
4062# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4063#endif
4064# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4065 deallocate (gas_mv)
4066#ifdef MFC_DEBUG
4067# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4068 block
4069# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4070 use iso_fortran_env, only: output_unit
4071# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4072
4073# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4074 print *, 'm_bubbles_EL.fpp:1625: ', '@:DEALLOCATE(intfc_rad)'
4075# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4076
4077# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4078 call flush (output_unit)
4079# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4080 end block
4081# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4082#endif
4083# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4084
4085# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4086#if defined(MFC_OpenACC)
4087# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4088!$acc exit data delete(intfc_rad)
4089# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4090#elif defined(MFC_OpenMP)
4091# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4092!$omp target exit data map(release:intfc_rad)
4093# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4094#endif
4095# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4096 deallocate (intfc_rad)
4097#ifdef MFC_DEBUG
4098# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4099 block
4100# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4101 use iso_fortran_env, only: output_unit
4102# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4103
4104# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4105 print *, 'm_bubbles_EL.fpp:1626: ', '@:DEALLOCATE(intfc_vel)'
4106# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4107
4108# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4109 call flush (output_unit)
4110# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4111 end block
4112# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4113#endif
4114# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4115
4116# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4117#if defined(MFC_OpenACC)
4118# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4119!$acc exit data delete(intfc_vel)
4120# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4121#elif defined(MFC_OpenMP)
4122# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4123!$omp target exit data map(release:intfc_vel)
4124# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4125#endif
4126# 1626 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4127 deallocate (intfc_vel)
4128#ifdef MFC_DEBUG
4129# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4130 block
4131# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4132 use iso_fortran_env, only: output_unit
4133# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4134
4135# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4136 print *, 'm_bubbles_EL.fpp:1627: ', '@:DEALLOCATE(mtn_pos)'
4137# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4138
4139# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4140 call flush (output_unit)
4141# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4142 end block
4143# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4144#endif
4145# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4146
4147# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4148#if defined(MFC_OpenACC)
4149# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4150!$acc exit data delete(mtn_pos)
4151# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4152#elif defined(MFC_OpenMP)
4153# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4154!$omp target exit data map(release:mtn_pos)
4155# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4156#endif
4157# 1627 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4158 deallocate (mtn_pos)
4159#ifdef MFC_DEBUG
4160# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4161 block
4162# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4163 use iso_fortran_env, only: output_unit
4164# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4165
4166# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4167 print *, 'm_bubbles_EL.fpp:1628: ', '@:DEALLOCATE(mtn_posPrev)'
4168# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4169
4170# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4171 call flush (output_unit)
4172# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4173 end block
4174# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4175#endif
4176# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4177
4178# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4179#if defined(MFC_OpenACC)
4180# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4181!$acc exit data delete(mtn_posPrev)
4182# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4183#elif defined(MFC_OpenMP)
4184# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4185!$omp target exit data map(release:mtn_posPrev)
4186# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4187#endif
4188# 1628 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4189 deallocate (mtn_posprev)
4190#ifdef MFC_DEBUG
4191# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4192 block
4193# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4194 use iso_fortran_env, only: output_unit
4195# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4196
4197# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4198 print *, 'm_bubbles_EL.fpp:1629: ', '@:DEALLOCATE(mtn_vel)'
4199# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4200
4201# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4202 call flush (output_unit)
4203# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4204 end block
4205# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4206#endif
4207# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4208
4209# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4210#if defined(MFC_OpenACC)
4211# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4212!$acc exit data delete(mtn_vel)
4213# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4214#elif defined(MFC_OpenMP)
4215# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4216!$omp target exit data map(release:mtn_vel)
4217# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4218#endif
4219# 1629 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4220 deallocate (mtn_vel)
4221#ifdef MFC_DEBUG
4222# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4223 block
4224# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4225 use iso_fortran_env, only: output_unit
4226# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4227
4228# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4229 print *, 'm_bubbles_EL.fpp:1630: ', '@:DEALLOCATE(mtn_s)'
4230# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4231
4232# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4233 call flush (output_unit)
4234# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4235 end block
4236# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4237#endif
4238# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4239
4240# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4241#if defined(MFC_OpenACC)
4242# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4243!$acc exit data delete(mtn_s)
4244# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4245#elif defined(MFC_OpenMP)
4246# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4247!$omp target exit data map(release:mtn_s)
4248# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4249#endif
4250# 1630 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4251 deallocate (mtn_s)
4252#ifdef MFC_DEBUG
4253# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4254 block
4255# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4256 use iso_fortran_env, only: output_unit
4257# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4258
4259# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4260 print *, 'm_bubbles_EL.fpp:1631: ', '@:DEALLOCATE(intfc_draddt)'
4261# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4262
4263# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4264 call flush (output_unit)
4265# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4266 end block
4267# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4268#endif
4269# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4270
4271# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4272#if defined(MFC_OpenACC)
4273# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4274!$acc exit data delete(intfc_draddt)
4275# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4276#elif defined(MFC_OpenMP)
4277# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4278!$omp target exit data map(release:intfc_draddt)
4279# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4280#endif
4281# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4282 deallocate (intfc_draddt)
4283#ifdef MFC_DEBUG
4284# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4285 block
4286# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4287 use iso_fortran_env, only: output_unit
4288# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4289
4290# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4291 print *, 'm_bubbles_EL.fpp:1632: ', '@:DEALLOCATE(intfc_dveldt)'
4292# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4293
4294# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4295 call flush (output_unit)
4296# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4297 end block
4298# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4299#endif
4300# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4301
4302# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4303#if defined(MFC_OpenACC)
4304# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4305!$acc exit data delete(intfc_dveldt)
4306# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4307#elif defined(MFC_OpenMP)
4308# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4309!$omp target exit data map(release:intfc_dveldt)
4310# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4311#endif
4312# 1632 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4313 deallocate (intfc_dveldt)
4314#ifdef MFC_DEBUG
4315# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4316 block
4317# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4318 use iso_fortran_env, only: output_unit
4319# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4320
4321# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4322 print *, 'm_bubbles_EL.fpp:1633: ', '@:DEALLOCATE(gas_dpdt)'
4323# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4324
4325# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4326 call flush (output_unit)
4327# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4328 end block
4329# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4330#endif
4331# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4332
4333# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4334#if defined(MFC_OpenACC)
4335# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4336!$acc exit data delete(gas_dpdt)
4337# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4338#elif defined(MFC_OpenMP)
4339# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4340!$omp target exit data map(release:gas_dpdt)
4341# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4342#endif
4343# 1633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4344 deallocate (gas_dpdt)
4345#ifdef MFC_DEBUG
4346# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4347 block
4348# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4349 use iso_fortran_env, only: output_unit
4350# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4351
4352# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4353 print *, 'm_bubbles_EL.fpp:1634: ', '@:DEALLOCATE(gas_dmvdt)'
4354# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4355
4356# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4357 call flush (output_unit)
4358# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4359 end block
4360# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4361#endif
4362# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4363
4364# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4365#if defined(MFC_OpenACC)
4366# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4367!$acc exit data delete(gas_dmvdt)
4368# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4369#elif defined(MFC_OpenMP)
4370# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4371!$omp target exit data map(release:gas_dmvdt)
4372# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4373#endif
4374# 1634 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4375 deallocate (gas_dmvdt)
4376#ifdef MFC_DEBUG
4377# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4378 block
4379# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4380 use iso_fortran_env, only: output_unit
4381# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4382
4383# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4384 print *, 'm_bubbles_EL.fpp:1635: ', '@:DEALLOCATE(mtn_dposdt)'
4385# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4386
4387# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4388 call flush (output_unit)
4389# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4390 end block
4391# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4392#endif
4393# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4394
4395# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4396#if defined(MFC_OpenACC)
4397# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4398!$acc exit data delete(mtn_dposdt)
4399# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4400#elif defined(MFC_OpenMP)
4401# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4402!$omp target exit data map(release:mtn_dposdt)
4403# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4404#endif
4405# 1635 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4406 deallocate (mtn_dposdt)
4407#ifdef MFC_DEBUG
4408# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4409 block
4410# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4411 use iso_fortran_env, only: output_unit
4412# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4413
4414# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4415 print *, 'm_bubbles_EL.fpp:1636: ', '@:DEALLOCATE(mtn_dveldt)'
4416# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4417
4418# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4419 call flush (output_unit)
4420# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4421 end block
4422# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4423#endif
4424# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4425
4426# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4427#if defined(MFC_OpenACC)
4428# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4429!$acc exit data delete(mtn_dveldt)
4430# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4431#elif defined(MFC_OpenMP)
4432# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4433!$omp target exit data map(release:mtn_dveldt)
4434# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4435#endif
4436# 1636 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4437 deallocate (mtn_dveldt)
4438
4439 end subroutine s_finalize_lagrangian_solver
4440
4441end 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.