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