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