MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_mpi_proxy.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
2!>
3!! @file
4!! @brief Contains module m_mpi_proxy
5
6# 1 "/home/runner/work/MFC/MFC/src/common/include/case.fpp" 1
7! This file exists so that Fypp can be run without generating case.fpp files for
8! each target. This is useful when generating documentation, for example. This
9! should also let MFC be built with CMake directly, without invoking mfc.sh.
10
11! For pre-process.
12# 8 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
13
14! For moving immersed boundaries in simulation
15# 12 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
16# 6 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp" 2
17# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
18# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
19# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
20# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
21# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
22# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
23# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
24# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
25
26# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
27# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
29
30# 15 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
31# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
32# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
33
34# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
35
36# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
37
38# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39
40# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41
42# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43
44# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45
46# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
47
48# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49! New line at end of file is required for FYPP
50# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
51# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
52# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
53# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
56# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
58
59# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
60# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
61# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
62
63# 15 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
64# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
65# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
66
67# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
68
69# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
70
71# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
72
73# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
74
75# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
76
77# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
78
79# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
80
81# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
82! New line at end of file is required for FYPP
83# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
84
85# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
86# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
87# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
88# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
89# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
90
91# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
92
93# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
94
95# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
96
97# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
98
99# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
100
101# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
102
103# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
104
105# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
106
107# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
108
109# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
110
111# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
112
113# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
114
115# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116
117# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 126 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124
125# 156 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 197 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128
129# 211 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130
131# 236 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132
133# 247 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134
135# 249 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136# 260 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137
138# 310 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139
140# 320 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141
142# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
143
144# 339 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
145
146# 356 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
147
148# 366 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
149
150# 373 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
151
152# 379 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
153
154# 385 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
155
156# 391 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
157
158# 397 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
159
160# 403 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
161! New line at end of file is required for FYPP
162# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
163# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
164# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
165# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
166# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
167# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
168# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
169# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
170
171# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
172# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
173# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
174
175# 15 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
176# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
177# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
178
179# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
180
181# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
182
183# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
184
185# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
186
187# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
188
189# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
190
191# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
192
193# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
194! New line at end of file is required for FYPP
195# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
196
197# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
198
199# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
200
201# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
202
203# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
204
205# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
206
207# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
208
209# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
210
211# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
212
213# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
214
215# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
216
217# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
218
219# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220
221# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222
223# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224
225# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
226
227# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
228
229# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
230
231# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
232
233# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
234
235# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
236
237# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
238
239# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
240
241# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
242
243# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
244
245# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
246
247# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
248
249# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
250
251# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
252! New line at end of file is required for FYPP
253# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
254
255! GPU parallel region (scalar reductions, maxval/minval)
256# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
257
258! GPU parallel loop over threads (most common GPU macro)
259# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
260
261! Required closing for GPU_PARALLEL_LOOP
262# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
263
264! Mark routine for device compilation
265# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
266
267! Declare device-resident data
268# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
269
270! Inner loop within a GPU parallel region
271# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
272
273! Scoped GPU data region
274# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
275
276! Host code with device pointers (for MPI with GPU buffers)
277# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
278
279! Allocate device memory (unscoped)
280# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
281
282! Free device memory
283# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284
285! Atomic operation on device
286# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
287
288! End atomic capture block
289# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
290
291! Copy data between host and device
292# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
293
294! Synchronization barrier
295# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
296
297! Import GPU library module (openacc or omp_lib)
298# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
299
300! Emit code only for AMD compiler
301# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
302
303! Emit code for non-Cray compilers
304# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
305
306! Emit code only for Cray compiler
307# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
308
309! Emit code for non-NVIDIA compilers
310# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
311
312# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
313# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
314! New line at end of file is required for FYPP
315# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
316
317# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
318
319! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
320! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
321! example see misc/nvidia_uvm/bind.sh.
322# 52 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
323
324! Allocate and create GPU device memory
325# 72 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
326
327! Free GPU device memory and deallocate
328# 80 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
329
330! Cray-specific GPU pointer setup for vector fields
331# 104 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
332
333! Cray-specific GPU pointer setup for scalar fields
334# 120 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
335
336! Cray-specific GPU pointer setup for acoustic source spatials
337# 145 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
338
339# 151 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
340
341# 158 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
342! New line at end of file is required for FYPP
343# 7 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp" 2
344
345!> @brief MPI halo exchange, domain decomposition, and buffer packing/unpacking for the simulation solver
347
348#ifdef MFC_MPI
349 use mpi !< message passing interface (mpi) module
350#endif
351
353 use m_helper
356 use m_mpi_common
357 use m_nvtx
358 use ieee_arithmetic
359
360 implicit none
361
362 integer, private, allocatable, dimension(:) :: ib_buff_send !< IB marker send buffer for halo exchange
363 integer, private, allocatable, dimension(:) :: ib_buff_recv !< IB marker receive buffer for halo exchange
364 integer :: i_halo_size
365
366# 28 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
367#if defined(MFC_OpenACC)
368# 28 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
369!$acc declare create(i_halo_size)
370# 28 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
371#elif defined(MFC_OpenMP)
372# 28 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
373!$omp declare target (i_halo_size)
374# 28 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
375#endif
376
377 integer, dimension(-1:1,-1:1,-1:1) :: p_send_counts, p_recv_counts
378 integer, dimension(:,:,:,:), allocatable :: p_send_ids
379 character(len=1), dimension(:), allocatable :: p_send_buff, p_recv_buff
381 !! EL Bubbles communication variables
382 integer, parameter :: max_neighbors = 27
386 integer :: n_neighbors
387
388# 40 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
389#if defined(MFC_OpenACC)
390# 40 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
391!$acc declare create(p_send_counts)
392# 40 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
393#elif defined(MFC_OpenMP)
394# 40 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
395!$omp declare target (p_send_counts)
396# 40 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
397#endif
398
399contains
400
401 !> Initialize the MPI proxy module
403
404#ifdef MFC_MPI
405 if (ib) then
406 if (n > 0) then
407 if (p > 0) then
408 i_halo_size = -1 + buff_size*(m + 2*buff_size + 1)*(n + 2*buff_size + 1)*(p + 2*buff_size + 1) &
409 & /(cells_bounds%mnp_min + 2*buff_size + 1)
410 else
411 i_halo_size = -1 + buff_size*(cells_bounds%mn_max + 2*buff_size + 1)
412 end if
413 else
415 end if
416
417
418# 60 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
419#if defined(MFC_OpenACC)
420# 60 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
421!$acc update device(i_halo_size)
422# 60 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
423#elif defined(MFC_OpenMP)
424# 60 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
425!$omp target update to(i_halo_size)
426# 60 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
427#endif
428#ifdef MFC_DEBUG
429# 61 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
430 block
431# 61 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
432 use iso_fortran_env, only: output_unit
433# 61 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
434
435# 61 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
436 print *, 'm_mpi_proxy.fpp:61: ', '@:ALLOCATE(ib_buff_send(0:i_halo_size), ib_buff_recv(0:i_halo_size))'
437# 61 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
438
439# 61 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
440 call flush (output_unit)
441# 61 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
442 end block
443# 61 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
444#endif
445# 61 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
447# 61 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
448
449# 61 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
450
451# 61 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
452
453# 61 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
454#if defined(MFC_OpenACC)
455# 61 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
456!$acc enter data create(ib_buff_send, ib_buff_recv)
457# 61 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
458#elif defined(MFC_OpenMP)
459# 61 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
460!$omp target enter data map(always,alloc:ib_buff_send, ib_buff_recv)
461# 61 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
462#endif
463 end if
464#endif
465
466 end subroutine s_initialize_mpi_proxy_module
467
468 !! Initialize the MPI buffers and variables required for the particle communication.
469 subroutine s_initialize_particles_mpi(lag_num_ts)
470
471 integer, intent(in) :: lag_num_ts
472 integer :: i, j, k
473 integer :: real_size, int_size, nReal
474 integer :: ierr !< Generic flag used to identify and report MPI errors
475
476#ifdef MFC_MPI
477 call mpi_pack_size(1, mpi_p, mpi_comm_world, real_size, ierr)
478 call mpi_pack_size(1, mpi_integer, mpi_comm_world, int_size, ierr)
479 nreal = 7 + 16*2 + 10*lag_num_ts
480 p_var_size = nreal*real_size + int_size
481 p_buff_size = lag_params%nBubs_glb*p_var_size
482#ifdef MFC_DEBUG
483# 81 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
484 block
485# 81 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
486 use iso_fortran_env, only: output_unit
487# 81 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
488
489# 81 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
490 print *, 'm_mpi_proxy.fpp:81: ', '@:ALLOCATE(p_send_buff(0:p_buff_size), p_recv_buff(0:p_buff_size))'
491# 81 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
492
493# 81 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
494 call flush (output_unit)
495# 81 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
496 end block
497# 81 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
498#endif
499# 81 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
501# 81 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
502
503# 81 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
504
505# 81 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
506
507# 81 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
508#if defined(MFC_OpenACC)
509# 81 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
510!$acc enter data create(p_send_buff, p_recv_buff)
511# 81 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
512#elif defined(MFC_OpenMP)
513# 81 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
514!$omp target enter data map(always,alloc:p_send_buff, p_recv_buff)
515# 81 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
516#endif
517#ifdef MFC_DEBUG
518# 82 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
519 block
520# 82 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
521 use iso_fortran_env, only: output_unit
522# 82 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
523
524# 82 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
525 print *, 'm_mpi_proxy.fpp:82: ', '@:ALLOCATE(p_send_ids(nidx(1)%beg:nidx(1)%end, nidx(2)%beg:nidx(2)%end, nidx(3)%beg:nidx(3)%end, 0:lag_params%nBubs_glb))'
526# 82 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
527
528# 82 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
529 call flush (output_unit)
530# 82 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
531 end block
532# 82 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
533#endif
534# 82 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
535 allocate (p_send_ids(nidx(1)%beg:nidx(1)%end, nidx(2)%beg:nidx(2)%end, nidx(3)%beg:nidx(3)%end, 0:lag_params%nBubs_glb))
536# 82 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
537
538# 82 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
539
540# 82 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
541#if defined(MFC_OpenACC)
542# 82 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
543!$acc enter data create(p_send_ids)
544# 82 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
545#elif defined(MFC_OpenMP)
546# 82 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
547!$omp target enter data map(always,alloc:p_send_ids)
548# 82 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
549#endif
550 ! First, collect all neighbor information
551 n_neighbors = 0
552 do k = nidx(3)%beg, nidx(3)%end
553 do j = nidx(2)%beg, nidx(2)%end
554 do i = nidx(1)%beg, nidx(1)%end
555 if (abs(i) + abs(j) + abs(k) /= 0) then
560 end if
561 end do
562 end do
563 end do
564#endif
565
566 end subroutine s_initialize_particles_mpi
567
568 !> Since only the processor with rank 0 reads and verifies the consistency of user inputs, these are initially not available to
569 !! the other processors. Then, the purpose of this subroutine is to distribute the user inputs to the remaining processors in
570 !! the communicator.
571 impure subroutine s_mpi_bcast_user_inputs()
572
573#ifdef MFC_MPI
574 integer :: i, j !< Generic loop iterator
575 integer :: ierr !< Generic flag used to identify and report MPI errors
576
577 ! Generated: case_dir, namelist scalars (INT/LOG/REAL), CASE_OPT guard, fluid_pp loop,
578 ! bub_pp guard, lag_params guard, chem_params guard
579# 1 "/home/runner/work/MFC/MFC/build/include/simulation/generated_bcast.fpp" 1
580! AUTO-GENERATED - do not edit directly. Regenerate: cmake reconfigure
581!
582 call mpi_bcast(case_dir, len(case_dir), mpi_character, 0, mpi_comm_world, ierr)
583
584 ! Integer scalars
585 call mpi_bcast(adap_dt_max_iters, 1, mpi_integer, 0, mpi_comm_world, ierr)
586 call mpi_bcast(avg_state, 1, mpi_integer, 0, mpi_comm_world, ierr)
587 call mpi_bcast(bubble_model, 1, mpi_integer, 0, mpi_comm_world, ierr)
588 call mpi_bcast(collision_model, 1, mpi_integer, 0, mpi_comm_world, ierr)
589 call mpi_bcast(collision_temporal_resolution, 1, mpi_integer, 0, mpi_comm_world, ierr)
590 call mpi_bcast(fd_order, 1, mpi_integer, 0, mpi_comm_world, ierr)
591 call mpi_bcast(ib_force_stride, 1, mpi_integer, 0, mpi_comm_world, ierr)
592 call mpi_bcast(ib_neighborhood_radius, 1, mpi_integer, 0, mpi_comm_world, ierr)
593 call mpi_bcast(int_comp, 1, mpi_integer, 0, mpi_comm_world, ierr)
594 call mpi_bcast(low_mach, 1, mpi_integer, 0, mpi_comm_world, ierr)
595 call mpi_bcast(m, 1, mpi_integer, 0, mpi_comm_world, ierr)
596 call mpi_bcast(model_eqns, 1, mpi_integer, 0, mpi_comm_world, ierr)
597 call mpi_bcast(n, 1, mpi_integer, 0, mpi_comm_world, ierr)
598 call mpi_bcast(n_start, 1, mpi_integer, 0, mpi_comm_world, ierr)
599 call mpi_bcast(num_bc_patches, 1, mpi_integer, 0, mpi_comm_world, ierr)
600 call mpi_bcast(num_ibs, 1, mpi_integer, 0, mpi_comm_world, ierr)
601 call mpi_bcast(num_igr_iters, 1, mpi_integer, 0, mpi_comm_world, ierr)
602 call mpi_bcast(num_igr_warm_start_iters, 1, mpi_integer, 0, mpi_comm_world, ierr)
603 call mpi_bcast(num_particle_clouds, 1, mpi_integer, 0, mpi_comm_world, ierr)
604 call mpi_bcast(num_probes, 1, mpi_integer, 0, mpi_comm_world, ierr)
605 call mpi_bcast(num_source, 1, mpi_integer, 0, mpi_comm_world, ierr)
606 call mpi_bcast(num_stl_models, 1, mpi_integer, 0, mpi_comm_world, ierr)
607 call mpi_bcast(num_turbulent_sources, 1, mpi_integer, 0, mpi_comm_world, ierr)
608 call mpi_bcast(nv_uvm_igr_temps_on_gpu, 1, mpi_integer, 0, mpi_comm_world, ierr)
609 call mpi_bcast(p, 1, mpi_integer, 0, mpi_comm_world, ierr)
610 call mpi_bcast(precision, 1, mpi_integer, 0, mpi_comm_world, ierr)
611 call mpi_bcast(relax_model, 1, mpi_integer, 0, mpi_comm_world, ierr)
612 call mpi_bcast(riemann_solver, 1, mpi_integer, 0, mpi_comm_world, ierr)
613 call mpi_bcast(synth_n_shells, 1, mpi_integer, 0, mpi_comm_world, ierr)
614 call mpi_bcast(synth_seed, 1, mpi_integer, 0, mpi_comm_world, ierr)
615 call mpi_bcast(t_step_old, 1, mpi_integer, 0, mpi_comm_world, ierr)
616 call mpi_bcast(t_step_print, 1, mpi_integer, 0, mpi_comm_world, ierr)
617 call mpi_bcast(t_step_save, 1, mpi_integer, 0, mpi_comm_world, ierr)
618 call mpi_bcast(t_step_start, 1, mpi_integer, 0, mpi_comm_world, ierr)
619 call mpi_bcast(t_step_stop, 1, mpi_integer, 0, mpi_comm_world, ierr)
620 call mpi_bcast(thermal, 1, mpi_integer, 0, mpi_comm_world, ierr)
621 call mpi_bcast(time_stepper, 1, mpi_integer, 0, mpi_comm_world, ierr)
622 call mpi_bcast(wave_speeds, 1, mpi_integer, 0, mpi_comm_world, ierr)
623
624 ! Logical scalars
625 call mpi_bcast(acoustic_source, 1, mpi_logical, 0, mpi_comm_world, ierr)
626 call mpi_bcast(adap_dt, 1, mpi_logical, 0, mpi_comm_world, ierr)
627 call mpi_bcast(adv_n, 1, mpi_logical, 0, mpi_comm_world, ierr)
628 call mpi_bcast(alt_soundspeed, 1, mpi_logical, 0, mpi_comm_world, ierr)
629 call mpi_bcast(bf_spatial_support, 1, mpi_logical, 0, mpi_comm_world, ierr)
630 call mpi_bcast(bf_x, 1, mpi_logical, 0, mpi_comm_world, ierr)
631 call mpi_bcast(bf_y, 1, mpi_logical, 0, mpi_comm_world, ierr)
632 call mpi_bcast(bf_z, 1, mpi_logical, 0, mpi_comm_world, ierr)
633 call mpi_bcast(bubbles_euler, 1, mpi_logical, 0, mpi_comm_world, ierr)
634 call mpi_bcast(bubbles_lagrange, 1, mpi_logical, 0, mpi_comm_world, ierr)
635 call mpi_bcast(cfl_adap_dt, 1, mpi_logical, 0, mpi_comm_world, ierr)
636 call mpi_bcast(cfl_const_dt, 1, mpi_logical, 0, mpi_comm_world, ierr)
637 call mpi_bcast(cont_damage, 1, mpi_logical, 0, mpi_comm_world, ierr)
638 call mpi_bcast(cyl_coord, 1, mpi_logical, 0, mpi_comm_world, ierr)
639 call mpi_bcast(down_sample, 1, mpi_logical, 0, mpi_comm_world, ierr)
640 call mpi_bcast(fft_wrt, 1, mpi_logical, 0, mpi_comm_world, ierr)
641 call mpi_bcast(file_per_process, 1, mpi_logical, 0, mpi_comm_world, ierr)
642 call mpi_bcast(hll_u_interface, 1, mpi_logical, 0, mpi_comm_world, ierr)
643 call mpi_bcast(hyper_cleaning, 1, mpi_logical, 0, mpi_comm_world, ierr)
644 call mpi_bcast(hypo_hll_interface_rhs, 1, mpi_logical, 0, mpi_comm_world, ierr)
645 call mpi_bcast(hypoelasticity, 1, mpi_logical, 0, mpi_comm_world, ierr)
646 call mpi_bcast(ib, 1, mpi_logical, 0, mpi_comm_world, ierr)
647 call mpi_bcast(ib_force_wrt, 1, mpi_logical, 0, mpi_comm_world, ierr)
648 call mpi_bcast(ib_state_wrt, 1, mpi_logical, 0, mpi_comm_world, ierr)
649 call mpi_bcast(many_ib_patch_parallelism, 1, mpi_logical, 0, mpi_comm_world, ierr)
650 call mpi_bcast(mixture_err, 1, mpi_logical, 0, mpi_comm_world, ierr)
651 call mpi_bcast(mp_weno, 1, mpi_logical, 0, mpi_comm_world, ierr)
652 call mpi_bcast(mpp_lim, 1, mpi_logical, 0, mpi_comm_world, ierr)
653 call mpi_bcast(null_weights, 1, mpi_logical, 0, mpi_comm_world, ierr)
654 call mpi_bcast(nv_uvm_out_of_core, 1, mpi_logical, 0, mpi_comm_world, ierr)
655 call mpi_bcast(nv_uvm_pref_gpu, 1, mpi_logical, 0, mpi_comm_world, ierr)
656 call mpi_bcast(parallel_io, 1, mpi_logical, 0, mpi_comm_world, ierr)
657 call mpi_bcast(polydisperse, 1, mpi_logical, 0, mpi_comm_world, ierr)
658 call mpi_bcast(polytropic, 1, mpi_logical, 0, mpi_comm_world, ierr)
659 call mpi_bcast(prim_vars_wrt, 1, mpi_logical, 0, mpi_comm_world, ierr)
660 call mpi_bcast(probe_wrt, 1, mpi_logical, 0, mpi_comm_world, ierr)
661 call mpi_bcast(qbmm, 1, mpi_logical, 0, mpi_comm_world, ierr)
662 call mpi_bcast(rdma_mpi, 1, mpi_logical, 0, mpi_comm_world, ierr)
663 call mpi_bcast(reactive_burn, 1, mpi_logical, 0, mpi_comm_world, ierr)
664 call mpi_bcast(relax, 1, mpi_logical, 0, mpi_comm_world, ierr)
665 call mpi_bcast(riemann_hypo_adc, 1, mpi_logical, 0, mpi_comm_world, ierr)
666 call mpi_bcast(run_time_info, 1, mpi_logical, 0, mpi_comm_world, ierr)
667 call mpi_bcast(surface_tension, 1, mpi_logical, 0, mpi_comm_world, ierr)
668 call mpi_bcast(synthetic_turbulence, 1, mpi_logical, 0, mpi_comm_world, ierr)
669 call mpi_bcast(weno_re_flux, 1, mpi_logical, 0, mpi_comm_world, ierr)
670 call mpi_bcast(weno_avg, 1, mpi_logical, 0, mpi_comm_world, ierr)
671
672 ! Real scalars
673 call mpi_bcast(adc_kappa, 1, mpi_p, 0, mpi_comm_world, ierr)
674 call mpi_bcast(bx0, 1, mpi_p, 0, mpi_comm_world, ierr)
675 call mpi_bcast(ca, 1, mpi_p, 0, mpi_comm_world, ierr)
676 call mpi_bcast(r0ref, 1, mpi_p, 0, mpi_comm_world, ierr)
677 call mpi_bcast(re_inv, 1, mpi_p, 0, mpi_comm_world, ierr)
678 call mpi_bcast(web, 1, mpi_p, 0, mpi_comm_world, ierr)
679 call mpi_bcast(adap_dt_tol, 1, mpi_p, 0, mpi_comm_world, ierr)
680 call mpi_bcast(alf_factor, 1, mpi_p, 0, mpi_comm_world, ierr)
681 call mpi_bcast(alpha_bar, 1, mpi_p, 0, mpi_comm_world, ierr)
682 call mpi_bcast(cfl_target, 1, mpi_p, 0, mpi_comm_world, ierr)
683 call mpi_bcast(coefficient_of_restitution, 1, mpi_p, 0, mpi_comm_world, ierr)
684 call mpi_bcast(collision_time, 1, mpi_p, 0, mpi_comm_world, ierr)
685 call mpi_bcast(cont_damage_s, 1, mpi_p, 0, mpi_comm_world, ierr)
686 call mpi_bcast(dt, 1, mpi_p, 0, mpi_comm_world, ierr)
687 call mpi_bcast(g_x, 1, mpi_p, 0, mpi_comm_world, ierr)
688 call mpi_bcast(g_y, 1, mpi_p, 0, mpi_comm_world, ierr)
689 call mpi_bcast(g_z, 1, mpi_p, 0, mpi_comm_world, ierr)
690 call mpi_bcast(hyper_cleaning_speed, 1, mpi_p, 0, mpi_comm_world, ierr)
691 call mpi_bcast(hyper_cleaning_tau, 1, mpi_p, 0, mpi_comm_world, ierr)
692 call mpi_bcast(ib_coefficient_of_friction, 1, mpi_p, 0, mpi_comm_world, ierr)
693 call mpi_bcast(ic_beta, 1, mpi_p, 0, mpi_comm_world, ierr)
694 call mpi_bcast(ic_eps, 1, mpi_p, 0, mpi_comm_world, ierr)
695 call mpi_bcast(k_x, 1, mpi_p, 0, mpi_comm_world, ierr)
696 call mpi_bcast(k_y, 1, mpi_p, 0, mpi_comm_world, ierr)
697 call mpi_bcast(k_z, 1, mpi_p, 0, mpi_comm_world, ierr)
698 call mpi_bcast(muscl_eps, 1, mpi_p, 0, mpi_comm_world, ierr)
699 call mpi_bcast(p_x, 1, mpi_p, 0, mpi_comm_world, ierr)
700 call mpi_bcast(p_y, 1, mpi_p, 0, mpi_comm_world, ierr)
701 call mpi_bcast(p_z, 1, mpi_p, 0, mpi_comm_world, ierr)
702 call mpi_bcast(palpha_eps, 1, mpi_p, 0, mpi_comm_world, ierr)
703 call mpi_bcast(pi_fac, 1, mpi_p, 0, mpi_comm_world, ierr)
704 call mpi_bcast(poly_sigma, 1, mpi_p, 0, mpi_comm_world, ierr)
705 call mpi_bcast(ptgalpha_eps, 1, mpi_p, 0, mpi_comm_world, ierr)
706 call mpi_bcast(ramp_ratio, 1, mpi_p, 0, mpi_comm_world, ierr)
707 call mpi_bcast(sigma, 1, mpi_p, 0, mpi_comm_world, ierr)
708 call mpi_bcast(synth_u_inf, 1, mpi_p, 0, mpi_comm_world, ierr)
709 call mpi_bcast(t_save, 1, mpi_p, 0, mpi_comm_world, ierr)
710 call mpi_bcast(t_stop, 1, mpi_p, 0, mpi_comm_world, ierr)
711 call mpi_bcast(tau_star, 1, mpi_p, 0, mpi_comm_world, ierr)
712 call mpi_bcast(teno_ct, 1, mpi_p, 0, mpi_comm_world, ierr)
713 call mpi_bcast(w_x, 1, mpi_p, 0, mpi_comm_world, ierr)
714 call mpi_bcast(w_y, 1, mpi_p, 0, mpi_comm_world, ierr)
715 call mpi_bcast(w_z, 1, mpi_p, 0, mpi_comm_world, ierr)
716 call mpi_bcast(weno_eps, 1, mpi_p, 0, mpi_comm_world, ierr)
717
718 ! Case-optimization scalars (absent when constants are baked in)
719# 141 "/home/runner/work/MFC/MFC/build/include/simulation/generated_bcast.fpp"
720 call mpi_bcast(igr_iter_solver, 1, mpi_integer, 0, mpi_comm_world, ierr)
721 call mpi_bcast(igr_order, 1, mpi_integer, 0, mpi_comm_world, ierr)
722 call mpi_bcast(muscl_lim, 1, mpi_integer, 0, mpi_comm_world, ierr)
723 call mpi_bcast(muscl_order, 1, mpi_integer, 0, mpi_comm_world, ierr)
724 call mpi_bcast(nb, 1, mpi_integer, 0, mpi_comm_world, ierr)
725 call mpi_bcast(num_fluids, 1, mpi_integer, 0, mpi_comm_world, ierr)
726 call mpi_bcast(recon_type, 1, mpi_integer, 0, mpi_comm_world, ierr)
727 call mpi_bcast(weno_order, 1, mpi_integer, 0, mpi_comm_world, ierr)
728 call mpi_bcast(igr, 1, mpi_logical, 0, mpi_comm_world, ierr)
729 call mpi_bcast(igr_pres_lim, 1, mpi_logical, 0, mpi_comm_world, ierr)
730 call mpi_bcast(mapped_weno, 1, mpi_logical, 0, mpi_comm_world, ierr)
731 call mpi_bcast(mhd, 1, mpi_logical, 0, mpi_comm_world, ierr)
732 call mpi_bcast(relativity, 1, mpi_logical, 0, mpi_comm_world, ierr)
733 call mpi_bcast(teno, 1, mpi_logical, 0, mpi_comm_world, ierr)
734 call mpi_bcast(viscous, 1, mpi_logical, 0, mpi_comm_world, ierr)
735 call mpi_bcast(wenoz, 1, mpi_logical, 0, mpi_comm_world, ierr)
736 call mpi_bcast(wenoz_q, 1, mpi_p, 0, mpi_comm_world, ierr)
737# 159 "/home/runner/work/MFC/MFC/build/include/simulation/generated_bcast.fpp"
738
739 ! fluid_pp member loop
740 do i = 1, num_fluids_max
741 call mpi_bcast(fluid_pp(i)%G, 1, mpi_p, 0, mpi_comm_world, ierr)
742 call mpi_bcast(fluid_pp(i)%K, 1, mpi_p, 0, mpi_comm_world, ierr)
743 call mpi_bcast(fluid_pp(i)%cv, 1, mpi_p, 0, mpi_comm_world, ierr)
744 call mpi_bcast(fluid_pp(i)%eos, 1, mpi_integer, 0, mpi_comm_world, ierr)
745 call mpi_bcast(fluid_pp(i)%gamma, 1, mpi_p, 0, mpi_comm_world, ierr)
746 call mpi_bcast(fluid_pp(i)%hb_m, 1, mpi_p, 0, mpi_comm_world, ierr)
747 call mpi_bcast(fluid_pp(i)%jwl_a, 1, mpi_p, 0, mpi_comm_world, ierr)
748 call mpi_bcast(fluid_pp(i)%jwl_b, 1, mpi_p, 0, mpi_comm_world, ierr)
749 call mpi_bcast(fluid_pp(i)%jwl_omega, 1, mpi_p, 0, mpi_comm_world, ierr)
750 call mpi_bcast(fluid_pp(i)%jwl_r1, 1, mpi_p, 0, mpi_comm_world, ierr)
751 call mpi_bcast(fluid_pp(i)%jwl_r2, 1, mpi_p, 0, mpi_comm_world, ierr)
752 call mpi_bcast(fluid_pp(i)%jwl_rho0, 1, mpi_p, 0, mpi_comm_world, ierr)
753 call mpi_bcast(fluid_pp(i)%jwl_t0, 1, mpi_p, 0, mpi_comm_world, ierr)
754 call mpi_bcast(fluid_pp(i)%k_therm, 1, mpi_p, 0, mpi_comm_world, ierr)
755 call mpi_bcast(fluid_pp(i)%mg_c0, 1, mpi_p, 0, mpi_comm_world, ierr)
756 call mpi_bcast(fluid_pp(i)%mg_gruneisen, 1, mpi_p, 0, mpi_comm_world, ierr)
757 call mpi_bcast(fluid_pp(i)%mg_gruneisen_a, 1, mpi_p, 0, mpi_comm_world, ierr)
758 call mpi_bcast(fluid_pp(i)%mg_rho0, 1, mpi_p, 0, mpi_comm_world, ierr)
759 call mpi_bcast(fluid_pp(i)%mg_s, 1, mpi_p, 0, mpi_comm_world, ierr)
760 call mpi_bcast(fluid_pp(i)%mg_s2, 1, mpi_p, 0, mpi_comm_world, ierr)
761 call mpi_bcast(fluid_pp(i)%mg_s3, 1, mpi_p, 0, mpi_comm_world, ierr)
762 call mpi_bcast(fluid_pp(i)%mg_t0, 1, mpi_p, 0, mpi_comm_world, ierr)
763 call mpi_bcast(fluid_pp(i)%mu_bulk, 1, mpi_p, 0, mpi_comm_world, ierr)
764 call mpi_bcast(fluid_pp(i)%mu_max, 1, mpi_p, 0, mpi_comm_world, ierr)
765 call mpi_bcast(fluid_pp(i)%mu_min, 1, mpi_p, 0, mpi_comm_world, ierr)
766 call mpi_bcast(fluid_pp(i)%nn, 1, mpi_p, 0, mpi_comm_world, ierr)
767 call mpi_bcast(fluid_pp(i)%non_newtonian, 1, mpi_logical, 0, mpi_comm_world, ierr)
768 call mpi_bcast(fluid_pp(i)%pi_inf, 1, mpi_p, 0, mpi_comm_world, ierr)
769 call mpi_bcast(fluid_pp(i)%qv, 1, mpi_p, 0, mpi_comm_world, ierr)
770 call mpi_bcast(fluid_pp(i)%qvp, 1, mpi_p, 0, mpi_comm_world, ierr)
771 call mpi_bcast(fluid_pp(i)%tau0, 1, mpi_p, 0, mpi_comm_world, ierr)
772 call mpi_bcast(fluid_pp(i)%vinet_gruneisen, 1, mpi_p, 0, mpi_comm_world, ierr)
773 call mpi_bcast(fluid_pp(i)%vinet_gruneisen_a, 1, mpi_p, 0, mpi_comm_world, ierr)
774 call mpi_bcast(fluid_pp(i)%vinet_k0, 1, mpi_p, 0, mpi_comm_world, ierr)
775 call mpi_bcast(fluid_pp(i)%vinet_k0p, 1, mpi_p, 0, mpi_comm_world, ierr)
776 call mpi_bcast(fluid_pp(i)%vinet_rho0, 1, mpi_p, 0, mpi_comm_world, ierr)
777 call mpi_bcast(fluid_pp(i)%vinet_t0, 1, mpi_p, 0, mpi_comm_world, ierr)
778 call mpi_bcast(fluid_pp(i)%Re(1), 2, mpi_p, 0, mpi_comm_world, ierr)
779 end do
780
781 ! bub_pp members (under bubbles guard)
782 if (bubbles_euler .or. bubbles_lagrange) then
783 call mpi_bcast(bub_pp%M_g, 1, mpi_p, 0, mpi_comm_world, ierr)
784 call mpi_bcast(bub_pp%M_v, 1, mpi_p, 0, mpi_comm_world, ierr)
785 call mpi_bcast(bub_pp%R0ref, 1, mpi_p, 0, mpi_comm_world, ierr)
786 call mpi_bcast(bub_pp%R_g, 1, mpi_p, 0, mpi_comm_world, ierr)
787 call mpi_bcast(bub_pp%R_v, 1, mpi_p, 0, mpi_comm_world, ierr)
788 call mpi_bcast(bub_pp%T0ref, 1, mpi_p, 0, mpi_comm_world, ierr)
789 call mpi_bcast(bub_pp%cp_g, 1, mpi_p, 0, mpi_comm_world, ierr)
790 call mpi_bcast(bub_pp%cp_v, 1, mpi_p, 0, mpi_comm_world, ierr)
791 call mpi_bcast(bub_pp%gam_g, 1, mpi_p, 0, mpi_comm_world, ierr)
792 call mpi_bcast(bub_pp%gam_v, 1, mpi_p, 0, mpi_comm_world, ierr)
793 call mpi_bcast(bub_pp%k_g, 1, mpi_p, 0, mpi_comm_world, ierr)
794 call mpi_bcast(bub_pp%k_v, 1, mpi_p, 0, mpi_comm_world, ierr)
795 call mpi_bcast(bub_pp%mu_g, 1, mpi_p, 0, mpi_comm_world, ierr)
796 call mpi_bcast(bub_pp%mu_l, 1, mpi_p, 0, mpi_comm_world, ierr)
797 call mpi_bcast(bub_pp%mu_v, 1, mpi_p, 0, mpi_comm_world, ierr)
798 call mpi_bcast(bub_pp%p0ref, 1, mpi_p, 0, mpi_comm_world, ierr)
799 call mpi_bcast(bub_pp%pv, 1, mpi_p, 0, mpi_comm_world, ierr)
800 call mpi_bcast(bub_pp%rho0ref, 1, mpi_p, 0, mpi_comm_world, ierr)
801 call mpi_bcast(bub_pp%ss, 1, mpi_p, 0, mpi_comm_world, ierr)
802 call mpi_bcast(bub_pp%vd, 1, mpi_p, 0, mpi_comm_world, ierr)
803 end if
804
805 ! lag_params members (under bubbles_lagrange guard)
806 if (bubbles_lagrange) then
807 call mpi_bcast(lag_params%gravity_force, 1, mpi_logical, 0, mpi_comm_world, ierr)
808 call mpi_bcast(lag_params%heatTransfer_model, 1, mpi_logical, 0, mpi_comm_world, ierr)
809 call mpi_bcast(lag_params%kahan_summation, 1, mpi_logical, 0, mpi_comm_world, ierr)
810 call mpi_bcast(lag_params%massTransfer_model, 1, mpi_logical, 0, mpi_comm_world, ierr)
811 call mpi_bcast(lag_params%pressure_corrector, 1, mpi_logical, 0, mpi_comm_world, ierr)
812 call mpi_bcast(lag_params%pressure_force, 1, mpi_logical, 0, mpi_comm_world, ierr)
813 call mpi_bcast(lag_params%write_bubbles, 1, mpi_logical, 0, mpi_comm_world, ierr)
814 call mpi_bcast(lag_params%write_bubbles_stats, 1, mpi_logical, 0, mpi_comm_world, ierr)
815 call mpi_bcast(lag_params%write_void_evol, 1, mpi_logical, 0, mpi_comm_world, ierr)
816 call mpi_bcast(lag_params%charNz, 1, mpi_integer, 0, mpi_comm_world, ierr)
817 call mpi_bcast(lag_params%cluster_type, 1, mpi_integer, 0, mpi_comm_world, ierr)
818 call mpi_bcast(lag_params%drag_model, 1, mpi_integer, 0, mpi_comm_world, ierr)
819 call mpi_bcast(lag_params%nBubs_glb, 1, mpi_integer, 0, mpi_comm_world, ierr)
820 call mpi_bcast(lag_params%smooth_type, 1, mpi_integer, 0, mpi_comm_world, ierr)
821 call mpi_bcast(lag_params%solver_approach, 1, mpi_integer, 0, mpi_comm_world, ierr)
822 call mpi_bcast(lag_params%vel_model, 1, mpi_integer, 0, mpi_comm_world, ierr)
823 call mpi_bcast(lag_params%charwidth, 1, mpi_p, 0, mpi_comm_world, ierr)
824 call mpi_bcast(lag_params%epsilonb, 1, mpi_p, 0, mpi_comm_world, ierr)
825 call mpi_bcast(lag_params%valmaxvoid, 1, mpi_p, 0, mpi_comm_world, ierr)
826 call mpi_bcast(lag_params%input_path, len(lag_params%input_path), mpi_character, 0, mpi_comm_world, ierr)
827 end if
828
829 ! chem_params members (under chemistry guard)
830 if (chemistry) then
831 call mpi_bcast(chem_params%adap_substeps, 1, mpi_logical, 0, mpi_comm_world, ierr)
832 call mpi_bcast(chem_params%diffusion, 1, mpi_logical, 0, mpi_comm_world, ierr)
833 call mpi_bcast(chem_params%reactions, 1, mpi_logical, 0, mpi_comm_world, ierr)
834 call mpi_bcast(chem_params%gamma_method, 1, mpi_integer, 0, mpi_comm_world, ierr)
835 call mpi_bcast(chem_params%reaction_substeps, 1, mpi_integer, 0, mpi_comm_world, ierr)
836 call mpi_bcast(chem_params%reaction_substeps_max, 1, mpi_integer, 0, mpi_comm_world, ierr)
837 call mpi_bcast(chem_params%transport_model, 1, mpi_integer, 0, mpi_comm_world, ierr)
838 end if
839
840 ! rburn members (under reactive_burn guard)
841 if (reactive_burn) then
842 call mpi_bcast(rburn%k, 1, mpi_p, 0, mpi_comm_world, ierr)
843 call mpi_bcast(rburn%n, 1, mpi_p, 0, mpi_comm_world, ierr)
844 call mpi_bcast(rburn%pign, 1, mpi_p, 0, mpi_comm_world, ierr)
845 call mpi_bcast(rburn%pref, 1, mpi_p, 0, mpi_comm_world, ierr)
846 call mpi_bcast(rburn%substeps, 1, mpi_integer, 0, mpi_comm_world, ierr)
847 call mpi_bcast(rburn%ta, 1, mpi_p, 0, mpi_comm_world, ierr)
848 end if
849
850# 113 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp" 2
851
852 ! manual: m_glb, n_glb, p_glb (computed in s_read_input_file, not namelist-bound)
853 call mpi_bcast(m_glb, 1, mpi_integer, 0, mpi_comm_world, ierr)
854 call mpi_bcast(n_glb, 1, mpi_integer, 0, mpi_comm_world, ierr)
855 call mpi_bcast(p_glb, 1, mpi_integer, 0, mpi_comm_world, ierr)
856
857 ! manual: bc_x/y/z member broadcasts (struct members not in NAMELIST_VARS)
858# 121 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
859 call mpi_bcast(bc_x%beg, 1, mpi_integer, 0, mpi_comm_world, ierr)
860# 121 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
861 call mpi_bcast(bc_x%end, 1, mpi_integer, 0, mpi_comm_world, ierr)
862# 121 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
863 call mpi_bcast(bc_y%beg, 1, mpi_integer, 0, mpi_comm_world, ierr)
864# 121 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
865 call mpi_bcast(bc_y%end, 1, mpi_integer, 0, mpi_comm_world, ierr)
866# 121 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
867 call mpi_bcast(bc_z%beg, 1, mpi_integer, 0, mpi_comm_world, ierr)
868# 121 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
869 call mpi_bcast(bc_z%end, 1, mpi_integer, 0, mpi_comm_world, ierr)
870# 123 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
871
872# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
873 call mpi_bcast(bc_x%grcbc_in, 1, mpi_logical, 0, mpi_comm_world, ierr)
874# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
875 call mpi_bcast(bc_x%grcbc_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
876# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
877 call mpi_bcast(bc_x%grcbc_vel_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
878# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
879 call mpi_bcast(bc_y%grcbc_in, 1, mpi_logical, 0, mpi_comm_world, ierr)
880# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
881 call mpi_bcast(bc_y%grcbc_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
882# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
883 call mpi_bcast(bc_y%grcbc_vel_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
884# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
885 call mpi_bcast(bc_z%grcbc_in, 1, mpi_logical, 0, mpi_comm_world, ierr)
886# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
887 call mpi_bcast(bc_z%grcbc_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
888# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
889 call mpi_bcast(bc_z%grcbc_vel_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
890# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
891 call mpi_bcast(bc_x%isothermal_in, 1, mpi_logical, 0, mpi_comm_world, ierr)
892# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
893 call mpi_bcast(bc_y%isothermal_in, 1, mpi_logical, 0, mpi_comm_world, ierr)
894# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
895 call mpi_bcast(bc_z%isothermal_in, 1, mpi_logical, 0, mpi_comm_world, ierr)
896# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
897 call mpi_bcast(bc_x%isothermal_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
898# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
899 call mpi_bcast(bc_y%isothermal_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
900# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
901 call mpi_bcast(bc_z%isothermal_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
902# 131 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
903
904# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
905 call mpi_bcast(bc_x%vb1, 1, mpi_p, 0, mpi_comm_world, ierr)
906# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
907 call mpi_bcast(bc_x%vb2, 1, mpi_p, 0, mpi_comm_world, ierr)
908# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
909 call mpi_bcast(bc_x%vb3, 1, mpi_p, 0, mpi_comm_world, ierr)
910# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
911 call mpi_bcast(bc_x%ve1, 1, mpi_p, 0, mpi_comm_world, ierr)
912# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
913 call mpi_bcast(bc_x%ve2, 1, mpi_p, 0, mpi_comm_world, ierr)
914# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
915 call mpi_bcast(bc_x%ve3, 1, mpi_p, 0, mpi_comm_world, ierr)
916# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
917 call mpi_bcast(bc_y%vb1, 1, mpi_p, 0, mpi_comm_world, ierr)
918# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
919 call mpi_bcast(bc_y%vb2, 1, mpi_p, 0, mpi_comm_world, ierr)
920# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
921 call mpi_bcast(bc_y%vb3, 1, mpi_p, 0, mpi_comm_world, ierr)
922# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
923 call mpi_bcast(bc_y%ve1, 1, mpi_p, 0, mpi_comm_world, ierr)
924# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
925 call mpi_bcast(bc_y%ve2, 1, mpi_p, 0, mpi_comm_world, ierr)
926# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
927 call mpi_bcast(bc_y%ve3, 1, mpi_p, 0, mpi_comm_world, ierr)
928# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
929 call mpi_bcast(bc_z%vb1, 1, mpi_p, 0, mpi_comm_world, ierr)
930# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
931 call mpi_bcast(bc_z%vb2, 1, mpi_p, 0, mpi_comm_world, ierr)
932# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
933 call mpi_bcast(bc_z%vb3, 1, mpi_p, 0, mpi_comm_world, ierr)
934# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
935 call mpi_bcast(bc_z%ve1, 1, mpi_p, 0, mpi_comm_world, ierr)
936# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
937 call mpi_bcast(bc_z%ve2, 1, mpi_p, 0, mpi_comm_world, ierr)
938# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
939 call mpi_bcast(bc_z%ve3, 1, mpi_p, 0, mpi_comm_world, ierr)
940# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
941 call mpi_bcast(bc_x%pres_in, 1, mpi_p, 0, mpi_comm_world, ierr)
942# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
943 call mpi_bcast(bc_x%pres_out, 1, mpi_p, 0, mpi_comm_world, ierr)
944# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
945 call mpi_bcast(bc_y%pres_in, 1, mpi_p, 0, mpi_comm_world, ierr)
946# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
947 call mpi_bcast(bc_y%pres_out, 1, mpi_p, 0, mpi_comm_world, ierr)
948# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
949 call mpi_bcast(bc_z%pres_in, 1, mpi_p, 0, mpi_comm_world, ierr)
950# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
951 call mpi_bcast(bc_z%pres_out, 1, mpi_p, 0, mpi_comm_world, ierr)
952# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
953 call mpi_bcast(bc_x%Twall_in, 1, mpi_p, 0, mpi_comm_world, ierr)
954# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
955 call mpi_bcast(bc_x%Twall_out, 1, mpi_p, 0, mpi_comm_world, ierr)
956# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
957 call mpi_bcast(bc_y%Twall_in, 1, mpi_p, 0, mpi_comm_world, ierr)
958# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
959 call mpi_bcast(bc_y%Twall_out, 1, mpi_p, 0, mpi_comm_world, ierr)
960# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
961 call mpi_bcast(bc_z%Twall_in, 1, mpi_p, 0, mpi_comm_world, ierr)
962# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
963 call mpi_bcast(bc_z%Twall_out, 1, mpi_p, 0, mpi_comm_world, ierr)
964# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
965 call mpi_bcast(bc_x%vel_in_ramp, 1, mpi_p, 0, mpi_comm_world, ierr)
966# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
967 call mpi_bcast(bc_x%vel_in_t0, 1, mpi_p, 0, mpi_comm_world, ierr)
968# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
969 call mpi_bcast(bc_x%vel_in_frac0, 1, mpi_p, 0, mpi_comm_world, ierr)
970# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
971 call mpi_bcast(bc_y%vel_in_ramp, 1, mpi_p, 0, mpi_comm_world, ierr)
972# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
973 call mpi_bcast(bc_y%vel_in_t0, 1, mpi_p, 0, mpi_comm_world, ierr)
974# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
975 call mpi_bcast(bc_y%vel_in_frac0, 1, mpi_p, 0, mpi_comm_world, ierr)
976# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
977 call mpi_bcast(bc_z%vel_in_ramp, 1, mpi_p, 0, mpi_comm_world, ierr)
978# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
979 call mpi_bcast(bc_z%vel_in_t0, 1, mpi_p, 0, mpi_comm_world, ierr)
980# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
981 call mpi_bcast(bc_z%vel_in_frac0, 1, mpi_p, 0, mpi_comm_world, ierr)
982# 144 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
983
984 do i = 1, 3
985# 148 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
986 call mpi_bcast(bc_x%vel_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
987# 148 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
988 call mpi_bcast(bc_x%vel_out (i), 1, mpi_p, 0, mpi_comm_world, ierr)
989# 148 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
990 call mpi_bcast(bc_y%vel_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
991# 148 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
992 call mpi_bcast(bc_y%vel_out (i), 1, mpi_p, 0, mpi_comm_world, ierr)
993# 148 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
994 call mpi_bcast(bc_z%vel_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
995# 148 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
996 call mpi_bcast(bc_z%vel_out (i), 1, mpi_p, 0, mpi_comm_world, ierr)
997# 150 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
998 end do
999
1000 ! manual: cfl_dt (runtime-computed logical), bc_io (BC-file existence)
1001 call mpi_bcast(cfl_dt, 1, mpi_logical, 0, mpi_comm_world, ierr)
1002 call mpi_bcast(bc_io, 1, mpi_logical, 0, mpi_comm_world, ierr)
1003
1004 ! manual: shear_stress, bulk_stress (derived from Re_size post-init on all ranks),
1005 ! bodyForces (derived from bf_x/y/z)
1006 call mpi_bcast(shear_stress, 1, mpi_logical, 0, mpi_comm_world, ierr)
1007 call mpi_bcast(bulk_stress, 1, mpi_logical, 0, mpi_comm_world, ierr)
1008 call mpi_bcast(bodyforces, 1, mpi_logical, 0, mpi_comm_world, ierr)
1009
1010 ! manual: bc_x per-fluid inflow arrays (loop over num_fluids_max)
1011 do i = 1, num_fluids_max
1012# 166 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1013 call mpi_bcast(bc_x%alpha_rho_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1014# 166 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1015 call mpi_bcast(bc_x%alpha_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1016# 166 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1017 call mpi_bcast(bc_y%alpha_rho_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1018# 166 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1019 call mpi_bcast(bc_y%alpha_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1020# 166 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1021 call mpi_bcast(bc_z%alpha_rho_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1022# 166 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1023 call mpi_bcast(bc_z%alpha_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1024# 168 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1025 end do
1026
1027 ! manual: patch_ib (sim member subset differs from pre; uses count=3, adds mass/moving_ibm)
1028 do i = 1, num_ibs
1029# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1030 call mpi_bcast(patch_ib(i)%radius, 1, mpi_p, 0, mpi_comm_world, ierr)
1031# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1032 call mpi_bcast(patch_ib(i)%length_x, 1, mpi_p, 0, mpi_comm_world, ierr)
1033# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1034 call mpi_bcast(patch_ib(i)%length_y, 1, mpi_p, 0, mpi_comm_world, ierr)
1035# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1036 call mpi_bcast(patch_ib(i)%length_z, 1, mpi_p, 0, mpi_comm_world, ierr)
1037# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1038 call mpi_bcast(patch_ib(i)%x_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1039# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1040 call mpi_bcast(patch_ib(i)%y_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1041# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1042 call mpi_bcast(patch_ib(i)%z_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1043# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1044 call mpi_bcast(patch_ib(i)%slip, 1, mpi_p, 0, mpi_comm_world, ierr)
1045# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1046 call mpi_bcast(patch_ib(i)%mass, 1, mpi_p, 0, mpi_comm_world, ierr)
1047# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1048 call mpi_bcast(patch_ib(i)%v_blow, 1, mpi_p, 0, mpi_comm_world, ierr)
1049# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1050 call mpi_bcast(patch_ib(i)%burn_rate_exp, 1, mpi_p, 0, mpi_comm_world, ierr)
1051# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1052 call mpi_bcast(patch_ib(i)%burn_rate_pref, 1, mpi_p, 0, mpi_comm_world, ierr)
1053# 177 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1054# 178 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1055 call mpi_bcast(patch_ib(i)%vel, 3, mpi_p, 0, mpi_comm_world, ierr)
1056# 178 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1057 call mpi_bcast(patch_ib(i)%angular_vel, 3, mpi_p, 0, mpi_comm_world, ierr)
1058# 178 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1059 call mpi_bcast(patch_ib(i)%angles, 3, mpi_p, 0, mpi_comm_world, ierr)
1060# 178 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1061 call mpi_bcast(patch_ib(i)%kin_hinge, 3, mpi_p, 0, mpi_comm_world, ierr)
1062# 178 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1063 call mpi_bcast(patch_ib(i)%kin_offset, 3, mpi_p, 0, mpi_comm_world, ierr)
1064# 180 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1065# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1066 call mpi_bcast(patch_ib(i)%kin_phi0, 1, mpi_p, 0, mpi_comm_world, ierr)
1067# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1068 call mpi_bcast(patch_ib(i)%kin_theta0, 1, mpi_p, 0, mpi_comm_world, ierr)
1069# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1070 call mpi_bcast(patch_ib(i)%kin_theta_mean, 1, mpi_p, 0, mpi_comm_world, ierr)
1071# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1072 call mpi_bcast(patch_ib(i)%kin_freq, 1, mpi_p, 0, mpi_comm_world, ierr)
1073# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1074 call mpi_bcast(patch_ib(i)%kin_phase, 1, mpi_p, 0, mpi_comm_world, ierr)
1075# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1076 call mpi_bcast(patch_ib(i)%kin_t0, 1, mpi_p, 0, mpi_comm_world, ierr)
1077# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1078 call mpi_bcast(patch_ib(i)%kin_ramp, 1, mpi_p, 0, mpi_comm_world, ierr)
1079# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1080 call mpi_bcast(patch_ib(i)%kin_pitch_rate, 1, mpi_p, 0, mpi_comm_world, ierr)
1081# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1082 call mpi_bcast(patch_ib(i)%kin_smooth, 1, mpi_p, 0, mpi_comm_world, ierr)
1083# 184 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1084 call mpi_bcast(patch_ib(i)%kin_model, 1, mpi_integer, 0, mpi_comm_world, ierr)
1085 call mpi_bcast(patch_ib(i)%geometry, 1, mpi_integer, 0, mpi_comm_world, ierr)
1086 call mpi_bcast(patch_ib(i)%moving_ibm, 1, mpi_integer, 0, mpi_comm_world, ierr)
1087 call mpi_bcast(patch_ib(i)%airfoil_id, 1, mpi_integer, 0, mpi_comm_world, ierr)
1088 call mpi_bcast(patch_ib(i)%model_id, 1, mpi_integer, 0, mpi_comm_world, ierr)
1089 call mpi_bcast(patch_ib(i)%inj_species, 1, mpi_integer, 0, mpi_comm_world, ierr)
1090 end do
1091
1092 ! manual: ib_airfoil (kept manual alongside patch_ib)
1093 do i = 1, num_ib_airfoils_max
1094# 195 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1095 call mpi_bcast(ib_airfoil(i)%c, 1, mpi_p, 0, mpi_comm_world, ierr)
1096# 195 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1097 call mpi_bcast(ib_airfoil(i)%p, 1, mpi_p, 0, mpi_comm_world, ierr)
1098# 195 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1099 call mpi_bcast(ib_airfoil(i)%t, 1, mpi_p, 0, mpi_comm_world, ierr)
1100# 195 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1101 call mpi_bcast(ib_airfoil(i)%m, 1, mpi_p, 0, mpi_comm_world, ierr)
1102# 197 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1103 end do
1104
1105 ! manual: stl_models loop (num_stl_models scalar is generated; grouped array members)
1106 do i = 1, num_stl_models_max
1107 call mpi_bcast(stl_models(i)%model_filepath, len(stl_models(i)%model_filepath), mpi_character, 0, mpi_comm_world, ierr)
1108 call mpi_bcast(stl_models(i)%model_threshold, 1, mpi_p, 0, mpi_comm_world, ierr)
1109# 204 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1110 call mpi_bcast(stl_models(i)%model_translate, 3, mpi_p, 0, mpi_comm_world, ierr)
1111# 204 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1112 call mpi_bcast(stl_models(i)%model_scale, 3, mpi_p, 0, mpi_comm_world, ierr)
1113# 206 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1114 end do
1115
1116 ! manual: particle_cloud (runtime loop to num_particle_clouds; irregular member subset)
1117 do i = 1, num_particle_clouds
1118# 212 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1119 call mpi_bcast(particle_cloud(i)%x_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1120# 212 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1121 call mpi_bcast(particle_cloud(i)%y_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1122# 212 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1123 call mpi_bcast(particle_cloud(i)%z_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1124# 212 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1125 call mpi_bcast(particle_cloud(i)%length_x, 1, mpi_p, 0, mpi_comm_world, ierr)
1126# 212 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1127 call mpi_bcast(particle_cloud(i)%length_y, 1, mpi_p, 0, mpi_comm_world, ierr)
1128# 212 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1129 call mpi_bcast(particle_cloud(i)%length_z, 1, mpi_p, 0, mpi_comm_world, ierr)
1130# 212 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1131 call mpi_bcast(particle_cloud(i)%radius, 1, mpi_p, 0, mpi_comm_world, ierr)
1132# 212 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1133 call mpi_bcast(particle_cloud(i)%mass, 1, mpi_p, 0, mpi_comm_world, ierr)
1134# 212 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1135 call mpi_bcast(particle_cloud(i)%min_spacing, 1, mpi_p, 0, mpi_comm_world, ierr)
1136# 212 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1137 call mpi_bcast(particle_cloud(i)%shell_inner_radius, 1, mpi_p, 0, mpi_comm_world, ierr)
1138# 212 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1139 call mpi_bcast(particle_cloud(i)%shell_outer_radius, 1, mpi_p, 0, mpi_comm_world, ierr)
1140# 214 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1141 call mpi_bcast(particle_cloud(i)%num_particles, 1, mpi_integer, 0, mpi_comm_world, ierr)
1142 call mpi_bcast(particle_cloud(i)%moving_ibm, 1, mpi_integer, 0, mpi_comm_world, ierr)
1143 call mpi_bcast(particle_cloud(i)%seed, 1, mpi_integer, 0, mpi_comm_world, ierr)
1144 call mpi_bcast(particle_cloud(i)%cloud_geometry, 1, mpi_integer, 0, mpi_comm_world, ierr)
1145 call mpi_bcast(particle_cloud(i)%packing_method, 1, mpi_integer, 0, mpi_comm_world, ierr)
1146 call mpi_bcast(particle_cloud(i)%periodic, 1, mpi_integer, 0, mpi_comm_world, ierr)
1147 end do
1148
1149 ! manual: acoustic/probe (combined loop; complex acoustic member set)
1150 do j = 1, num_probes_max
1151 do i = 1, 3
1152 call mpi_bcast(acoustic(j)%loc(i), 1, mpi_p, 0, mpi_comm_world, ierr)
1153 end do
1154
1155 call mpi_bcast(acoustic(j)%dipole, 1, mpi_logical, 0, mpi_comm_world, ierr)
1156
1157# 231 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1158 call mpi_bcast(acoustic(j)%pulse, 1, mpi_integer, 0, mpi_comm_world, ierr)
1159# 231 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1160 call mpi_bcast(acoustic(j)%support, 1, mpi_integer, 0, mpi_comm_world, ierr)
1161# 231 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1162 call mpi_bcast(acoustic(j)%num_elements, 1, mpi_integer, 0, mpi_comm_world, ierr)
1163# 231 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1164 call mpi_bcast(acoustic(j)%element_on, 1, mpi_integer, 0, mpi_comm_world, ierr)
1165# 231 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1166 call mpi_bcast(acoustic(j)%bb_num_freq, 1, mpi_integer, 0, mpi_comm_world, ierr)
1167# 233 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1168
1169# 239 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1170 call mpi_bcast(acoustic(j)%mag, 1, mpi_p, 0, mpi_comm_world, ierr)
1171# 239 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1172 call mpi_bcast(acoustic(j)%length, 1, mpi_p, 0, mpi_comm_world, ierr)
1173# 239 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1174 call mpi_bcast(acoustic(j)%height, 1, mpi_p, 0, mpi_comm_world, ierr)
1175# 239 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1176 call mpi_bcast(acoustic(j)%wavelength, 1, mpi_p, 0, mpi_comm_world, ierr)
1177# 239 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1178 call mpi_bcast(acoustic(j)%frequency, 1, mpi_p, 0, mpi_comm_world, ierr)
1179# 239 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1180 call mpi_bcast(acoustic(j)%gauss_sigma_dist, 1, mpi_p, 0, mpi_comm_world, ierr)
1181# 239 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1182 call mpi_bcast(acoustic(j)%gauss_sigma_time, 1, mpi_p, 0, mpi_comm_world, ierr)
1183# 239 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1184 call mpi_bcast(acoustic(j)%npulse, 1, mpi_p, 0, mpi_comm_world, ierr)
1185# 239 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1186 call mpi_bcast(acoustic(j)%dir, 1, mpi_p, 0, mpi_comm_world, ierr)
1187# 239 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1188 call mpi_bcast(acoustic(j)%delay, 1, mpi_p, 0, mpi_comm_world, ierr)
1189# 239 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1190 call mpi_bcast(acoustic(j)%foc_length, 1, mpi_p, 0, mpi_comm_world, ierr)
1191# 239 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1192 call mpi_bcast(acoustic(j)%aperture, 1, mpi_p, 0, mpi_comm_world, ierr)
1193# 239 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1194 call mpi_bcast(acoustic(j)%element_spacing_angle, 1, mpi_p, 0, mpi_comm_world, ierr)
1195# 239 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1196 call mpi_bcast(acoustic(j)%element_polygon_ratio, 1, mpi_p, 0, mpi_comm_world, ierr)
1197# 239 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1198 call mpi_bcast(acoustic(j)%rotate_angle, 1, mpi_p, 0, mpi_comm_world, ierr)
1199# 239 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1200 call mpi_bcast(acoustic(j)%bb_bandwidth, 1, mpi_p, 0, mpi_comm_world, ierr)
1201# 239 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1202 call mpi_bcast(acoustic(j)%bb_lowest_freq, 1, mpi_p, 0, mpi_comm_world, ierr)
1203# 241 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1204
1205# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1206 call mpi_bcast(probe(j)%x, 1, mpi_p, 0, mpi_comm_world, ierr)
1207# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1208 call mpi_bcast(probe(j)%y, 1, mpi_p, 0, mpi_comm_world, ierr)
1209# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1210 call mpi_bcast(probe(j)%z, 1, mpi_p, 0, mpi_comm_world, ierr)
1211# 245 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1212 end do
1213
1214 ! manual: spatial-support body-force derived-type members (the bf_spatial_support toggle is broadcast by
1215 ! generated_bcast.fpp)
1216# 250 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1217 call mpi_bcast(spatial_bf%amp, 1, mpi_p, 0, mpi_comm_world, ierr)
1218# 250 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1219 call mpi_bcast(spatial_bf%x_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1220# 250 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1221 call mpi_bcast(spatial_bf%y_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1222# 250 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1223 call mpi_bcast(spatial_bf%sigma, 1, mpi_p, 0, mpi_comm_world, ierr)
1224# 250 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1225 call mpi_bcast(spatial_bf%conv_vel, 1, mpi_p, 0, mpi_comm_world, ierr)
1226# 252 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1227 call mpi_bcast(spatial_bf%freq, 8, mpi_p, 0, mpi_comm_world, ierr)
1228 call mpi_bcast(spatial_bf%phase, 8, mpi_p, 0, mpi_comm_world, ierr)
1229
1230 ! manual: synthetic turbulence namelist arrays (registered as indexed
1231 ! variants only; scalars are broadcast by generated_bcast.fpp)
1232 call mpi_bcast(synth_n_waves_per_shell, num_synth_shells_max, mpi_integer, 0, mpi_comm_world, ierr)
1233 call mpi_bcast(synth_k_shell, num_synth_shells_max, mpi_p, 0, mpi_comm_world, ierr)
1234 call mpi_bcast(synth_amp_shell, num_synth_shells_max, mpi_p, 0, mpi_comm_world, ierr)
1235 call mpi_bcast(turb_pos, num_turb_sources_max*3, mpi_p, 0, mpi_comm_world, ierr)
1236 call mpi_bcast(synth_l, num_turb_sources_max*3, mpi_p, 0, mpi_comm_world, ierr)
1237#endif
1238
1239 end subroutine s_mpi_bcast_user_inputs
1240
1241 !> Adds particles to the transfer list for the MPI communication.
1242 !! @param nBub Current LOCAL number of bubbles
1243 !! @param pos Current position of each bubble
1244 !! @param posPrev Previous position of each bubble (optional, not used
1245 !! for communication of initial condition)
1246 impure subroutine s_add_particles_to_transfer_list(nBub, pos, posPrev)
1247
1248 integer, intent(in) :: nbub
1249 real(wp), dimension(:,:), intent(in) :: pos, posprev
1250 integer :: bubid
1251 integer :: i, j, k
1252 integer :: dx, dy, dz
1253
1254 do k = nidx(3)%beg, nidx(3)%end
1255 do j = nidx(2)%beg, nidx(2)%end
1256 do i = nidx(1)%beg, nidx(1)%end
1257 p_send_counts(i, j, k) = 0
1258 end do
1259 end do
1260 end do
1261
1262 do k = 1, nbub
1263 dx = 0; dy = 0; dz = 0
1264 if (f_crosses_boundary(k, 1, -1, pos, posprev)) then
1265 dx = -1
1266 else if (f_crosses_boundary(k, 1, 1, pos, posprev)) then
1267 dx = 1
1268 end if
1269 if (n > 0) then
1270 if (f_crosses_boundary(k, 2, -1, pos, posprev)) then
1271 dy = -1
1272 else if (f_crosses_boundary(k, 2, 1, pos, posprev)) then
1273 dy = 1
1274 end if
1275 end if
1276 if (p > 0) then
1277 if (f_crosses_boundary(k, 3, -1, pos, posprev)) then
1278 dz = -1
1279 else if (f_crosses_boundary(k, 3, 1, pos, posprev)) then
1280 dz = 1
1281 end if
1282 end if
1283 if (abs(dx) + abs(dy) + abs(dz) /= 0) then
1284 call s_add_particle_to_direction(k, dx, dy, dz)
1285 end if
1286 end do
1287
1288 contains
1289
1290 logical function f_crosses_boundary(particle_id, dir, loc, pos, posPrev)
1291
1292 integer, intent(in) :: particle_id, dir, loc
1293 real(wp), dimension(:,:), intent(in) :: pos
1294 real(wp), dimension(:,:), optional, intent(in) :: posprev
1295
1296 if (loc == -1) then ! Beginning of the domain
1297 if (nidx(dir)%beg == 0) then
1298 f_crosses_boundary = .false.
1299 return
1300 end if
1301
1302 f_crosses_boundary = (posprev(particle_id, dir) >= pcomm_coords(dir)%beg .and. pos(particle_id, &
1303 & dir) < pcomm_coords(dir)%beg)
1304 else if (loc == 1) then ! End of the domain
1305 if (nidx(dir)%end == 0) then
1306 f_crosses_boundary = .false.
1307 return
1308 end if
1309
1310 f_crosses_boundary = (posprev(particle_id, dir) <= pcomm_coords(dir)%end .and. pos(particle_id, &
1311 & dir) > pcomm_coords(dir)%end)
1312 end if
1313
1314 end function f_crosses_boundary
1315
1316 subroutine s_add_particle_to_direction(particle_id, dir_x, dir_y, dir_z)
1317
1318 integer, intent(in) :: particle_id, dir_x, dir_y, dir_z
1319
1320 p_send_ids(dir_x, dir_y, dir_z, p_send_counts(dir_x, dir_y, dir_z)) = particle_id
1321 p_send_counts(dir_x, dir_y, dir_z) = p_send_counts(dir_x, dir_y, dir_z) + 1
1322
1323 end subroutine s_add_particle_to_direction
1324
1326
1327 !> Perform the MPI communication for lagrangian particles/bubbles.
1328 impure subroutine s_mpi_sendrecv_particles(bub_R0, Rmax_stats, Rmin_stats, gas_mg, gas_betaT, gas_betaC, bub_dphidt, lag_id, &
1329 & gas_p, gas_mv, rad, rvel, pos, posPrev, vel, scoord, drad, drvel, dgasp, dgasmv, dpos, dvel, lag_num_ts, nbubs, dest)
1330
1331 real(wp), dimension(:) :: bub_r0, rmax_stats, rmin_stats, gas_mg, gas_betat, gas_betac, bub_dphidt
1332 integer, dimension(:,:) :: lag_id
1333 real(wp), dimension(:,:) :: gas_p, gas_mv, rad, rvel, drad, drvel, dgasp, dgasmv
1334 real(wp), dimension(:,:,:) :: pos, posprev, vel, scoord, dpos, dvel
1335 integer :: position, bub_id, lag_num_ts, tag, partner, send_tag, recv_tag, nbubs, p_recv_size, dest
1336 integer :: i, j, k, l, q, r
1337 integer :: req_send, req_recv, ierr !< Generic flag used to identify and report MPI errors
1338 integer :: send_count, send_offset, recv_count, recv_offset
1339
1340#ifdef MFC_MPI
1341 ! Phase 1: Exchange particle counts using non-blocking communication
1342 send_count = 0
1343 recv_count = 0
1344
1345 ! Post all receives first
1346 do l = 1, n_neighbors
1347 i = neighbor_list(l, 1)
1348 j = neighbor_list(l, 2)
1349 k = neighbor_list(l, 3)
1350 partner = neighbor_ranks(i, j, k)
1351 recv_tag = neighbor_tag(i, j, k)
1352
1353 recv_count = recv_count + 1
1354 call mpi_irecv(p_recv_counts(i, j, k), 1, mpi_integer, partner, recv_tag, mpi_comm_world, recv_requests(recv_count), &
1355 & ierr)
1356 end do
1357
1358 ! Post all sends
1359 do l = 1, n_neighbors
1360 i = neighbor_list(l, 1)
1361 j = neighbor_list(l, 2)
1362 k = neighbor_list(l, 3)
1363 partner = neighbor_ranks(i, j, k)
1364 send_tag = neighbor_tag(-i, -j, -k)
1365
1366 send_count = send_count + 1
1367 call mpi_isend(p_send_counts(i, j, k), 1, mpi_integer, partner, send_tag, mpi_comm_world, send_requests(send_count), &
1368 & ierr)
1369 end do
1370
1371 ! Wait for all count exchanges to complete
1372 if (recv_count > 0) then
1373 call mpi_waitall(recv_count, recv_requests(1:recv_count), mpi_statuses_ignore, ierr)
1374 end if
1375 if (send_count > 0) then
1376 call mpi_waitall(send_count, send_requests(1:send_count), mpi_statuses_ignore, ierr)
1377 end if
1378
1379 ! Phase 2: Exchange particle data using non-blocking communication
1380 send_count = 0
1381 recv_count = 0
1382
1383 ! Post all receives for particle data first
1384 recv_offset = 1
1385 do l = 1, n_neighbors
1386 i = neighbor_list(l, 1)
1387 j = neighbor_list(l, 2)
1388 k = neighbor_list(l, 3)
1389
1390 if (p_recv_counts(i, j, k) > 0) then
1391 partner = neighbor_ranks(i, j, k)
1392 p_recv_size = p_recv_counts(i, j, k)*p_var_size
1393 recv_tag = neighbor_tag(i, j, k)
1394
1395 recv_count = recv_count + 1
1396 call mpi_irecv(p_recv_buff(recv_offset), p_recv_size, mpi_packed, partner, recv_tag, mpi_comm_world, &
1397 & recv_requests(recv_count), ierr)
1398 recv_offsets(l) = recv_offset
1399 recv_offset = recv_offset + p_recv_size
1400 end if
1401 end do
1402
1403 ! Pack and send particle data
1404 send_offset = 0
1405 do l = 1, n_neighbors
1406 i = neighbor_list(l, 1)
1407 j = neighbor_list(l, 2)
1408 k = neighbor_list(l, 3)
1409
1410 if (p_send_counts(i, j, k) > 0 .and. abs(i) + abs(j) + abs(k) /= 0) then
1411 partner = neighbor_ranks(i, j, k)
1412 send_tag = neighbor_tag(-i, -j, -k)
1413
1414 ! Pack data for sending
1415 position = 0
1416 do q = 0, p_send_counts(i, j, k) - 1
1417 bub_id = p_send_ids(i, j, k, q)
1418
1419 call mpi_pack(lag_id(bub_id, 1), 1, mpi_integer, p_send_buff(send_offset), p_buff_size, position, &
1420 & mpi_comm_world, ierr)
1421 call mpi_pack(bub_r0(bub_id), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, ierr)
1422 call mpi_pack(rmax_stats(bub_id), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1423 & ierr)
1424 call mpi_pack(rmin_stats(bub_id), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1425 & ierr)
1426 call mpi_pack(gas_mg(bub_id), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, ierr)
1427 call mpi_pack(gas_betat(bub_id), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1428 & ierr)
1429 call mpi_pack(gas_betac(bub_id), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1430 & ierr)
1431 call mpi_pack(bub_dphidt(bub_id), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1432 & ierr)
1433 do r = 1, 2
1434 call mpi_pack(gas_p(bub_id, r), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1435 & mpi_comm_world, ierr)
1436 call mpi_pack(gas_mv(bub_id, r), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1437 & mpi_comm_world, ierr)
1438 call mpi_pack(rad(bub_id, r), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1439 & ierr)
1440 call mpi_pack(rvel(bub_id, r), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1441 & ierr)
1442 call mpi_pack(pos(bub_id,:,r), 3, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1443 & ierr)
1444 call mpi_pack(posprev(bub_id,:,r), 3, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1445 & mpi_comm_world, ierr)
1446 call mpi_pack(vel(bub_id,:,r), 3, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1447 & ierr)
1448 call mpi_pack(scoord(bub_id,:,r), 3, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1449 & mpi_comm_world, ierr)
1450 end do
1451 do r = 1, lag_num_ts
1452 call mpi_pack(drad(bub_id, r), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1453 & ierr)
1454 call mpi_pack(drvel(bub_id, r), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1455 & mpi_comm_world, ierr)
1456 call mpi_pack(dgasp(bub_id, r), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1457 & mpi_comm_world, ierr)
1458 call mpi_pack(dgasmv(bub_id, r), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1459 & mpi_comm_world, ierr)
1460 call mpi_pack(dpos(bub_id,:,r), 3, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1461 & mpi_comm_world, ierr)
1462 call mpi_pack(dvel(bub_id,:,r), 3, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1463 & mpi_comm_world, ierr)
1464 end do
1465 end do
1466
1467 send_count = send_count + 1
1468 call mpi_isend(p_send_buff(send_offset), position, mpi_packed, partner, send_tag, mpi_comm_world, &
1469 & send_requests(send_count), ierr)
1470 send_offset = send_offset + position
1471 end if
1472 end do
1473
1474 ! Wait for all recvs for contiguous data to complete
1475 call mpi_waitall(recv_count, recv_requests(1:recv_count), mpi_statuses_ignore, ierr)
1476
1477 ! Process received data as it arrives
1478 do l = 1, n_neighbors
1479 i = neighbor_list(l, 1)
1480 j = neighbor_list(l, 2)
1481 k = neighbor_list(l, 3)
1482
1483 if (p_recv_counts(i, j, k) > 0 .and. abs(i) + abs(j) + abs(k) /= 0) then
1484 p_recv_size = p_recv_counts(i, j, k)*p_var_size
1485 recv_offset = recv_offsets(l)
1486
1487 position = 0
1488 ! Unpack received data
1489 do q = 0, p_recv_counts(i, j, k) - 1
1490 nbubs = nbubs + 1
1491 bub_id = nbubs
1492 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, lag_id(bub_id, 1), 1, mpi_integer, &
1493 & mpi_comm_world, ierr)
1494 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, bub_r0(bub_id), 1, mpi_p, mpi_comm_world, ierr)
1495 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, rmax_stats(bub_id), 1, mpi_p, &
1496 & mpi_comm_world, ierr)
1497 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, rmin_stats(bub_id), 1, mpi_p, &
1498 & mpi_comm_world, ierr)
1499 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, gas_mg(bub_id), 1, mpi_p, mpi_comm_world, ierr)
1500 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, gas_betat(bub_id), 1, mpi_p, mpi_comm_world, &
1501 & ierr)
1502 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, gas_betac(bub_id), 1, mpi_p, mpi_comm_world, &
1503 & ierr)
1504 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, bub_dphidt(bub_id), 1, mpi_p, &
1505 & mpi_comm_world, ierr)
1506 do r = 1, 2
1507 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, gas_p(bub_id, r), 1, mpi_p, &
1508 & mpi_comm_world, ierr)
1509 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, gas_mv(bub_id, r), 1, mpi_p, &
1510 & mpi_comm_world, ierr)
1511 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, rad(bub_id, r), 1, mpi_p, &
1512 & mpi_comm_world, ierr)
1513 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, rvel(bub_id, r), 1, mpi_p, &
1514 & mpi_comm_world, ierr)
1515 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, pos(bub_id,:,r), 3, mpi_p, &
1516 & mpi_comm_world, ierr)
1517 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, posprev(bub_id,:,r), 3, mpi_p, &
1518 & mpi_comm_world, ierr)
1519 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, vel(bub_id,:,r), 3, mpi_p, &
1520 & mpi_comm_world, ierr)
1521 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, scoord(bub_id,:,r), 3, mpi_p, &
1522 & mpi_comm_world, ierr)
1523 end do
1524 do r = 1, lag_num_ts
1525 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, drad(bub_id, r), 1, mpi_p, &
1526 & mpi_comm_world, ierr)
1527 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, drvel(bub_id, r), 1, mpi_p, &
1528 & mpi_comm_world, ierr)
1529 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, dgasp(bub_id, r), 1, mpi_p, &
1530 & mpi_comm_world, ierr)
1531 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, dgasmv(bub_id, r), 1, mpi_p, &
1532 & mpi_comm_world, ierr)
1533 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, dpos(bub_id,:,r), 3, mpi_p, &
1534 & mpi_comm_world, ierr)
1535 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, dvel(bub_id,:,r), 3, mpi_p, &
1536 & mpi_comm_world, ierr)
1537 end do
1538 lag_id(bub_id, 2) = bub_id
1539 end do
1540 recv_offset = recv_offset + p_recv_size
1541 end if
1542 end do
1543
1544 ! Wait for all sends to complete
1545 if (send_count > 0) then
1546 call mpi_waitall(send_count, send_requests(1:send_count), mpi_statuses_ignore, ierr)
1547 end if
1548#endif
1549
1550 if (any(periodic_bc)) then
1551 call s_wrap_particle_positions(pos, posprev, nbubs, dest)
1552 end if
1553
1554 end subroutine s_mpi_sendrecv_particles
1555
1556 !> Return a unique tag for each neighbor based on its position relative to the current process.
1557 integer function neighbor_tag(i, j, k) result(tag)
1558
1559 integer, intent(in) :: i, j, k
1560
1561 tag = (k + 1)*9 + (j + 1)*3 + (i + 1)
1562
1563 end function neighbor_tag
1564
1565 subroutine s_wrap_particle_positions(pos, posPrev, nbubs, dest)
1566
1567 real(wp), dimension(:,:,:) :: pos, posPrev
1568 integer :: nbubs, dest
1569 integer :: i, q
1570 real(wp) :: offset
1571
1572 do i = 1, nbubs
1573 if (periodic_bc(1)) then
1574 offset = glb_bounds(1)%end - glb_bounds(1)%beg
1575 if (pos(i, 1, dest) > x_cb(m + buff_size)) then
1576 do q = 1, 2
1577 pos(i, 1, q) = pos(i, 1, q) - offset
1578 posprev(i, 1, q) = posprev(i, 1, q) - offset
1579 end do
1580 end if
1581 if (pos(i, 1, dest) < x_cb(-1 - buff_size)) then
1582 do q = 1, 2
1583 pos(i, 1, q) = pos(i, 1, q) + offset
1584 posprev(i, 1, q) = posprev(i, 1, q) + offset
1585 end do
1586 end if
1587 end if
1588
1589 if (periodic_bc(2)) then
1590 offset = glb_bounds(2)%end - glb_bounds(2)%beg
1591 if (pos(i, 2, dest) > y_cb(n + buff_size)) then
1592 do q = 1, 2
1593 pos(i, 2, q) = pos(i, 2, q) - offset
1594 posprev(i, 2, q) = posprev(i, 2, q) - offset
1595 end do
1596 end if
1597 if (pos(i, 2, dest) < y_cb(-buff_size - 1)) then
1598 do q = 1, 2
1599 pos(i, 2, q) = pos(i, 2, q) + offset
1600 posprev(i, 2, q) = posprev(i, 2, q) + offset
1601 end do
1602 end if
1603 end if
1604
1605 if (periodic_bc(3)) then
1606 offset = glb_bounds(3)%end - glb_bounds(3)%beg
1607 if (pos(i, 3, dest) > z_cb(p + buff_size)) then
1608 do q = 1, 2
1609 pos(i, 3, q) = pos(i, 3, q) - offset
1610 posprev(i, 3, q) = posprev(i, 3, q) - offset
1611 end do
1612 end if
1613 if (pos(i, 3, dest) < z_cb(-1 - buff_size)) then
1614 do q = 1, 2
1615 pos(i, 3, q) = pos(i, 3, q) + offset
1616 posprev(i, 3, q) = posprev(i, 3, q) + offset
1617 end do
1618 end if
1619 end if
1620 end do
1621
1622 end subroutine s_wrap_particle_positions
1623
1624 !> Broadcast random phase numbers from rank 0 to all MPI processes
1625 impure subroutine s_mpi_send_random_number(phi_rn, num_freq)
1626
1627 integer, intent(in) :: num_freq
1628 real(wp), intent(inout), dimension(1:num_freq) :: phi_rn
1629
1630#ifdef MFC_MPI
1631 integer :: ierr !< Generic flag used to identify and report MPI errors
1632 call mpi_bcast(phi_rn, num_freq, mpi_p, 0, mpi_comm_world, ierr)
1633#endif
1634
1635 end subroutine s_mpi_send_random_number
1636
1637 !> Finalize the MPI proxy module
1639
1640#ifdef MFC_MPI
1641 if (ib) then
1642#ifdef MFC_DEBUG
1643# 667 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1644 block
1645# 667 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1646 use iso_fortran_env, only: output_unit
1647# 667 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1648
1649# 667 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1650 print *, 'm_mpi_proxy.fpp:667: ', '@:DEALLOCATE(ib_buff_send, ib_buff_recv)'
1651# 667 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1652
1653# 667 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1654 call flush (output_unit)
1655# 667 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1656 end block
1657# 667 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1658#endif
1659# 667 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1660
1661# 667 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1662#if defined(MFC_OpenACC)
1663# 667 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1664!$acc exit data delete(ib_buff_send, ib_buff_recv)
1665# 667 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1666#elif defined(MFC_OpenMP)
1667# 667 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1668!$omp target exit data map(release:ib_buff_send, ib_buff_recv)
1669# 667 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1670#endif
1671# 667 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1672 deallocate (ib_buff_send, ib_buff_recv)
1673 end if
1674
1675 if (allocated(p_send_buff)) then
1676#ifdef MFC_DEBUG
1677# 671 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1678 block
1679# 671 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1680 use iso_fortran_env, only: output_unit
1681# 671 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1682
1683# 671 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1684 print *, 'm_mpi_proxy.fpp:671: ', '@:DEALLOCATE(p_send_buff, p_recv_buff)'
1685# 671 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1686
1687# 671 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1688 call flush (output_unit)
1689# 671 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1690 end block
1691# 671 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1692#endif
1693# 671 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1694
1695# 671 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1696#if defined(MFC_OpenACC)
1697# 671 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1698!$acc exit data delete(p_send_buff, p_recv_buff)
1699# 671 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1700#elif defined(MFC_OpenMP)
1701# 671 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1702!$omp target exit data map(release:p_send_buff, p_recv_buff)
1703# 671 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1704#endif
1705# 671 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1706 deallocate (p_send_buff, p_recv_buff)
1707#ifdef MFC_DEBUG
1708# 672 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1709 block
1710# 672 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1711 use iso_fortran_env, only: output_unit
1712# 672 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1713
1714# 672 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1715 print *, 'm_mpi_proxy.fpp:672: ', '@:DEALLOCATE(p_send_ids)'
1716# 672 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1717
1718# 672 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1719 call flush (output_unit)
1720# 672 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1721 end block
1722# 672 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1723#endif
1724# 672 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1725
1726# 672 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1727#if defined(MFC_OpenACC)
1728# 672 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1729!$acc exit data delete(p_send_ids)
1730# 672 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1731#elif defined(MFC_OpenMP)
1732# 672 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1733!$omp target exit data map(release:p_send_ids)
1734# 672 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1735#endif
1736# 672 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1737 deallocate (p_send_ids)
1738 end if
1739#endif
1740
1741 end subroutine s_finalize_mpi_proxy_module
1742
1743end module m_mpi_proxy
subroutine s_add_particle_to_direction(particle_id, dir_x, dir_y, dir_z)
logical function f_crosses_boundary(particle_id, dir, loc, pos, posprev)
integer, intent(in) k
integer, intent(in) j
integer, intent(in) l
Shared derived types for field data, patch geometry, bubble dynamics, and MPI I/O structures.
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
integer buff_size
Number of ghost cells for boundary condition storage.
type(cell_num_bounds) cells_bounds
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 communication layer: domain decomposition, halo exchange, reductions, and parallel I/O setup.
MPI halo exchange, domain decomposition, and buffer packing/unpacking for the simulation solver.
subroutine s_initialize_mpi_proxy_module()
Initialize the MPI proxy module.
integer function neighbor_tag(i, j, k)
Return a unique tag for each neighbor based on its position relative to the current process.
integer, dimension(max_neighbors) recv_offsets
integer, dimension(:), allocatable, private ib_buff_send
IB marker send buffer for halo exchange.
character(len=1), dimension(:), allocatable p_recv_buff
character(len=1), dimension(:), allocatable p_send_buff
integer, dimension(:), allocatable, private ib_buff_recv
IB marker receive buffer for halo exchange.
integer, dimension(max_neighbors, 3) neighbor_list
integer, dimension(-1:1,-1:1,-1:1) p_recv_counts
impure subroutine s_add_particles_to_transfer_list(nbub, pos, posprev)
Adds particles to the transfer list for the MPI communication.
impure subroutine s_mpi_send_random_number(phi_rn, num_freq)
Broadcast random phase numbers from rank 0 to all MPI processes.
integer, dimension(max_neighbors) recv_requests
subroutine s_initialize_particles_mpi(lag_num_ts)
subroutine s_wrap_particle_positions(pos, posprev, nbubs, dest)
integer, dimension(-1:1,-1:1,-1:1) p_send_counts
impure subroutine s_mpi_sendrecv_particles(bub_r0, rmax_stats, rmin_stats, gas_mg, gas_betat, gas_betac, bub_dphidt, lag_id, gas_p, gas_mv, rad, rvel, pos, posprev, vel, scoord, drad, drvel, dgasp, dgasmv, dpos, dvel, lag_num_ts, nbubs, dest)
Perform the MPI communication for lagrangian particles/bubbles.
integer, dimension(max_neighbors) send_requests
integer, parameter max_neighbors
subroutine s_finalize_mpi_proxy_module()
Finalize the MPI proxy module.
impure subroutine s_mpi_bcast_user_inputs()
Since only the processor with rank 0 reads and verifies the consistency of user inputs,...
integer, dimension(:,:,:,:), allocatable p_send_ids
NVIDIA NVTX profiling API bindings for GPU performance instrumentation.
Definition m_nvtx.f90:6