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