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