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