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
33# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
34! New line at end of file is required for FYPP
35# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
36# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
37# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
38# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
40# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
42# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43
44# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
46# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
47
48# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49
50# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51
52# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53
54# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55
56# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57
58# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
59
60# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
61
62# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
63! New line at end of file is required for FYPP
64# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
65
66# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
67# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
68# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
69# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
70# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
71
72# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
73
74# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
75
76# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
77
78# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
79
80# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
81
82# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
83
84# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
85
86# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
87
88# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
89
90# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
91
92# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
93
94# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
95
96# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
97
98# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
99
100# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
101
102# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
103
104# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
105
106# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107
108# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109
110# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111
112# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113
114# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
115
116# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
117# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124
125# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128
129# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130
131# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132
133# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134
135# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136
137# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
138
139# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
140
141# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
142! New line at end of file is required for FYPP
143# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
144# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
145# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
146# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
147# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
148# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
149# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
150# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
151
152# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
153# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
154# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
155
156# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
157
158# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
159
160# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
161
162# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
163
164# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
165
166# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
167
168# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
169
170# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
171! New line at end of file is required for FYPP
172# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
173
174# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
175
176# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
177
178# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
179
180# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
181
182# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
183
184# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
185
186# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
187
188# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
189
190# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
191
192# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
193
194# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
195
196# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
197
198# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
199
200# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
201
202# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
203
204# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
205
206# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
207
208# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
209
210# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
211
212# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
213
214# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
215
216# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
217
218# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
219
220# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221
222# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
223
224# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
225
226# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
227
228# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
229! New line at end of file is required for FYPP
230# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
231
232! GPU parallel region (scalar reductions, maxval/minval)
233# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
234
235! GPU parallel loop over threads (most common GPU macro)
236# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
237
238! Required closing for GPU_PARALLEL_LOOP
239# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
240
241! Mark routine for device compilation
242# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
243
244! Declare device-resident data
245# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
246
247! Inner loop within a GPU parallel region
248# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
249
250! Scoped GPU data region
251# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
252
253! Host code with device pointers (for MPI with GPU buffers)
254# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
255
256! Allocate device memory (unscoped)
257# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
258
259! Free device memory
260# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
261
262! Atomic operation on device
263# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
264
265! End atomic capture block
266# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
267
268! Copy data between host and device
269# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
270
271! Synchronization barrier
272# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
273
274! Import GPU library module (openacc or omp_lib)
275# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
276
277! Emit code only for AMD compiler
278# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
279
280! Emit code for non-Cray compilers
281# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
282
283! Emit code only for Cray compiler
284# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
285
286! Emit code for non-NVIDIA compilers
287# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
288
289# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
290# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
291! New line at end of file is required for FYPP
292# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
293
294# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
295
296! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
297! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
298! example see misc/nvidia_uvm/bind.sh.
299# 57 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
300
301! Allocate and create GPU device memory
302# 77 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
303
304! Free GPU device memory and deallocate
305# 85 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
306
307! Cray-specific GPU pointer setup for vector fields
308# 109 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
309
310! Cray-specific GPU pointer setup for scalar fields
311# 125 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
312
313! Cray-specific GPU pointer setup for acoustic source spatials
314# 150 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
315
316# 156 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
317
318# 163 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
319! New line at end of file is required for FYPP
320# 6 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp" 2
321
322!> @brief Tracks Lagrangian bubbles and couples their dynamics to the Eulerian flow via volume averaging
324
326 use m_mpi_proxy
328 use m_bubbles
333 use m_sim_helpers
334 use m_helper
335 use m_mpi_common
336 use m_ibm
339
340 implicit none
341
342 ! (nBub)
343 integer, allocatable, dimension(:,:) :: lag_id !< Global and local IDs
344 real(wp), allocatable, dimension(:) :: bub_r0 !< Initial bubble radius
345 real(wp), allocatable, dimension(:) :: rmax_stats !< Maximum radius
346 real(wp), allocatable, dimension(:) :: rmin_stats !< Minimum radius
347
348# 32 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
349#if defined(MFC_OpenACC)
350# 32 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
351!$acc declare create(lag_id, bub_R0, Rmax_stats, Rmin_stats)
352# 32 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
353#elif defined(MFC_OpenMP)
354# 32 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
355!$omp declare target (lag_id, bub_R0, Rmax_stats, Rmin_stats)
356# 32 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
357#endif
358
359 real(wp), allocatable, dimension(:) :: gas_mg !< Bubble's gas mass
360 real(wp), allocatable, dimension(:) :: gas_betat !< heatflux model (Preston et al., 2007)
361 real(wp), allocatable, dimension(:) :: gas_betac !< massflux model (Preston et al., 2007)
362 real(wp), allocatable, dimension(:) :: bub_dphidt !< subgrid velocity potential (Maeda & Colonius, 2018)
363
364# 38 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
365#if defined(MFC_OpenACC)
366# 38 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
367!$acc declare create(gas_mg, gas_betaT, gas_betaC, bub_dphidt)
368# 38 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
369#elif defined(MFC_OpenMP)
370# 38 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
371!$omp declare target (gas_mg, gas_betaT, gas_betaC, bub_dphidt)
372# 38 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
373#endif
374
375 ! (nBub, 1 -> actual val or 2 -> temp val)
376 real(wp), allocatable, dimension(:,:) :: gas_p !< Pressure in the bubble
377 real(wp), allocatable, dimension(:,:) :: gas_mv !< Vapor mass in the bubble
378 real(wp), allocatable, dimension(:,:) :: intfc_rad !< Bubble radius
379 real(wp), allocatable, dimension(:,:) :: intfc_vel !< Velocity of the bubble interface
380
381# 45 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
382#if defined(MFC_OpenACC)
383# 45 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
384!$acc declare create(gas_p, gas_mv, intfc_rad, intfc_vel)
385# 45 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
386#elif defined(MFC_OpenMP)
387# 45 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
388!$omp declare target (gas_p, gas_mv, intfc_rad, intfc_vel)
389# 45 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
390#endif
391 ! (nBub, 1-> x or 2->y or 3 ->z, 1 -> actual or 2 -> temporal val)
392 real(wp), allocatable, dimension(:,:,:) :: mtn_pos !< Bubble's position
393 real(wp), allocatable, dimension(:,:,:) :: mtn_posprev !< Bubble's previous position
394 real(wp), allocatable, dimension(:,:,:) :: mtn_vel !< Bubble's velocity
395 real(wp), allocatable, dimension(:,:,:) :: mtn_s !< Bubble's computational cell position in real format
396
397# 51 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
398#if defined(MFC_OpenACC)
399# 51 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
400!$acc declare create(mtn_pos, mtn_posPrev, mtn_vel, mtn_s)
401# 51 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
402#elif defined(MFC_OpenMP)
403# 51 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
404!$omp declare target (mtn_pos, mtn_posPrev, mtn_vel, mtn_s)
405# 51 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
406#endif
407 ! (nBub, 1-> x or 2->y or 3 ->z, time-stage)
408 real(wp), allocatable, dimension(:,:) :: intfc_draddt !< Time derivative of bubble's radius
409 real(wp), allocatable, dimension(:,:) :: intfc_dveldt !< Time derivative of bubble's interface velocity
410 real(wp), allocatable, dimension(:,:) :: gas_dpdt !< Time derivative of gas pressure
411 real(wp), allocatable, dimension(:,:) :: gas_dmvdt !< Time derivative of the vapor mass in the bubble
412 real(wp), allocatable, dimension(:,:,:) :: mtn_dposdt !< Time derivative of the bubble's position
413 real(wp), allocatable, dimension(:,:,:) :: mtn_dveldt !< Time derivative of the bubble's velocity
414
415# 59 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
416#if defined(MFC_OpenACC)
417# 59 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
418!$acc declare create(intfc_draddt, intfc_dveldt, gas_dpdt, gas_dmvdt, mtn_dposdt, mtn_dveldt)
419# 59 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
420#elif defined(MFC_OpenMP)
421# 59 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
422!$omp declare target (intfc_draddt, intfc_dveldt, gas_dpdt, gas_dmvdt, mtn_dposdt, mtn_dveldt)
423# 59 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
424#endif
425
426 integer, private :: lag_num_ts !< Number of time stages in the time-stepping scheme
427
428# 62 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
429#if defined(MFC_OpenACC)
430# 62 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
431!$acc declare create(lag_num_ts)
432# 62 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
433#elif defined(MFC_OpenMP)
434# 62 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
435!$omp declare target (lag_num_ts)
436# 62 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
437#endif
438
439 real(wp) :: rmax_glb, rmin_glb !< Maximum and minimum bubbe size in the local domain
440 !> Projection of the lagrangian particles in the Eulerian framework
441 type(scalar_field), dimension(:), allocatable :: q_beta
442 type(scalar_field), dimension(:), allocatable :: kahan_comp !< Kahan compensation for q_beta accumulation
443 integer :: q_beta_idx !< Size of the q_beta vector field
444
445
446# 70 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
447#if defined(MFC_OpenACC)
448# 70 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
449!$acc declare create(Rmax_glb, Rmin_glb, q_beta, kahan_comp, q_beta_idx)
450# 70 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
451#elif defined(MFC_OpenMP)
452# 70 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
453!$omp declare target (Rmax_glb, Rmin_glb, q_beta, kahan_comp, q_beta_idx)
454# 70 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
455#endif
456
457 integer, parameter :: lag_evol_id = 11 ! File id for lag_bubbles_evol_*.dat
458 integer, parameter :: lag_stats_id = 12 ! File id for stats_lag_bubbles_*.dat
459 integer, parameter :: lag_void_id = 13 ! File id for voidfraction.dat
460 integer, allocatable, dimension(:) :: keep_bubble
461 integer, allocatable, dimension(:,:) :: wrap_bubble_loc, wrap_bubble_dir
462
463# 77 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
464#if defined(MFC_OpenACC)
465# 77 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
466!$acc declare create(keep_bubble)
467# 77 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
468#elif defined(MFC_OpenMP)
469# 77 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
470!$omp declare target (keep_bubble)
471# 77 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
472#endif
473
474# 78 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
475#if defined(MFC_OpenACC)
476# 78 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
477!$acc declare create(wrap_bubble_loc, wrap_bubble_dir)
478# 78 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
479#elif defined(MFC_OpenMP)
480# 78 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
481!$omp declare target (wrap_bubble_loc, wrap_bubble_dir)
482# 78 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
483#endif
484
485contains
486
487 !> Initializes the lagrangian subgrid bubble solver
488 impure subroutine s_initialize_bubbles_el_module(q_cons_vf, bc_type)
489
490 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
491 type(integer_field), dimension(1:num_dims,1:2), intent(in) :: bc_type
492 integer :: nbubs_glb, i
493
494 ! Setting number of time-stages for selected time-stepping scheme
495
496 lag_num_ts = time_stepper
497
498 ! Allocate space for the Eulerian fields needed to map the effect of the bubbles
499 if (lag_params%solver_approach == 1) then
500 ! One-way coupling
501 q_beta_idx = 3
502 else if (lag_params%solver_approach == 2) then
503 ! Two-way coupling
504 q_beta_idx = 4
505 if (p == 0) then
506 ! Subgrid noise model for 2D approximation
507 q_beta_idx = 6
508 end if
509 else
510 call s_mpi_abort('Please check the lag_params%solver_approach input')
511 end if
512
513 pcomm_coords(1)%beg = x_cb(-1)
514 pcomm_coords(1)%end = x_cb(m)
515
516# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
517#if defined(MFC_OpenACC)
518# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
519!$acc update device(pcomm_coords(1))
520# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
521#elif defined(MFC_OpenMP)
522# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
523!$omp target update to(pcomm_coords(1))
524# 110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
525#endif
526 if (n > 0) then
527 pcomm_coords(2)%beg = y_cb(-1)
528 pcomm_coords(2)%end = y_cb(n)
529
530# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
531#if defined(MFC_OpenACC)
532# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
533!$acc update device(pcomm_coords(2))
534# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
535#elif defined(MFC_OpenMP)
536# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
537!$omp target update to(pcomm_coords(2))
538# 114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
539#endif
540 if (p > 0) then
541 pcomm_coords(3)%beg = z_cb(-1)
542 pcomm_coords(3)%end = z_cb(p)
543
544# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
545#if defined(MFC_OpenACC)
546# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
547!$acc update device(pcomm_coords(3))
548# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
549#elif defined(MFC_OpenMP)
550# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
551!$omp target update to(pcomm_coords(3))
552# 118 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
553#endif
554 end if
555 end if
556
557
558# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
559#if defined(MFC_OpenACC)
560# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
561!$acc update device(lag_num_ts, q_beta_idx)
562# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
563#elif defined(MFC_OpenMP)
564# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
565!$omp target update to(lag_num_ts, q_beta_idx)
566# 122 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
567#endif
568
569#ifdef MFC_DEBUG
570# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
571 block
572# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
573 use iso_fortran_env, only: output_unit
574# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
575
576# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
577 print *, 'm_bubbles_EL.fpp:124: ', '@:ALLOCATE(q_beta(1:q_beta_idx))'
578# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
579
580# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
581 call flush (output_unit)
582# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
583 end block
584# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
585#endif
586# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
587 allocate (q_beta(1:q_beta_idx))
588# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
589
590# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
591
592# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
593#if defined(MFC_OpenACC)
594# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
595!$acc enter data create(q_beta)
596# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
597#elif defined(MFC_OpenMP)
598# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
599!$omp target enter data map(always,alloc:q_beta)
600# 124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
601#endif
602 if (lag_params%kahan_summation) then
603#ifdef MFC_DEBUG
604# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
605 block
606# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
607 use iso_fortran_env, only: output_unit
608# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
609
610# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
611 print *, 'm_bubbles_EL.fpp:126: ', '@:ALLOCATE(kahan_comp(1:q_beta_idx))'
612# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
613
614# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
615 call flush (output_unit)
616# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
617 end block
618# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
619#endif
620# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
621 allocate (kahan_comp(1:q_beta_idx))
622# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
623
624# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
625
626# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
627#if defined(MFC_OpenACC)
628# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
629!$acc enter data create(kahan_comp)
630# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
631#elif defined(MFC_OpenMP)
632# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
633!$omp target enter data map(always,alloc:kahan_comp)
634# 126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
635#endif
636 end if
637
638 do i = 1, q_beta_idx
639#ifdef MFC_DEBUG
640# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
641 block
642# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
643 use iso_fortran_env, only: output_unit
644# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
645
646# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
647 print *, 'm_bubbles_EL.fpp:130: ', '@:ALLOCATE(q_beta(i)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, idwbuff(3)%beg:idwbuff(3)%end))'
648# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
649
650# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
651 call flush (output_unit)
652# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
653 end block
654# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
655#endif
656# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
657 allocate (q_beta(i)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, idwbuff(3)%beg:idwbuff(3)%end))
658# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
659
660# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
661
662# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
663#if defined(MFC_OpenACC)
664# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
665!$acc enter data create(q_beta(i)%sf)
666# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
667#elif defined(MFC_OpenMP)
668# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
669!$omp target enter data map(always,alloc:q_beta(i)%sf)
670# 130 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
671#endif
672#ifdef _CRAYFTN
673# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
674 block
675# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
676#ifdef MFC_DEBUG
677# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
678 block
679# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
680 use iso_fortran_env, only: output_unit
681# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
682
683# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
684 print *, 'm_bubbles_EL.fpp:131: ', '@:ACC_SETUP_SFs(q_beta(i))'
685# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
686
687# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
688 call flush (output_unit)
689# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
690 end block
691# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
692#endif
693# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
694
695# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
696
697# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
698#if defined(MFC_OpenACC)
699# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
700!$acc enter data copyin(q_beta(i))
701# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
702#elif defined(MFC_OpenMP)
703# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
704!$omp target enter data map(to:q_beta(i))
705# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
706#endif
707# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
708 if (associated(q_beta(i)%sf)) then
709# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
710
711# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
712#if defined(MFC_OpenACC)
713# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
714!$acc enter data copyin(q_beta(i)%sf)
715# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
716#elif defined(MFC_OpenMP)
717# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
718!$omp target enter data map(to:q_beta(i)%sf)
719# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
720#endif
721# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
722 end if
723# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
724 end block
725# 131 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
726#endif
727 if (lag_params%kahan_summation) then
728#ifdef MFC_DEBUG
729# 133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
730 block
731# 133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
732 use iso_fortran_env, only: output_unit
733# 133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
734
735# 133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
736 print *, 'm_bubbles_EL.fpp:133: ', '@:ALLOCATE(kahan_comp(i)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, idwbuff(3)%beg:idwbuff(3)%end))'
737# 133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
738
739# 133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
740 call flush (output_unit)
741# 133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
742 end block
743# 133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
744#endif
745# 133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
746 allocate (kahan_comp(i)%sf(idwbuff(1)%beg:idwbuff(1)%end, idwbuff(2)%beg:idwbuff(2)%end, idwbuff(3)%beg:idwbuff(3)%end))
747# 133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
748
749# 133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
750
751# 133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
752#if defined(MFC_OpenACC)
753# 133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
754!$acc enter data create(kahan_comp(i)%sf)
755# 133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
756#elif defined(MFC_OpenMP)
757# 133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
758!$omp target enter data map(always,alloc:kahan_comp(i)%sf)
759# 133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
760#endif
761# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
762#ifdef _CRAYFTN
763# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
764 block
765# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
766#ifdef MFC_DEBUG
767# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
768 block
769# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
770 use iso_fortran_env, only: output_unit
771# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
772
773# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
774 print *, 'm_bubbles_EL.fpp:135: ', '@:ACC_SETUP_SFs(kahan_comp(i))'
775# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
776
777# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
778 call flush (output_unit)
779# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
780 end block
781# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
782#endif
783# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
784
785# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
786
787# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
788#if defined(MFC_OpenACC)
789# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
790!$acc enter data copyin(kahan_comp(i))
791# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
792#elif defined(MFC_OpenMP)
793# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
794!$omp target enter data map(to:kahan_comp(i))
795# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
796#endif
797# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
798 if (associated(kahan_comp(i)%sf)) then
799# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
800
801# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
802#if defined(MFC_OpenACC)
803# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
804!$acc enter data copyin(kahan_comp(i)%sf)
805# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
806#elif defined(MFC_OpenMP)
807# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
808!$omp target enter data map(to:kahan_comp(i)%sf)
809# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
810#endif
811# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
812 end if
813# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
814 end block
815# 135 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
816#endif
817 end if
818 end do
819
820 ! Allocating space for lagrangian variables
821 nbubs_glb = lag_params%nBubs_glb
822
823#ifdef MFC_DEBUG
824# 142 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
825 block
826# 142 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
827 use iso_fortran_env, only: output_unit
828# 142 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
829
830# 142 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
831 print *, 'm_bubbles_EL.fpp:142: ', '@:ALLOCATE(bub_R0(1:nBubs_glb))'
832# 142 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
833
834# 142 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
835 call flush (output_unit)
836# 142 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
837 end block
838# 142 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
839#endif
840# 142 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
841 allocate (bub_r0(1:nbubs_glb))
842# 142 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
843
844# 142 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
845
846# 142 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
847#if defined(MFC_OpenACC)
848# 142 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
849!$acc enter data create(bub_R0)
850# 142 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
851#elif defined(MFC_OpenMP)
852# 142 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
853!$omp target enter data map(always,alloc:bub_R0)
854# 142 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
855#endif
856#ifdef MFC_DEBUG
857# 143 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
858 block
859# 143 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
860 use iso_fortran_env, only: output_unit
861# 143 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
862
863# 143 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
864 print *, 'm_bubbles_EL.fpp:143: ', '@:ALLOCATE(Rmax_stats(1:nBubs_glb))'
865# 143 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
866
867# 143 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
868 call flush (output_unit)
869# 143 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
870 end block
871# 143 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
872#endif
873# 143 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
874 allocate (rmax_stats(1:nbubs_glb))
875# 143 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
876
877# 143 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
878
879# 143 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
880#if defined(MFC_OpenACC)
881# 143 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
882!$acc enter data create(Rmax_stats)
883# 143 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
884#elif defined(MFC_OpenMP)
885# 143 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
886!$omp target enter data map(always,alloc:Rmax_stats)
887# 143 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
888#endif
889#ifdef MFC_DEBUG
890# 144 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
891 block
892# 144 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
893 use iso_fortran_env, only: output_unit
894# 144 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
895
896# 144 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
897 print *, 'm_bubbles_EL.fpp:144: ', '@:ALLOCATE(Rmin_stats(1:nBubs_glb))'
898# 144 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
899
900# 144 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
901 call flush (output_unit)
902# 144 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
903 end block
904# 144 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
905#endif
906# 144 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
907 allocate (rmin_stats(1:nbubs_glb))
908# 144 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
909
910# 144 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
911
912# 144 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
913#if defined(MFC_OpenACC)
914# 144 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
915!$acc enter data create(Rmin_stats)
916# 144 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
917#elif defined(MFC_OpenMP)
918# 144 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
919!$omp target enter data map(always,alloc:Rmin_stats)
920# 144 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
921#endif
922#ifdef MFC_DEBUG
923# 145 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
924 block
925# 145 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
926 use iso_fortran_env, only: output_unit
927# 145 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
928
929# 145 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
930 print *, 'm_bubbles_EL.fpp:145: ', '@:ALLOCATE(gas_mg(1:nBubs_glb))'
931# 145 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
932
933# 145 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
934 call flush (output_unit)
935# 145 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
936 end block
937# 145 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
938#endif
939# 145 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
940 allocate (gas_mg(1:nbubs_glb))
941# 145 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
942
943# 145 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
944
945# 145 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
946#if defined(MFC_OpenACC)
947# 145 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
948!$acc enter data create(gas_mg)
949# 145 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
950#elif defined(MFC_OpenMP)
951# 145 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
952!$omp target enter data map(always,alloc:gas_mg)
953# 145 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
954#endif
955#ifdef MFC_DEBUG
956# 146 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
957 block
958# 146 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
959 use iso_fortran_env, only: output_unit
960# 146 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
961
962# 146 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
963 print *, 'm_bubbles_EL.fpp:146: ', '@:ALLOCATE(gas_betaT(1:nBubs_glb))'
964# 146 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
965
966# 146 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
967 call flush (output_unit)
968# 146 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
969 end block
970# 146 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
971#endif
972# 146 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
973 allocate (gas_betat(1:nbubs_glb))
974# 146 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
975
976# 146 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
977
978# 146 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
979#if defined(MFC_OpenACC)
980# 146 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
981!$acc enter data create(gas_betaT)
982# 146 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
983#elif defined(MFC_OpenMP)
984# 146 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
985!$omp target enter data map(always,alloc:gas_betaT)
986# 146 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
987#endif
988#ifdef MFC_DEBUG
989# 147 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
990 block
991# 147 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
992 use iso_fortran_env, only: output_unit
993# 147 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
994
995# 147 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
996 print *, 'm_bubbles_EL.fpp:147: ', '@:ALLOCATE(gas_betaC(1:nBubs_glb))'
997# 147 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
998
999# 147 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1000 call flush (output_unit)
1001# 147 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1002 end block
1003# 147 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1004#endif
1005# 147 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1006 allocate (gas_betac(1:nbubs_glb))
1007# 147 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1008
1009# 147 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1010
1011# 147 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1012#if defined(MFC_OpenACC)
1013# 147 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1014!$acc enter data create(gas_betaC)
1015# 147 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1016#elif defined(MFC_OpenMP)
1017# 147 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1018!$omp target enter data map(always,alloc:gas_betaC)
1019# 147 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1020#endif
1021#ifdef MFC_DEBUG
1022# 148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1023 block
1024# 148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1025 use iso_fortran_env, only: output_unit
1026# 148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1027
1028# 148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1029 print *, 'm_bubbles_EL.fpp:148: ', '@:ALLOCATE(bub_dphidt(1:nBubs_glb))'
1030# 148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1031
1032# 148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1033 call flush (output_unit)
1034# 148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1035 end block
1036# 148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1037#endif
1038# 148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1039 allocate (bub_dphidt(1:nbubs_glb))
1040# 148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1041
1042# 148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1043
1044# 148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1045#if defined(MFC_OpenACC)
1046# 148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1047!$acc enter data create(bub_dphidt)
1048# 148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1049#elif defined(MFC_OpenMP)
1050# 148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1051!$omp target enter data map(always,alloc:bub_dphidt)
1052# 148 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1053#endif
1054#ifdef MFC_DEBUG
1055# 149 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1056 block
1057# 149 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1058 use iso_fortran_env, only: output_unit
1059# 149 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1060
1061# 149 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1062 print *, 'm_bubbles_EL.fpp:149: ', '@:ALLOCATE(lag_id(1:nBubs_glb, 1:2))'
1063# 149 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1064
1065# 149 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1066 call flush (output_unit)
1067# 149 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1068 end block
1069# 149 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1070#endif
1071# 149 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1072 allocate (lag_id(1:nbubs_glb, 1:2))
1073# 149 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1074
1075# 149 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1076
1077# 149 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1078#if defined(MFC_OpenACC)
1079# 149 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1080!$acc enter data create(lag_id)
1081# 149 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1082#elif defined(MFC_OpenMP)
1083# 149 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1084!$omp target enter data map(always,alloc:lag_id)
1085# 149 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1086#endif
1087#ifdef MFC_DEBUG
1088# 150 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1089 block
1090# 150 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1091 use iso_fortran_env, only: output_unit
1092# 150 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1093
1094# 150 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1095 print *, 'm_bubbles_EL.fpp:150: ', '@:ALLOCATE(gas_p(1:nBubs_glb, 1:2))'
1096# 150 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1097
1098# 150 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1099 call flush (output_unit)
1100# 150 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1101 end block
1102# 150 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1103#endif
1104# 150 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1105 allocate (gas_p(1:nbubs_glb, 1:2))
1106# 150 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1107
1108# 150 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1109
1110# 150 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1111#if defined(MFC_OpenACC)
1112# 150 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1113!$acc enter data create(gas_p)
1114# 150 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1115#elif defined(MFC_OpenMP)
1116# 150 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1117!$omp target enter data map(always,alloc:gas_p)
1118# 150 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1119#endif
1120#ifdef MFC_DEBUG
1121# 151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1122 block
1123# 151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1124 use iso_fortran_env, only: output_unit
1125# 151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1126
1127# 151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1128 print *, 'm_bubbles_EL.fpp:151: ', '@:ALLOCATE(gas_mv(1:nBubs_glb, 1:2))'
1129# 151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1130
1131# 151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1132 call flush (output_unit)
1133# 151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1134 end block
1135# 151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1136#endif
1137# 151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1138 allocate (gas_mv(1:nbubs_glb, 1:2))
1139# 151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1140
1141# 151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1142
1143# 151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1144#if defined(MFC_OpenACC)
1145# 151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1146!$acc enter data create(gas_mv)
1147# 151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1148#elif defined(MFC_OpenMP)
1149# 151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1150!$omp target enter data map(always,alloc:gas_mv)
1151# 151 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1152#endif
1153#ifdef MFC_DEBUG
1154# 152 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1155 block
1156# 152 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1157 use iso_fortran_env, only: output_unit
1158# 152 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1159
1160# 152 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1161 print *, 'm_bubbles_EL.fpp:152: ', '@:ALLOCATE(intfc_rad(1:nBubs_glb, 1:2))'
1162# 152 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1163
1164# 152 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1165 call flush (output_unit)
1166# 152 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1167 end block
1168# 152 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1169#endif
1170# 152 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1171 allocate (intfc_rad(1:nbubs_glb, 1:2))
1172# 152 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1173
1174# 152 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1175
1176# 152 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1177#if defined(MFC_OpenACC)
1178# 152 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1179!$acc enter data create(intfc_rad)
1180# 152 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1181#elif defined(MFC_OpenMP)
1182# 152 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1183!$omp target enter data map(always,alloc:intfc_rad)
1184# 152 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1185#endif
1186#ifdef MFC_DEBUG
1187# 153 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1188 block
1189# 153 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1190 use iso_fortran_env, only: output_unit
1191# 153 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1192
1193# 153 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1194 print *, 'm_bubbles_EL.fpp:153: ', '@:ALLOCATE(intfc_vel(1:nBubs_glb, 1:2))'
1195# 153 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1196
1197# 153 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1198 call flush (output_unit)
1199# 153 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1200 end block
1201# 153 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1202#endif
1203# 153 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1204 allocate (intfc_vel(1:nbubs_glb, 1:2))
1205# 153 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1206
1207# 153 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1208
1209# 153 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1210#if defined(MFC_OpenACC)
1211# 153 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1212!$acc enter data create(intfc_vel)
1213# 153 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1214#elif defined(MFC_OpenMP)
1215# 153 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1216!$omp target enter data map(always,alloc:intfc_vel)
1217# 153 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1218#endif
1219#ifdef MFC_DEBUG
1220# 154 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1221 block
1222# 154 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1223 use iso_fortran_env, only: output_unit
1224# 154 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1225
1226# 154 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1227 print *, 'm_bubbles_EL.fpp:154: ', '@:ALLOCATE(mtn_pos(1:nBubs_glb, 1:3, 1:2))'
1228# 154 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1229
1230# 154 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1231 call flush (output_unit)
1232# 154 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1233 end block
1234# 154 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1235#endif
1236# 154 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1237 allocate (mtn_pos(1:nbubs_glb, 1:3, 1:2))
1238# 154 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1239
1240# 154 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1241
1242# 154 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1243#if defined(MFC_OpenACC)
1244# 154 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1245!$acc enter data create(mtn_pos)
1246# 154 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1247#elif defined(MFC_OpenMP)
1248# 154 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1249!$omp target enter data map(always,alloc:mtn_pos)
1250# 154 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1251#endif
1252#ifdef MFC_DEBUG
1253# 155 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1254 block
1255# 155 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1256 use iso_fortran_env, only: output_unit
1257# 155 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1258
1259# 155 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1260 print *, 'm_bubbles_EL.fpp:155: ', '@:ALLOCATE(mtn_posPrev(1:nBubs_glb, 1:3, 1:2))'
1261# 155 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1262
1263# 155 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1264 call flush (output_unit)
1265# 155 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1266 end block
1267# 155 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1268#endif
1269# 155 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1270 allocate (mtn_posprev(1:nbubs_glb, 1:3, 1:2))
1271# 155 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1272
1273# 155 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1274
1275# 155 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1276#if defined(MFC_OpenACC)
1277# 155 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1278!$acc enter data create(mtn_posPrev)
1279# 155 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1280#elif defined(MFC_OpenMP)
1281# 155 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1282!$omp target enter data map(always,alloc:mtn_posPrev)
1283# 155 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1284#endif
1285#ifdef MFC_DEBUG
1286# 156 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1287 block
1288# 156 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1289 use iso_fortran_env, only: output_unit
1290# 156 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1291
1292# 156 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1293 print *, 'm_bubbles_EL.fpp:156: ', '@:ALLOCATE(mtn_vel(1:nBubs_glb, 1:3, 1:2))'
1294# 156 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1295
1296# 156 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1297 call flush (output_unit)
1298# 156 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1299 end block
1300# 156 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1301#endif
1302# 156 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1303 allocate (mtn_vel(1:nbubs_glb, 1:3, 1:2))
1304# 156 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1305
1306# 156 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1307
1308# 156 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1309#if defined(MFC_OpenACC)
1310# 156 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1311!$acc enter data create(mtn_vel)
1312# 156 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1313#elif defined(MFC_OpenMP)
1314# 156 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1315!$omp target enter data map(always,alloc:mtn_vel)
1316# 156 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1317#endif
1318#ifdef MFC_DEBUG
1319# 157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1320 block
1321# 157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1322 use iso_fortran_env, only: output_unit
1323# 157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1324
1325# 157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1326 print *, 'm_bubbles_EL.fpp:157: ', '@:ALLOCATE(mtn_s(1:nBubs_glb, 1:3, 1:2))'
1327# 157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1328
1329# 157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1330 call flush (output_unit)
1331# 157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1332 end block
1333# 157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1334#endif
1335# 157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1336 allocate (mtn_s(1:nbubs_glb, 1:3, 1:2))
1337# 157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1338
1339# 157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1340
1341# 157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1342#if defined(MFC_OpenACC)
1343# 157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1344!$acc enter data create(mtn_s)
1345# 157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1346#elif defined(MFC_OpenMP)
1347# 157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1348!$omp target enter data map(always,alloc:mtn_s)
1349# 157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1350#endif
1351#ifdef MFC_DEBUG
1352# 158 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1353 block
1354# 158 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1355 use iso_fortran_env, only: output_unit
1356# 158 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1357
1358# 158 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1359 print *, 'm_bubbles_EL.fpp:158: ', '@:ALLOCATE(intfc_draddt(1:nBubs_glb, 1:lag_num_ts))'
1360# 158 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1361
1362# 158 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1363 call flush (output_unit)
1364# 158 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1365 end block
1366# 158 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1367#endif
1368# 158 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1369 allocate (intfc_draddt(1:nbubs_glb, 1:lag_num_ts))
1370# 158 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1371
1372# 158 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1373
1374# 158 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1375#if defined(MFC_OpenACC)
1376# 158 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1377!$acc enter data create(intfc_draddt)
1378# 158 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1379#elif defined(MFC_OpenMP)
1380# 158 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1381!$omp target enter data map(always,alloc:intfc_draddt)
1382# 158 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1383#endif
1384#ifdef MFC_DEBUG
1385# 159 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1386 block
1387# 159 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1388 use iso_fortran_env, only: output_unit
1389# 159 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1390
1391# 159 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1392 print *, 'm_bubbles_EL.fpp:159: ', '@:ALLOCATE(intfc_dveldt(1:nBubs_glb, 1:lag_num_ts))'
1393# 159 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1394
1395# 159 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1396 call flush (output_unit)
1397# 159 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1398 end block
1399# 159 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1400#endif
1401# 159 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1402 allocate (intfc_dveldt(1:nbubs_glb, 1:lag_num_ts))
1403# 159 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1404
1405# 159 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1406
1407# 159 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1408#if defined(MFC_OpenACC)
1409# 159 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1410!$acc enter data create(intfc_dveldt)
1411# 159 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1412#elif defined(MFC_OpenMP)
1413# 159 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1414!$omp target enter data map(always,alloc:intfc_dveldt)
1415# 159 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1416#endif
1417#ifdef MFC_DEBUG
1418# 160 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1419 block
1420# 160 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1421 use iso_fortran_env, only: output_unit
1422# 160 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1423
1424# 160 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1425 print *, 'm_bubbles_EL.fpp:160: ', '@:ALLOCATE(gas_dpdt(1:nBubs_glb, 1:lag_num_ts))'
1426# 160 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1427
1428# 160 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1429 call flush (output_unit)
1430# 160 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1431 end block
1432# 160 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1433#endif
1434# 160 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1435 allocate (gas_dpdt(1:nbubs_glb, 1:lag_num_ts))
1436# 160 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1437
1438# 160 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1439
1440# 160 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1441#if defined(MFC_OpenACC)
1442# 160 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1443!$acc enter data create(gas_dpdt)
1444# 160 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1445#elif defined(MFC_OpenMP)
1446# 160 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1447!$omp target enter data map(always,alloc:gas_dpdt)
1448# 160 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1449#endif
1450#ifdef MFC_DEBUG
1451# 161 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1452 block
1453# 161 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1454 use iso_fortran_env, only: output_unit
1455# 161 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1456
1457# 161 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1458 print *, 'm_bubbles_EL.fpp:161: ', '@:ALLOCATE(gas_dmvdt(1:nBubs_glb, 1:lag_num_ts))'
1459# 161 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1460
1461# 161 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1462 call flush (output_unit)
1463# 161 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1464 end block
1465# 161 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1466#endif
1467# 161 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1468 allocate (gas_dmvdt(1:nbubs_glb, 1:lag_num_ts))
1469# 161 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1470
1471# 161 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1472
1473# 161 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1474#if defined(MFC_OpenACC)
1475# 161 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1476!$acc enter data create(gas_dmvdt)
1477# 161 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1478#elif defined(MFC_OpenMP)
1479# 161 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1480!$omp target enter data map(always,alloc:gas_dmvdt)
1481# 161 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1482#endif
1483#ifdef MFC_DEBUG
1484# 162 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1485 block
1486# 162 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1487 use iso_fortran_env, only: output_unit
1488# 162 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1489
1490# 162 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1491 print *, 'm_bubbles_EL.fpp:162: ', '@:ALLOCATE(mtn_dposdt(1:nBubs_glb, 1:3, 1:lag_num_ts))'
1492# 162 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1493
1494# 162 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1495 call flush (output_unit)
1496# 162 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1497 end block
1498# 162 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1499#endif
1500# 162 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1501 allocate (mtn_dposdt(1:nbubs_glb, 1:3, 1:lag_num_ts))
1502# 162 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1503
1504# 162 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1505
1506# 162 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1507#if defined(MFC_OpenACC)
1508# 162 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1509!$acc enter data create(mtn_dposdt)
1510# 162 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1511#elif defined(MFC_OpenMP)
1512# 162 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1513!$omp target enter data map(always,alloc:mtn_dposdt)
1514# 162 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1515#endif
1516#ifdef MFC_DEBUG
1517# 163 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1518 block
1519# 163 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1520 use iso_fortran_env, only: output_unit
1521# 163 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1522
1523# 163 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1524 print *, 'm_bubbles_EL.fpp:163: ', '@:ALLOCATE(mtn_dveldt(1:nBubs_glb, 1:3, 1:lag_num_ts))'
1525# 163 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1526
1527# 163 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1528 call flush (output_unit)
1529# 163 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1530 end block
1531# 163 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1532#endif
1533# 163 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1534 allocate (mtn_dveldt(1:nbubs_glb, 1:3, 1:lag_num_ts))
1535# 163 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1536
1537# 163 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1538
1539# 163 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1540#if defined(MFC_OpenACC)
1541# 163 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1542!$acc enter data create(mtn_dveldt)
1543# 163 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1544#elif defined(MFC_OpenMP)
1545# 163 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1546!$omp target enter data map(always,alloc:mtn_dveldt)
1547# 163 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1548#endif
1549
1550#ifdef MFC_DEBUG
1551# 165 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1552 block
1553# 165 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1554 use iso_fortran_env, only: output_unit
1555# 165 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1556
1557# 165 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1558 print *, 'm_bubbles_EL.fpp:165: ', '@:ALLOCATE(keep_bubble(1:nBubs_glb))'
1559# 165 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1560
1561# 165 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1562 call flush (output_unit)
1563# 165 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1564 end block
1565# 165 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1566#endif
1567# 165 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1568 allocate (keep_bubble(1:nbubs_glb))
1569# 165 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1570
1571# 165 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1572
1573# 165 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1574#if defined(MFC_OpenACC)
1575# 165 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1576!$acc enter data create(keep_bubble)
1577# 165 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1578#elif defined(MFC_OpenMP)
1579# 165 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1580!$omp target enter data map(always,alloc:keep_bubble)
1581# 165 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1582#endif
1583#ifdef MFC_DEBUG
1584# 166 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1585 block
1586# 166 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1587 use iso_fortran_env, only: output_unit
1588# 166 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1589
1590# 166 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1591 print *, 'm_bubbles_EL.fpp:166: ', '@:ALLOCATE(wrap_bubble_loc(1:nBubs_glb, 1:num_dims), wrap_bubble_dir(1:nBubs_glb, 1:num_dims))'
1592# 166 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1593
1594# 166 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1595 call flush (output_unit)
1596# 166 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1597 end block
1598# 166 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1599#endif
1600# 166 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1601 allocate (wrap_bubble_loc(1:nbubs_glb, 1:num_dims), wrap_bubble_dir(1:nbubs_glb, 1:num_dims))
1602# 166 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1603
1604# 166 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1605
1606# 166 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1607
1608# 166 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1609#if defined(MFC_OpenACC)
1610# 166 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1611!$acc enter data create(wrap_bubble_loc, wrap_bubble_dir)
1612# 166 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1613#elif defined(MFC_OpenMP)
1614# 166 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1615!$omp target enter data map(always,alloc:wrap_bubble_loc, wrap_bubble_dir)
1616# 166 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1617#endif
1618
1619 if (adap_dt .and. f_is_default(adap_dt_tol)) adap_dt_tol = dflt_adap_dt_tol
1620
1621 if (num_procs > 1) call s_initialize_particles_mpi(lag_num_ts)
1622
1623 ! Starting bubbles
1624 if (lag_params%write_void_evol) call s_open_void_evol
1625 if (lag_params%write_bubbles) call s_open_lag_bubble_evol()
1626 if (lag_params%write_bubbles_stats) call s_open_lag_bubble_stats()
1627
1628 if (lag_params%vel_model > 0) then
1629 moving_lag_bubbles = .true.
1630 lag_pressure_force = lag_params%pressure_force
1631 lag_gravity_force = lag_params%gravity_force
1632 lag_vel_model = lag_params%vel_model
1633 lag_drag_model = lag_params%drag_model
1634 end if
1635
1636# 184 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1637#if defined(MFC_OpenACC)
1638# 184 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1639!$acc update device(moving_lag_bubbles, lag_pressure_force, lag_gravity_force, lag_vel_model, lag_drag_model)
1640# 184 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1641#elif defined(MFC_OpenMP)
1642# 184 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1643!$omp target update to(moving_lag_bubbles, lag_pressure_force, lag_gravity_force, lag_vel_model, lag_drag_model)
1644# 184 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1645#endif
1646
1647 if (lag_params%vel_model > 0 .and. lag_params%pressure_force) then
1648#ifdef MFC_DEBUG
1649# 187 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1650 block
1651# 187 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1652 use iso_fortran_env, only: output_unit
1653# 187 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1654
1655# 187 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1656 print *, 'm_bubbles_EL.fpp:187: ', '@:ALLOCATE(grad_p_x(0:m, 0:n, 0:p))'
1657# 187 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1658
1659# 187 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1660 call flush (output_unit)
1661# 187 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1662 end block
1663# 187 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1664#endif
1665# 187 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1666 allocate (grad_p_x(0:m, 0:n, 0:p))
1667# 187 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1668
1669# 187 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1670
1671# 187 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1672#if defined(MFC_OpenACC)
1673# 187 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1674!$acc enter data create(grad_p_x)
1675# 187 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1676#elif defined(MFC_OpenMP)
1677# 187 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1678!$omp target enter data map(always,alloc:grad_p_x)
1679# 187 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1680#endif
1681#ifdef MFC_DEBUG
1682# 188 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1683 block
1684# 188 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1685 use iso_fortran_env, only: output_unit
1686# 188 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1687
1688# 188 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1689 print *, 'm_bubbles_EL.fpp:188: ', '@:ALLOCATE(fd_coeff_x_pgrad(-fd_number:fd_number, 0:m))'
1690# 188 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1691
1692# 188 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1693 call flush (output_unit)
1694# 188 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1695 end block
1696# 188 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1697#endif
1698# 188 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1699 allocate (fd_coeff_x_pgrad(-fd_number:fd_number, 0:m))
1700# 188 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1701
1702# 188 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1703
1704# 188 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1705#if defined(MFC_OpenACC)
1706# 188 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1707!$acc enter data create(fd_coeff_x_pgrad)
1708# 188 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1709#elif defined(MFC_OpenMP)
1710# 188 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1711!$omp target enter data map(always,alloc:fd_coeff_x_pgrad)
1712# 188 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1713#endif
1714 call s_compute_finite_difference_coefficients(m, x_cc, fd_coeff_x_pgrad, buff_size, fd_number, fd_order)
1715
1716# 190 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1717#if defined(MFC_OpenACC)
1718# 190 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1719!$acc update device(fd_coeff_x_pgrad)
1720# 190 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1721#elif defined(MFC_OpenMP)
1722# 190 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1723!$omp target update to(fd_coeff_x_pgrad)
1724# 190 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1725#endif
1726 if (n > 0) then
1727#ifdef MFC_DEBUG
1728# 192 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1729 block
1730# 192 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1731 use iso_fortran_env, only: output_unit
1732# 192 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1733
1734# 192 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1735 print *, 'm_bubbles_EL.fpp:192: ', '@:ALLOCATE(grad_p_y(0:m, 0:n, 0:p))'
1736# 192 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1737
1738# 192 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1739 call flush (output_unit)
1740# 192 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1741 end block
1742# 192 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1743#endif
1744# 192 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1745 allocate (grad_p_y(0:m, 0:n, 0:p))
1746# 192 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1747
1748# 192 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1749
1750# 192 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1751#if defined(MFC_OpenACC)
1752# 192 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1753!$acc enter data create(grad_p_y)
1754# 192 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1755#elif defined(MFC_OpenMP)
1756# 192 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1757!$omp target enter data map(always,alloc:grad_p_y)
1758# 192 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1759#endif
1760#ifdef MFC_DEBUG
1761# 193 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1762 block
1763# 193 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1764 use iso_fortran_env, only: output_unit
1765# 193 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1766
1767# 193 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1768 print *, 'm_bubbles_EL.fpp:193: ', '@:ALLOCATE(fd_coeff_y_pgrad(-fd_number:fd_number, 0:n))'
1769# 193 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1770
1771# 193 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1772 call flush (output_unit)
1773# 193 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1774 end block
1775# 193 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1776#endif
1777# 193 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1778 allocate (fd_coeff_y_pgrad(-fd_number:fd_number, 0:n))
1779# 193 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1780
1781# 193 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1782
1783# 193 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1784#if defined(MFC_OpenACC)
1785# 193 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1786!$acc enter data create(fd_coeff_y_pgrad)
1787# 193 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1788#elif defined(MFC_OpenMP)
1789# 193 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1790!$omp target enter data map(always,alloc:fd_coeff_y_pgrad)
1791# 193 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1792#endif
1793 call s_compute_finite_difference_coefficients(n, y_cc, fd_coeff_y_pgrad, buff_size, fd_number, fd_order)
1794
1795# 195 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1796#if defined(MFC_OpenACC)
1797# 195 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1798!$acc update device(fd_coeff_y_pgrad)
1799# 195 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1800#elif defined(MFC_OpenMP)
1801# 195 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1802!$omp target update to(fd_coeff_y_pgrad)
1803# 195 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1804#endif
1805 end if
1806 if (p > 0) then
1807#ifdef MFC_DEBUG
1808# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1809 block
1810# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1811 use iso_fortran_env, only: output_unit
1812# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1813
1814# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1815 print *, 'm_bubbles_EL.fpp:198: ', '@:ALLOCATE(grad_p_z(0:m, 0:n, 0:p))'
1816# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1817
1818# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1819 call flush (output_unit)
1820# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1821 end block
1822# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1823#endif
1824# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1825 allocate (grad_p_z(0:m, 0:n, 0:p))
1826# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1827
1828# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1829
1830# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1831#if defined(MFC_OpenACC)
1832# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1833!$acc enter data create(grad_p_z)
1834# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1835#elif defined(MFC_OpenMP)
1836# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1837!$omp target enter data map(always,alloc:grad_p_z)
1838# 198 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1839#endif
1840#ifdef MFC_DEBUG
1841# 199 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1842 block
1843# 199 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1844 use iso_fortran_env, only: output_unit
1845# 199 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1846
1847# 199 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1848 print *, 'm_bubbles_EL.fpp:199: ', '@:ALLOCATE(fd_coeff_z_pgrad(-fd_number:fd_number, 0:p))'
1849# 199 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1850
1851# 199 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1852 call flush (output_unit)
1853# 199 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1854 end block
1855# 199 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1856#endif
1857# 199 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1858 allocate (fd_coeff_z_pgrad(-fd_number:fd_number, 0:p))
1859# 199 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1860
1861# 199 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1862
1863# 199 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1864#if defined(MFC_OpenACC)
1865# 199 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1866!$acc enter data create(fd_coeff_z_pgrad)
1867# 199 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1868#elif defined(MFC_OpenMP)
1869# 199 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1870!$omp target enter data map(always,alloc:fd_coeff_z_pgrad)
1871# 199 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1872#endif
1873 call s_compute_finite_difference_coefficients(p, z_cc, fd_coeff_z_pgrad, buff_size, fd_number, fd_order)
1874
1875# 201 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1876#if defined(MFC_OpenACC)
1877# 201 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1878!$acc update device(fd_coeff_z_pgrad)
1879# 201 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1880#elif defined(MFC_OpenMP)
1881# 201 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1882!$omp target update to(fd_coeff_z_pgrad)
1883# 201 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1884#endif
1885 end if
1886 end if
1887
1888#ifdef MFC_DEBUG
1889# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1890 block
1891# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1892 use iso_fortran_env, only: output_unit
1893# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1894
1895# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1896 print *, 'm_bubbles_EL.fpp:205: ', '@:ALLOCATE(cell_list_start(0:m, 0:n, 0:p))'
1897# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1898
1899# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1900 call flush (output_unit)
1901# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1902 end block
1903# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1904#endif
1905# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1906 allocate (cell_list_start(0:m, 0:n, 0:p))
1907# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1908
1909# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1910
1911# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1912#if defined(MFC_OpenACC)
1913# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1914!$acc enter data create(cell_list_start)
1915# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1916#elif defined(MFC_OpenMP)
1917# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1918!$omp target enter data map(always,alloc:cell_list_start)
1919# 205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1920#endif
1921#ifdef MFC_DEBUG
1922# 206 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1923 block
1924# 206 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1925 use iso_fortran_env, only: output_unit
1926# 206 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1927
1928# 206 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1929 print *, 'm_bubbles_EL.fpp:206: ', '@:ALLOCATE(cell_list_count(0:m, 0:n, 0:p))'
1930# 206 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1931
1932# 206 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1933 call flush (output_unit)
1934# 206 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1935 end block
1936# 206 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1937#endif
1938# 206 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1939 allocate (cell_list_count(0:m, 0:n, 0:p))
1940# 206 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1941
1942# 206 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1943
1944# 206 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1945#if defined(MFC_OpenACC)
1946# 206 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1947!$acc enter data create(cell_list_count)
1948# 206 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1949#elif defined(MFC_OpenMP)
1950# 206 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1951!$omp target enter data map(always,alloc:cell_list_count)
1952# 206 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1953#endif
1954#ifdef MFC_DEBUG
1955# 207 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1956 block
1957# 207 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1958 use iso_fortran_env, only: output_unit
1959# 207 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1960
1961# 207 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1962 print *, 'm_bubbles_EL.fpp:207: ', '@:ALLOCATE(cell_list_idx(1:lag_params%nBubs_glb))'
1963# 207 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1964
1965# 207 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1966 call flush (output_unit)
1967# 207 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1968 end block
1969# 207 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1970#endif
1971# 207 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1972 allocate (cell_list_idx(1:lag_params%nBubs_glb))
1973# 207 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1974
1975# 207 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1976
1977# 207 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1978#if defined(MFC_OpenACC)
1979# 207 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1980!$acc enter data create(cell_list_idx)
1981# 207 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1982#elif defined(MFC_OpenMP)
1983# 207 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1984!$omp target enter data map(always,alloc:cell_list_idx)
1985# 207 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
1986#endif
1987
1988 call s_read_input_bubbles(q_cons_vf, bc_type)
1989
1990 end subroutine s_initialize_bubbles_el_module
1991
1992 !> Read initial bubble data from input files
1993 impure subroutine s_read_input_bubbles(q_cons_vf, bc_type)
1994
1995 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
1996 type(integer_field), dimension(1:num_dims,1:2), intent(in) :: bc_type
1997 real(wp), dimension(8) :: inputbubble
1998 real(wp) :: qtime
1999 integer :: id, bub_id, save_count
2000 integer :: i, ios
2001 logical :: file_exist, indomain
2002 integer, dimension(3) :: cell
2003 character(LEN=path_len + 2*name_len) :: path_d_dir
2004
2005 ! Initialize number of particles
2006
2007 bub_id = 0
2008 id = 0
2009
2010 ! Read the input lag_bubble file or restart point
2011 if (cfl_dt) then
2012 save_count = n_start
2013 qtime = n_start*t_save
2014 else
2015 save_count = t_step_start
2016 qtime = t_step_start*dt
2017 end if
2018
2019 if (save_count == 0) then
2020 if (proc_rank == 0) print *, 'Reading lagrange bubbles input file.'
2021 call my_inquire(trim(lag_params%input_path), file_exist)
2022 if (file_exist) then
2023 open (94, file=trim(lag_params%input_path), form='formatted', iostat=ios)
2024 do while (ios == 0)
2025 read (94, *, iostat=ios) (inputbubble(i), i=1, 8)
2026 if (ios /= 0) cycle
2027 indomain = particle_in_domain_physical(inputbubble(1:3))
2028 id = id + 1
2029 if (id > lag_params%nBubs_glb .and. proc_rank == 0) then
2030 call s_mpi_abort("Current number of bubbles is larger than nBubs_glb")
2031 end if
2032 if (indomain) then
2033 bub_id = bub_id + 1
2034 call s_add_bubbles(inputbubble, q_cons_vf, bub_id)
2035 lag_id(bub_id, 1) = id ! global ID
2036 lag_id(bub_id, 2) = bub_id ! local ID
2037 n_el_bubs_loc = bub_id ! local number of bubbles
2038 end if
2039 end do
2040 close (94)
2041 else
2042 call s_mpi_abort("Initialize the lagrange bubbles in " // trim(lag_params%input_path))
2043 end if
2044 else
2045 if (proc_rank == 0) print *, 'Restarting lagrange bubbles at save_count: ', save_count
2046 call s_restart_bubbles(bub_id, save_count)
2047 end if
2048
2049 print *, " Lagrange bubbles running, in proc", proc_rank, "number:", bub_id, "/", id
2050
2051 if (num_procs > 1) then
2052 call s_mpi_reduce_int_sum(n_el_bubs_loc, n_el_bubs_glb)
2053 else
2054 n_el_bubs_glb = n_el_bubs_loc
2055 end if
2056
2057 if (proc_rank == 0) then
2058 if (n_el_bubs_glb == 0) call s_mpi_abort('No bubbles in the domain. Check ' // trim(lag_params%input_path))
2059 end if
2060
2061
2062# 282 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2063#if defined(MFC_OpenACC)
2064# 282 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2065!$acc update device(bubbles_lagrange, lag_params)
2066# 282 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2067#elif defined(MFC_OpenMP)
2068# 282 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2069!$omp target update to(bubbles_lagrange, lag_params)
2070# 282 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2071#endif
2072
2073
2074# 284 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2075#if defined(MFC_OpenACC)
2076# 284 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2077!$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, n_el_bubs_loc)
2078# 284 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2079#elif defined(MFC_OpenMP)
2080# 284 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2081!$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, n_el_bubs_loc)
2082# 284 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2083#endif
2084# 287 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2085
2086 rmax_glb = min(dflt_real, -dflt_real)
2087 rmin_glb = max(dflt_real, -dflt_real)
2088
2089# 290 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2090#if defined(MFC_OpenACC)
2091# 290 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2092!$acc update device(Rmax_glb, Rmin_glb)
2093# 290 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2094#elif defined(MFC_OpenMP)
2095# 290 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2096!$omp target update to(Rmax_glb, Rmin_glb)
2097# 290 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2098#endif
2099
2100
2101# 292 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2102#if defined(MFC_OpenACC)
2103# 292 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2104!$acc update device(dx, dy, dz, x_cb, x_cc, y_cb, y_cc, z_cb, z_cc)
2105# 292 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2106#elif defined(MFC_OpenMP)
2107# 292 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2108!$omp target update to(dx, dy, dz, x_cb, x_cc, y_cb, y_cc, z_cb, z_cc)
2109# 292 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2110#endif
2111
2112 ! Populate temporal variables
2114 call s_smear_voidfraction(bc_type)
2115
2116 if (save_count == 0) then
2117 ! Create ./D directory
2118 if (proc_rank == 0) then
2119 write (path_d_dir, '(A,I0,A,I0)') trim(case_dir) // '/D'
2120 call my_inquire(trim(path_d_dir), file_exist)
2121 if (.not. file_exist) call s_create_directory(trim(path_d_dir))
2122 end if
2123 call s_mpi_barrier()
2124 call s_write_restart_lag_bubbles(save_count) ! Needed for post_processing
2125 if (lag_params%write_void_evol) call s_write_void_evol(qtime)
2126 end if
2127
2128 if (lag_params%write_bubbles) call s_write_lag_bubble_evol(qtime)
2129
2130 end subroutine s_read_input_bubbles
2131
2132 !> Add a new bubble from input data for a fresh start
2133 impure subroutine s_add_bubbles(inputBubble, q_cons_vf, bub_id)
2134
2135 type(scalar_field), dimension(sys_size), intent(in) :: q_cons_vf
2136 real(wp), dimension(8), intent(in) :: inputbubble
2137 integer, intent(in) :: bub_id
2138 integer :: i
2139 real(wp) :: pliq, volparticle, concvap, totalmass, kparticle, cpparticle
2140 real(wp) :: omegan_local, peg, pet, rhol, qv, gamma, pi_inf, dynp
2141 integer, dimension(3) :: cell
2142 real(wp), dimension(2) :: re
2143 real(wp) :: massflag, heatflag, re_trans, im_trans
2144
2145 massflag = 0._wp
2146 heatflag = 0._wp
2147 if (lag_params%massTransfer_model) massflag = 1._wp
2148 if (lag_params%heatTransfer_model) heatflag = 1._wp
2149
2150 bub_r0(bub_id) = inputbubble(7)
2151 rmax_stats(bub_id) = min(dflt_real, -dflt_real)
2152 rmin_stats(bub_id) = max(dflt_real, -dflt_real)
2153 bub_dphidt(bub_id) = 0._wp
2154 intfc_rad(bub_id, 1) = inputbubble(7)
2155 intfc_vel(bub_id, 1) = inputbubble(8)
2156 mtn_pos(bub_id,1:3,1) = inputbubble(1:3)
2157 mtn_posprev(bub_id,1:3,1) = mtn_pos(bub_id,1:3,1)
2158 mtn_vel(bub_id,1:3,1) = inputbubble(4:6)
2159
2160 if (cyl_coord .and. p == 0) then
2161 mtn_pos(bub_id, 2, 1) = sqrt(mtn_pos(bub_id, 2, 1)**2._wp + mtn_pos(bub_id, 3, 1)**2._wp)
2162 ! Storing azimuthal angle (-Pi to Pi)) into the third coordinate variable
2163 mtn_pos(bub_id, 3, 1) = atan2(inputbubble(3), inputbubble(2))
2164 mtn_posprev(bub_id,1:3,1) = mtn_pos(bub_id,1:3,1)
2165 end if
2166
2167 cell = fd_number - buff_size
2168 call s_locate_cell(mtn_pos(bub_id,1:3,1), cell, mtn_s(bub_id,1:3,1))
2169
2170 ! Check if the bubble is located in the ghost cell of a symmetric, or wall boundary
2171 if ((any(bc_x%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, &
2172 & bc_no_slip_wall/)) .and. cell(1) < 0) .or. (any(bc_x%end == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, &
2173 & bc_no_slip_wall/)) .and. cell(1) > m) .or. (any(bc_y%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, &
2174 & bc_no_slip_wall/)) .and. cell(2) < 0) .or. (any(bc_y%end == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, &
2175 & bc_no_slip_wall/)) .and. cell(2) > n)) then
2176 call s_mpi_abort("Lagrange bubble is in the ghost cells of a symmetric or wall boundary.")
2177 end if
2178
2179 if (p > 0) then
2180 if ((any(bc_z%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, &
2181 & bc_no_slip_wall/)) .and. cell(3) < 0) .or. (any(bc_z%end == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, &
2182 & bc_no_slip_wall/)) .and. cell(3) > p)) then
2183 call s_mpi_abort("Lagrange bubble is in the ghost cells of a symmetric or wall boundary.")
2184 end if
2185 end if
2186
2187 call s_convert_to_mixture_variables(q_cons_vf, cell(1), cell(2), cell(3), rhol, gamma, pi_inf, qv, re)
2188 dynp = 0._wp
2189 do i = 1, num_dims
2190 dynp = dynp + 0.5_wp*q_cons_vf(eqn_idx%cont%end + i)%sf(cell(1), cell(2), cell(3))**2/rhol
2191 end do
2192 pliq = (q_cons_vf(eqn_idx%E)%sf(cell(1), cell(2), cell(3)) - dynp - pi_inf)/gamma
2193 if (pliq < 0) print *, "Negative pressure", proc_rank, q_cons_vf(eqn_idx%E)%sf(cell(1), cell(2), cell(3)), pi_inf, gamma, &
2194 & pliq, cell, dynp
2195
2196 ! Initial particle pressure
2197 gas_p(bub_id, 1) = pliq + 2._wp*(1._wp/web)/bub_r0(bub_id)
2198 if (.not. f_approx_equal((1._wp/web), 0._wp)) then
2199 pref = gas_p(bub_id, 1)
2200 end if
2201
2202 ! Initial particle mass
2203 volparticle = 4._wp/3._wp*pi*bub_r0(bub_id)**3._wp ! volume
2204 gas_mv(bub_id, 1) = pv*volparticle*(1._wp/(r_v*tw))*(massflag) ! vapermass
2205 gas_mg(bub_id) = (gas_p(bub_id, 1) - pv*(massflag))*volparticle*(1._wp/(r_g*tw)) ! gasmass
2206 if (gas_mg(bub_id) <= 0._wp) then
2207 call s_mpi_abort("The initial mass of gas inside the bubble is negative. Check the initial conditions.")
2208 end if
2209 totalmass = gas_mg(bub_id) + gas_mv(bub_id, 1) ! totalmass
2210
2211 ! Bubble natural frequency
2212 concvap = gas_mv(bub_id, 1)/(gas_mv(bub_id, 1) + gas_mg(bub_id))
2213 omegan_local = (3._wp*(gas_p(bub_id, 1) - pv*(massflag)) + 4._wp*(1._wp/web)/bub_r0(bub_id))/rhol
2214 if (pv*(massflag) > gas_p(bub_id, 1)) then
2215 call s_mpi_abort("Lagrange bubble initially located in a region with pressure below the vapor pressure.")
2216 end if
2217 omegan_local = sqrt(omegan_local/bub_r0(bub_id)**2._wp)
2218
2219 cpparticle = concvap*cp_v + (1._wp - concvap)*cp_g
2220 kparticle = concvap*k_vl + (1._wp - concvap)*k_gl
2221
2222 ! Mass and heat transfer coefficients (based on Preston 2007)
2223 pet = totalmass/volparticle*cpparticle*bub_r0(bub_id)**2._wp*omegan_local/kparticle
2224 call s_transcoeff(1._wp, pet, re_trans, im_trans)
2225 gas_betat(bub_id) = re_trans*(heatflag)*kparticle
2226
2227 peg = bub_r0(bub_id)**2._wp*omegan_local/vd
2228 call s_transcoeff(1._wp, peg, re_trans, im_trans)
2229 gas_betac(bub_id) = re_trans*(massflag)*vd
2230
2231 if (gas_mg(bub_id) <= 0._wp) then
2232 call s_mpi_abort("Negative gas mass in the bubble, check if the bubble is in the domain.")
2233 end if
2234
2235 end subroutine s_add_bubbles
2236
2237 !> Restore bubble data from a restart file
2238 impure subroutine s_restart_bubbles(bub_id, save_count)
2239
2240 integer, intent(inout) :: bub_id, save_count
2241 character(LEN=path_len + 2*name_len) :: file_loc
2242 real(wp) :: file_time, file_dt
2243 integer :: file_num_procs, file_tot_part, tot_part
2244
2245#ifdef MFC_MPI
2246 real(wp), dimension(20) :: inputvals
2247 integer, dimension(MPI_STATUS_SIZE) :: status
2248 integer(kind=MPI_OFFSET_KIND) :: disp
2249 integer :: view
2250 integer, dimension(3) :: cell
2251 logical :: indomain, particle_file, file_exist
2252 integer, dimension(2) :: gsizes, lsizes, start_idx_part
2253 integer :: ifile, ierr, tot_data, id
2254 integer :: i
2255 integer, dimension(:), allocatable :: proc_bubble_counts
2256 real(wp), dimension(1:1,1:lag_io_vars) :: dummy
2257
2258 dummy = 0._wp
2259
2260 ! Construct file path
2261 write (file_loc, '(A,I0,A)') 'lag_bubbles_', save_count, '.dat'
2262 file_loc = trim(case_dir) // '/restart_data' // trim(mpiiofs) // trim(file_loc)
2263
2264 ! Check if file exists
2265 inquire (file=trim(file_loc), exist=file_exist)
2266 if (.not. file_exist) then
2267 call s_mpi_abort('Restart file ' // trim(file_loc) // ' does not exist!')
2268 end if
2269
2270 if (.not. parallel_io) return
2271
2272 if (proc_rank == 0) then
2273 call mpi_file_open(mpi_comm_self, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
2274
2275 call mpi_file_read(ifile, file_tot_part, 1, mpi_integer, status, ierr)
2276 call mpi_file_read(ifile, file_time, 1, mpi_p, status, ierr)
2277 call mpi_file_read(ifile, file_dt, 1, mpi_p, status, ierr)
2278 call mpi_file_read(ifile, file_num_procs, 1, mpi_integer, status, ierr)
2279
2280 call mpi_file_close(ifile, ierr)
2281 end if
2282
2283 call mpi_bcast(file_tot_part, 1, mpi_integer, 0, mpi_comm_world, ierr)
2284 call mpi_bcast(file_time, 1, mpi_p, 0, mpi_comm_world, ierr)
2285 call mpi_bcast(file_dt, 1, mpi_p, 0, mpi_comm_world, ierr)
2286 call mpi_bcast(file_num_procs, 1, mpi_integer, 0, mpi_comm_world, ierr)
2287
2288 allocate (proc_bubble_counts(file_num_procs))
2289
2290 if (proc_rank == 0) then
2291 call mpi_file_open(mpi_comm_self, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
2292
2293 ! Skip to processor counts position
2294 disp = int(sizeof(file_tot_part) + 2*sizeof(file_time) + sizeof(file_num_procs), mpi_offset_kind)
2295 call mpi_file_seek(ifile, disp, mpi_seek_set, ierr)
2296 call mpi_file_read(ifile, proc_bubble_counts, file_num_procs, mpi_integer, status, ierr)
2297
2298 call mpi_file_close(ifile, ierr)
2299 end if
2300
2301 call mpi_bcast(proc_bubble_counts, file_num_procs, mpi_integer, 0, mpi_comm_world, ierr)
2302
2303 ! Set time variables from file
2304 mytime = file_time
2305 dt = file_dt
2306
2307 bub_id = proc_bubble_counts(proc_rank + 1)
2308
2309 start_idx_part(1) = 0
2310 do i = 1, proc_rank
2311 start_idx_part(1) = start_idx_part(1) + proc_bubble_counts(i)
2312 end do
2313
2314 start_idx_part(2) = 0
2315 lsizes(1) = bub_id
2316 lsizes(2) = lag_io_vars
2317
2318 gsizes(1) = file_tot_part
2319 gsizes(2) = lag_io_vars
2320
2321 if (bub_id > 0) then
2322 allocate (mpi_io_data_lag_bubbles(bub_id,1:lag_io_vars))
2323
2324 call mpi_type_create_subarray(2, gsizes, lsizes, start_idx_part, mpi_order_fortran, mpi_p, view, ierr)
2325 call mpi_type_commit(view, ierr)
2326
2327 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
2328
2329 ! Skip extended header
2330 disp = int(sizeof(file_tot_part) + 2*sizeof(file_time) + sizeof(file_num_procs) &
2331 & + file_num_procs*sizeof(proc_bubble_counts(1)), mpi_offset_kind)
2332 call mpi_file_set_view(ifile, disp, mpi_p, view, 'native', mpi_info_int, ierr)
2333
2334 call mpi_file_read_all(ifile, mpi_io_data_lag_bubbles, lag_io_vars*bub_id, mpi_p, status, ierr)
2335
2336 call mpi_file_close(ifile, ierr)
2337 call mpi_type_free(view, ierr)
2338
2339 n_el_bubs_loc = bub_id
2340
2341 do i = 1, bub_id
2342 lag_id(i, 1) = int(mpi_io_data_lag_bubbles(i, 1))
2343 mtn_pos(i,1:3,1) = mpi_io_data_lag_bubbles(i,2:4)
2344 mtn_posprev(i,1:3,1) = mpi_io_data_lag_bubbles(i,5:7)
2345 mtn_vel(i,1:3,1) = mpi_io_data_lag_bubbles(i,8:10)
2346 intfc_rad(i, 1) = mpi_io_data_lag_bubbles(i, 11)
2347 intfc_vel(i, 1) = mpi_io_data_lag_bubbles(i, 12)
2348 bub_r0(i) = mpi_io_data_lag_bubbles(i, 13)
2349 rmax_stats(i) = mpi_io_data_lag_bubbles(i, 14)
2350 rmin_stats(i) = mpi_io_data_lag_bubbles(i, 15)
2351 bub_dphidt(i) = mpi_io_data_lag_bubbles(i, 16)
2352 gas_p(i, 1) = mpi_io_data_lag_bubbles(i, 17)
2353 gas_mv(i, 1) = mpi_io_data_lag_bubbles(i, 18)
2354 gas_mg(i) = mpi_io_data_lag_bubbles(i, 19)
2355 gas_betat(i) = mpi_io_data_lag_bubbles(i, 20)
2356 gas_betac(i) = mpi_io_data_lag_bubbles(i, 21)
2357 cell = -buff_size
2358 call s_locate_cell(mtn_pos(i,1:3,1), cell, mtn_s(i,1:3,1))
2359 end do
2360
2361 deallocate (mpi_io_data_lag_bubbles)
2362 else
2363 n_el_bubs_loc = 0
2364
2365 call mpi_type_contiguous(0, mpi_p, view, ierr)
2366 call mpi_type_commit(view, ierr)
2367
2368 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
2369
2370 ! Skip extended header
2371 disp = int(sizeof(file_tot_part) + 2*sizeof(file_time) + sizeof(file_num_procs) &
2372 & + file_num_procs*sizeof(proc_bubble_counts(1)), mpi_offset_kind)
2373 call mpi_file_set_view(ifile, disp, mpi_p, view, 'native', mpi_info_int, ierr)
2374
2375 call mpi_file_read_all(ifile, dummy, 0, mpi_p, status, ierr)
2376
2377 call mpi_file_close(ifile, ierr)
2378 call mpi_type_free(view, ierr)
2379 end if
2380
2381 if (proc_rank == 0) then
2382 write (*, '(A,I0,A,I0)') 'Read ', file_tot_part, ' particles from restart file at t_step = ', save_count
2383 write (*, '(A,E15.7,A,E15.7)') 'Restart time = ', mytime, ', dt = ', dt
2384 end if
2385
2386 deallocate (proc_bubble_counts)
2387#endif
2388
2389 end subroutine s_restart_bubbles
2390
2391 !> Contains the bubble dynamics subroutines.
2392 subroutine s_compute_bubble_el_dynamics(q_prim_vf, bc_type, stage)
2393
2394 type(scalar_field), dimension(sys_size), intent(inout) :: q_prim_vf
2395 type(integer_field), dimension(1:num_dims,1:2), intent(in) :: bc_type
2396 integer, intent(in) :: stage
2397 real(wp) :: myVapFlux
2398 real(wp) :: preterm1, term2, paux, pint, Romega, term1_fac
2399 real(wp) :: myR_m, mygamma_m, myPb, myMass_n, myMass_v
2400 real(wp) :: myR, myV, myBeta_c, myBeta_t, myR0, myPbdot, myMvdot
2401 real(wp) :: myPinf, aux1, aux2, myCson, myRho
2402 real(wp), dimension(3) :: myPos, myVel
2403 real(wp) :: gamma, pi_inf, qv, f_b, myRe
2404
2405# 590 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2406 real(wp), dimension(num_fluids) :: myalpha_rho, myalpha
2407# 592 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2408 real(wp), dimension(2) :: Re
2409 integer, dimension(3) :: cell
2410 integer :: adap_dt_stop_sum, adap_dt_stop !< Fail-safe exit if max iteration count reached
2411 real(wp) :: dmalf, dmntait, dmBtait, dm_bub_adv_src, dm_divu !< Dummy variables for unified subgrid bubble subroutines
2412 integer :: k, l
2413
2414 ! Subgrid p_inf model based on Maeda and Colonius (2018).
2415 if (lag_params%pressure_corrector) then
2416 call nvtxstartrange("LAGRANGE-BUBBLE-PINF-CORRECTION")
2417 ! Calculate velocity potentials (valid for one bubble per cell)
2418
2419# 602 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2420
2421# 602 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2422#if defined(MFC_OpenACC)
2423# 602 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2424!$acc parallel loop gang vector default(present) private(k, cell, paux, preterm1, term2, Romega, myR0, myR, myV, myPb, pint, term1_fac)
2425# 602 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2426#elif defined(MFC_OpenMP)
2427# 602 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2428
2429# 602 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2430
2431# 602 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2432
2433# 602 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2434!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) &
2435# 602 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2436!$omp& private(k, cell, paux, preterm1, term2, Romega, myR0, myR, myV, myPb, pint, term1_fac)
2437# 602 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2438#endif
2439 do k = 1, n_el_bubs_loc
2440 call s_get_pinf(k, q_prim_vf, 2, paux, cell, preterm1, term2, romega)
2441 myr0 = bub_r0(k)
2442 myr = intfc_rad(k, 2)
2443 myv = intfc_vel(k, 2)
2444 mypb = gas_p(k, 2)
2445 pint = f_cpbw_km(myr0, myr, myv, mypb)
2446 pint = pint + 0.5_wp*myv**2._wp
2447 if (lag_params%cluster_type == 2) then
2448 bub_dphidt(k) = (paux - pint) + term2
2449 ! Accounting for the potential induced by the bubble averaged over the control volume Note that this is based on
2450 ! the incompressible flow assumption near the bubble.
2451 term1_fac = 3._wp/2._wp*(myr*(romega**2._wp - myr**2._wp))/(romega**3._wp - myr**3._wp)
2452 bub_dphidt(k) = bub_dphidt(k)/(1._wp - term1_fac)
2453 end if
2454 end do
2455
2456# 619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2457#if defined(MFC_OpenACC)
2458# 619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2459!$acc end parallel loop
2460# 619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2461#elif defined(MFC_OpenMP)
2462# 619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2463
2464# 619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2465!$omp end target teams loop
2466# 619 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2467#endif
2468 call nvtxendrange()
2469 end if
2470
2471 ! Precompute cell-centered pressure gradients for translational motion
2472 if (moving_lag_bubbles .and. lag_pressure_force) then
2473 call nvtxstartrange("LAGRANGE-BUBBLE-PRESSURE-GRADIENT")
2474 call s_compute_pressure_gradients(q_prim_vf)
2475 call nvtxendrange()
2476 end if
2477
2478 call nvtxstartrange("LAGRANGE-BUBBLE-DYNAMICS")
2479 ! Radial motion model
2480 adap_dt_stop_sum = 0
2481
2482# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2483
2484# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2485#if defined(MFC_OpenACC)
2486# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2487!$acc parallel loop gang vector default(present) &
2488# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2489!$acc& private(k, 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, myPos, myVel) &
2490# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2491!$acc& copy(adap_dt_stop_sum) copyin(stage)
2492# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2493#elif defined(MFC_OpenMP)
2494# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2495
2496# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2497
2498# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2499
2500# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2501!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) &
2502# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2503!$omp& private(k, 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, myPos, myVel) &
2504# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2505!$omp& map(tofrom:adap_dt_stop_sum) map(to:stage)
2506# 633 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2507#endif
2508# 637 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2509 do k = 1, n_el_bubs_loc
2510 ! Keller-Miksis model
2511
2512 ! Current bubble state
2513 mypb = gas_p(k, 2)
2514 mymass_n = gas_mg(k)
2515 mymass_v = gas_mv(k, 2)
2516 myr = intfc_rad(k, 2)
2517 myv = intfc_vel(k, 2)
2518 mybeta_c = gas_betac(k)
2519 mybeta_t = gas_betat(k)
2520 myr0 = bub_r0(k)
2521 mypos = mtn_pos(k,:,2)
2522 myvel = mtn_vel(k,:,2)
2523
2524 ! Vapor and heat fluxes
2525 call s_vflux(myr, myv, mypb, mymass_v, k, myvapflux, mymass_n, mybeta_c, myr_m, mygamma_m)
2526 mypbdot = f_bpres_dot(myvapflux, myr, myv, mypb, mymass_v, k, mybeta_t, myr_m, mygamma_m)
2527 mymvdot = 4._wp*pi*myr**2._wp*myvapflux
2528
2529 ! Obtaining driving pressure
2530 call s_get_pinf(k, q_prim_vf, 1, mypinf, cell, aux1, aux2)
2531
2532 ! Obtain liquid density and computing speed of sound from pinf
2533 call s_compute_species_fraction(q_prim_vf, cell(1), cell(2), cell(3), myalpha_rho, myalpha)
2534 call s_convert_species_to_mixture_variables_acc(myrho, gamma, pi_inf, qv, myalpha, myalpha_rho, re)
2535 call s_compute_cson_from_pinf(q_prim_vf, mypinf, cell, myrho, gamma, pi_inf, mycson)
2536
2537 ! Adaptive time stepping
2538 adap_dt_stop = 0
2539
2540 if (adap_dt) then
2541 mtn_posprev(k,:,1) = mypos
2542
2543 myre = re(1)
2544 adap_dt_stop = f_advance_step(myrho, mypinf, myr, myv, myr0, mypb, mypbdot, dmalf, dmntait, dmbtait, &
2545 & dm_bub_adv_src, dm_divu, k, mymass_v, mymass_n, mybeta_c, mybeta_t, mycson, myre, &
2546 & mypos, myvel, cell, q_prim_vf)
2547
2548 ! Update bubble state
2549 intfc_rad(k, 1) = myr
2550 intfc_vel(k, 1) = myv
2551 gas_p(k, 1) = mypb
2552 gas_mv(k, 1) = mymass_v
2553 mtn_pos(k,:,1) = mypos
2554 mtn_vel(k,:,1) = myvel
2555 else
2556 ! Radial acceleration from bubble models
2557 intfc_dveldt(k, stage) = f_rddot(myrho, mypinf, myr, myv, myr0, mypb, mypbdot, dmalf, dmntait, dmbtait, &
2558 & dm_bub_adv_src, dm_divu, mycson)
2559
2560 intfc_draddt(k, stage) = myv
2561 gas_dmvdt(k, stage) = mymvdot
2562 gas_dpdt(k, stage) = mypbdot
2563
2564 if (moving_lag_bubbles) then
2565 do l = 1, num_dims
2566 mtn_dposdt(k, l, stage) = 0._wp
2567 mtn_dveldt(k, l, stage) = 0._wp
2568 select case (lag_vel_model)
2569 case (1)
2570 mtn_dposdt(k, l, stage) = f_interpolate_velocity(mypos(l), cell, l, q_prim_vf)
2571 mtn_dveldt(k, l, stage) = 0._wp
2572 mtn_vel(k, l, 1) = mtn_dposdt(k, l, stage)
2573 case (2)
2574 mtn_dposdt(k, l, stage) = myvel(l)
2575 f_b = f_get_bubble_force(mypos(l), myr, myv, myvel(l), mymass_n, mymass_v, re(1), myrho, cell, l, &
2576 & q_prim_vf)
2577 mtn_dveldt(k, l, stage) = f_b/(mymass_n + mymass_v)
2578 case default
2579 mtn_dposdt(k, l, stage) = 0._wp
2580 mtn_dveldt(k, l, stage) = 0._wp
2581 end select
2582 end do
2583 end if
2584 end if
2585
2586
2587# 714 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2588#if defined(MFC_OpenACC)
2589# 714 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2590!$acc atomic update
2591# 714 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2592#elif defined(MFC_OpenMP)
2593# 714 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2594!$omp atomic update
2595# 714 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2596#endif
2597 adap_dt_stop_sum = adap_dt_stop_sum + adap_dt_stop
2598 end do
2599
2600# 717 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2601#if defined(MFC_OpenACC)
2602# 717 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2603!$acc end parallel loop
2604# 717 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2605#elif defined(MFC_OpenMP)
2606# 717 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2607
2608# 717 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2609!$omp end target teams loop
2610# 717 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2611#endif
2612 call nvtxendrange
2613
2614 if (adap_dt .and. adap_dt_stop_sum > 0) call s_mpi_abort("Adaptive time stepping failed to converge.")
2615
2616 if (adap_dt) then
2618 if (moving_lag_bubbles) call s_enforce_el_bubbles_boundary_conditions(q_prim_vf)
2619 call s_smear_voidfraction(bc_type)
2620 end if
2621
2622 end subroutine s_compute_bubble_el_dynamics
2623
2624 !> Compute the Lagrangian bubble source terms and add them to the RHS
2625 subroutine s_compute_bubbles_el_source(q_cons_vf, q_prim_vf, rhs_vf)
2626
2627 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
2628 type(scalar_field), dimension(sys_size), intent(inout) :: q_prim_vf
2629 type(scalar_field), dimension(sys_size), intent(inout) :: rhs_vf
2630 integer :: i, j, k, l
2631
2632 call nvtxstartrange("LAGRANGE-BUBBLE-EL-SOURCE")
2633 ! (q / (1 - beta)) * d(beta)/dt source
2634 if (lag_params%cluster_type >= 4) then
2635
2636# 741 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2637
2638# 741 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2639#if defined(MFC_OpenACC)
2640# 741 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2641!$acc parallel loop collapse(4) gang vector default(present) private(i, j, k, l)
2642# 741 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2643#elif defined(MFC_OpenMP)
2644# 741 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2645
2646# 741 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2647
2648# 741 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2649
2650# 741 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2651!$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)
2652# 741 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2653#endif
2654 do k = idwint(3)%beg, idwint(3)%end
2655 do j = idwint(2)%beg, idwint(2)%end
2656 do i = idwint(1)%beg, idwint(1)%end
2657 do l = 1, eqn_idx%E
2658 if (q_beta(1)%sf(i, j, k) > (1._wp - lag_params%valmaxvoid)) then
2659 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, &
2660 & k) + q_beta(5)%sf(i, j, k))
2661 end if
2662 end do
2663 end do
2664 end do
2665 end do
2666
2667# 754 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2668#if defined(MFC_OpenACC)
2669# 754 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2670!$acc end parallel loop
2671# 754 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2672#elif defined(MFC_OpenMP)
2673# 754 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2674
2675# 754 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2676!$omp end target teams loop
2677# 754 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2678#endif
2679 else
2680
2681# 756 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2682
2683# 756 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2684#if defined(MFC_OpenACC)
2685# 756 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2686!$acc parallel loop collapse(4) gang vector default(present) private(i, j, k, l)
2687# 756 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2688#elif defined(MFC_OpenMP)
2689# 756 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2690
2691# 756 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2692
2693# 756 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2694
2695# 756 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2696!$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)
2697# 756 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2698#endif
2699 do k = idwint(3)%beg, idwint(3)%end
2700 do j = idwint(2)%beg, idwint(2)%end
2701 do i = idwint(1)%beg, idwint(1)%end
2702 do l = 1, eqn_idx%E
2703 if (q_beta(1)%sf(i, j, k) > (1._wp - lag_params%valmaxvoid)) then
2704 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, &
2705 & k))*q_beta(2)%sf(i, j, k)
2706 end if
2707 end do
2708 end do
2709 end do
2710 end do
2711
2712# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2713#if defined(MFC_OpenACC)
2714# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2715!$acc end parallel loop
2716# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2717#elif defined(MFC_OpenMP)
2718# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2719
2720# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2721!$omp end target teams loop
2722# 769 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2723#endif
2724 end if
2725
2726 do l = 1, num_dims
2727 call s_gradient_dir(q_prim_vf(eqn_idx%E)%sf, q_beta(3)%sf, l)
2728
2729 ! (q / (1 - beta)) * d(beta)/dt source
2730
2731# 776 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2732
2733# 776 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2734#if defined(MFC_OpenACC)
2735# 776 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2736!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
2737# 776 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2738#elif defined(MFC_OpenMP)
2739# 776 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2740
2741# 776 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2742
2743# 776 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2744
2745# 776 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2746!$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)
2747# 776 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2748#endif
2749 do k = idwint(3)%beg, idwint(3)%end
2750 do j = idwint(2)%beg, idwint(2)%end
2751 do i = idwint(1)%beg, idwint(1)%end
2752 if (q_beta(1)%sf(i, j, k) > (1._wp - lag_params%valmaxvoid)) then
2753 rhs_vf(eqn_idx%cont%end + l)%sf(i, j, k) = rhs_vf(eqn_idx%cont%end + l)%sf(i, j, &
2754 & k) - (1._wp - q_beta(1)%sf(i, j, k))/q_beta(1)%sf(i, j, k)*q_beta(3)%sf(i, j, k)
2755 end if
2756 end do
2757 end do
2758 end do
2759
2760# 787 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2761#if defined(MFC_OpenACC)
2762# 787 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2763!$acc end parallel loop
2764# 787 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2765#elif defined(MFC_OpenMP)
2766# 787 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2767
2768# 787 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2769!$omp end target teams loop
2770# 787 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2771#endif
2772
2773 ! source in energy
2774
2775# 790 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2776
2777# 790 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2778#if defined(MFC_OpenACC)
2779# 790 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2780!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
2781# 790 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2782#elif defined(MFC_OpenMP)
2783# 790 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2784
2785# 790 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2786
2787# 790 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2788
2789# 790 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2790!$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)
2791# 790 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2792#endif
2793 do k = idwbuff(3)%beg, idwbuff(3)%end
2794 do j = idwbuff(2)%beg, idwbuff(2)%end
2795 do i = idwbuff(1)%beg, idwbuff(1)%end
2796 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)
2797 end do
2798 end do
2799 end do
2800
2801# 798 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2802#if defined(MFC_OpenACC)
2803# 798 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2804!$acc end parallel loop
2805# 798 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2806#elif defined(MFC_OpenMP)
2807# 798 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2808
2809# 798 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2810!$omp end target teams loop
2811# 798 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2812#endif
2813
2814 call s_gradient_dir(q_beta(3)%sf, q_beta(4)%sf, l)
2815
2816 ! (beta / (1 - beta)) * d(Pu)/dl source
2817
2818# 803 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2819
2820# 803 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2821#if defined(MFC_OpenACC)
2822# 803 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2823!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
2824# 803 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2825#elif defined(MFC_OpenMP)
2826# 803 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2827
2828# 803 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2829
2830# 803 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2831
2832# 803 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2833!$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)
2834# 803 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2835#endif
2836 do k = idwint(3)%beg, idwint(3)%end
2837 do j = idwint(2)%beg, idwint(2)%end
2838 do i = idwint(1)%beg, idwint(1)%end
2839 if (q_beta(1)%sf(i, j, k) > (1._wp - lag_params%valmaxvoid)) then
2840 rhs_vf(eqn_idx%E)%sf(i, j, k) = rhs_vf(eqn_idx%E)%sf(i, j, k) - q_beta(4)%sf(i, j, &
2841 & k)*(1._wp - q_beta(1)%sf(i, j, k))/q_beta(1)%sf(i, j, k)
2842 end if
2843 end do
2844 end do
2845 end do
2846
2847# 814 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2848#if defined(MFC_OpenACC)
2849# 814 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2850!$acc end parallel loop
2851# 814 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2852#elif defined(MFC_OpenMP)
2853# 814 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2854
2855# 814 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2856!$omp end target teams loop
2857# 814 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2858#endif
2859 end do
2860 call nvtxendrange
2861
2862 end subroutine s_compute_bubbles_el_source
2863
2864 !> Compute the speed of sound from a given driving pressure
2865 subroutine s_compute_cson_from_pinf(q_prim_vf, pinf, cell, rhol, gamma, pi_inf, cson)
2866
2867
2868# 823 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2869#ifdef _CRAYFTN
2870# 823 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2871#if MFC_OpenACC
2872# 823 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2873!$acc routine seq
2874# 823 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2875#elif MFC_OpenMP
2876# 823 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2877
2878# 823 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2879
2880# 823 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2881!$omp declare target device_type(any)
2882# 823 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2883#else
2884# 823 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2885!DIR$ INLINEALWAYS s_compute_cson_from_pinf
2886# 823 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2887#endif
2888# 823 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2889#elif MFC_OpenACC
2890# 823 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2891!$acc routine seq
2892# 823 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2893#elif MFC_OpenMP
2894# 823 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2895
2896# 823 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2897
2898# 823 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2899!$omp declare target device_type(any)
2900# 823 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2901#endif
2902
2903 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf
2904 real(wp), intent(in) :: pinf, rhol, gamma, pi_inf
2905 integer, dimension(3), intent(in) :: cell
2906 real(wp), intent(out) :: cson
2907 real(wp) :: E, H
2908# 833 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2909 real(wp), dimension(num_dims) :: vel
2910# 835 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2911 integer :: i
2912
2913 vel(:) = 0._wp
2914
2915# 838 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2916#if defined(MFC_OpenACC)
2917# 838 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2918!$acc loop seq
2919# 838 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2920#elif defined(MFC_OpenMP)
2921# 838 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2922
2923# 838 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2924#endif
2925 do i = 1, num_dims
2926 vel(i) = q_prim_vf(i + eqn_idx%cont%end)%sf(cell(1), cell(2), cell(3))
2927 end do
2928 e = gamma*pinf + pi_inf + 0.5_wp*rhol*dot_product(vel, vel)
2929 h = (e + pinf)/rhol
2930 cson = sqrt((h - 0.5_wp*dot_product(vel, vel))/gamma)
2931
2932 end subroutine s_compute_cson_from_pinf
2933
2934 !> Smear the bubble effects onto the Eulerian grid
2935 subroutine s_smear_voidfraction(bc_type)
2936
2937 type(integer_field), dimension(1:num_dims,1:2), intent(in) :: bc_type
2938 integer :: i, j, k, l
2939
2940 call nvtxstartrange("BUBBLES-LAGRANGE-SMEARING")
2941
2942# 855 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2943
2944# 855 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2945#if defined(MFC_OpenACC)
2946# 855 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2947!$acc parallel loop collapse(4) gang vector default(present) private(i, j, k, l)
2948# 855 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2949#elif defined(MFC_OpenMP)
2950# 855 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2951
2952# 855 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2953
2954# 855 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2955
2956# 855 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2957!$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)
2958# 855 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2959#endif
2960 do i = 1, q_beta_idx
2961 do l = idwbuff(3)%beg, idwbuff(3)%end
2962 do k = idwbuff(2)%beg, idwbuff(2)%end
2963 do j = idwbuff(1)%beg, idwbuff(1)%end
2964 q_beta(i)%sf(j, k, l) = 0._wp
2965 if (lag_params%kahan_summation) kahan_comp(i)%sf(j, k, l) = 0._wp
2966 end do
2967 end do
2968 end do
2969 end do
2970
2971# 866 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2972#if defined(MFC_OpenACC)
2973# 866 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2974!$acc end parallel loop
2975# 866 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2976#elif defined(MFC_OpenMP)
2977# 866 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2978
2979# 866 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2980!$omp end target teams loop
2981# 866 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
2982#endif
2983
2984 ! Build cell list before smearing (CPU-side counting sort)
2985 call s_build_cell_list(n_el_bubs_loc, mtn_s)
2986
2987 call s_smoothfunction(n_el_bubs_loc, intfc_rad, intfc_vel, mtn_s, mtn_pos, q_beta, kahan_comp)
2988
2989 call nvtxstartrange("BUBBLES-LAGRANGE-BETA-COMM")
2990 if (lag_params%cluster_type >= 4) then
2991 call s_populate_beta_buffers(q_beta, kahan_comp, bc_type, 3)
2992 else
2993 call s_populate_beta_buffers(q_beta, kahan_comp, bc_type, 2)
2994 end if
2995 call nvtxendrange
2996
2997 ! Store 1-beta
2998
2999# 882 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3000
3001# 882 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3002#if defined(MFC_OpenACC)
3003# 882 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3004!$acc parallel loop collapse(3) gang vector default(present) private(j, k, l)
3005# 882 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3006#elif defined(MFC_OpenMP)
3007# 882 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3008
3009# 882 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3010
3011# 882 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3012
3013# 882 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3014!$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)
3015# 882 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3016#endif
3017 do l = idwbuff(3)%beg, idwbuff(3)%end
3018 do k = idwbuff(2)%beg, idwbuff(2)%end
3019 do j = idwbuff(1)%beg, idwbuff(1)%end
3020 q_beta(1)%sf(j, k, l) = 1._wp - q_beta(1)%sf(j, k, l)
3021 ! Limiting void fraction given max value
3022 q_beta(1)%sf(j, k, l) = max(q_beta(1)%sf(j, k, l), 1._wp - lag_params%valmaxvoid)
3023 end do
3024 end do
3025 end do
3026
3027# 892 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3028#if defined(MFC_OpenACC)
3029# 892 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3030!$acc end parallel loop
3031# 892 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3032#elif defined(MFC_OpenMP)
3033# 892 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3034
3035# 892 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3036!$omp end target teams loop
3037# 892 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3038#endif
3039 call nvtxendrange ! BUBBLES-LAGRANGE-SMEARING
3040
3041 end subroutine s_smear_voidfraction
3042
3043 !> Compute the bubble driving pressure p_inf
3044 subroutine s_get_pinf(bub_id, q_prim_vf, ptype, f_pinfl, cell, preterm1, term2, Romega)
3045
3046
3047# 900 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3048#ifdef _CRAYFTN
3049# 900 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3050#if MFC_OpenACC
3051# 900 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3052!$acc routine seq
3053# 900 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3054#elif MFC_OpenMP
3055# 900 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3056
3057# 900 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3058
3059# 900 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3060!$omp declare target device_type(any)
3061# 900 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3062#else
3063# 900 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3064!DIR$ INLINEALWAYS s_get_pinf
3065# 900 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3066#endif
3067# 900 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3068#elif MFC_OpenACC
3069# 900 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3070!$acc routine seq
3071# 900 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3072#elif MFC_OpenMP
3073# 900 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3074
3075# 900 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3076
3077# 900 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3078!$omp declare target device_type(any)
3079# 900 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3080#endif
3081
3082 integer, intent(in) :: bub_id, ptype
3083 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf
3084 real(wp), intent(out) :: f_pinfl
3085 integer, dimension(3), intent(out) :: cell
3086 real(wp), intent(out), optional :: preterm1, term2, Romega
3087 real(wp), dimension(3) :: scoord, psi_pos, psi_x, psi_y, psi_z
3088 real(wp) :: xi, eta, zeta
3089 real(wp) :: dc, vol, aux
3090 real(wp) :: volgas, term1, Rbeq, denom
3091 real(wp) :: charvol, charpres, charvol2, charpres2
3092 integer, dimension(3) :: cellaux
3093 integer :: i, j, k
3094 integer :: smearGrid, smearGridz
3095
3096 f_pinfl = 0._wp
3097
3098 if (moving_lag_bubbles) then
3099 cell = fd_number - buff_size
3100 call s_locate_cell(mtn_pos(bub_id,1:3,2), cell, mtn_s(bub_id,1:3,2))
3101 scoord = mtn_s(bub_id,1:3,2)
3102 else
3103 scoord = mtn_s(bub_id,1:3,2)
3104 cell(:) = int(scoord(:))
3105
3106# 925 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3107#if defined(MFC_OpenACC)
3108# 925 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3109!$acc loop seq
3110# 925 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3111#elif defined(MFC_OpenMP)
3112# 925 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3113
3114# 925 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3115#endif
3116 do i = 1, num_dims
3117 if (scoord(i) < 0._wp) cell(i) = cell(i) - 1
3118 end do
3119 end if
3120
3121 if ((lag_params%cluster_type == 1)) then
3122 !> Getting p_cell in terms of only the current cell by interpolation
3123
3124 if (fd_order == 2) then ! Bilinear interpolation
3125 if (p > 0) then
3126 vol = dx(cell(1))*dy(cell(2))*dz(cell(3))
3127 else
3128 if (cyl_coord) then
3129 vol = dx(cell(1))*dy(cell(2))*y_cc(cell(2))*2._wp*pi
3130 else
3131 vol = dx(cell(1))*dy(cell(2))*lag_params%charwidth
3132 end if
3133 end if
3134
3135 !> Obtain bilinear interpolation coefficients, based on the current location of the bubble.
3136 psi_pos(1) = (scoord(1) - real(cell(1)))*dx(cell(1)) + x_cb(cell(1) - 1)
3137 psi_pos(1) = abs((psi_pos(1) - x_cc(cell(1)))/(x_cc(cell(1) + 1) - x_cc(cell(1))))
3138
3139 psi_pos(2) = (scoord(2) - real(cell(2)))*dy(cell(2)) + y_cb(cell(2) - 1)
3140 psi_pos(2) = abs((psi_pos(2) - y_cc(cell(2)))/(y_cc(cell(2) + 1) - y_cc(cell(2))))
3141
3142 if (p > 0) then
3143 psi_pos(3) = (scoord(3) - real(cell(3)))*dz(cell(3)) + z_cb(cell(3) - 1)
3144 psi_pos(3) = abs((psi_pos(3) - z_cc(cell(3)))/(z_cc(cell(3) + 1) - z_cc(cell(3))))
3145 else
3146 psi_pos(3) = 0._wp
3147 end if
3148
3149 ! Calculate bilinear basis functions for each direction For normalized coordinate xi in [0, 1], the two basis
3150 ! functions are: phi_0(xi) = 1 - xi, phi_1(xi) = xi
3151
3152 ! X-direction basis functions
3153 psi_x(1) = 1._wp - psi_pos(1) ! Left basis function
3154 psi_x(2) = psi_pos(1) ! Right basis function
3155
3156 ! Y-direction basis functions
3157 psi_y(1) = 1._wp - psi_pos(2) ! Left basis function
3158 psi_y(2) = psi_pos(2) ! Right basis function
3159
3160 if (p > 0) then
3161 ! Z-direction basis functions
3162 psi_z(1) = 1._wp - psi_pos(3) ! Left basis function
3163 psi_z(2) = psi_pos(3) ! Right basis function
3164 else ! 3D
3165 psi_z(1) = 1._wp
3166 psi_z(2) = 0._wp
3167 end if
3168
3169 !> Perform bilinear interpolation
3170 f_pinfl = 0._wp
3171
3172 if (p == 0) then
3173 do j = 1, 2
3174 do i = 1, 2
3175 f_pinfl = f_pinfl + q_prim_vf(eqn_idx%E)%sf(cell(1) + i - 1, cell(2) + j - 1, cell(3))*psi_x(i)*psi_y(j)
3176 end do
3177 end do
3178 else
3179 do k = 1, 2
3180 do j = 1, 2
3181 do i = 1, 2
3182 f_pinfl = f_pinfl + q_prim_vf(eqn_idx%E)%sf(cell(1) + i - 1, cell(2) + j - 1, &
3183 & cell(3) + k - 1)*psi_x(i)*psi_y(j)*psi_z(k)
3184 end do
3185 end do
3186 end do
3187 end if
3188 else if (fd_order == 4) then ! Biquadratic interpolation
3189 if (p > 0) then
3190 vol = dx(cell(1))*dy(cell(2))*dz(cell(3))
3191 else
3192 if (cyl_coord) then
3193 vol = dx(cell(1))*dy(cell(2))*y_cc(cell(2))*2._wp*pi
3194 else
3195 vol = dx(cell(1))*dy(cell(2))*lag_params%charwidth
3196 end if
3197 end if
3198
3199 !> Obtain biquadratic interpolation coefficients, based on the current location of the bubble.
3200 ! For biquadratic interpolation, we need coefficients for 3 points in each direction
3201 psi_pos(1) = (scoord(1) - real(cell(1)))*dx(cell(1)) + x_cb(cell(1) - 1)
3202 psi_pos(1) = (psi_pos(1) - x_cc(cell(1)))/(x_cc(cell(1) + 1) - x_cc(cell(1)))
3203
3204 psi_pos(2) = (scoord(2) - real(cell(2)))*dy(cell(2)) + y_cb(cell(2) - 1)
3205 psi_pos(2) = (psi_pos(2) - y_cc(cell(2)))/(y_cc(cell(2) + 1) - y_cc(cell(2)))
3206
3207 if (p > 0) then
3208 psi_pos(3) = (scoord(3) - real(cell(3)))*dz(cell(3)) + z_cb(cell(3) - 1)
3209 psi_pos(3) = (psi_pos(3) - z_cc(cell(3)))/(z_cc(cell(3) + 1) - z_cc(cell(3)))
3210 else
3211 psi_pos(3) = 0._wp
3212 end if
3213
3214 ! Calculate biquadratic basis functions for each direction For normalized coordinate xi in [-1, 1], the three basis
3215 ! functions are: phi_0(xi) = xi*(xi-1)/2, phi_1(xi) = (1-xi)*(1+xi), phi_2(xi) = xi*(xi+1)/2
3216
3217 ! X-direction basis functions
3218 xi = 2._wp*psi_pos(1) - 1._wp ! Convert to [-1, 1] range
3219 psi_x(1) = xi*(xi - 1._wp)/2._wp ! Left basis function
3220 psi_x(2) = (1._wp - xi)*(1._wp + xi) ! Center basis function
3221 psi_x(3) = xi*(xi + 1._wp)/2._wp ! Right basis function
3222
3223 ! Y-direction basis functions
3224 eta = 2._wp*psi_pos(2) - 1._wp ! Convert to [-1, 1] range
3225 psi_y(1) = eta*(eta - 1._wp)/2._wp ! Left basis function
3226 psi_y(2) = (1._wp - eta)*(1._wp + eta) ! Center basis function
3227 psi_y(3) = eta*(eta + 1._wp)/2._wp ! Right basis function
3228
3229 if (p > 0) then
3230 ! Z-direction basis functions
3231 zeta = 2._wp*psi_pos(3) - 1._wp ! Convert to [-1, 1] range
3232 psi_z(1) = zeta*(zeta - 1._wp)/2._wp ! Left basis function
3233 psi_z(2) = (1._wp - zeta)*(1._wp + zeta) ! Center basis function
3234 psi_z(3) = zeta*(zeta + 1._wp)/2._wp ! Right basis function
3235 else
3236 psi_z(1) = 0._wp
3237 psi_z(2) = 1._wp
3238 psi_z(3) = 0._wp
3239 end if
3240
3241 !> Perform biquadratic interpolation
3242 f_pinfl = 0._wp
3243
3244 if (p == 0) then ! 2D
3245 do j = 1, 3
3246 do i = 1, 3
3247 f_pinfl = f_pinfl + q_prim_vf(eqn_idx%E)%sf(cell(1) + i - 2, cell(2) + j - 2, cell(3))*psi_x(i)*psi_y(j)
3248 end do
3249 end do
3250 else
3251 do k = 1, 3
3252 do j = 1, 3
3253 do i = 1, 3
3254 f_pinfl = f_pinfl + q_prim_vf(eqn_idx%E)%sf(cell(1) + i - 2, cell(2) + j - 2, &
3255 & cell(3) + k - 2)*psi_x(i)*psi_y(j)*psi_z(k)
3256 end do
3257 end do
3258 end do
3259 end if
3260 end if
3261
3262 ! R_Omega
3263 dc = (3._wp*vol/(4._wp*pi))**(1._wp/3._wp)
3264 else if (lag_params%cluster_type >= 2) then
3265 ! Bubble dynamic closure from Maeda and Colonius (2018)
3266
3267 ! Include the cell that contains the bubble (mapCells+1+mapCells)
3268 smeargrid = mapcells - (-mapcells) + 1
3269 smeargridz = smeargrid
3270 if (p == 0) smeargridz = 1
3271
3272 charvol = 0._wp
3273 charpres = 0._wp
3274 charvol2 = 0._wp
3275 charpres2 = 0._wp
3276 vol = 0._wp
3277
3278
3279# 1088 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3280#if defined(MFC_OpenACC)
3281# 1088 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3282!$acc loop seq
3283# 1088 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3284#elif defined(MFC_OpenMP)
3285# 1088 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3286
3287# 1088 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3288#endif
3289 do i = 1, smeargrid
3290
3291# 1090 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3292#if defined(MFC_OpenACC)
3293# 1090 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3294!$acc loop seq
3295# 1090 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3296#elif defined(MFC_OpenMP)
3297# 1090 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3298
3299# 1090 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3300#endif
3301 do j = 1, smeargrid
3302
3303# 1092 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3304#if defined(MFC_OpenACC)
3305# 1092 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3306!$acc loop seq
3307# 1092 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3308#elif defined(MFC_OpenMP)
3309# 1092 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3310
3311# 1092 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3312#endif
3313 do k = 1, smeargridz
3314 cellaux(1) = cell(1) + i - (mapcells + 1)
3315 cellaux(2) = cell(2) + j - (mapcells + 1)
3316 cellaux(3) = cell(3) + k - (mapcells + 1)
3317 if (p == 0) cellaux(3) = 0
3318
3319 !> Obtaining the cell volume
3320 if (p > 0) then
3321 vol = dx(cellaux(1))*dy(cellaux(2))*dz(cellaux(3))
3322 else
3323 if (cyl_coord) then
3324 vol = dx(cellaux(1))*dy(cellaux(2))*y_cc(cellaux(2))*2._wp*pi
3325 else
3326 vol = dx(cellaux(1))*dy(cellaux(2))*lag_params%charwidth
3327 end if
3328 end if
3329
3330 !> Update values
3331 charvol = charvol + vol
3332 charpres = charpres + q_prim_vf(eqn_idx%E)%sf(cellaux(1), cellaux(2), cellaux(3))*vol
3333 charvol2 = charvol2 + vol*q_beta(1)%sf(cellaux(1), cellaux(2), cellaux(3))
3334 charpres2 = charpres2 + q_prim_vf(eqn_idx%E)%sf(cellaux(1), cellaux(2), &
3335 & cellaux(3))*vol*q_beta(1)%sf(cellaux(1), cellaux(2), cellaux(3))
3336 end do
3337 end do
3338 end do
3339 f_pinfl = charpres2/charvol2
3340 vol = charvol
3341 dc = (3._wp*abs(vol)/(4._wp*pi))**(1._wp/3._wp)
3342 end if
3343
3344 if (lag_params%pressure_corrector) then
3345 ! Valid if only one bubble exists per cell
3346 volgas = intfc_rad(bub_id, 2)**3._wp
3347 denom = intfc_rad(bub_id, 2)**2._wp
3348 term1 = bub_dphidt(bub_id)*intfc_rad(bub_id, 2)**2._wp
3349 term2 = intfc_vel(bub_id, 2)*intfc_rad(bub_id, 2)**2._wp
3350
3351 rbeq = volgas**(1._wp/3._wp) ! surrogate bubble radius
3352 aux = dc**3._wp - rbeq**3._wp
3353 term2 = term2/denom
3354 term2 = 3._wp/2._wp*term2**2._wp*rbeq**3._wp*(1._wp - rbeq/dc)/aux
3355 preterm1 = 3._wp/2._wp*rbeq*(dc**2._wp - rbeq**2._wp)/(aux*denom)
3356
3357 ! Control volume radius
3358 if (ptype == 2) romega = dc
3359
3360 ! Getting p_inf
3361 if (ptype == 1) then
3362 f_pinfl = f_pinfl + preterm1*term1 + term2
3363 end if
3364 end if
3365
3366 end subroutine s_get_pinf
3367
3368 !> Update Lagrangian bubble variables using TVD Runge-Kutta time stepping
3369 impure subroutine s_update_lagrange_tdv_rk(q_prim_vf, bc_type, stage)
3370
3371 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf
3372 type(integer_field), dimension(1:num_dims,1:2), intent(in) :: bc_type
3373 integer, intent(in) :: stage
3374 integer :: k, q
3375
3376 if (time_stepper == time_stepper_rk1) then ! 1st order TVD RK
3377
3378# 1157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3379
3380# 1157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3381#if defined(MFC_OpenACC)
3382# 1157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3383!$acc parallel loop gang vector default(present) private(k)
3384# 1157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3385#elif defined(MFC_OpenMP)
3386# 1157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3387
3388# 1157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3389
3390# 1157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3391
3392# 1157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3393!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
3394# 1157 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3395#endif
3396 do k = 1, n_el_bubs_loc
3397 ! u{1} = u{n} + dt * RHS{n}
3398 intfc_rad(k, 1) = intfc_rad(k, 1) + dt*intfc_draddt(k, 1)
3399 intfc_vel(k, 1) = intfc_vel(k, 1) + dt*intfc_dveldt(k, 1)
3400 gas_p(k, 1) = gas_p(k, 1) + dt*gas_dpdt(k, 1)
3401 gas_mv(k, 1) = gas_mv(k, 1) + dt*gas_dmvdt(k, 1)
3402 if (moving_lag_bubbles) then
3403 do q = 1, num_dims
3404 mtn_posprev(k, q, 1) = mtn_pos(k, q, 1)
3405 mtn_pos(k, q, 1) = mtn_pos(k, q, 1) + dt*mtn_dposdt(k, q, 1)
3406 mtn_vel(k, q, 1) = mtn_vel(k, q, 1) + dt*mtn_dveldt(k, q, 1)
3407 end do
3408 end if
3409 end do
3410
3411# 1172 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3412#if defined(MFC_OpenACC)
3413# 1172 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3414!$acc end parallel loop
3415# 1172 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3416#elif defined(MFC_OpenMP)
3417# 1172 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3418
3419# 1172 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3420!$omp end target teams loop
3421# 1172 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3422#endif
3423
3425 if (moving_lag_bubbles) call s_enforce_el_bubbles_boundary_conditions(q_prim_vf)
3426 call s_smear_voidfraction(bc_type)
3427 if (lag_params%write_void_evol) call s_write_void_evol(mytime)
3428 if (lag_params%write_bubbles_stats) call s_calculate_lag_bubble_stats()
3429 if (lag_params%write_bubbles) then
3430
3431# 1180 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3432#if defined(MFC_OpenACC)
3433# 1180 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3434!$acc update host(gas_p, gas_mv, intfc_rad, intfc_vel)
3435# 1180 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3436#elif defined(MFC_OpenMP)
3437# 1180 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3438!$omp target update from(gas_p, gas_mv, intfc_rad, intfc_vel)
3439# 1180 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3440#endif
3441 call s_write_lag_bubble_evol(mytime)
3442 end if
3443 else if (time_stepper == time_stepper_rk2) then ! 2nd order TVD RK
3444 if (stage == 1) then
3445
3446# 1185 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3447
3448# 1185 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3449#if defined(MFC_OpenACC)
3450# 1185 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3451!$acc parallel loop gang vector default(present) private(k)
3452# 1185 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3453#elif defined(MFC_OpenMP)
3454# 1185 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3455
3456# 1185 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3457
3458# 1185 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3459
3460# 1185 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3461!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
3462# 1185 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3463#endif
3464 do k = 1, n_el_bubs_loc
3465 ! u{1} = u{n} + dt * RHS{n}
3466 intfc_rad(k, 2) = intfc_rad(k, 1) + dt*intfc_draddt(k, 1)
3467 intfc_vel(k, 2) = intfc_vel(k, 1) + dt*intfc_dveldt(k, 1)
3468 gas_p(k, 2) = gas_p(k, 1) + dt*gas_dpdt(k, 1)
3469 gas_mv(k, 2) = gas_mv(k, 1) + dt*gas_dmvdt(k, 1)
3470 if (moving_lag_bubbles) then
3471 do q = 1, num_dims
3472 mtn_posprev(k, q, 2) = mtn_pos(k, q, 1)
3473 mtn_pos(k, q, 2) = mtn_pos(k, q, 1) + dt*mtn_dposdt(k, q, 1)
3474 mtn_vel(k, q, 2) = mtn_vel(k, q, 1) + dt*mtn_dveldt(k, q, 1)
3475 end do
3476 end if
3477 end do
3478
3479# 1200 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3480#if defined(MFC_OpenACC)
3481# 1200 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3482!$acc end parallel loop
3483# 1200 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3484#elif defined(MFC_OpenMP)
3485# 1200 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3486
3487# 1200 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3488!$omp end target teams loop
3489# 1200 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3490#endif
3491
3492 if (moving_lag_bubbles) call s_enforce_el_bubbles_boundary_conditions(q_prim_vf)
3493 call s_smear_voidfraction(bc_type)
3494 else if (stage == 2) then
3495
3496# 1205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3497
3498# 1205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3499#if defined(MFC_OpenACC)
3500# 1205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3501!$acc parallel loop gang vector default(present) private(k)
3502# 1205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3503#elif defined(MFC_OpenMP)
3504# 1205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3505
3506# 1205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3507
3508# 1205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3509
3510# 1205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3511!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
3512# 1205 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3513#endif
3514 do k = 1, n_el_bubs_loc
3515 ! u{1} = u{n} + (1/2) * dt * (RHS{n} + RHS{1})
3516 intfc_rad(k, 1) = intfc_rad(k, 1) + dt*(intfc_draddt(k, 1) + intfc_draddt(k, 2))/2._wp
3517 intfc_vel(k, 1) = intfc_vel(k, 1) + dt*(intfc_dveldt(k, 1) + intfc_dveldt(k, 2))/2._wp
3518 gas_p(k, 1) = gas_p(k, 1) + dt*(gas_dpdt(k, 1) + gas_dpdt(k, 2))/2._wp
3519 gas_mv(k, 1) = gas_mv(k, 1) + dt*(gas_dmvdt(k, 1) + gas_dmvdt(k, 2))/2._wp
3520 if (moving_lag_bubbles) then
3521 do q = 1, num_dims
3522 mtn_posprev(k, q, 1) = mtn_pos(k, q, 2)
3523 mtn_pos(k, q, 1) = mtn_pos(k, q, 1) + dt*(mtn_dposdt(k, q, 1) + mtn_dposdt(k, q, 2))/2._wp
3524 mtn_vel(k, q, 1) = mtn_vel(k, q, 1) + dt*(mtn_dveldt(k, q, 1) + mtn_dveldt(k, q, 2))/2._wp
3525 end do
3526 end if
3527 end do
3528
3529# 1220 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3530#if defined(MFC_OpenACC)
3531# 1220 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3532!$acc end parallel loop
3533# 1220 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3534#elif defined(MFC_OpenMP)
3535# 1220 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3536
3537# 1220 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3538!$omp end target teams loop
3539# 1220 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3540#endif
3541
3543 if (moving_lag_bubbles) call s_enforce_el_bubbles_boundary_conditions(q_prim_vf)
3544 call s_smear_voidfraction(bc_type)
3545 if (lag_params%write_void_evol) call s_write_void_evol(mytime)
3546 if (lag_params%write_bubbles_stats) call s_calculate_lag_bubble_stats()
3547 if (lag_params%write_bubbles) then
3548
3549# 1228 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3550#if defined(MFC_OpenACC)
3551# 1228 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3552!$acc update host(gas_p, gas_mv, intfc_rad, intfc_vel)
3553# 1228 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3554#elif defined(MFC_OpenMP)
3555# 1228 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3556!$omp target update from(gas_p, gas_mv, intfc_rad, intfc_vel)
3557# 1228 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3558#endif
3559 call s_write_lag_bubble_evol(mytime)
3560 end if
3561 end if
3562 else if (time_stepper == time_stepper_rk3) then ! 3rd order TVD RK
3563 if (stage == 1) then
3564
3565# 1234 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3566
3567# 1234 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3568#if defined(MFC_OpenACC)
3569# 1234 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3570!$acc parallel loop gang vector default(present) private(k)
3571# 1234 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3572#elif defined(MFC_OpenMP)
3573# 1234 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3574
3575# 1234 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3576
3577# 1234 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3578
3579# 1234 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3580!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
3581# 1234 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3582#endif
3583 do k = 1, n_el_bubs_loc
3584 ! u{1} = u{n} + dt * RHS{n}
3585 intfc_rad(k, 2) = intfc_rad(k, 1) + dt*intfc_draddt(k, 1)
3586 intfc_vel(k, 2) = intfc_vel(k, 1) + dt*intfc_dveldt(k, 1)
3587 gas_p(k, 2) = gas_p(k, 1) + dt*gas_dpdt(k, 1)
3588 gas_mv(k, 2) = gas_mv(k, 1) + dt*gas_dmvdt(k, 1)
3589 if (moving_lag_bubbles) then
3590 do q = 1, num_dims
3591 mtn_posprev(k, q, 2) = mtn_pos(k, q, 1)
3592 mtn_pos(k, q, 2) = mtn_pos(k, q, 1) + dt*mtn_dposdt(k, q, 1)
3593 mtn_vel(k, q, 2) = mtn_vel(k, q, 1) + dt*mtn_dveldt(k, q, 1)
3594 end do
3595 end if
3596 end do
3597
3598# 1249 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3599#if defined(MFC_OpenACC)
3600# 1249 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3601!$acc end parallel loop
3602# 1249 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3603#elif defined(MFC_OpenMP)
3604# 1249 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3605
3606# 1249 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3607!$omp end target teams loop
3608# 1249 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3609#endif
3610
3611 if (moving_lag_bubbles) call s_enforce_el_bubbles_boundary_conditions(q_prim_vf)
3612 call s_smear_voidfraction(bc_type)
3613 else if (stage == 2) then
3614
3615# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3616
3617# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3618#if defined(MFC_OpenACC)
3619# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3620!$acc parallel loop gang vector default(present) private(k)
3621# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3622#elif defined(MFC_OpenMP)
3623# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3624
3625# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3626
3627# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3628
3629# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3630!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
3631# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3632#endif
3633 do k = 1, n_el_bubs_loc
3634 ! u{2} = u{n} + (1/4) * dt * [RHS{n} + RHS{1}]
3635 intfc_rad(k, 2) = intfc_rad(k, 1) + dt*(intfc_draddt(k, 1) + intfc_draddt(k, 2))/4._wp
3636 intfc_vel(k, 2) = intfc_vel(k, 1) + dt*(intfc_dveldt(k, 1) + intfc_dveldt(k, 2))/4._wp
3637 gas_p(k, 2) = gas_p(k, 1) + dt*(gas_dpdt(k, 1) + gas_dpdt(k, 2))/4._wp
3638 gas_mv(k, 2) = gas_mv(k, 1) + dt*(gas_dmvdt(k, 1) + gas_dmvdt(k, 2))/4._wp
3639 if (moving_lag_bubbles) then
3640 do q = 1, num_dims
3641 mtn_posprev(k, q, 2) = mtn_pos(k, q, 2)
3642 mtn_pos(k, q, 2) = mtn_pos(k, q, 1) + dt*(mtn_dposdt(k, q, 1) + mtn_dposdt(k, q, 2))/4._wp
3643 mtn_vel(k, q, 2) = mtn_vel(k, q, 1) + dt*(mtn_dveldt(k, q, 1) + mtn_dveldt(k, q, 2))/4._wp
3644 end do
3645 end if
3646 end do
3647
3648# 1269 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3649#if defined(MFC_OpenACC)
3650# 1269 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3651!$acc end parallel loop
3652# 1269 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3653#elif defined(MFC_OpenMP)
3654# 1269 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3655
3656# 1269 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3657!$omp end target teams loop
3658# 1269 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3659#endif
3660
3661 if (moving_lag_bubbles) call s_enforce_el_bubbles_boundary_conditions(q_prim_vf)
3662 call s_smear_voidfraction(bc_type)
3663 else if (stage == 3) then
3664
3665# 1274 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3666
3667# 1274 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3668#if defined(MFC_OpenACC)
3669# 1274 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3670!$acc parallel loop gang vector default(present) private(k)
3671# 1274 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3672#elif defined(MFC_OpenMP)
3673# 1274 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3674
3675# 1274 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3676
3677# 1274 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3678
3679# 1274 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3680!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
3681# 1274 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3682#endif
3683 do k = 1, n_el_bubs_loc
3684 ! u{n+1} = u{n} + (2/3) * dt * [(1/4)* RHS{n} + (1/4)* RHS{1} + RHS{2}]
3685 intfc_rad(k, 1) = intfc_rad(k, 1) + (2._wp/3._wp)*dt*(intfc_draddt(k, 1)/4._wp + intfc_draddt(k, &
3686 & 2)/4._wp + intfc_draddt(k, 3))
3687 intfc_vel(k, 1) = intfc_vel(k, 1) + (2._wp/3._wp)*dt*(intfc_dveldt(k, 1)/4._wp + intfc_dveldt(k, &
3688 & 2)/4._wp + intfc_dveldt(k, 3))
3689 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))
3690 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))
3691 if (moving_lag_bubbles) then
3692 do q = 1, num_dims
3693 mtn_posprev(k, q, 1) = mtn_pos(k, q, 2)
3694 mtn_pos(k, q, 1) = mtn_pos(k, q, 1) + (2._wp/3._wp)*dt*(mtn_dposdt(k, q, 1)/4._wp + mtn_dposdt(k, q, &
3695 & 2)/4._wp + mtn_dposdt(k, q, 3))
3696 mtn_vel(k, q, 1) = mtn_vel(k, q, 1) + (2._wp/3._wp)*dt*(mtn_dveldt(k, q, 1)/4._wp + mtn_dveldt(k, q, &
3697 & 2)/4._wp + mtn_dveldt(k, q, 3))
3698 end do
3699 end if
3700 end do
3701
3702# 1293 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3703#if defined(MFC_OpenACC)
3704# 1293 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3705!$acc end parallel loop
3706# 1293 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3707#elif defined(MFC_OpenMP)
3708# 1293 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3709
3710# 1293 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3711!$omp end target teams loop
3712# 1293 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3713#endif
3714
3716 if (moving_lag_bubbles) call s_enforce_el_bubbles_boundary_conditions(q_prim_vf)
3717 call s_smear_voidfraction(bc_type)
3718 if (lag_params%write_void_evol) call s_write_void_evol(mytime)
3719 if (lag_params%write_bubbles_stats) call s_calculate_lag_bubble_stats()
3720 if (lag_params%write_bubbles) then
3721
3722# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3723#if defined(MFC_OpenACC)
3724# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3725!$acc update host(gas_p, gas_mv, gas_mg, intfc_rad, intfc_vel)
3726# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3727#elif defined(MFC_OpenMP)
3728# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3729!$omp target update from(gas_p, gas_mv, gas_mg, intfc_rad, intfc_vel)
3730# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3731#endif
3732 call s_write_lag_bubble_evol(mytime)
3733 end if
3734 end if
3735 end if
3736
3737 end subroutine s_update_lagrange_tdv_rk
3738
3739 impure subroutine s_enforce_el_bubbles_boundary_conditions(q_prim_vf)
3740
3741 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf
3742 integer :: k, i, q
3743 integer :: patch_id, newbubs, new_idx
3744 real(wp) :: offset
3745 integer, dimension(3) :: cell
3746
3747 call nvtxstartrange("LAG-BC")
3748 call nvtxstartrange("LAG-BC-DEV2HOST")
3749
3750# 1319 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3751#if defined(MFC_OpenACC)
3752# 1319 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3753!$acc update host(bub_R0, Rmax_stats, Rmin_stats, gas_mg, gas_betaT, gas_betaC, bub_dphidt, lag_id, 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, keep_bubble, n_el_bubs_loc, wrap_bubble_dir, wrap_bubble_loc)
3754# 1319 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3755#elif defined(MFC_OpenMP)
3756# 1319 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3757!$omp target update from(bub_R0, Rmax_stats, Rmin_stats, gas_mg, gas_betaT, gas_betaC, bub_dphidt, lag_id, 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, keep_bubble, n_el_bubs_loc, wrap_bubble_dir, wrap_bubble_loc)
3758# 1319 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3759#endif
3760# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3761 call nvtxendrange
3762
3763 ! Handle MPI transfer of bubbles going to another processor's local domain
3764 if (num_procs > 1) then
3765 call nvtxstartrange("LAG-BC-TRANSFER-LIST")
3766 call s_add_particles_to_transfer_list(n_el_bubs_loc, mtn_pos(:,:,2), mtn_posprev(:,:,2))
3767 call nvtxendrange
3768
3769 call nvtxstartrange("LAG-BC-SENDRECV")
3770 call s_mpi_sendrecv_particles(bub_r0, rmax_stats, rmin_stats, gas_mg, gas_betat, gas_betac, bub_dphidt, lag_id, &
3773 & n_el_bubs_loc, 2)
3774 call nvtxendrange
3775 end if
3776
3777 call nvtxstartrange("LAG-BC-HOST2DEV")
3778
3779# 1339 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3780#if defined(MFC_OpenACC)
3781# 1339 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3782!$acc update device(bub_R0, Rmax_stats, Rmin_stats, gas_mg, gas_betaT, gas_betaC, bub_dphidt, lag_id, 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, n_el_bubs_loc)
3783# 1339 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3784#elif defined(MFC_OpenMP)
3785# 1339 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3786!$omp target update to(bub_R0, Rmax_stats, Rmin_stats, gas_mg, gas_betaT, gas_betaC, bub_dphidt, lag_id, 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, n_el_bubs_loc)
3787# 1339 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3788#endif
3789# 1342 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3790 call nvtxendrange
3791
3792
3793# 1344 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3794
3795# 1344 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3796#if defined(MFC_OpenACC)
3797# 1344 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3798!$acc parallel loop gang vector default(present) private(k, cell)
3799# 1344 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3800#elif defined(MFC_OpenMP)
3801# 1344 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3802
3803# 1344 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3804
3805# 1344 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3806
3807# 1344 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3808!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k, cell)
3809# 1344 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3810#endif
3811 do k = 1, n_el_bubs_loc
3812 keep_bubble(k) = 1
3813 wrap_bubble_loc(k,:) = 0
3814 wrap_bubble_dir(k,:) = 0
3815
3816 ! Relocate bubbles at solid boundaries and delete bubbles that leave buffer regions
3817 if (any(bc_x%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/)) .and. mtn_pos(k, 1, &
3818 & 2) < x_cb(-1) + intfc_rad(k, 2)) then
3819 mtn_pos(k, 1, 2) = x_cb(-1) + intfc_rad(k, 2)
3820 else if (any(bc_x%end == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/)) .and. mtn_pos(k, 1, &
3821 & 2) > x_cb(m) - intfc_rad(k, 2)) then
3822 mtn_pos(k, 1, 2) = x_cb(m) - intfc_rad(k, 2)
3823 else if (bc_x%beg == bc_periodic .and. mtn_pos(k, 1, 2) < pcomm_coords(1)%beg .and. mtn_posprev(k, 1, &
3824 & 2) >= pcomm_coords(1)%beg) then
3825 wrap_bubble_dir(k, 1) = 1
3826 wrap_bubble_loc(k, 1) = -1
3827 else if (bc_x%end == bc_periodic .and. mtn_pos(k, 1, 2) > pcomm_coords(1)%end .and. mtn_posprev(k, 1, &
3828 & 2) <= pcomm_coords(1)%end) then
3829 wrap_bubble_dir(k, 1) = 1
3830 wrap_bubble_loc(k, 1) = 1
3831 else if (mtn_pos(k, 1, 2) >= x_cb(m)) then
3832 keep_bubble(k) = 0
3833 else if (mtn_pos(k, 1, 2) < x_cb(-1)) then
3834 keep_bubble(k) = 0
3835 end if
3836
3837 if (any(bc_y%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/)) .and. mtn_pos(k, 2, &
3838 & 2) < y_cb(-1) + intfc_rad(k, 2)) then
3839 mtn_pos(k, 2, 2) = y_cb(-1) + intfc_rad(k, 2)
3840 else if (any(bc_y%end == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/)) .and. mtn_pos(k, 2, &
3841 & 2) > y_cb(n) - intfc_rad(k, 2)) then
3842 mtn_pos(k, 2, 2) = y_cb(n) - intfc_rad(k, 2)
3843 else if (bc_y%beg == bc_periodic .and. mtn_pos(k, 2, 2) < pcomm_coords(2)%beg .and. mtn_posprev(k, 2, &
3844 & 2) >= pcomm_coords(2)%beg) then
3845 wrap_bubble_dir(k, 2) = 1
3846 wrap_bubble_loc(k, 2) = -1
3847 else if (bc_y%end == bc_periodic .and. mtn_pos(k, 2, 2) > pcomm_coords(2)%end .and. mtn_posprev(k, 2, &
3848 & 2) <= pcomm_coords(2)%end) then
3849 wrap_bubble_dir(k, 2) = 1
3850 wrap_bubble_loc(k, 2) = 1
3851 else if (mtn_pos(k, 2, 2) >= y_cb(n)) then
3852 keep_bubble(k) = 0
3853 else if (mtn_pos(k, 2, 2) < y_cb(-1)) then
3854 keep_bubble(k) = 0
3855 end if
3856
3857 if (p > 0) then
3858 if (any(bc_z%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/)) .and. mtn_pos(k, 3, &
3859 & 2) < z_cb(-1) + intfc_rad(k, 2)) then
3860 mtn_pos(k, 3, 2) = z_cb(-1) + intfc_rad(k, 2)
3861 else if (any(bc_z%end == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/)) .and. mtn_pos(k, 3, &
3862 & 2) > z_cb(p) - intfc_rad(k, 2)) then
3863 mtn_pos(k, 3, 2) = z_cb(p) - intfc_rad(k, 2)
3864 else if (bc_z%beg == bc_periodic .and. mtn_pos(k, 3, 2) < pcomm_coords(3)%beg .and. mtn_posprev(k, 3, &
3865 & 2) >= pcomm_coords(3)%beg) then
3866 wrap_bubble_dir(k, 3) = 1
3867 wrap_bubble_loc(k, 3) = -1
3868 else if (bc_z%end == bc_periodic .and. mtn_pos(k, 3, 2) > pcomm_coords(3)%end .and. mtn_posprev(k, 3, &
3869 & 2) <= pcomm_coords(3)%end) then
3870 wrap_bubble_dir(k, 3) = 1
3871 wrap_bubble_loc(k, 3) = 1
3872 else if (mtn_pos(k, 3, 2) >= z_cb(p)) then
3873 keep_bubble(k) = 0
3874 else if (mtn_pos(k, 3, 2) < z_cb(-1)) then
3875 keep_bubble(k) = 0
3876 end if
3877 end if
3878
3879 if (keep_bubble(k) == 1) then
3880 ! Remove bubbles that are no longer in a liquid
3881 cell = fd_number - buff_size
3882 call s_locate_cell(mtn_pos(k,1:3,2), cell, mtn_s(k,1:3,2))
3883
3884 if (q_prim_vf(eqn_idx%adv%beg)%sf(cell(1), cell(2), cell(3)) < (1._wp - lag_params%valmaxvoid)) then
3885 keep_bubble(k) = 0
3886 end if
3887 end if
3888 end do
3889
3890# 1423 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3891#if defined(MFC_OpenACC)
3892# 1423 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3893!$acc end parallel loop
3894# 1423 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3895#elif defined(MFC_OpenMP)
3896# 1423 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3897
3898# 1423 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3899!$omp end target teams loop
3900# 1423 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3901#endif
3902
3903 if (n_el_bubs_loc > 0) then
3904 call nvtxstartrange("LAG-BC-DEV2HOST")
3905
3906# 1427 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3907#if defined(MFC_OpenACC)
3908# 1427 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3909!$acc update host(bub_R0, Rmax_stats, Rmin_stats, gas_mg, gas_betaT, gas_betaC, bub_dphidt, lag_id, 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, keep_bubble, n_el_bubs_loc, wrap_bubble_dir, wrap_bubble_loc)
3910# 1427 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3911#elif defined(MFC_OpenMP)
3912# 1427 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3913!$omp target update from(bub_R0, Rmax_stats, Rmin_stats, gas_mg, gas_betaT, gas_betaC, bub_dphidt, lag_id, 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, keep_bubble, n_el_bubs_loc, wrap_bubble_dir, wrap_bubble_loc)
3914# 1427 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3915#endif
3916# 1430 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3917 call nvtxendrange
3918
3919 newbubs = 0
3920 do k = 1, n_el_bubs_loc
3921 if (keep_bubble(k) == 1) then
3922 newbubs = newbubs + 1
3923 if (newbubs /= k) then
3924 call s_copy_lag_bubble(newbubs, k)
3925 wrap_bubble_dir(newbubs,:) = wrap_bubble_dir(k,:)
3926 wrap_bubble_loc(newbubs,:) = wrap_bubble_loc(k,:)
3927 end if
3928 end if
3929 end do
3930 n_el_bubs_loc = newbubs
3931
3932 ! Handle periodic wrapping of bubbles on same processor
3933 do k = 1, n_el_bubs_loc
3934 if (any(wrap_bubble_dir(k,:) == 1)) then
3935 do i = 1, num_dims
3936 if (wrap_bubble_dir(k, i) == 1) then
3937 offset = glb_bounds(i)%end - glb_bounds(i)%beg
3938 if (wrap_bubble_loc(k, i) == 1) then
3939 do q = 1, 2
3940 mtn_pos(k, i, q) = mtn_pos(k, i, q) - offset
3941 mtn_posprev(k, i, q) = mtn_posprev(k, i, q) - offset
3942 end do
3943 else if (wrap_bubble_loc(k, i) == -1) then
3944 do q = 1, 2
3945 mtn_pos(k, i, q) = mtn_pos(k, i, q) + offset
3946 mtn_posprev(k, i, q) = mtn_posprev(k, i, q) + offset
3947 end do
3948 end if
3949 end if
3950 end do
3951 end if
3952 end do
3953 call nvtxstartrange("LAG-BC-HOST2DEV")
3954
3955# 1467 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3956#if defined(MFC_OpenACC)
3957# 1467 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3958!$acc update device(bub_R0, Rmax_stats, Rmin_stats, gas_mg, gas_betaT, gas_betaC, bub_dphidt, lag_id, 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, n_el_bubs_loc)
3959# 1467 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3960#elif defined(MFC_OpenMP)
3961# 1467 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3962!$omp target update to(bub_R0, Rmax_stats, Rmin_stats, gas_mg, gas_betaT, gas_betaC, bub_dphidt, lag_id, 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, n_el_bubs_loc)
3963# 1467 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3964#endif
3965# 1470 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3966 call nvtxendrange
3967 end if
3968
3969
3970# 1473 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3971
3972# 1473 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3973#if defined(MFC_OpenACC)
3974# 1473 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3975!$acc parallel loop gang vector default(present) private(cell)
3976# 1473 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3977#elif defined(MFC_OpenMP)
3978# 1473 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3979
3980# 1473 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3981
3982# 1473 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3983
3984# 1473 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3985!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(cell)
3986# 1473 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3987#endif
3988 do k = 1, n_el_bubs_loc
3989 cell = fd_number - buff_size
3990 call s_locate_cell(mtn_pos(k,1:3,2), cell, mtn_s(k,1:3,2))
3991 end do
3992
3993# 1478 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3994#if defined(MFC_OpenACC)
3995# 1478 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3996!$acc end parallel loop
3997# 1478 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
3998#elif defined(MFC_OpenMP)
3999# 1478 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4000
4001# 1478 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4002!$omp end target teams loop
4003# 1478 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4004#endif
4005
4006 call nvtxendrange ! LAG-BC
4007
4009
4010 !> Locate the cell index for a given physical position
4011 subroutine s_locate_cell(pos, cell, scoord)
4012
4013
4014# 1487 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4015#ifdef _CRAYFTN
4016# 1487 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4017#if MFC_OpenACC
4018# 1487 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4019!$acc routine seq
4020# 1487 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4021#elif MFC_OpenMP
4022# 1487 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4023
4024# 1487 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4025
4026# 1487 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4027!$omp declare target device_type(any)
4028# 1487 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4029#else
4030# 1487 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4031!DIR$ INLINEALWAYS s_locate_cell
4032# 1487 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4033#endif
4034# 1487 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4035#elif MFC_OpenACC
4036# 1487 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4037!$acc routine seq
4038# 1487 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4039#elif MFC_OpenMP
4040# 1487 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4041
4042# 1487 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4043
4044# 1487 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4045!$omp declare target device_type(any)
4046# 1487 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4047#endif
4048
4049 real(wp), dimension(3), intent(in) :: pos
4050 real(wp), dimension(3), intent(out) :: scoord
4051 integer, dimension(3), intent(inout) :: cell
4052 integer :: i
4053
4054 do while (pos(1) < x_cb(cell(1) - 1))
4055 cell(1) = cell(1) - 1
4056 end do
4057
4058 do while (pos(1) >= x_cb(cell(1)))
4059 cell(1) = cell(1) + 1
4060 end do
4061
4062 do while (pos(2) < y_cb(cell(2) - 1))
4063 cell(2) = cell(2) - 1
4064 end do
4065
4066 do while (pos(2) >= y_cb(cell(2)))
4067 cell(2) = cell(2) + 1
4068 end do
4069
4070 if (p > 0) then
4071 do while (pos(3) < z_cb(cell(3) - 1))
4072 cell(3) = cell(3) - 1
4073 end do
4074 do while (pos(3) >= z_cb(cell(3)))
4075 cell(3) = cell(3) + 1
4076 end do
4077 else
4078 cell(3) = 0
4079 end if
4080
4081 ! 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
4082 ! coordinate of s is (the coordinate of the left boundary of the Floor(s)-th cell) + (s-(int(s))*(cell-width). In other
4083 ! words, the coordinate of the center of the cell is x_cc(cell).
4084
4085 ! coordinates in computational space
4086 scoord(1) = cell(1) + (pos(1) - x_cb(cell(1) - 1))/dx(cell(1))
4087 scoord(2) = cell(2) + (pos(2) - y_cb(cell(2) - 1))/dy(cell(2))
4088 scoord(3) = 0._wp
4089 if (p > 0) scoord(3) = cell(3) + (pos(3) - z_cb(cell(3) - 1))/dz(cell(3))
4090
4091 end subroutine s_locate_cell
4092
4093 !> Transfer data into the temporal variables
4094 impure subroutine s_transfer_data_to_tmp()
4095
4096 integer :: k
4097
4098
4099# 1538 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4100
4101# 1538 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4102#if defined(MFC_OpenACC)
4103# 1538 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4104!$acc parallel loop gang vector default(present) private(k)
4105# 1538 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4106#elif defined(MFC_OpenMP)
4107# 1538 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4108
4109# 1538 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4110
4111# 1538 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4112
4113# 1538 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4114!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(k)
4115# 1538 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4116#endif
4117 do k = 1, n_el_bubs_loc
4118 gas_p(k, 2) = gas_p(k, 1)
4119 gas_mv(k, 2) = gas_mv(k, 1)
4120 intfc_rad(k, 2) = intfc_rad(k, 1)
4121 intfc_vel(k, 2) = intfc_vel(k, 1)
4122 mtn_pos(k,1:3,2) = mtn_pos(k,1:3,1)
4123 mtn_posprev(k,1:3,2) = mtn_posprev(k,1:3,1)
4124 mtn_vel(k,1:3,2) = mtn_vel(k,1:3,1)
4125 mtn_s(k,1:3,2) = mtn_s(k,1:3,1)
4126 end do
4127
4128# 1549 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4129#if defined(MFC_OpenACC)
4130# 1549 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4131!$acc end parallel loop
4132# 1549 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4133#elif defined(MFC_OpenMP)
4134# 1549 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4135
4136# 1549 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4137!$omp end target teams loop
4138# 1549 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4139#endif
4140
4141 end subroutine s_transfer_data_to_tmp
4142
4143 !> Determine if a bubble position lies within the current MPI subdomain including ghost cells
4144 function particle_in_domain(pos_part)
4145
4146 logical :: particle_in_domain
4147 real(wp), dimension(3), intent(in) :: pos_part
4148
4149 ! 2D
4150
4151 if (p == 0 .and. cyl_coord .neqv. .true.) then
4152 ! Defining a virtual z-axis that has the same dimensions as y-axis defined in the input file
4153 particle_in_domain = ((pos_part(1) < x_cb(m + buff_size - fd_number)) .and. (pos_part(1) >= x_cb(fd_number &
4154 & - buff_size - 1)) .and. (pos_part(2) < y_cb(n + buff_size - fd_number)) .and. (pos_part(2) &
4155 & >= y_cb(fd_number - buff_size - 1)) .and. (pos_part(3) < lag_params%charwidth/2._wp) &
4156 & .and. (pos_part(3) > -lag_params%charwidth/2._wp))
4157 else
4158 ! cyl_coord
4159 particle_in_domain = ((pos_part(1) < x_cb(m + buff_size - fd_number)) .and. (pos_part(1) >= x_cb(fd_number &
4160 & - buff_size - 1)) .and. (abs(pos_part(2)) < y_cb(n + buff_size - fd_number)) &
4161 & .and. (abs(pos_part(2)) >= max(y_cb(fd_number - buff_size - 1), 0._wp)))
4162 end if
4163
4164 ! 3D
4165 if (p > 0) then
4166 particle_in_domain = ((pos_part(1) < x_cb(m + buff_size - fd_number)) .and. (pos_part(1) >= x_cb(fd_number &
4167 & - buff_size - 1)) .and. (pos_part(2) < y_cb(n + buff_size - fd_number)) .and. (pos_part(2) &
4168 & >= y_cb(fd_number - buff_size - 1)) .and. (pos_part(3) < z_cb(p + buff_size - fd_number)) &
4169 & .and. (pos_part(3) >= z_cb(fd_number - buff_size - 1)))
4170 end if
4171
4172 ! For symmetric and wall boundary condition
4173 if (any(bc_x%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/))) then
4174 particle_in_domain = (particle_in_domain .and. (pos_part(1) >= x_cb(-1)))
4175 end if
4176 if (any(bc_x%end == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/))) then
4177 particle_in_domain = (particle_in_domain .and. (pos_part(1) < x_cb(m)))
4178 end if
4179 if (any(bc_y%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/)) .and. (.not. cyl_coord)) then
4180 particle_in_domain = (particle_in_domain .and. (pos_part(2) >= y_cb(-1)))
4181 end if
4182 if (any(bc_y%end == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/)) .and. (.not. cyl_coord)) then
4183 particle_in_domain = (particle_in_domain .and. (pos_part(2) < y_cb(n)))
4184 end if
4185 if (p > 0) then
4186 if (any(bc_z%beg == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/))) then
4187 particle_in_domain = (particle_in_domain .and. (pos_part(3) >= z_cb(-1)))
4188 end if
4189 if (any(bc_z%end == (/bc_reflective, bc_char_slip_wall, bc_slip_wall, bc_no_slip_wall/))) then
4190 particle_in_domain = (particle_in_domain .and. (pos_part(3) < z_cb(p)))
4191 end if
4192 end if
4193
4194 end function particle_in_domain
4195
4196 !> Determine if a Lagrangian bubble is within the physical domain excluding ghost cells
4198
4200 real(wp), dimension(3), intent(in) :: pos_part
4201
4202 particle_in_domain_physical = ((pos_part(1) < x_cb(m)) .and. (pos_part(1) >= x_cb(-1)) .and. (pos_part(2) < y_cb(n)) &
4203 & .and. (pos_part(2) >= y_cb(-1)))
4204
4205 if (p > 0) then
4206 particle_in_domain_physical = (particle_in_domain_physical .and. (pos_part(3) < z_cb(p)) .and. (pos_part(3) &
4207 & >= z_cb(-1)))
4208 end if
4209
4210 end function particle_in_domain_physical
4211
4212 !> Compute the gradient of a scalar field using second-order central differences on a non-uniform grid
4213 subroutine s_gradient_dir(q, dq, dir)
4214
4215 real(stp), dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:), intent(inout) :: q, dq
4216 integer, intent(in) :: dir
4217 integer :: i, j, k
4218
4219 if (dir == 1) then
4220 ! Gradient in x dir.
4221
4222# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4223
4224# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4225#if defined(MFC_OpenACC)
4226# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4227!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
4228# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4229#elif defined(MFC_OpenMP)
4230# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4231
4232# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4233
4234# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4235
4236# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4237!$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)
4238# 1631 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4239#endif
4240 do k = 0, p
4241 do j = 0, n
4242 do i = 0, m
4243 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, &
4244 & k)*(dx(i) + dx(i + 1))
4245 dq(i, j, k) = dq(i, j, k)/((dx(i) + dx(i - 1))*(dx(i) + dx(i + 1)))
4246 end do
4247 end do
4248 end do
4249
4250# 1641 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4251#if defined(MFC_OpenACC)
4252# 1641 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4253!$acc end parallel loop
4254# 1641 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4255#elif defined(MFC_OpenMP)
4256# 1641 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4257
4258# 1641 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4259!$omp end target teams loop
4260# 1641 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4261#endif
4262 else if (dir == 2) then
4263 ! Gradient in y dir.
4264
4265# 1644 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4266
4267# 1644 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4268#if defined(MFC_OpenACC)
4269# 1644 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4270!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
4271# 1644 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4272#elif defined(MFC_OpenMP)
4273# 1644 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4274
4275# 1644 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4276
4277# 1644 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4278
4279# 1644 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4280!$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)
4281# 1644 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4282#endif
4283 do k = 0, p
4284 do j = 0, n
4285 do i = 0, m
4286 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, &
4287 & k)*(dy(j) + dy(j + 1))
4288 dq(i, j, k) = dq(i, j, k)/((dy(j) + dy(j - 1))*(dy(j) + dy(j + 1)))
4289 end do
4290 end do
4291 end do
4292
4293# 1654 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4294#if defined(MFC_OpenACC)
4295# 1654 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4296!$acc end parallel loop
4297# 1654 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4298#elif defined(MFC_OpenMP)
4299# 1654 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4300
4301# 1654 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4302!$omp end target teams loop
4303# 1654 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4304#endif
4305 else if (dir == 3) then
4306 ! Gradient in z dir.
4307
4308# 1657 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4309
4310# 1657 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4311#if defined(MFC_OpenACC)
4312# 1657 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4313!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k)
4314# 1657 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4315#elif defined(MFC_OpenMP)
4316# 1657 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4317
4318# 1657 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4319
4320# 1657 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4321
4322# 1657 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4323!$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)
4324# 1657 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4325#endif
4326 do k = 0, p
4327 do j = 0, n
4328 do i = 0, m
4329 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, &
4330 & k - 1)*(dz(k) + dz(k + 1))
4331 dq(i, j, k) = dq(i, j, k)/((dz(k) + dz(k - 1))*(dz(k) + dz(k + 1)))
4332 end do
4333 end do
4334 end do
4335
4336# 1667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4337#if defined(MFC_OpenACC)
4338# 1667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4339!$acc end parallel loop
4340# 1667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4341#elif defined(MFC_OpenMP)
4342# 1667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4343
4344# 1667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4345!$omp end target teams loop
4346# 1667 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4347#endif
4348 end if
4349
4350 end subroutine s_gradient_dir
4351
4352 !> Write Lagrangian bubble state data at each time step
4353 impure subroutine s_write_lag_particles(qtime)
4354
4355 real(wp), intent(in) :: qtime
4356 integer :: k
4357 character(LEN=path_len + 2*name_len) :: file_loc
4358 logical :: file_exist
4359 character(LEN=25) :: fmt
4360
4361 write (file_loc, '(A,I0,A)') 'lag_bubble_evol_', proc_rank, '.dat'
4362 file_loc = trim(case_dir) // '/D/' // trim(file_loc)
4363 call my_inquire(trim(file_loc), file_exist)
4364
4365 if (precision == precision_single) then
4366 fmt = "(A16,A14,8A16)"
4367 else
4368 fmt = "(A24,A14,8A24)"
4369 end if
4370
4371 if (.not. file_exist) then
4372 open (lag_evol_id, file=trim(file_loc), form='formatted', position='rewind')
4373 write (lag_evol_id, fmt) 'currentTime', 'particleID', 'x', 'y', 'z', 'coreVaporMass', 'coreVaporConcentration', &
4374 & 'radius', 'interfaceVelocity', 'corePressure'
4375 else
4376 open (lag_evol_id, file=trim(file_loc), form='formatted', position='append')
4377 end if
4378
4379 end subroutine s_write_lag_particles
4380
4381 !> Open the file to write the evolution of the lagrangian bubbles on each time step.
4382 impure subroutine s_open_lag_bubble_evol()
4383
4384 character(LEN=path_len + 2*name_len) :: file_loc
4385 logical :: file_exist
4386 character(LEN=25) :: fmt
4387
4388 write (file_loc, '(A,I0,A)') 'lag_bubble_evol_', proc_rank, '.dat'
4389 file_loc = trim(case_dir) // '/D/' // trim(file_loc)
4390 call my_inquire(trim(file_loc), file_exist)
4391
4392 if (precision == precision_single) then
4393 fmt = "(A16,A14,8A16)"
4394 else
4395 fmt = "(A24,A14,8A24)"
4396 end if
4397
4398 if (.not. file_exist) then
4399 open (lag_evol_id, file=trim(file_loc), form='formatted', position='rewind')
4400 write (lag_evol_id, fmt) 'currentTime', 'particleID', 'x', 'y', 'z', 'coreVaporMass', 'coreVaporConcentration', &
4401 & 'radius', 'interfaceVelocity', 'corePressure'
4402 else
4403 open (lag_evol_id, file=trim(file_loc), form='formatted', position='append')
4404 end if
4405
4406 end subroutine s_open_lag_bubble_evol
4407
4408 !> Write on each time step the changes of the lagrangian bubbles.
4409 impure subroutine s_write_lag_bubble_evol(qtime)
4410
4411 real(wp), intent(in) :: qtime
4412 integer :: k, ios
4413 character(LEN=25) :: fmt
4414 character(LEN=path_len + 2*name_len) :: file_loc, path
4415 logical :: file_exist
4416
4417 if (precision == precision_single) then
4418 fmt = "(F16.8,I14,8F16.8)"
4419 else
4420 fmt = "(F24.16,I14,8F24.16)"
4421 end if
4422
4423 ! Cycle through list
4424 do k = 1, n_el_bubs_loc
4425 write (lag_evol_id, 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), &
4426 & gas_mv(k, 1)/(gas_mv(k, 1) + gas_mg(k)), intfc_rad(k, 1), intfc_vel(k, 1), gas_p(k, 1)
4427 end do
4428
4429 end subroutine s_write_lag_bubble_evol
4430
4431 impure subroutine s_close_lag_bubble_evol
4432
4433 close (lag_evol_id)
4434
4435 end subroutine s_close_lag_bubble_evol
4436
4438
4439 character(LEN=path_len + 2*name_len) :: file_loc
4440 logical :: file_exist
4441
4442 if (proc_rank == 0) then
4443 write (file_loc, '(A)') 'voidfraction.dat'
4444 file_loc = trim(case_dir) // '/D/' // trim(file_loc)
4445 call my_inquire(trim(file_loc), file_exist)
4446 if (.not. file_exist) then
4447 open (lag_void_id, file=trim(file_loc), form='formatted', position='rewind')
4448 ! write (12, *) 'currentTime, averageVoidFraction, ', & 'maximumVoidFraction, totalParticlesVolume' write (12, *)
4449 ! 'The averageVoidFraction value does ', & 'not reflect the real void fraction in the cloud since the ', & 'cells
4450 ! which do not have bubbles are not accounted'
4451 else
4452 open (lag_void_id, file=trim(file_loc), form='formatted', position='append')
4453 end if
4454 end if
4455
4456 end subroutine s_open_void_evol
4457
4458 !> Write some useful statistics related to the volume fraction of the particles (void fraction)
4459 impure subroutine s_write_void_evol(qtime)
4460
4461 real(wp), intent(in) :: qtime
4462 real(wp) :: volcell, voltot
4463 real(wp) :: lag_void_max, lag_void_avg, lag_vol
4464 real(wp) :: void_max_glb, void_avg_glb, vol_glb
4465 integer :: i, j, k
4466 character(LEN=path_len + 2*name_len) :: file_loc
4467 logical :: file_exist
4468
4469 lag_void_max = 0._wp
4470 lag_void_avg = 0._wp
4471 lag_vol = 0._wp
4472
4473# 1792 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4474
4475# 1792 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4476#if defined(MFC_OpenACC)
4477# 1792 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4478!$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)
4479# 1792 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4480#elif defined(MFC_OpenMP)
4481# 1792 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4482
4483# 1792 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4484
4485# 1792 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4486
4487# 1792 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4488!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(volcell) &
4489# 1792 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4490!$omp& reduction(+:lag_vol, lag_void_avg) reduction(MAX:lag_void_max) map(tofrom:lag_vol, lag_void_avg, lag_void_max)
4491# 1792 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4492#endif
4493# 1794 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4494 do k = 0, p
4495 do j = 0, n
4496 do i = 0, m
4497 lag_void_max = max(lag_void_max, 1._wp - q_beta(1)%sf(i, j, k))
4498 call s_get_char_vol(i, j, k, volcell)
4499 if ((1._wp - q_beta(1)%sf(i, j, k)) > 5.0d-11) then
4500 lag_void_avg = lag_void_avg + (1._wp - q_beta(1)%sf(i, j, k))*volcell
4501 lag_vol = lag_vol + volcell
4502 end if
4503 end do
4504 end do
4505 end do
4506
4507# 1806 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4508#if defined(MFC_OpenACC)
4509# 1806 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4510!$acc end parallel loop
4511# 1806 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4512#elif defined(MFC_OpenMP)
4513# 1806 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4514
4515# 1806 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4516!$omp end target teams loop
4517# 1806 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4518#endif
4519
4520#ifdef MFC_MPI
4521 if (num_procs > 1) then
4522 call s_mpi_allreduce_max(lag_void_max, void_max_glb)
4523 lag_void_max = void_max_glb
4524 call s_mpi_allreduce_sum(lag_vol, vol_glb)
4525 lag_vol = vol_glb
4526 call s_mpi_allreduce_sum(lag_void_avg, void_avg_glb)
4527 lag_void_avg = void_avg_glb
4528 end if
4529#endif
4530 voltot = lag_void_avg
4531 ! This voidavg value does not reflect the real void fraction in the cloud since the cell which does not have bubbles are not
4532 ! accounted
4533 if (lag_vol > 0._wp) lag_void_avg = lag_void_avg/lag_vol
4534
4535 if (proc_rank == 0) then
4536 write (lag_void_id, '(6X,4e24.8)') qtime, lag_void_avg, lag_void_max, voltot
4537 end if
4538
4539 end subroutine s_write_void_evol
4540
4542
4543 if (proc_rank == 0) close (lag_void_id)
4544
4545 end subroutine s_close_void_evol
4546
4547 !> Write restart files for the Lagrangian bubble solver
4548 impure subroutine s_write_restart_lag_bubbles(t_step)
4549
4550 ! Generic string used to store the address of a particular file
4551 integer, intent(in) :: t_step
4552 character(LEN=path_len + 2*name_len) :: file_loc
4553 logical :: file_exist
4554 integer :: bub_id, tot_part
4555 integer :: i, k
4556
4557#ifdef MFC_MPI
4558 ! For Parallel I/O
4559 integer :: ifile, ierr
4560 integer, dimension(MPI_STATUS_SIZE) :: status
4561 integer(KIND=MPI_OFFSET_KIND) :: disp
4562 integer :: view
4563 integer, dimension(2) :: gsizes, lsizes, start_idx_part
4564 integer, allocatable :: proc_bubble_counts(:)
4565 real(wp), dimension(1:1,1:lag_io_vars) :: dummy
4566 dummy = 0._wp
4567
4568 bub_id = 0
4569 if (n_el_bubs_loc /= 0) then
4570 do k = 1, n_el_bubs_loc
4571 if (particle_in_domain_physical(mtn_pos(k,1:3,1))) then
4572 bub_id = bub_id + 1
4573 end if
4574 end do
4575 end if
4576
4577 if (.not. parallel_io) return
4578
4579 allocate (proc_bubble_counts(num_procs))
4580
4581 lsizes(1) = bub_id
4582 lsizes(2) = lag_io_vars
4583
4584 ! Total number of particles
4585 call mpi_allreduce(bub_id, tot_part, 1, mpi_integer, mpi_sum, mpi_comm_world, ierr)
4586
4587 call mpi_allgather(bub_id, 1, mpi_integer, proc_bubble_counts, 1, mpi_integer, mpi_comm_world, ierr)
4588
4589 ! Calculate starting index for this processor's particles
4590 call mpi_exscan(lsizes(1), start_idx_part(1), 1, mpi_integer, mpi_sum, mpi_comm_world, ierr)
4591 if (proc_rank == 0) start_idx_part(1) = 0
4592 start_idx_part(2) = 0
4593
4594 gsizes(1) = tot_part
4595 gsizes(2) = lag_io_vars
4596
4597 write (file_loc, '(A,I0,A)') 'lag_bubbles_', t_step, '.dat'
4598 file_loc = trim(case_dir) // '/restart_data' // trim(mpiiofs) // trim(file_loc)
4599
4600 ! Clean up existing file
4601 if (proc_rank == 0) then
4602 inquire (file=trim(file_loc), exist=file_exist)
4603 if (file_exist) then
4604 call mpi_file_delete(file_loc, mpi_info_int, ierr)
4605 end if
4606 end if
4607
4608 call mpi_barrier(mpi_comm_world, ierr)
4609
4610 if (proc_rank == 0) then
4611 call mpi_file_open(mpi_comm_self, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
4612
4613 ! Write header using MPI I/O for consistency
4614 call mpi_file_write(ifile, tot_part, 1, mpi_integer, status, ierr)
4615 call mpi_file_write(ifile, mytime, 1, mpi_p, status, ierr)
4616 call mpi_file_write(ifile, dt, 1, mpi_p, status, ierr)
4617 call mpi_file_write(ifile, num_procs, 1, mpi_integer, status, ierr)
4618 call mpi_file_write(ifile, proc_bubble_counts, num_procs, mpi_integer, status, ierr)
4619
4620 call mpi_file_close(ifile, ierr)
4621 end if
4622
4623 call mpi_barrier(mpi_comm_world, ierr)
4624
4625 if (bub_id > 0) then
4626 allocate (mpi_io_data_lag_bubbles(max(1, bub_id),1:lag_io_vars))
4627
4628 i = 0
4629 do k = 1, n_el_bubs_loc
4630 if (.not. particle_in_domain_physical(mtn_pos(k,1:3,1))) cycle
4631 i = i + 1
4632 mpi_io_data_lag_bubbles(i, 1) = real(lag_id(k, 1))
4633 mpi_io_data_lag_bubbles(i,2:4) = mtn_pos(k,1:3,1)
4634 mpi_io_data_lag_bubbles(i,5:7) = mtn_posprev(k,1:3,1)
4635 mpi_io_data_lag_bubbles(i,8:10) = mtn_vel(k,1:3,1)
4636 mpi_io_data_lag_bubbles(i, 11) = intfc_rad(k, 1)
4637 mpi_io_data_lag_bubbles(i, 12) = intfc_vel(k, 1)
4638 mpi_io_data_lag_bubbles(i, 13) = bub_r0(k)
4639 mpi_io_data_lag_bubbles(i, 14) = rmax_stats(k)
4640 mpi_io_data_lag_bubbles(i, 15) = rmin_stats(k)
4641 mpi_io_data_lag_bubbles(i, 16) = bub_dphidt(k)
4642 mpi_io_data_lag_bubbles(i, 17) = gas_p(k, 1)
4643 mpi_io_data_lag_bubbles(i, 18) = gas_mv(k, 1)
4644 mpi_io_data_lag_bubbles(i, 19) = gas_mg(k)
4645 mpi_io_data_lag_bubbles(i, 20) = gas_betat(k)
4646 mpi_io_data_lag_bubbles(i, 21) = gas_betac(k)
4647 end do
4648
4649 call mpi_type_create_subarray(2, gsizes, lsizes, start_idx_part, mpi_order_fortran, mpi_p, view, ierr)
4650 call mpi_type_commit(view, ierr)
4651
4652 call mpi_file_open(mpi_comm_world, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
4653
4654 ! Skip header (written by rank 0)
4655 disp = int(sizeof(tot_part) + 2*sizeof(mytime) + sizeof(num_procs) + num_procs*sizeof(proc_bubble_counts(1)), &
4656 & mpi_offset_kind)
4657 call mpi_file_set_view(ifile, disp, mpi_p, view, 'native', mpi_info_int, ierr)
4658
4659 call mpi_file_write_all(ifile, mpi_io_data_lag_bubbles, lag_io_vars*bub_id, mpi_p, status, ierr)
4660
4661 call mpi_file_close(ifile, ierr)
4662
4663 deallocate (mpi_io_data_lag_bubbles)
4664 else
4665 call mpi_type_contiguous(0, mpi_p, view, ierr)
4666 call mpi_type_commit(view, ierr)
4667
4668 call mpi_file_open(mpi_comm_world, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
4669
4670 ! Skip header (written by rank 0)
4671 disp = int(sizeof(tot_part) + 2*sizeof(mytime) + sizeof(num_procs) + num_procs*sizeof(proc_bubble_counts(1)), &
4672 & mpi_offset_kind)
4673 call mpi_file_set_view(ifile, disp, mpi_p, view, 'native', mpi_info_int, ierr)
4674
4675 call mpi_file_write_all(ifile, dummy, 0, mpi_p, status, ierr)
4676
4677 call mpi_file_close(ifile, ierr)
4678 end if
4679
4680 deallocate (proc_bubble_counts)
4681#endif
4682
4683 end subroutine s_write_restart_lag_bubbles
4684
4685 !> Compute the maximum and minimum radius of each bubble
4687
4688 integer :: k
4689
4690
4691# 1978 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4692
4693# 1978 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4694#if defined(MFC_OpenACC)
4695# 1978 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4696!$acc parallel loop gang vector default(present) private(k) reduction(MAX:Rmax_glb) reduction(MIN:Rmin_glb) copy(Rmax_glb, Rmin_glb)
4697# 1978 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4698#elif defined(MFC_OpenMP)
4699# 1978 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4700
4701# 1978 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4702
4703# 1978 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4704
4705# 1978 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4706!$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) &
4707# 1978 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4708!$omp& reduction(MIN:Rmin_glb) map(tofrom:Rmax_glb, Rmin_glb)
4709# 1978 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4710#endif
4711# 1980 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4712 do k = 1, n_el_bubs_loc
4713 rmax_glb = max(rmax_glb, intfc_rad(k, 1)/bub_r0(k))
4714 rmin_glb = min(rmin_glb, intfc_rad(k, 1)/bub_r0(k))
4715 rmax_stats(k) = max(rmax_stats(k), intfc_rad(k, 1)/bub_r0(k))
4716 rmin_stats(k) = min(rmin_stats(k), intfc_rad(k, 1)/bub_r0(k))
4717 end do
4718
4719# 1986 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4720#if defined(MFC_OpenACC)
4721# 1986 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4722!$acc end parallel loop
4723# 1986 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4724#elif defined(MFC_OpenMP)
4725# 1986 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4726
4727# 1986 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4728!$omp end target teams loop
4729# 1986 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4730#endif
4731
4732 end subroutine s_calculate_lag_bubble_stats
4733
4734 impure subroutine s_open_lag_bubble_stats()
4735
4736 character(LEN=path_len + 2*name_len) :: file_loc
4737 character(LEN=20) :: fmt
4738 logical :: file_exist
4739
4740 write (file_loc, '(A,I0,A)') 'stats_lag_bubbles_', proc_rank, '.dat'
4741 file_loc = trim(case_dir) // '/D/' // trim(file_loc)
4742 call my_inquire(trim(file_loc), file_exist)
4743
4744 if (precision == precision_single) then
4745 fmt = "(A10,A14,5A16)"
4746 else
4747 fmt = "(A10,A14,5A24)"
4748 end if
4749
4750 if (.not. file_exist) then
4751 open (lag_stats_id, file=trim(file_loc), form='formatted', position='rewind')
4752 write (lag_stats_id, *) 'proc_rank, particleID, x, y, z, Rmax_glb, Rmin_glb'
4753 else
4754 open (lag_stats_id, file=trim(file_loc), form='formatted', position='append')
4755 end if
4756
4757 end subroutine s_open_lag_bubble_stats
4758
4759 !> Write the maximum and minimum radius of each bubble.
4760 impure subroutine s_write_lag_bubble_stats()
4761
4762 integer :: k
4763 character(LEN=path_len + 2*name_len) :: file_loc
4764 character(LEN=20) :: fmt
4765
4766
4767# 2022 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4768#if defined(MFC_OpenACC)
4769# 2022 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4770!$acc update host(Rmax_glb, Rmin_glb)
4771# 2022 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4772#elif defined(MFC_OpenMP)
4773# 2022 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4774!$omp target update from(Rmax_glb, Rmin_glb)
4775# 2022 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4776#endif
4777
4778 if (precision == precision_single) then
4779 fmt = "(I10,I14,5F16.8)"
4780 else
4781 fmt = "(I10,I14,5F24.16)"
4782 end if
4783
4784 do k = 1, n_el_bubs_loc
4785 write (lag_stats_id, fmt) proc_rank, lag_id(k, 1), mtn_pos(k, 1, 1), mtn_pos(k, 2, 1), mtn_pos(k, 3, 1), &
4787 end do
4788
4789 end subroutine s_write_lag_bubble_stats
4790
4792
4793 close (lag_stats_id)
4794
4795 end subroutine s_close_lag_bubble_stats
4796
4797 !> Copy a lag bubble from a src index to a destination index
4798 impure subroutine s_copy_lag_bubble(dest, src)
4799
4800 integer, intent(in) :: src, dest
4801
4802 bub_r0(dest) = bub_r0(src)
4803 rmax_stats(dest) = rmax_stats(src)
4804 rmin_stats(dest) = rmin_stats(src)
4805 gas_mg(dest) = gas_mg(src)
4806 gas_betat(dest) = gas_betat(src)
4807 gas_betac(dest) = gas_betac(src)
4808 bub_dphidt(dest) = bub_dphidt(src)
4809 lag_id(dest, 1) = lag_id(src, 1)
4810 gas_p(dest,1:2) = gas_p(src,1:2)
4811 gas_mv(dest,1:2) = gas_mv(src,1:2)
4812 intfc_rad(dest,1:2) = intfc_rad(src,1:2)
4813 intfc_vel(dest,1:2) = intfc_vel(src,1:2)
4814 mtn_vel(dest,1:3,1:2) = mtn_vel(src,1:3,1:2)
4815 mtn_s(dest,1:3,1:2) = mtn_s(src,1:3,1:2)
4816 mtn_pos(dest,1:3,1:2) = mtn_pos(src,1:3,1:2)
4817 mtn_posprev(dest,1:3,1:2) = mtn_posprev(src,1:3,1:2)
4820 gas_dpdt(dest,1:lag_num_ts) = gas_dpdt(src,1:lag_num_ts)
4821 gas_dmvdt(dest,1:lag_num_ts) = gas_dmvdt(src,1:lag_num_ts)
4822 mtn_dposdt(dest,1:3,1:lag_num_ts) = mtn_dposdt(src,1:3,1:lag_num_ts)
4823 mtn_dveldt(dest,1:3,1:lag_num_ts) = mtn_dveldt(src,1:3,1:lag_num_ts)
4824
4825 end subroutine s_copy_lag_bubble
4826
4828
4829 integer :: i
4830
4831 if (lag_params%write_void_evol) call s_close_void_evol
4832 if (lag_params%write_bubbles) call s_close_lag_bubble_evol()
4833 if (lag_params%write_bubbles_stats) call s_close_lag_bubble_stats()
4834
4835 do i = 1, q_beta_idx
4836#ifdef MFC_DEBUG
4837# 2082 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4838 block
4839# 2082 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4840 use iso_fortran_env, only: output_unit
4841# 2082 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4842
4843# 2082 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4844 print *, 'm_bubbles_EL.fpp:2082: ', '@:DEALLOCATE(q_beta(i)%sf)'
4845# 2082 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4846
4847# 2082 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4848 call flush (output_unit)
4849# 2082 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4850 end block
4851# 2082 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4852#endif
4853# 2082 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4854
4855# 2082 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4856#if defined(MFC_OpenACC)
4857# 2082 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4858!$acc exit data delete(q_beta(i)%sf)
4859# 2082 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4860#elif defined(MFC_OpenMP)
4861# 2082 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4862!$omp target exit data map(release:q_beta(i)%sf)
4863# 2082 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4864#endif
4865# 2082 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4866 deallocate (q_beta(i)%sf)
4867 if (lag_params%kahan_summation) then
4868#ifdef MFC_DEBUG
4869# 2084 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4870 block
4871# 2084 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4872 use iso_fortran_env, only: output_unit
4873# 2084 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4874
4875# 2084 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4876 print *, 'm_bubbles_EL.fpp:2084: ', '@:DEALLOCATE(kahan_comp(i)%sf)'
4877# 2084 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4878
4879# 2084 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4880 call flush (output_unit)
4881# 2084 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4882 end block
4883# 2084 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4884#endif
4885# 2084 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4886
4887# 2084 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4888#if defined(MFC_OpenACC)
4889# 2084 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4890!$acc exit data delete(kahan_comp(i)%sf)
4891# 2084 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4892#elif defined(MFC_OpenMP)
4893# 2084 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4894!$omp target exit data map(release:kahan_comp(i)%sf)
4895# 2084 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4896#endif
4897# 2084 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4898 deallocate (kahan_comp(i)%sf)
4899 end if
4900 end do
4901#ifdef MFC_DEBUG
4902# 2087 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4903 block
4904# 2087 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4905 use iso_fortran_env, only: output_unit
4906# 2087 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4907
4908# 2087 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4909 print *, 'm_bubbles_EL.fpp:2087: ', '@:DEALLOCATE(q_beta)'
4910# 2087 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4911
4912# 2087 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4913 call flush (output_unit)
4914# 2087 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4915 end block
4916# 2087 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4917#endif
4918# 2087 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4919
4920# 2087 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4921#if defined(MFC_OpenACC)
4922# 2087 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4923!$acc exit data delete(q_beta)
4924# 2087 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4925#elif defined(MFC_OpenMP)
4926# 2087 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4927!$omp target exit data map(release:q_beta)
4928# 2087 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4929#endif
4930# 2087 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4931 deallocate (q_beta)
4932 if (lag_params%kahan_summation) then
4933#ifdef MFC_DEBUG
4934# 2089 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4935 block
4936# 2089 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4937 use iso_fortran_env, only: output_unit
4938# 2089 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4939
4940# 2089 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4941 print *, 'm_bubbles_EL.fpp:2089: ', '@:DEALLOCATE(kahan_comp)'
4942# 2089 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4943
4944# 2089 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4945 call flush (output_unit)
4946# 2089 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4947 end block
4948# 2089 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4949#endif
4950# 2089 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4951
4952# 2089 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4953#if defined(MFC_OpenACC)
4954# 2089 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4955!$acc exit data delete(kahan_comp)
4956# 2089 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4957#elif defined(MFC_OpenMP)
4958# 2089 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4959!$omp target exit data map(release:kahan_comp)
4960# 2089 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4961#endif
4962# 2089 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4963 deallocate (kahan_comp)
4964 end if
4965
4966 ! Deallocating space
4967#ifdef MFC_DEBUG
4968# 2093 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4969 block
4970# 2093 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4971 use iso_fortran_env, only: output_unit
4972# 2093 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4973
4974# 2093 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4975 print *, 'm_bubbles_EL.fpp:2093: ', '@:DEALLOCATE(lag_id)'
4976# 2093 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4977
4978# 2093 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4979 call flush (output_unit)
4980# 2093 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4981 end block
4982# 2093 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4983#endif
4984# 2093 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4985
4986# 2093 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4987#if defined(MFC_OpenACC)
4988# 2093 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4989!$acc exit data delete(lag_id)
4990# 2093 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4991#elif defined(MFC_OpenMP)
4992# 2093 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4993!$omp target exit data map(release:lag_id)
4994# 2093 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4995#endif
4996# 2093 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
4997 deallocate (lag_id)
4998#ifdef MFC_DEBUG
4999# 2094 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5000 block
5001# 2094 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5002 use iso_fortran_env, only: output_unit
5003# 2094 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5004
5005# 2094 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5006 print *, 'm_bubbles_EL.fpp:2094: ', '@:DEALLOCATE(bub_R0)'
5007# 2094 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5008
5009# 2094 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5010 call flush (output_unit)
5011# 2094 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5012 end block
5013# 2094 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5014#endif
5015# 2094 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5016
5017# 2094 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5018#if defined(MFC_OpenACC)
5019# 2094 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5020!$acc exit data delete(bub_R0)
5021# 2094 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5022#elif defined(MFC_OpenMP)
5023# 2094 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5024!$omp target exit data map(release:bub_R0)
5025# 2094 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5026#endif
5027# 2094 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5028 deallocate (bub_r0)
5029#ifdef MFC_DEBUG
5030# 2095 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5031 block
5032# 2095 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5033 use iso_fortran_env, only: output_unit
5034# 2095 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5035
5036# 2095 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5037 print *, 'm_bubbles_EL.fpp:2095: ', '@:DEALLOCATE(Rmax_stats)'
5038# 2095 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5039
5040# 2095 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5041 call flush (output_unit)
5042# 2095 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5043 end block
5044# 2095 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5045#endif
5046# 2095 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5047
5048# 2095 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5049#if defined(MFC_OpenACC)
5050# 2095 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5051!$acc exit data delete(Rmax_stats)
5052# 2095 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5053#elif defined(MFC_OpenMP)
5054# 2095 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5055!$omp target exit data map(release:Rmax_stats)
5056# 2095 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5057#endif
5058# 2095 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5059 deallocate (rmax_stats)
5060#ifdef MFC_DEBUG
5061# 2096 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5062 block
5063# 2096 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5064 use iso_fortran_env, only: output_unit
5065# 2096 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5066
5067# 2096 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5068 print *, 'm_bubbles_EL.fpp:2096: ', '@:DEALLOCATE(Rmin_stats)'
5069# 2096 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5070
5071# 2096 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5072 call flush (output_unit)
5073# 2096 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5074 end block
5075# 2096 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5076#endif
5077# 2096 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5078
5079# 2096 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5080#if defined(MFC_OpenACC)
5081# 2096 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5082!$acc exit data delete(Rmin_stats)
5083# 2096 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5084#elif defined(MFC_OpenMP)
5085# 2096 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5086!$omp target exit data map(release:Rmin_stats)
5087# 2096 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5088#endif
5089# 2096 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5090 deallocate (rmin_stats)
5091#ifdef MFC_DEBUG
5092# 2097 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5093 block
5094# 2097 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5095 use iso_fortran_env, only: output_unit
5096# 2097 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5097
5098# 2097 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5099 print *, 'm_bubbles_EL.fpp:2097: ', '@:DEALLOCATE(gas_mg)'
5100# 2097 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5101
5102# 2097 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5103 call flush (output_unit)
5104# 2097 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5105 end block
5106# 2097 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5107#endif
5108# 2097 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5109
5110# 2097 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5111#if defined(MFC_OpenACC)
5112# 2097 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5113!$acc exit data delete(gas_mg)
5114# 2097 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5115#elif defined(MFC_OpenMP)
5116# 2097 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5117!$omp target exit data map(release:gas_mg)
5118# 2097 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5119#endif
5120# 2097 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5121 deallocate (gas_mg)
5122#ifdef MFC_DEBUG
5123# 2098 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5124 block
5125# 2098 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5126 use iso_fortran_env, only: output_unit
5127# 2098 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5128
5129# 2098 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5130 print *, 'm_bubbles_EL.fpp:2098: ', '@:DEALLOCATE(gas_betaT)'
5131# 2098 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5132
5133# 2098 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5134 call flush (output_unit)
5135# 2098 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5136 end block
5137# 2098 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5138#endif
5139# 2098 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5140
5141# 2098 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5142#if defined(MFC_OpenACC)
5143# 2098 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5144!$acc exit data delete(gas_betaT)
5145# 2098 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5146#elif defined(MFC_OpenMP)
5147# 2098 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5148!$omp target exit data map(release:gas_betaT)
5149# 2098 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5150#endif
5151# 2098 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5152 deallocate (gas_betat)
5153#ifdef MFC_DEBUG
5154# 2099 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5155 block
5156# 2099 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5157 use iso_fortran_env, only: output_unit
5158# 2099 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5159
5160# 2099 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5161 print *, 'm_bubbles_EL.fpp:2099: ', '@:DEALLOCATE(gas_betaC)'
5162# 2099 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5163
5164# 2099 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5165 call flush (output_unit)
5166# 2099 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5167 end block
5168# 2099 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5169#endif
5170# 2099 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5171
5172# 2099 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5173#if defined(MFC_OpenACC)
5174# 2099 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5175!$acc exit data delete(gas_betaC)
5176# 2099 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5177#elif defined(MFC_OpenMP)
5178# 2099 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5179!$omp target exit data map(release:gas_betaC)
5180# 2099 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5181#endif
5182# 2099 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5183 deallocate (gas_betac)
5184#ifdef MFC_DEBUG
5185# 2100 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5186 block
5187# 2100 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5188 use iso_fortran_env, only: output_unit
5189# 2100 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5190
5191# 2100 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5192 print *, 'm_bubbles_EL.fpp:2100: ', '@:DEALLOCATE(bub_dphidt)'
5193# 2100 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5194
5195# 2100 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5196 call flush (output_unit)
5197# 2100 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5198 end block
5199# 2100 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5200#endif
5201# 2100 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5202
5203# 2100 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5204#if defined(MFC_OpenACC)
5205# 2100 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5206!$acc exit data delete(bub_dphidt)
5207# 2100 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5208#elif defined(MFC_OpenMP)
5209# 2100 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5210!$omp target exit data map(release:bub_dphidt)
5211# 2100 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5212#endif
5213# 2100 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5214 deallocate (bub_dphidt)
5215#ifdef MFC_DEBUG
5216# 2101 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5217 block
5218# 2101 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5219 use iso_fortran_env, only: output_unit
5220# 2101 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5221
5222# 2101 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5223 print *, 'm_bubbles_EL.fpp:2101: ', '@:DEALLOCATE(gas_p)'
5224# 2101 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5225
5226# 2101 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5227 call flush (output_unit)
5228# 2101 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5229 end block
5230# 2101 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5231#endif
5232# 2101 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5233
5234# 2101 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5235#if defined(MFC_OpenACC)
5236# 2101 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5237!$acc exit data delete(gas_p)
5238# 2101 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5239#elif defined(MFC_OpenMP)
5240# 2101 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5241!$omp target exit data map(release:gas_p)
5242# 2101 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5243#endif
5244# 2101 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5245 deallocate (gas_p)
5246#ifdef MFC_DEBUG
5247# 2102 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5248 block
5249# 2102 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5250 use iso_fortran_env, only: output_unit
5251# 2102 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5252
5253# 2102 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5254 print *, 'm_bubbles_EL.fpp:2102: ', '@:DEALLOCATE(gas_mv)'
5255# 2102 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5256
5257# 2102 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5258 call flush (output_unit)
5259# 2102 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5260 end block
5261# 2102 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5262#endif
5263# 2102 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5264
5265# 2102 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5266#if defined(MFC_OpenACC)
5267# 2102 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5268!$acc exit data delete(gas_mv)
5269# 2102 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5270#elif defined(MFC_OpenMP)
5271# 2102 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5272!$omp target exit data map(release:gas_mv)
5273# 2102 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5274#endif
5275# 2102 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5276 deallocate (gas_mv)
5277#ifdef MFC_DEBUG
5278# 2103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5279 block
5280# 2103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5281 use iso_fortran_env, only: output_unit
5282# 2103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5283
5284# 2103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5285 print *, 'm_bubbles_EL.fpp:2103: ', '@:DEALLOCATE(intfc_rad)'
5286# 2103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5287
5288# 2103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5289 call flush (output_unit)
5290# 2103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5291 end block
5292# 2103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5293#endif
5294# 2103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5295
5296# 2103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5297#if defined(MFC_OpenACC)
5298# 2103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5299!$acc exit data delete(intfc_rad)
5300# 2103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5301#elif defined(MFC_OpenMP)
5302# 2103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5303!$omp target exit data map(release:intfc_rad)
5304# 2103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5305#endif
5306# 2103 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5307 deallocate (intfc_rad)
5308#ifdef MFC_DEBUG
5309# 2104 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5310 block
5311# 2104 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5312 use iso_fortran_env, only: output_unit
5313# 2104 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5314
5315# 2104 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5316 print *, 'm_bubbles_EL.fpp:2104: ', '@:DEALLOCATE(intfc_vel)'
5317# 2104 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5318
5319# 2104 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5320 call flush (output_unit)
5321# 2104 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5322 end block
5323# 2104 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5324#endif
5325# 2104 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5326
5327# 2104 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5328#if defined(MFC_OpenACC)
5329# 2104 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5330!$acc exit data delete(intfc_vel)
5331# 2104 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5332#elif defined(MFC_OpenMP)
5333# 2104 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5334!$omp target exit data map(release:intfc_vel)
5335# 2104 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5336#endif
5337# 2104 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5338 deallocate (intfc_vel)
5339#ifdef MFC_DEBUG
5340# 2105 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5341 block
5342# 2105 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5343 use iso_fortran_env, only: output_unit
5344# 2105 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5345
5346# 2105 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5347 print *, 'm_bubbles_EL.fpp:2105: ', '@:DEALLOCATE(mtn_pos)'
5348# 2105 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5349
5350# 2105 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5351 call flush (output_unit)
5352# 2105 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5353 end block
5354# 2105 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5355#endif
5356# 2105 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5357
5358# 2105 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5359#if defined(MFC_OpenACC)
5360# 2105 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5361!$acc exit data delete(mtn_pos)
5362# 2105 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5363#elif defined(MFC_OpenMP)
5364# 2105 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5365!$omp target exit data map(release:mtn_pos)
5366# 2105 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5367#endif
5368# 2105 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5369 deallocate (mtn_pos)
5370#ifdef MFC_DEBUG
5371# 2106 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5372 block
5373# 2106 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5374 use iso_fortran_env, only: output_unit
5375# 2106 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5376
5377# 2106 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5378 print *, 'm_bubbles_EL.fpp:2106: ', '@:DEALLOCATE(mtn_posPrev)'
5379# 2106 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5380
5381# 2106 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5382 call flush (output_unit)
5383# 2106 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5384 end block
5385# 2106 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5386#endif
5387# 2106 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5388
5389# 2106 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5390#if defined(MFC_OpenACC)
5391# 2106 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5392!$acc exit data delete(mtn_posPrev)
5393# 2106 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5394#elif defined(MFC_OpenMP)
5395# 2106 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5396!$omp target exit data map(release:mtn_posPrev)
5397# 2106 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5398#endif
5399# 2106 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5400 deallocate (mtn_posprev)
5401#ifdef MFC_DEBUG
5402# 2107 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5403 block
5404# 2107 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5405 use iso_fortran_env, only: output_unit
5406# 2107 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5407
5408# 2107 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5409 print *, 'm_bubbles_EL.fpp:2107: ', '@:DEALLOCATE(mtn_vel)'
5410# 2107 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5411
5412# 2107 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5413 call flush (output_unit)
5414# 2107 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5415 end block
5416# 2107 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5417#endif
5418# 2107 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5419
5420# 2107 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5421#if defined(MFC_OpenACC)
5422# 2107 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5423!$acc exit data delete(mtn_vel)
5424# 2107 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5425#elif defined(MFC_OpenMP)
5426# 2107 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5427!$omp target exit data map(release:mtn_vel)
5428# 2107 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5429#endif
5430# 2107 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5431 deallocate (mtn_vel)
5432#ifdef MFC_DEBUG
5433# 2108 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5434 block
5435# 2108 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5436 use iso_fortran_env, only: output_unit
5437# 2108 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5438
5439# 2108 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5440 print *, 'm_bubbles_EL.fpp:2108: ', '@:DEALLOCATE(mtn_s)'
5441# 2108 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5442
5443# 2108 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5444 call flush (output_unit)
5445# 2108 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5446 end block
5447# 2108 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5448#endif
5449# 2108 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5450
5451# 2108 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5452#if defined(MFC_OpenACC)
5453# 2108 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5454!$acc exit data delete(mtn_s)
5455# 2108 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5456#elif defined(MFC_OpenMP)
5457# 2108 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5458!$omp target exit data map(release:mtn_s)
5459# 2108 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5460#endif
5461# 2108 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5462 deallocate (mtn_s)
5463#ifdef MFC_DEBUG
5464# 2109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5465 block
5466# 2109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5467 use iso_fortran_env, only: output_unit
5468# 2109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5469
5470# 2109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5471 print *, 'm_bubbles_EL.fpp:2109: ', '@:DEALLOCATE(intfc_draddt)'
5472# 2109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5473
5474# 2109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5475 call flush (output_unit)
5476# 2109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5477 end block
5478# 2109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5479#endif
5480# 2109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5481
5482# 2109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5483#if defined(MFC_OpenACC)
5484# 2109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5485!$acc exit data delete(intfc_draddt)
5486# 2109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5487#elif defined(MFC_OpenMP)
5488# 2109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5489!$omp target exit data map(release:intfc_draddt)
5490# 2109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5491#endif
5492# 2109 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5493 deallocate (intfc_draddt)
5494#ifdef MFC_DEBUG
5495# 2110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5496 block
5497# 2110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5498 use iso_fortran_env, only: output_unit
5499# 2110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5500
5501# 2110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5502 print *, 'm_bubbles_EL.fpp:2110: ', '@:DEALLOCATE(intfc_dveldt)'
5503# 2110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5504
5505# 2110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5506 call flush (output_unit)
5507# 2110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5508 end block
5509# 2110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5510#endif
5511# 2110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5512
5513# 2110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5514#if defined(MFC_OpenACC)
5515# 2110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5516!$acc exit data delete(intfc_dveldt)
5517# 2110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5518#elif defined(MFC_OpenMP)
5519# 2110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5520!$omp target exit data map(release:intfc_dveldt)
5521# 2110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5522#endif
5523# 2110 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5524 deallocate (intfc_dveldt)
5525#ifdef MFC_DEBUG
5526# 2111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5527 block
5528# 2111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5529 use iso_fortran_env, only: output_unit
5530# 2111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5531
5532# 2111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5533 print *, 'm_bubbles_EL.fpp:2111: ', '@:DEALLOCATE(gas_dpdt)'
5534# 2111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5535
5536# 2111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5537 call flush (output_unit)
5538# 2111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5539 end block
5540# 2111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5541#endif
5542# 2111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5543
5544# 2111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5545#if defined(MFC_OpenACC)
5546# 2111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5547!$acc exit data delete(gas_dpdt)
5548# 2111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5549#elif defined(MFC_OpenMP)
5550# 2111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5551!$omp target exit data map(release:gas_dpdt)
5552# 2111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5553#endif
5554# 2111 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5555 deallocate (gas_dpdt)
5556#ifdef MFC_DEBUG
5557# 2112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5558 block
5559# 2112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5560 use iso_fortran_env, only: output_unit
5561# 2112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5562
5563# 2112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5564 print *, 'm_bubbles_EL.fpp:2112: ', '@:DEALLOCATE(gas_dmvdt)'
5565# 2112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5566
5567# 2112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5568 call flush (output_unit)
5569# 2112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5570 end block
5571# 2112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5572#endif
5573# 2112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5574
5575# 2112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5576#if defined(MFC_OpenACC)
5577# 2112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5578!$acc exit data delete(gas_dmvdt)
5579# 2112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5580#elif defined(MFC_OpenMP)
5581# 2112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5582!$omp target exit data map(release:gas_dmvdt)
5583# 2112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5584#endif
5585# 2112 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5586 deallocate (gas_dmvdt)
5587#ifdef MFC_DEBUG
5588# 2113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5589 block
5590# 2113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5591 use iso_fortran_env, only: output_unit
5592# 2113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5593
5594# 2113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5595 print *, 'm_bubbles_EL.fpp:2113: ', '@:DEALLOCATE(mtn_dposdt)'
5596# 2113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5597
5598# 2113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5599 call flush (output_unit)
5600# 2113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5601 end block
5602# 2113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5603#endif
5604# 2113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5605
5606# 2113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5607#if defined(MFC_OpenACC)
5608# 2113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5609!$acc exit data delete(mtn_dposdt)
5610# 2113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5611#elif defined(MFC_OpenMP)
5612# 2113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5613!$omp target exit data map(release:mtn_dposdt)
5614# 2113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5615#endif
5616# 2113 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5617 deallocate (mtn_dposdt)
5618#ifdef MFC_DEBUG
5619# 2114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5620 block
5621# 2114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5622 use iso_fortran_env, only: output_unit
5623# 2114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5624
5625# 2114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5626 print *, 'm_bubbles_EL.fpp:2114: ', '@:DEALLOCATE(mtn_dveldt)'
5627# 2114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5628
5629# 2114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5630 call flush (output_unit)
5631# 2114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5632 end block
5633# 2114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5634#endif
5635# 2114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5636
5637# 2114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5638#if defined(MFC_OpenACC)
5639# 2114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5640!$acc exit data delete(mtn_dveldt)
5641# 2114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5642#elif defined(MFC_OpenMP)
5643# 2114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5644!$omp target exit data map(release:mtn_dveldt)
5645# 2114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5646#endif
5647# 2114 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5648 deallocate (mtn_dveldt)
5649
5650#ifdef MFC_DEBUG
5651# 2116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5652 block
5653# 2116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5654 use iso_fortran_env, only: output_unit
5655# 2116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5656
5657# 2116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5658 print *, 'm_bubbles_EL.fpp:2116: ', '@:DEALLOCATE(keep_bubble)'
5659# 2116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5660
5661# 2116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5662 call flush (output_unit)
5663# 2116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5664 end block
5665# 2116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5666#endif
5667# 2116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5668
5669# 2116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5670#if defined(MFC_OpenACC)
5671# 2116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5672!$acc exit data delete(keep_bubble)
5673# 2116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5674#elif defined(MFC_OpenMP)
5675# 2116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5676!$omp target exit data map(release:keep_bubble)
5677# 2116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5678#endif
5679# 2116 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5680 deallocate (keep_bubble)
5681#ifdef MFC_DEBUG
5682# 2117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5683 block
5684# 2117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5685 use iso_fortran_env, only: output_unit
5686# 2117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5687
5688# 2117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5689 print *, 'm_bubbles_EL.fpp:2117: ', '@:DEALLOCATE(wrap_bubble_loc, wrap_bubble_dir)'
5690# 2117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5691
5692# 2117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5693 call flush (output_unit)
5694# 2117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5695 end block
5696# 2117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5697#endif
5698# 2117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5699
5700# 2117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5701#if defined(MFC_OpenACC)
5702# 2117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5703!$acc exit data delete(wrap_bubble_loc, wrap_bubble_dir)
5704# 2117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5705#elif defined(MFC_OpenMP)
5706# 2117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5707!$omp target exit data map(release:wrap_bubble_loc, wrap_bubble_dir)
5708# 2117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5709#endif
5710# 2117 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5711 deallocate (wrap_bubble_loc, wrap_bubble_dir)
5712
5713 if (lag_params%vel_model > 0 .and. lag_params%pressure_force) then
5714#ifdef MFC_DEBUG
5715# 2120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5716 block
5717# 2120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5718 use iso_fortran_env, only: output_unit
5719# 2120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5720
5721# 2120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5722 print *, 'm_bubbles_EL.fpp:2120: ', '@:DEALLOCATE(grad_p_x)'
5723# 2120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5724
5725# 2120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5726 call flush (output_unit)
5727# 2120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5728 end block
5729# 2120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5730#endif
5731# 2120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5732
5733# 2120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5734#if defined(MFC_OpenACC)
5735# 2120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5736!$acc exit data delete(grad_p_x)
5737# 2120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5738#elif defined(MFC_OpenMP)
5739# 2120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5740!$omp target exit data map(release:grad_p_x)
5741# 2120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5742#endif
5743# 2120 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5744 deallocate (grad_p_x)
5745#ifdef MFC_DEBUG
5746# 2121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5747 block
5748# 2121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5749 use iso_fortran_env, only: output_unit
5750# 2121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5751
5752# 2121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5753 print *, 'm_bubbles_EL.fpp:2121: ', '@:DEALLOCATE(fd_coeff_x_pgrad)'
5754# 2121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5755
5756# 2121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5757 call flush (output_unit)
5758# 2121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5759 end block
5760# 2121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5761#endif
5762# 2121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5763
5764# 2121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5765#if defined(MFC_OpenACC)
5766# 2121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5767!$acc exit data delete(fd_coeff_x_pgrad)
5768# 2121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5769#elif defined(MFC_OpenMP)
5770# 2121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5771!$omp target exit data map(release:fd_coeff_x_pgrad)
5772# 2121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5773#endif
5774# 2121 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5775 deallocate (fd_coeff_x_pgrad)
5776 if (n > 0) then
5777#ifdef MFC_DEBUG
5778# 2123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5779 block
5780# 2123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5781 use iso_fortran_env, only: output_unit
5782# 2123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5783
5784# 2123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5785 print *, 'm_bubbles_EL.fpp:2123: ', '@:DEALLOCATE(grad_p_y)'
5786# 2123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5787
5788# 2123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5789 call flush (output_unit)
5790# 2123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5791 end block
5792# 2123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5793#endif
5794# 2123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5795
5796# 2123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5797#if defined(MFC_OpenACC)
5798# 2123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5799!$acc exit data delete(grad_p_y)
5800# 2123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5801#elif defined(MFC_OpenMP)
5802# 2123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5803!$omp target exit data map(release:grad_p_y)
5804# 2123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5805#endif
5806# 2123 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5807 deallocate (grad_p_y)
5808#ifdef MFC_DEBUG
5809# 2124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5810 block
5811# 2124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5812 use iso_fortran_env, only: output_unit
5813# 2124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5814
5815# 2124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5816 print *, 'm_bubbles_EL.fpp:2124: ', '@:DEALLOCATE(fd_coeff_y_pgrad)'
5817# 2124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5818
5819# 2124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5820 call flush (output_unit)
5821# 2124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5822 end block
5823# 2124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5824#endif
5825# 2124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5826
5827# 2124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5828#if defined(MFC_OpenACC)
5829# 2124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5830!$acc exit data delete(fd_coeff_y_pgrad)
5831# 2124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5832#elif defined(MFC_OpenMP)
5833# 2124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5834!$omp target exit data map(release:fd_coeff_y_pgrad)
5835# 2124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5836#endif
5837# 2124 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5838 deallocate (fd_coeff_y_pgrad)
5839 if (p > 0) then
5840#ifdef MFC_DEBUG
5841# 2126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5842 block
5843# 2126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5844 use iso_fortran_env, only: output_unit
5845# 2126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5846
5847# 2126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5848 print *, 'm_bubbles_EL.fpp:2126: ', '@:DEALLOCATE(grad_p_z)'
5849# 2126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5850
5851# 2126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5852 call flush (output_unit)
5853# 2126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5854 end block
5855# 2126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5856#endif
5857# 2126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5858
5859# 2126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5860#if defined(MFC_OpenACC)
5861# 2126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5862!$acc exit data delete(grad_p_z)
5863# 2126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5864#elif defined(MFC_OpenMP)
5865# 2126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5866!$omp target exit data map(release:grad_p_z)
5867# 2126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5868#endif
5869# 2126 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5870 deallocate (grad_p_z)
5871#ifdef MFC_DEBUG
5872# 2127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5873 block
5874# 2127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5875 use iso_fortran_env, only: output_unit
5876# 2127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5877
5878# 2127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5879 print *, 'm_bubbles_EL.fpp:2127: ', '@:DEALLOCATE(fd_coeff_z_pgrad)'
5880# 2127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5881
5882# 2127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5883 call flush (output_unit)
5884# 2127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5885 end block
5886# 2127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5887#endif
5888# 2127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5889
5890# 2127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5891#if defined(MFC_OpenACC)
5892# 2127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5893!$acc exit data delete(fd_coeff_z_pgrad)
5894# 2127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5895#elif defined(MFC_OpenMP)
5896# 2127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5897!$omp target exit data map(release:fd_coeff_z_pgrad)
5898# 2127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5899#endif
5900# 2127 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5901 deallocate (fd_coeff_z_pgrad)
5902 end if
5903 end if
5904 end if
5905
5906#ifdef MFC_DEBUG
5907# 2132 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5908 block
5909# 2132 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5910 use iso_fortran_env, only: output_unit
5911# 2132 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5912
5913# 2132 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5914 print *, 'm_bubbles_EL.fpp:2132: ', '@:DEALLOCATE(cell_list_start)'
5915# 2132 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5916
5917# 2132 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5918 call flush (output_unit)
5919# 2132 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5920 end block
5921# 2132 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5922#endif
5923# 2132 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5924
5925# 2132 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5926#if defined(MFC_OpenACC)
5927# 2132 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5928!$acc exit data delete(cell_list_start)
5929# 2132 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5930#elif defined(MFC_OpenMP)
5931# 2132 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5932!$omp target exit data map(release:cell_list_start)
5933# 2132 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5934#endif
5935# 2132 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5936 deallocate (cell_list_start)
5937#ifdef MFC_DEBUG
5938# 2133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5939 block
5940# 2133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5941 use iso_fortran_env, only: output_unit
5942# 2133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5943
5944# 2133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5945 print *, 'm_bubbles_EL.fpp:2133: ', '@:DEALLOCATE(cell_list_count)'
5946# 2133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5947
5948# 2133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5949 call flush (output_unit)
5950# 2133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5951 end block
5952# 2133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5953#endif
5954# 2133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5955
5956# 2133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5957#if defined(MFC_OpenACC)
5958# 2133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5959!$acc exit data delete(cell_list_count)
5960# 2133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5961#elif defined(MFC_OpenMP)
5962# 2133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5963!$omp target exit data map(release:cell_list_count)
5964# 2133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5965#endif
5966# 2133 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5967 deallocate (cell_list_count)
5968#ifdef MFC_DEBUG
5969# 2134 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5970 block
5971# 2134 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5972 use iso_fortran_env, only: output_unit
5973# 2134 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5974
5975# 2134 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5976 print *, 'm_bubbles_EL.fpp:2134: ', '@:DEALLOCATE(cell_list_idx)'
5977# 2134 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5978
5979# 2134 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5980 call flush (output_unit)
5981# 2134 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5982 end block
5983# 2134 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5984#endif
5985# 2134 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5986
5987# 2134 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5988#if defined(MFC_OpenACC)
5989# 2134 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5990!$acc exit data delete(cell_list_idx)
5991# 2134 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5992#elif defined(MFC_OpenMP)
5993# 2134 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5994!$omp target exit data map(release:cell_list_idx)
5995# 2134 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5996#endif
5997# 2134 "/home/runner/work/MFC/MFC/src/simulation/m_bubbles_EL.fpp"
5998 deallocate (cell_list_idx)
5999
6000 end subroutine s_finalize_lagrangian_solver
6001
6002end 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 of 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, dimension(:,:), allocatable wrap_bubble_dir
impure subroutine s_write_lag_bubble_evol(qtime)
Write on each time step the changes of the lagrangian bubbles.
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_close_void_evol
impure subroutine s_write_restart_lag_bubbles(t_step)
Write restart files for the Lagrangian bubble solver.
integer, parameter lag_evol_id
impure subroutine s_close_lag_bubble_evol
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.
integer, parameter lag_stats_id
impure subroutine s_add_bubbles(inputbubble, q_cons_vf, bub_id)
Add a new bubble from input data for a fresh start.
real(wp), dimension(:), allocatable rmin_stats
Minimum radius.
real(wp), dimension(:,:), allocatable gas_mv
Vapor mass in the bubble.
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.
impure subroutine s_open_lag_bubble_evol()
Open the file to write the evolution of the lagrangian bubbles on each time step.
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.
integer, dimension(:), allocatable keep_bubble
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.
subroutine s_smear_voidfraction(bc_type)
Smear the bubble effects onto the Eulerian grid.
real(wp), dimension(:), allocatable rmax_stats
Maximum radius.
impure subroutine s_write_void_evol(qtime)
Write some useful statistics related to the volume fraction of the particles (void fraction).
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_enforce_el_bubbles_boundary_conditions(q_prim_vf)
impure subroutine s_copy_lag_bubble(dest, src)
Copy a lag bubble from a src index to a destination index.
subroutine s_open_void_evol
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)
impure subroutine s_read_input_bubbles(q_cons_vf, bc_type)
Read initial bubble data from input files.
real(wp), dimension(:,:), allocatable intfc_vel
Velocity of the bubble interface.
impure subroutine s_initialize_bubbles_el_module(q_cons_vf, bc_type)
Initializes the lagrangian subgrid bubble solver.
subroutine s_close_lag_bubble_stats
impure subroutine s_open_lag_bubble_stats()
impure subroutine s_update_lagrange_tdv_rk(q_prim_vf, bc_type, stage)
Update Lagrangian bubble variables using TVD Runge-Kutta time stepping.
subroutine s_compute_bubble_el_dynamics(q_prim_vf, bc_type, stage)
Contains the bubble dynamics subroutines.
real(wp), dimension(:,:), allocatable gas_p
Pressure in the bubble.
type(scalar_field), dimension(:), allocatable kahan_comp
Kahan compensation for q_beta accumulation.
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()
integer, parameter lag_void_id
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.
integer, dimension(:,:), allocatable wrap_bubble_loc
subroutine s_get_pinf(bub_id, q_prim_vf, ptype, f_pinfl, cell, preterm1, term2, romega)
Compute the bubble driving pressure p_inf.
Bubble-dynamics procedures for ensemble- and volume-averaged model.
Platform-specific file and directory operations: create, delete, inquire, getcwd, and basename.
Compile-time constant parameters: default values, tolerances, and physical constants.
integer, parameter time_stepper_rk2
integer, parameter time_stepper_rk1
integer, parameter time_stepper_rk3
integer, parameter precision_single
Finite difference operators for computing divergence of velocity fields.
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
real(wp), dimension(:), allocatable, target z_cb
type(bounds_info), dimension(:), allocatable pcomm_coords
Local rank physical domain bounds.
real(wp), dimension(:), allocatable, target y_cb
real(wp), dimension(:), allocatable, target x_cb
Basic floating-point utilities: approximate equality, default detection, and coordinate bounds.
Utility routines for bubble model setup, coordinate transforms, array sampling, and special functions...
Ghost-node immersed boundary method: locates ghost/image points, computes interpolation coefficients,...
MPI communication layer: domain decomposition, halo exchange, reductions, and parallel I/O setup.
impure subroutine s_mpi_abort(prnt, code)
The subroutine terminates the MPI execution environment.
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.