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_state_wrt, 1, mpi_logical, 0, mpi_comm_world, ierr)
676 call mpi_bcast(many_ib_patch_parallelism, 1, mpi_logical, 0, mpi_comm_world, ierr)
677 call mpi_bcast(mixture_err, 1, mpi_logical, 0, mpi_comm_world, ierr)
678 call mpi_bcast(mp_weno, 1, mpi_logical, 0, mpi_comm_world, ierr)
679 call mpi_bcast(mpp_lim, 1, mpi_logical, 0, mpi_comm_world, ierr)
680 call mpi_bcast(null_weights, 1, mpi_logical, 0, mpi_comm_world, ierr)
681 call mpi_bcast(nv_uvm_out_of_core, 1, mpi_logical, 0, mpi_comm_world, ierr)
682 call mpi_bcast(nv_uvm_pref_gpu, 1, mpi_logical, 0, mpi_comm_world, ierr)
683 call mpi_bcast(parallel_io, 1, mpi_logical, 0, mpi_comm_world, ierr)
684 call mpi_bcast(polydisperse, 1, mpi_logical, 0, mpi_comm_world, ierr)
685 call mpi_bcast(polytropic, 1, mpi_logical, 0, mpi_comm_world, ierr)
686 call mpi_bcast(prim_vars_wrt, 1, mpi_logical, 0, mpi_comm_world, ierr)
687 call mpi_bcast(probe_wrt, 1, mpi_logical, 0, mpi_comm_world, ierr)
688 call mpi_bcast(qbmm, 1, mpi_logical, 0, mpi_comm_world, ierr)
689 call mpi_bcast(rdma_mpi, 1, mpi_logical, 0, mpi_comm_world, ierr)
690 call mpi_bcast(reactive_burn, 1, mpi_logical, 0, mpi_comm_world, ierr)
691 call mpi_bcast(relax, 1, mpi_logical, 0, mpi_comm_world, ierr)
692 call mpi_bcast(riemann_hypo_adc, 1, mpi_logical, 0, mpi_comm_world, ierr)
693 call mpi_bcast(run_time_info, 1, mpi_logical, 0, mpi_comm_world, ierr)
694 call mpi_bcast(surface_tension, 1, mpi_logical, 0, mpi_comm_world, ierr)
695 call mpi_bcast(synthetic_turbulence, 1, mpi_logical, 0, mpi_comm_world, ierr)
696 call mpi_bcast(weno_re_flux, 1, mpi_logical, 0, mpi_comm_world, ierr)
697 call mpi_bcast(weno_avg, 1, mpi_logical, 0, mpi_comm_world, ierr)
698
699 ! Real scalars
700 call mpi_bcast(adc_kappa, 1, mpi_p, 0, mpi_comm_world, ierr)
701 call mpi_bcast(bx0, 1, mpi_p, 0, mpi_comm_world, ierr)
702 call mpi_bcast(ca, 1, mpi_p, 0, mpi_comm_world, ierr)
703 call mpi_bcast(r0ref, 1, mpi_p, 0, mpi_comm_world, ierr)
704 call mpi_bcast(re_inv, 1, mpi_p, 0, mpi_comm_world, ierr)
705 call mpi_bcast(web, 1, mpi_p, 0, mpi_comm_world, ierr)
706 call mpi_bcast(adap_dt_tol, 1, mpi_p, 0, mpi_comm_world, ierr)
707 call mpi_bcast(alf_factor, 1, mpi_p, 0, mpi_comm_world, ierr)
708 call mpi_bcast(alpha_bar, 1, mpi_p, 0, mpi_comm_world, ierr)
709 call mpi_bcast(cfl_target, 1, mpi_p, 0, mpi_comm_world, ierr)
710 call mpi_bcast(coefficient_of_restitution, 1, mpi_p, 0, mpi_comm_world, ierr)
711 call mpi_bcast(collision_time, 1, mpi_p, 0, mpi_comm_world, ierr)
712 call mpi_bcast(cont_damage_s, 1, mpi_p, 0, mpi_comm_world, ierr)
713 call mpi_bcast(dt, 1, mpi_p, 0, mpi_comm_world, ierr)
714 call mpi_bcast(g_x, 1, mpi_p, 0, mpi_comm_world, ierr)
715 call mpi_bcast(g_y, 1, mpi_p, 0, mpi_comm_world, ierr)
716 call mpi_bcast(g_z, 1, mpi_p, 0, mpi_comm_world, ierr)
717 call mpi_bcast(hyper_cleaning_speed, 1, mpi_p, 0, mpi_comm_world, ierr)
718 call mpi_bcast(hyper_cleaning_tau, 1, mpi_p, 0, mpi_comm_world, ierr)
719 call mpi_bcast(ib_coefficient_of_friction, 1, mpi_p, 0, mpi_comm_world, ierr)
720 call mpi_bcast(ic_beta, 1, mpi_p, 0, mpi_comm_world, ierr)
721 call mpi_bcast(ic_eps, 1, mpi_p, 0, mpi_comm_world, ierr)
722 call mpi_bcast(k_x, 1, mpi_p, 0, mpi_comm_world, ierr)
723 call mpi_bcast(k_y, 1, mpi_p, 0, mpi_comm_world, ierr)
724 call mpi_bcast(k_z, 1, mpi_p, 0, mpi_comm_world, ierr)
725 call mpi_bcast(muscl_eps, 1, mpi_p, 0, mpi_comm_world, ierr)
726 call mpi_bcast(p_x, 1, mpi_p, 0, mpi_comm_world, ierr)
727 call mpi_bcast(p_y, 1, mpi_p, 0, mpi_comm_world, ierr)
728 call mpi_bcast(p_z, 1, mpi_p, 0, mpi_comm_world, ierr)
729 call mpi_bcast(palpha_eps, 1, mpi_p, 0, mpi_comm_world, ierr)
730 call mpi_bcast(pi_fac, 1, mpi_p, 0, mpi_comm_world, ierr)
731 call mpi_bcast(poly_sigma, 1, mpi_p, 0, mpi_comm_world, ierr)
732 call mpi_bcast(ptgalpha_eps, 1, mpi_p, 0, mpi_comm_world, ierr)
733 call mpi_bcast(ramp_ratio, 1, mpi_p, 0, mpi_comm_world, ierr)
734 call mpi_bcast(sigma, 1, mpi_p, 0, mpi_comm_world, ierr)
735 call mpi_bcast(synth_u_inf, 1, mpi_p, 0, mpi_comm_world, ierr)
736 call mpi_bcast(t_save, 1, mpi_p, 0, mpi_comm_world, ierr)
737 call mpi_bcast(t_stop, 1, mpi_p, 0, mpi_comm_world, ierr)
738 call mpi_bcast(tau_star, 1, mpi_p, 0, mpi_comm_world, ierr)
739 call mpi_bcast(teno_ct, 1, mpi_p, 0, mpi_comm_world, ierr)
740 call mpi_bcast(w_x, 1, mpi_p, 0, mpi_comm_world, ierr)
741 call mpi_bcast(w_y, 1, mpi_p, 0, mpi_comm_world, ierr)
742 call mpi_bcast(w_z, 1, mpi_p, 0, mpi_comm_world, ierr)
743 call mpi_bcast(weno_eps, 1, mpi_p, 0, mpi_comm_world, ierr)
744
745 ! Case-optimization scalars (absent when constants are baked in)
746# 141 "/home/runner/work/MFC/MFC/build/include/simulation/generated_bcast.fpp"
747 call mpi_bcast(igr_iter_solver, 1, mpi_integer, 0, mpi_comm_world, ierr)
748 call mpi_bcast(igr_order, 1, mpi_integer, 0, mpi_comm_world, ierr)
749 call mpi_bcast(muscl_lim, 1, mpi_integer, 0, mpi_comm_world, ierr)
750 call mpi_bcast(muscl_order, 1, mpi_integer, 0, mpi_comm_world, ierr)
751 call mpi_bcast(nb, 1, mpi_integer, 0, mpi_comm_world, ierr)
752 call mpi_bcast(num_fluids, 1, mpi_integer, 0, mpi_comm_world, ierr)
753 call mpi_bcast(recon_type, 1, mpi_integer, 0, mpi_comm_world, ierr)
754 call mpi_bcast(weno_order, 1, mpi_integer, 0, mpi_comm_world, ierr)
755 call mpi_bcast(igr, 1, mpi_logical, 0, mpi_comm_world, ierr)
756 call mpi_bcast(igr_pres_lim, 1, mpi_logical, 0, mpi_comm_world, ierr)
757 call mpi_bcast(mapped_weno, 1, mpi_logical, 0, mpi_comm_world, ierr)
758 call mpi_bcast(mhd, 1, mpi_logical, 0, mpi_comm_world, ierr)
759 call mpi_bcast(relativity, 1, mpi_logical, 0, mpi_comm_world, ierr)
760 call mpi_bcast(teno, 1, mpi_logical, 0, mpi_comm_world, ierr)
761 call mpi_bcast(viscous, 1, mpi_logical, 0, mpi_comm_world, ierr)
762 call mpi_bcast(wenoz, 1, mpi_logical, 0, mpi_comm_world, ierr)
763 call mpi_bcast(wenoz_q, 1, mpi_p, 0, mpi_comm_world, ierr)
764# 159 "/home/runner/work/MFC/MFC/build/include/simulation/generated_bcast.fpp"
765
766 ! fluid_pp member loop
767 do i = 1, num_fluids_max
768 call mpi_bcast(fluid_pp(i)%G, 1, mpi_p, 0, mpi_comm_world, ierr)
769 call mpi_bcast(fluid_pp(i)%K, 1, mpi_p, 0, mpi_comm_world, ierr)
770 call mpi_bcast(fluid_pp(i)%cv, 1, mpi_p, 0, mpi_comm_world, ierr)
771 call mpi_bcast(fluid_pp(i)%eos, 1, mpi_integer, 0, mpi_comm_world, ierr)
772 call mpi_bcast(fluid_pp(i)%gamma, 1, mpi_p, 0, mpi_comm_world, ierr)
773 call mpi_bcast(fluid_pp(i)%hb_m, 1, mpi_p, 0, mpi_comm_world, ierr)
774 call mpi_bcast(fluid_pp(i)%jwl_a, 1, mpi_p, 0, mpi_comm_world, ierr)
775 call mpi_bcast(fluid_pp(i)%jwl_b, 1, mpi_p, 0, mpi_comm_world, ierr)
776 call mpi_bcast(fluid_pp(i)%jwl_omega, 1, mpi_p, 0, mpi_comm_world, ierr)
777 call mpi_bcast(fluid_pp(i)%jwl_r1, 1, mpi_p, 0, mpi_comm_world, ierr)
778 call mpi_bcast(fluid_pp(i)%jwl_r2, 1, mpi_p, 0, mpi_comm_world, ierr)
779 call mpi_bcast(fluid_pp(i)%jwl_rho0, 1, mpi_p, 0, mpi_comm_world, ierr)
780 call mpi_bcast(fluid_pp(i)%jwl_t0, 1, mpi_p, 0, mpi_comm_world, ierr)
781 call mpi_bcast(fluid_pp(i)%k_therm, 1, mpi_p, 0, mpi_comm_world, ierr)
782 call mpi_bcast(fluid_pp(i)%mg_c0, 1, mpi_p, 0, mpi_comm_world, ierr)
783 call mpi_bcast(fluid_pp(i)%mg_gruneisen, 1, mpi_p, 0, mpi_comm_world, ierr)
784 call mpi_bcast(fluid_pp(i)%mg_gruneisen_a, 1, mpi_p, 0, mpi_comm_world, ierr)
785 call mpi_bcast(fluid_pp(i)%mg_rho0, 1, mpi_p, 0, mpi_comm_world, ierr)
786 call mpi_bcast(fluid_pp(i)%mg_s, 1, mpi_p, 0, mpi_comm_world, ierr)
787 call mpi_bcast(fluid_pp(i)%mg_s2, 1, mpi_p, 0, mpi_comm_world, ierr)
788 call mpi_bcast(fluid_pp(i)%mg_s3, 1, mpi_p, 0, mpi_comm_world, ierr)
789 call mpi_bcast(fluid_pp(i)%mg_t0, 1, mpi_p, 0, mpi_comm_world, ierr)
790 call mpi_bcast(fluid_pp(i)%mu_bulk, 1, mpi_p, 0, mpi_comm_world, ierr)
791 call mpi_bcast(fluid_pp(i)%mu_max, 1, mpi_p, 0, mpi_comm_world, ierr)
792 call mpi_bcast(fluid_pp(i)%mu_min, 1, mpi_p, 0, mpi_comm_world, ierr)
793 call mpi_bcast(fluid_pp(i)%nn, 1, mpi_p, 0, mpi_comm_world, ierr)
794 call mpi_bcast(fluid_pp(i)%non_newtonian, 1, mpi_logical, 0, mpi_comm_world, ierr)
795 call mpi_bcast(fluid_pp(i)%pi_inf, 1, mpi_p, 0, mpi_comm_world, ierr)
796 call mpi_bcast(fluid_pp(i)%qv, 1, mpi_p, 0, mpi_comm_world, ierr)
797 call mpi_bcast(fluid_pp(i)%qvp, 1, mpi_p, 0, mpi_comm_world, ierr)
798 call mpi_bcast(fluid_pp(i)%tau0, 1, mpi_p, 0, mpi_comm_world, ierr)
799 call mpi_bcast(fluid_pp(i)%vinet_gruneisen, 1, mpi_p, 0, mpi_comm_world, ierr)
800 call mpi_bcast(fluid_pp(i)%vinet_gruneisen_a, 1, mpi_p, 0, mpi_comm_world, ierr)
801 call mpi_bcast(fluid_pp(i)%vinet_k0, 1, mpi_p, 0, mpi_comm_world, ierr)
802 call mpi_bcast(fluid_pp(i)%vinet_k0p, 1, mpi_p, 0, mpi_comm_world, ierr)
803 call mpi_bcast(fluid_pp(i)%vinet_rho0, 1, mpi_p, 0, mpi_comm_world, ierr)
804 call mpi_bcast(fluid_pp(i)%vinet_t0, 1, mpi_p, 0, mpi_comm_world, ierr)
805 call mpi_bcast(fluid_pp(i)%Re(1), 2, mpi_p, 0, mpi_comm_world, ierr)
806 end do
807
808 ! bub_pp members (under bubbles guard)
809 if (bubbles_euler .or. bubbles_lagrange) then
810 call mpi_bcast(bub_pp%M_g, 1, mpi_p, 0, mpi_comm_world, ierr)
811 call mpi_bcast(bub_pp%M_v, 1, mpi_p, 0, mpi_comm_world, ierr)
812 call mpi_bcast(bub_pp%R0ref, 1, mpi_p, 0, mpi_comm_world, ierr)
813 call mpi_bcast(bub_pp%R_g, 1, mpi_p, 0, mpi_comm_world, ierr)
814 call mpi_bcast(bub_pp%R_v, 1, mpi_p, 0, mpi_comm_world, ierr)
815 call mpi_bcast(bub_pp%T0ref, 1, mpi_p, 0, mpi_comm_world, ierr)
816 call mpi_bcast(bub_pp%cp_g, 1, mpi_p, 0, mpi_comm_world, ierr)
817 call mpi_bcast(bub_pp%cp_v, 1, mpi_p, 0, mpi_comm_world, ierr)
818 call mpi_bcast(bub_pp%gam_g, 1, mpi_p, 0, mpi_comm_world, ierr)
819 call mpi_bcast(bub_pp%gam_v, 1, mpi_p, 0, mpi_comm_world, ierr)
820 call mpi_bcast(bub_pp%k_g, 1, mpi_p, 0, mpi_comm_world, ierr)
821 call mpi_bcast(bub_pp%k_v, 1, mpi_p, 0, mpi_comm_world, ierr)
822 call mpi_bcast(bub_pp%mu_g, 1, mpi_p, 0, mpi_comm_world, ierr)
823 call mpi_bcast(bub_pp%mu_l, 1, mpi_p, 0, mpi_comm_world, ierr)
824 call mpi_bcast(bub_pp%mu_v, 1, mpi_p, 0, mpi_comm_world, ierr)
825 call mpi_bcast(bub_pp%p0ref, 1, mpi_p, 0, mpi_comm_world, ierr)
826 call mpi_bcast(bub_pp%pv, 1, mpi_p, 0, mpi_comm_world, ierr)
827 call mpi_bcast(bub_pp%rho0ref, 1, mpi_p, 0, mpi_comm_world, ierr)
828 call mpi_bcast(bub_pp%ss, 1, mpi_p, 0, mpi_comm_world, ierr)
829 call mpi_bcast(bub_pp%vd, 1, mpi_p, 0, mpi_comm_world, ierr)
830 end if
831
832 ! lag_params members (under bubbles_lagrange guard)
833 if (bubbles_lagrange) then
834 call mpi_bcast(lag_params%gravity_force, 1, mpi_logical, 0, mpi_comm_world, ierr)
835 call mpi_bcast(lag_params%heatTransfer_model, 1, mpi_logical, 0, mpi_comm_world, ierr)
836 call mpi_bcast(lag_params%kahan_summation, 1, mpi_logical, 0, mpi_comm_world, ierr)
837 call mpi_bcast(lag_params%massTransfer_model, 1, mpi_logical, 0, mpi_comm_world, ierr)
838 call mpi_bcast(lag_params%pressure_corrector, 1, mpi_logical, 0, mpi_comm_world, ierr)
839 call mpi_bcast(lag_params%pressure_force, 1, mpi_logical, 0, mpi_comm_world, ierr)
840 call mpi_bcast(lag_params%write_bubbles, 1, mpi_logical, 0, mpi_comm_world, ierr)
841 call mpi_bcast(lag_params%write_bubbles_stats, 1, mpi_logical, 0, mpi_comm_world, ierr)
842 call mpi_bcast(lag_params%write_void_evol, 1, mpi_logical, 0, mpi_comm_world, ierr)
843 call mpi_bcast(lag_params%charNz, 1, mpi_integer, 0, mpi_comm_world, ierr)
844 call mpi_bcast(lag_params%cluster_type, 1, mpi_integer, 0, mpi_comm_world, ierr)
845 call mpi_bcast(lag_params%drag_model, 1, mpi_integer, 0, mpi_comm_world, ierr)
846 call mpi_bcast(lag_params%nBubs_glb, 1, mpi_integer, 0, mpi_comm_world, ierr)
847 call mpi_bcast(lag_params%smooth_type, 1, mpi_integer, 0, mpi_comm_world, ierr)
848 call mpi_bcast(lag_params%solver_approach, 1, mpi_integer, 0, mpi_comm_world, ierr)
849 call mpi_bcast(lag_params%vel_model, 1, mpi_integer, 0, mpi_comm_world, ierr)
850 call mpi_bcast(lag_params%charwidth, 1, mpi_p, 0, mpi_comm_world, ierr)
851 call mpi_bcast(lag_params%epsilonb, 1, mpi_p, 0, mpi_comm_world, ierr)
852 call mpi_bcast(lag_params%valmaxvoid, 1, mpi_p, 0, mpi_comm_world, ierr)
853 call mpi_bcast(lag_params%input_path, len(lag_params%input_path), mpi_character, 0, mpi_comm_world, ierr)
854 end if
855
856 ! chem_params members (under chemistry guard)
857 if (chemistry) then
858 call mpi_bcast(chem_params%adap_substeps, 1, mpi_logical, 0, mpi_comm_world, ierr)
859 call mpi_bcast(chem_params%diffusion, 1, mpi_logical, 0, mpi_comm_world, ierr)
860 call mpi_bcast(chem_params%reactions, 1, mpi_logical, 0, mpi_comm_world, ierr)
861 call mpi_bcast(chem_params%gamma_method, 1, mpi_integer, 0, mpi_comm_world, ierr)
862 call mpi_bcast(chem_params%reaction_substeps, 1, mpi_integer, 0, mpi_comm_world, ierr)
863 call mpi_bcast(chem_params%reaction_substeps_max, 1, mpi_integer, 0, mpi_comm_world, ierr)
864 call mpi_bcast(chem_params%transport_model, 1, mpi_integer, 0, mpi_comm_world, ierr)
865 end if
866
867 ! rburn members (under reactive_burn guard)
868 if (reactive_burn) then
869 call mpi_bcast(rburn%k, 1, mpi_p, 0, mpi_comm_world, ierr)
870 call mpi_bcast(rburn%n, 1, mpi_p, 0, mpi_comm_world, ierr)
871 call mpi_bcast(rburn%pign, 1, mpi_p, 0, mpi_comm_world, ierr)
872 call mpi_bcast(rburn%pref, 1, mpi_p, 0, mpi_comm_world, ierr)
873 call mpi_bcast(rburn%substeps, 1, mpi_integer, 0, mpi_comm_world, ierr)
874 call mpi_bcast(rburn%ta, 1, mpi_p, 0, mpi_comm_world, ierr)
875 end if
876
877# 113 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp" 2
878
879 ! manual: m_glb, n_glb, p_glb (computed in s_read_input_file, not namelist-bound)
880 call mpi_bcast(m_glb, 1, mpi_integer, 0, mpi_comm_world, ierr)
881 call mpi_bcast(n_glb, 1, mpi_integer, 0, mpi_comm_world, ierr)
882 call mpi_bcast(p_glb, 1, mpi_integer, 0, mpi_comm_world, ierr)
883
884 ! manual: bc_x/y/z member broadcasts (struct members not in NAMELIST_VARS)
885# 121 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
886 call mpi_bcast(bc_x%beg, 1, mpi_integer, 0, mpi_comm_world, ierr)
887# 122 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
888# 121 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
889 call mpi_bcast(bc_x%end, 1, mpi_integer, 0, mpi_comm_world, ierr)
890# 122 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
891# 121 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
892 call mpi_bcast(bc_y%beg, 1, mpi_integer, 0, mpi_comm_world, ierr)
893# 122 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
894# 121 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
895 call mpi_bcast(bc_y%end, 1, mpi_integer, 0, mpi_comm_world, ierr)
896# 122 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
897# 121 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
898 call mpi_bcast(bc_z%beg, 1, mpi_integer, 0, mpi_comm_world, ierr)
899# 122 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
900# 121 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
901 call mpi_bcast(bc_z%end, 1, mpi_integer, 0, mpi_comm_world, ierr)
902# 122 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
903# 123 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
904
905# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
906 call mpi_bcast(bc_x%grcbc_in, 1, mpi_logical, 0, mpi_comm_world, ierr)
907# 130 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
908# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
909 call mpi_bcast(bc_x%grcbc_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
910# 130 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
911# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
912 call mpi_bcast(bc_x%grcbc_vel_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
913# 130 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
914# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
915 call mpi_bcast(bc_y%grcbc_in, 1, mpi_logical, 0, mpi_comm_world, ierr)
916# 130 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
917# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
918 call mpi_bcast(bc_y%grcbc_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
919# 130 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
920# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
921 call mpi_bcast(bc_y%grcbc_vel_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
922# 130 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
923# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
924 call mpi_bcast(bc_z%grcbc_in, 1, mpi_logical, 0, mpi_comm_world, ierr)
925# 130 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
926# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
927 call mpi_bcast(bc_z%grcbc_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
928# 130 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
929# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
930 call mpi_bcast(bc_z%grcbc_vel_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
931# 130 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
932# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
933 call mpi_bcast(bc_x%isothermal_in, 1, mpi_logical, 0, mpi_comm_world, ierr)
934# 130 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
935# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
936 call mpi_bcast(bc_y%isothermal_in, 1, mpi_logical, 0, mpi_comm_world, ierr)
937# 130 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
938# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
939 call mpi_bcast(bc_z%isothermal_in, 1, mpi_logical, 0, mpi_comm_world, ierr)
940# 130 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
941# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
942 call mpi_bcast(bc_x%isothermal_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
943# 130 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
944# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
945 call mpi_bcast(bc_y%isothermal_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
946# 130 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
947# 129 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
948 call mpi_bcast(bc_z%isothermal_out, 1, mpi_logical, 0, mpi_comm_world, ierr)
949# 130 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
950# 131 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
951
952# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
953 call mpi_bcast(bc_x%vb1, 1, mpi_p, 0, mpi_comm_world, ierr)
954# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
955# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
956 call mpi_bcast(bc_x%vb2, 1, mpi_p, 0, mpi_comm_world, ierr)
957# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
958# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
959 call mpi_bcast(bc_x%vb3, 1, mpi_p, 0, mpi_comm_world, ierr)
960# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
961# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
962 call mpi_bcast(bc_x%ve1, 1, mpi_p, 0, mpi_comm_world, ierr)
963# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
964# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
965 call mpi_bcast(bc_x%ve2, 1, mpi_p, 0, mpi_comm_world, ierr)
966# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
967# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
968 call mpi_bcast(bc_x%ve3, 1, mpi_p, 0, mpi_comm_world, ierr)
969# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
970# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
971 call mpi_bcast(bc_y%vb1, 1, mpi_p, 0, mpi_comm_world, ierr)
972# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
973# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
974 call mpi_bcast(bc_y%vb2, 1, mpi_p, 0, mpi_comm_world, ierr)
975# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
976# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
977 call mpi_bcast(bc_y%vb3, 1, mpi_p, 0, mpi_comm_world, ierr)
978# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
979# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
980 call mpi_bcast(bc_y%ve1, 1, mpi_p, 0, mpi_comm_world, ierr)
981# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
982# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
983 call mpi_bcast(bc_y%ve2, 1, mpi_p, 0, mpi_comm_world, ierr)
984# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
985# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
986 call mpi_bcast(bc_y%ve3, 1, mpi_p, 0, mpi_comm_world, ierr)
987# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
988# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
989 call mpi_bcast(bc_z%vb1, 1, mpi_p, 0, mpi_comm_world, ierr)
990# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
991# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
992 call mpi_bcast(bc_z%vb2, 1, mpi_p, 0, mpi_comm_world, ierr)
993# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
994# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
995 call mpi_bcast(bc_z%vb3, 1, mpi_p, 0, mpi_comm_world, ierr)
996# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
997# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
998 call mpi_bcast(bc_z%ve1, 1, mpi_p, 0, mpi_comm_world, ierr)
999# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1000# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1001 call mpi_bcast(bc_z%ve2, 1, mpi_p, 0, mpi_comm_world, ierr)
1002# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1003# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1004 call mpi_bcast(bc_z%ve3, 1, mpi_p, 0, mpi_comm_world, ierr)
1005# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1006# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1007 call mpi_bcast(bc_x%pres_in, 1, mpi_p, 0, mpi_comm_world, ierr)
1008# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1009# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1010 call mpi_bcast(bc_x%pres_out, 1, mpi_p, 0, mpi_comm_world, ierr)
1011# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1012# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1013 call mpi_bcast(bc_y%pres_in, 1, mpi_p, 0, mpi_comm_world, ierr)
1014# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1015# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1016 call mpi_bcast(bc_y%pres_out, 1, mpi_p, 0, mpi_comm_world, ierr)
1017# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1018# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1019 call mpi_bcast(bc_z%pres_in, 1, mpi_p, 0, mpi_comm_world, ierr)
1020# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1021# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1022 call mpi_bcast(bc_z%pres_out, 1, mpi_p, 0, mpi_comm_world, ierr)
1023# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1024# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1025 call mpi_bcast(bc_x%Twall_in, 1, mpi_p, 0, mpi_comm_world, ierr)
1026# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1027# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1028 call mpi_bcast(bc_x%Twall_out, 1, mpi_p, 0, mpi_comm_world, ierr)
1029# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1030# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1031 call mpi_bcast(bc_y%Twall_in, 1, mpi_p, 0, mpi_comm_world, ierr)
1032# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1033# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1034 call mpi_bcast(bc_y%Twall_out, 1, mpi_p, 0, mpi_comm_world, ierr)
1035# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1036# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1037 call mpi_bcast(bc_z%Twall_in, 1, mpi_p, 0, mpi_comm_world, ierr)
1038# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1039# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1040 call mpi_bcast(bc_z%Twall_out, 1, mpi_p, 0, mpi_comm_world, ierr)
1041# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1042# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1043 call mpi_bcast(bc_x%vel_in_ramp, 1, mpi_p, 0, mpi_comm_world, ierr)
1044# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1045# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1046 call mpi_bcast(bc_x%vel_in_t0, 1, mpi_p, 0, mpi_comm_world, ierr)
1047# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1048# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1049 call mpi_bcast(bc_x%vel_in_frac0, 1, mpi_p, 0, mpi_comm_world, ierr)
1050# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1051# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1052 call mpi_bcast(bc_y%vel_in_ramp, 1, mpi_p, 0, mpi_comm_world, ierr)
1053# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1054# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1055 call mpi_bcast(bc_y%vel_in_t0, 1, mpi_p, 0, mpi_comm_world, ierr)
1056# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1057# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1058 call mpi_bcast(bc_y%vel_in_frac0, 1, mpi_p, 0, mpi_comm_world, ierr)
1059# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1060# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1061 call mpi_bcast(bc_z%vel_in_ramp, 1, mpi_p, 0, mpi_comm_world, ierr)
1062# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1063# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1064 call mpi_bcast(bc_z%vel_in_t0, 1, mpi_p, 0, mpi_comm_world, ierr)
1065# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1066# 142 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1067 call mpi_bcast(bc_z%vel_in_frac0, 1, mpi_p, 0, mpi_comm_world, ierr)
1068# 143 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1069# 144 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1070
1071 do i = 1, 3
1072# 148 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1073 call mpi_bcast(bc_x%vel_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1074# 149 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1075# 148 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1076 call mpi_bcast(bc_x%vel_out (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1077# 149 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1078# 148 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1079 call mpi_bcast(bc_y%vel_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1080# 149 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1081# 148 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1082 call mpi_bcast(bc_y%vel_out (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1083# 149 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1084# 148 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1085 call mpi_bcast(bc_z%vel_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1086# 149 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1087# 148 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1088 call mpi_bcast(bc_z%vel_out (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1089# 149 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1090# 150 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1091 end do
1092
1093 ! manual: cfl_dt (runtime-computed logical), bc_io (BC-file existence)
1094 call mpi_bcast(cfl_dt, 1, mpi_logical, 0, mpi_comm_world, ierr)
1095 call mpi_bcast(bc_io, 1, mpi_logical, 0, mpi_comm_world, ierr)
1096
1097 ! manual: shear_stress, bulk_stress (derived from Re_size post-init on all ranks),
1098 ! bodyForces (derived from bf_x/y/z)
1099 call mpi_bcast(shear_stress, 1, mpi_logical, 0, mpi_comm_world, ierr)
1100 call mpi_bcast(bulk_stress, 1, mpi_logical, 0, mpi_comm_world, ierr)
1101 call mpi_bcast(bodyforces, 1, mpi_logical, 0, mpi_comm_world, ierr)
1102
1103 ! manual: bc_x per-fluid inflow arrays (loop over num_fluids_max)
1104 do i = 1, num_fluids_max
1105# 166 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1106 call mpi_bcast(bc_x%alpha_rho_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1107# 167 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1108# 166 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1109 call mpi_bcast(bc_x%alpha_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1110# 167 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1111# 166 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1112 call mpi_bcast(bc_y%alpha_rho_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1113# 167 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1114# 166 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1115 call mpi_bcast(bc_y%alpha_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1116# 167 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1117# 166 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1118 call mpi_bcast(bc_z%alpha_rho_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1119# 167 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1120# 166 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1121 call mpi_bcast(bc_z%alpha_in (i), 1, mpi_p, 0, mpi_comm_world, ierr)
1122# 167 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1123# 168 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1124 end do
1125
1126 ! manual: patch_ib (sim member subset differs from pre; uses count=3, adds mass/moving_ibm)
1127 do i = 1, num_ibs
1128# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1129 call mpi_bcast(patch_ib(i)%radius, 1, mpi_p, 0, mpi_comm_world, ierr)
1130# 176 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1131# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1132 call mpi_bcast(patch_ib(i)%length_x, 1, mpi_p, 0, mpi_comm_world, ierr)
1133# 176 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1134# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1135 call mpi_bcast(patch_ib(i)%length_y, 1, mpi_p, 0, mpi_comm_world, ierr)
1136# 176 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1137# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1138 call mpi_bcast(patch_ib(i)%length_z, 1, mpi_p, 0, mpi_comm_world, ierr)
1139# 176 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1140# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1141 call mpi_bcast(patch_ib(i)%x_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1142# 176 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1143# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1144 call mpi_bcast(patch_ib(i)%y_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1145# 176 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1146# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1147 call mpi_bcast(patch_ib(i)%z_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1148# 176 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1149# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1150 call mpi_bcast(patch_ib(i)%slip, 1, mpi_p, 0, mpi_comm_world, ierr)
1151# 176 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1152# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1153 call mpi_bcast(patch_ib(i)%mass, 1, mpi_p, 0, mpi_comm_world, ierr)
1154# 176 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1155# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1156 call mpi_bcast(patch_ib(i)%v_blow, 1, mpi_p, 0, mpi_comm_world, ierr)
1157# 176 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1158# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1159 call mpi_bcast(patch_ib(i)%Twall, 1, mpi_p, 0, mpi_comm_world, ierr)
1160# 176 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1161# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1162 call mpi_bcast(patch_ib(i)%burn_rate_exp, 1, mpi_p, 0, mpi_comm_world, ierr)
1163# 176 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1164# 175 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1165 call mpi_bcast(patch_ib(i)%burn_rate_pref, 1, mpi_p, 0, mpi_comm_world, ierr)
1166# 176 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1167# 177 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1168# 178 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1169 call mpi_bcast(patch_ib(i)%vel, 3, mpi_p, 0, mpi_comm_world, ierr)
1170# 179 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1171# 178 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1172 call mpi_bcast(patch_ib(i)%angular_vel, 3, mpi_p, 0, mpi_comm_world, ierr)
1173# 179 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1174# 178 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1175 call mpi_bcast(patch_ib(i)%angles, 3, mpi_p, 0, mpi_comm_world, ierr)
1176# 179 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1177# 178 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1178 call mpi_bcast(patch_ib(i)%kin_hinge, 3, mpi_p, 0, mpi_comm_world, ierr)
1179# 179 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1180# 178 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1181 call mpi_bcast(patch_ib(i)%kin_offset, 3, mpi_p, 0, mpi_comm_world, ierr)
1182# 179 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1183# 180 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1184# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1185 call mpi_bcast(patch_ib(i)%kin_phi0, 1, mpi_p, 0, mpi_comm_world, ierr)
1186# 183 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1187# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1188 call mpi_bcast(patch_ib(i)%kin_theta0, 1, mpi_p, 0, mpi_comm_world, ierr)
1189# 183 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1190# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1191 call mpi_bcast(patch_ib(i)%kin_theta_mean, 1, mpi_p, 0, mpi_comm_world, ierr)
1192# 183 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1193# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1194 call mpi_bcast(patch_ib(i)%kin_freq, 1, mpi_p, 0, mpi_comm_world, ierr)
1195# 183 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1196# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1197 call mpi_bcast(patch_ib(i)%kin_phase, 1, mpi_p, 0, mpi_comm_world, ierr)
1198# 183 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1199# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1200 call mpi_bcast(patch_ib(i)%kin_t0, 1, mpi_p, 0, mpi_comm_world, ierr)
1201# 183 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1202# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1203 call mpi_bcast(patch_ib(i)%kin_ramp, 1, mpi_p, 0, mpi_comm_world, ierr)
1204# 183 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1205# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1206 call mpi_bcast(patch_ib(i)%kin_pitch_rate, 1, mpi_p, 0, mpi_comm_world, ierr)
1207# 183 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1208# 182 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1209 call mpi_bcast(patch_ib(i)%kin_smooth, 1, mpi_p, 0, mpi_comm_world, ierr)
1210# 183 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1211# 184 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1212 call mpi_bcast(patch_ib(i)%kin_model, 1, mpi_integer, 0, mpi_comm_world, ierr)
1213 call mpi_bcast(patch_ib(i)%geometry, 1, mpi_integer, 0, mpi_comm_world, ierr)
1214 call mpi_bcast(patch_ib(i)%moving_ibm, 1, mpi_integer, 0, mpi_comm_world, ierr)
1215 call mpi_bcast(patch_ib(i)%airfoil_id, 1, mpi_integer, 0, mpi_comm_world, ierr)
1216 call mpi_bcast(patch_ib(i)%model_id, 1, mpi_integer, 0, mpi_comm_world, ierr)
1217 call mpi_bcast(patch_ib(i)%inj_species, 1, mpi_integer, 0, mpi_comm_world, ierr)
1218 call mpi_bcast(patch_ib(i)%thermal_bc, 1, mpi_integer, 0, mpi_comm_world, ierr)
1219 call mpi_bcast(patch_ib(i)%surface_reaction, 1, mpi_integer, 0, mpi_comm_world, ierr)
1220 end do
1221
1222 ! manual: ib_airfoil (kept manual alongside patch_ib)
1223 do i = 1, num_ib_airfoils_max
1224# 197 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1225 call mpi_bcast(ib_airfoil(i)%c, 1, mpi_p, 0, mpi_comm_world, ierr)
1226# 198 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1227# 197 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1228 call mpi_bcast(ib_airfoil(i)%p, 1, mpi_p, 0, mpi_comm_world, ierr)
1229# 198 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1230# 197 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1231 call mpi_bcast(ib_airfoil(i)%t, 1, mpi_p, 0, mpi_comm_world, ierr)
1232# 198 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1233# 197 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1234 call mpi_bcast(ib_airfoil(i)%m, 1, mpi_p, 0, mpi_comm_world, ierr)
1235# 198 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1236# 199 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1237 end do
1238
1239 ! manual: stl_models loop (num_stl_models scalar is generated; grouped array members)
1240 do i = 1, num_stl_models_max
1241 call mpi_bcast(stl_models(i)%model_filepath, len(stl_models(i)%model_filepath), mpi_character, 0, mpi_comm_world, ierr)
1242 call mpi_bcast(stl_models(i)%model_threshold, 1, mpi_p, 0, mpi_comm_world, ierr)
1243# 206 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1244 call mpi_bcast(stl_models(i)%model_translate, 3, mpi_p, 0, mpi_comm_world, ierr)
1245# 207 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1246# 206 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1247 call mpi_bcast(stl_models(i)%model_scale, 3, mpi_p, 0, mpi_comm_world, ierr)
1248# 207 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1249# 208 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1250 end do
1251
1252 ! manual: particle_cloud (runtime loop to num_particle_clouds; irregular member subset)
1253 do i = 1, num_particle_clouds
1254# 214 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1255 call mpi_bcast(particle_cloud(i)%x_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1256# 215 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1257# 214 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1258 call mpi_bcast(particle_cloud(i)%y_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1259# 215 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1260# 214 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1261 call mpi_bcast(particle_cloud(i)%z_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1262# 215 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1263# 214 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1264 call mpi_bcast(particle_cloud(i)%length_x, 1, mpi_p, 0, mpi_comm_world, ierr)
1265# 215 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1266# 214 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1267 call mpi_bcast(particle_cloud(i)%length_y, 1, mpi_p, 0, mpi_comm_world, ierr)
1268# 215 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1269# 214 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1270 call mpi_bcast(particle_cloud(i)%length_z, 1, mpi_p, 0, mpi_comm_world, ierr)
1271# 215 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1272# 214 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1273 call mpi_bcast(particle_cloud(i)%radius, 1, mpi_p, 0, mpi_comm_world, ierr)
1274# 215 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1275# 214 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1276 call mpi_bcast(particle_cloud(i)%mass, 1, mpi_p, 0, mpi_comm_world, ierr)
1277# 215 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1278# 214 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1279 call mpi_bcast(particle_cloud(i)%min_spacing, 1, mpi_p, 0, mpi_comm_world, ierr)
1280# 215 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1281# 214 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1282 call mpi_bcast(particle_cloud(i)%shell_inner_radius, 1, mpi_p, 0, mpi_comm_world, ierr)
1283# 215 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1284# 214 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1285 call mpi_bcast(particle_cloud(i)%shell_outer_radius, 1, mpi_p, 0, mpi_comm_world, ierr)
1286# 215 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1287# 216 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1288 call mpi_bcast(particle_cloud(i)%num_particles, 1, mpi_integer, 0, mpi_comm_world, ierr)
1289 call mpi_bcast(particle_cloud(i)%moving_ibm, 1, mpi_integer, 0, mpi_comm_world, ierr)
1290 call mpi_bcast(particle_cloud(i)%seed, 1, mpi_integer, 0, mpi_comm_world, ierr)
1291 call mpi_bcast(particle_cloud(i)%cloud_geometry, 1, mpi_integer, 0, mpi_comm_world, ierr)
1292 call mpi_bcast(particle_cloud(i)%shell_axis, 1, mpi_integer, 0, mpi_comm_world, ierr)
1293 call mpi_bcast(particle_cloud(i)%packing_method, 1, mpi_integer, 0, mpi_comm_world, ierr)
1294 call mpi_bcast(particle_cloud(i)%periodic, 1, mpi_integer, 0, mpi_comm_world, ierr)
1295 end do
1296
1297 ! manual: acoustic/probe (combined loop; complex acoustic member set)
1298 do j = 1, num_probes_max
1299 do i = 1, 3
1300 call mpi_bcast(acoustic(j)%loc(i), 1, mpi_p, 0, mpi_comm_world, ierr)
1301 end do
1302
1303 call mpi_bcast(acoustic(j)%dipole, 1, mpi_logical, 0, mpi_comm_world, ierr)
1304
1305# 234 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1306 call mpi_bcast(acoustic(j)%pulse, 1, mpi_integer, 0, mpi_comm_world, ierr)
1307# 235 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1308# 234 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1309 call mpi_bcast(acoustic(j)%support, 1, mpi_integer, 0, mpi_comm_world, ierr)
1310# 235 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1311# 234 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1312 call mpi_bcast(acoustic(j)%num_elements, 1, mpi_integer, 0, mpi_comm_world, ierr)
1313# 235 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1314# 234 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1315 call mpi_bcast(acoustic(j)%element_on, 1, mpi_integer, 0, mpi_comm_world, ierr)
1316# 235 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1317# 234 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1318 call mpi_bcast(acoustic(j)%bb_num_freq, 1, mpi_integer, 0, mpi_comm_world, ierr)
1319# 235 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1320# 236 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1321
1322# 242 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1323 call mpi_bcast(acoustic(j)%mag, 1, mpi_p, 0, mpi_comm_world, ierr)
1324# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1325# 242 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1326 call mpi_bcast(acoustic(j)%length, 1, mpi_p, 0, mpi_comm_world, ierr)
1327# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1328# 242 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1329 call mpi_bcast(acoustic(j)%height, 1, mpi_p, 0, mpi_comm_world, ierr)
1330# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1331# 242 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1332 call mpi_bcast(acoustic(j)%wavelength, 1, mpi_p, 0, mpi_comm_world, ierr)
1333# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1334# 242 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1335 call mpi_bcast(acoustic(j)%frequency, 1, mpi_p, 0, mpi_comm_world, ierr)
1336# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1337# 242 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1338 call mpi_bcast(acoustic(j)%gauss_sigma_dist, 1, mpi_p, 0, mpi_comm_world, ierr)
1339# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1340# 242 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1341 call mpi_bcast(acoustic(j)%gauss_sigma_time, 1, mpi_p, 0, mpi_comm_world, ierr)
1342# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1343# 242 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1344 call mpi_bcast(acoustic(j)%npulse, 1, mpi_p, 0, mpi_comm_world, ierr)
1345# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1346# 242 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1347 call mpi_bcast(acoustic(j)%dir, 1, mpi_p, 0, mpi_comm_world, ierr)
1348# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1349# 242 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1350 call mpi_bcast(acoustic(j)%delay, 1, mpi_p, 0, mpi_comm_world, ierr)
1351# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1352# 242 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1353 call mpi_bcast(acoustic(j)%foc_length, 1, mpi_p, 0, mpi_comm_world, ierr)
1354# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1355# 242 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1356 call mpi_bcast(acoustic(j)%aperture, 1, mpi_p, 0, mpi_comm_world, ierr)
1357# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1358# 242 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1359 call mpi_bcast(acoustic(j)%element_spacing_angle, 1, mpi_p, 0, mpi_comm_world, ierr)
1360# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1361# 242 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1362 call mpi_bcast(acoustic(j)%element_polygon_ratio, 1, mpi_p, 0, mpi_comm_world, ierr)
1363# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1364# 242 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1365 call mpi_bcast(acoustic(j)%rotate_angle, 1, mpi_p, 0, mpi_comm_world, ierr)
1366# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1367# 242 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1368 call mpi_bcast(acoustic(j)%bb_bandwidth, 1, mpi_p, 0, mpi_comm_world, ierr)
1369# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1370# 242 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1371 call mpi_bcast(acoustic(j)%bb_lowest_freq, 1, mpi_p, 0, mpi_comm_world, ierr)
1372# 243 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1373# 244 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1374
1375# 246 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1376 call mpi_bcast(probe(j)%x, 1, mpi_p, 0, mpi_comm_world, ierr)
1377# 247 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1378# 246 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1379 call mpi_bcast(probe(j)%y, 1, mpi_p, 0, mpi_comm_world, ierr)
1380# 247 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1381# 246 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1382 call mpi_bcast(probe(j)%z, 1, mpi_p, 0, mpi_comm_world, ierr)
1383# 247 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1384# 248 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1385 end do
1386
1387 ! manual: spatial-support body-force derived-type members (the bf_spatial_support toggle is broadcast by
1388 ! generated_bcast.fpp)
1389# 253 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1390 call mpi_bcast(spatial_bf%amp, 1, mpi_p, 0, mpi_comm_world, ierr)
1391# 254 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1392# 253 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1393 call mpi_bcast(spatial_bf%x_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1394# 254 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1395# 253 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1396 call mpi_bcast(spatial_bf%y_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1397# 254 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1398# 253 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1399 call mpi_bcast(spatial_bf%sigma, 1, mpi_p, 0, mpi_comm_world, ierr)
1400# 254 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1401# 253 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1402 call mpi_bcast(spatial_bf%conv_vel, 1, mpi_p, 0, mpi_comm_world, ierr)
1403# 254 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1404# 255 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1405 call mpi_bcast(spatial_bf%freq, 8, mpi_p, 0, mpi_comm_world, ierr)
1406 call mpi_bcast(spatial_bf%phase, 8, mpi_p, 0, mpi_comm_world, ierr)
1407
1408 ! manual: synthetic turbulence namelist arrays (registered as indexed
1409 ! variants only; scalars are broadcast by generated_bcast.fpp)
1410 call mpi_bcast(synth_n_waves_per_shell, num_synth_shells_max, mpi_integer, 0, mpi_comm_world, ierr)
1411 call mpi_bcast(synth_k_shell, num_synth_shells_max, mpi_p, 0, mpi_comm_world, ierr)
1412 call mpi_bcast(synth_amp_shell, num_synth_shells_max, mpi_p, 0, mpi_comm_world, ierr)
1413 call mpi_bcast(turb_pos, num_turb_sources_max*3, mpi_p, 0, mpi_comm_world, ierr)
1414 call mpi_bcast(synth_l, num_turb_sources_max*3, mpi_p, 0, mpi_comm_world, ierr)
1415#endif
1416
1417 end subroutine s_mpi_bcast_user_inputs
1418
1419 !> Adds particles to the transfer list for the MPI communication.
1420 !! @param nBub Current LOCAL number of bubbles
1421 !! @param pos Current position of each bubble
1422 !! @param posPrev Previous position of each bubble (optional, not used
1423 !! for communication of initial condition)
1424 impure subroutine s_add_particles_to_transfer_list(nBub, pos, posPrev)
1425
1426 integer, intent(in) :: nbub
1427 real(wp), dimension(:,:), intent(in) :: pos, posprev
1428 integer :: bubid
1429 integer :: i, j, k
1430 integer :: dx, dy, dz
1431
1432 do k = nidx(3)%beg, nidx(3)%end
1433 do j = nidx(2)%beg, nidx(2)%end
1434 do i = nidx(1)%beg, nidx(1)%end
1435 p_send_counts(i, j, k) = 0
1436 end do
1437 end do
1438 end do
1439
1440 do k = 1, nbub
1441 dx = 0; dy = 0; dz = 0
1442 if (f_crosses_boundary(k, 1, -1, pos, posprev)) then
1443 dx = -1
1444 else if (f_crosses_boundary(k, 1, 1, pos, posprev)) then
1445 dx = 1
1446 end if
1447 if (n > 0) then
1448 if (f_crosses_boundary(k, 2, -1, pos, posprev)) then
1449 dy = -1
1450 else if (f_crosses_boundary(k, 2, 1, pos, posprev)) then
1451 dy = 1
1452 end if
1453 end if
1454 if (p > 0) then
1455 if (f_crosses_boundary(k, 3, -1, pos, posprev)) then
1456 dz = -1
1457 else if (f_crosses_boundary(k, 3, 1, pos, posprev)) then
1458 dz = 1
1459 end if
1460 end if
1461 if (abs(dx) + abs(dy) + abs(dz) /= 0) then
1462 call s_add_particle_to_direction(k, dx, dy, dz)
1463 end if
1464 end do
1465
1466 contains
1467
1468 logical function f_crosses_boundary(particle_id, dir, loc, pos, posPrev)
1469
1470 integer, intent(in) :: particle_id, dir, loc
1471 real(wp), dimension(:,:), intent(in) :: pos
1472 real(wp), dimension(:,:), optional, intent(in) :: posprev
1473
1474 if (loc == -1) then ! Beginning of the domain
1475 if (nidx(dir)%beg == 0) then
1476 f_crosses_boundary = .false.
1477 return
1478 end if
1479
1480 f_crosses_boundary = (posprev(particle_id, dir) >= pcomm_coords(dir)%beg .and. pos(particle_id, &
1481 & dir) < pcomm_coords(dir)%beg)
1482 else if (loc == 1) then ! End of the domain
1483 if (nidx(dir)%end == 0) then
1484 f_crosses_boundary = .false.
1485 return
1486 end if
1487
1488 f_crosses_boundary = (posprev(particle_id, dir) <= pcomm_coords(dir)%end .and. pos(particle_id, &
1489 & dir) > pcomm_coords(dir)%end)
1490 end if
1491
1492 end function f_crosses_boundary
1493
1494 subroutine s_add_particle_to_direction(particle_id, dir_x, dir_y, dir_z)
1495
1496 integer, intent(in) :: particle_id, dir_x, dir_y, dir_z
1497
1498 p_send_ids(dir_x, dir_y, dir_z, p_send_counts(dir_x, dir_y, dir_z)) = particle_id
1499 p_send_counts(dir_x, dir_y, dir_z) = p_send_counts(dir_x, dir_y, dir_z) + 1
1500
1501 end subroutine s_add_particle_to_direction
1502
1504
1505 !> Perform the MPI communication for lagrangian particles/bubbles.
1506 impure subroutine s_mpi_sendrecv_particles(bub_R0, Rmax_stats, Rmin_stats, gas_mg, gas_betaT, gas_betaC, bub_dphidt, lag_id, &
1507 & gas_p, gas_mv, rad, rvel, pos, posPrev, vel, scoord, drad, drvel, dgasp, dgasmv, dpos, dvel, lag_num_ts, nbubs, dest)
1508
1509 real(wp), dimension(:) :: bub_r0, rmax_stats, rmin_stats, gas_mg, gas_betat, gas_betac, bub_dphidt
1510 integer, dimension(:,:) :: lag_id
1511 real(wp), dimension(:,:) :: gas_p, gas_mv, rad, rvel, drad, drvel, dgasp, dgasmv
1512 real(wp), dimension(:,:,:) :: pos, posprev, vel, scoord, dpos, dvel
1513 integer :: position, bub_id, lag_num_ts, tag, partner, send_tag, recv_tag, nbubs, p_recv_size, dest
1514 integer :: i, j, k, l, q, r
1515 integer :: req_send, req_recv, ierr !< Generic flag used to identify and report MPI errors
1516 integer :: send_count, send_offset, recv_count, recv_offset
1517
1518#ifdef MFC_MPI
1519 ! Phase 1: Exchange particle counts using non-blocking communication
1520 send_count = 0
1521 recv_count = 0
1522
1523 ! Post all receives first
1524 do l = 1, n_neighbors
1525 i = neighbor_list(l, 1)
1526 j = neighbor_list(l, 2)
1527 k = neighbor_list(l, 3)
1528 partner = neighbor_ranks(i, j, k)
1529 recv_tag = neighbor_tag(i, j, k)
1530
1531 recv_count = recv_count + 1
1532 call mpi_irecv(p_recv_counts(i, j, k), 1, mpi_integer, partner, recv_tag, mpi_comm_world, recv_requests(recv_count), &
1533 & ierr)
1534 end do
1535
1536 ! Post all sends
1537 do l = 1, n_neighbors
1538 i = neighbor_list(l, 1)
1539 j = neighbor_list(l, 2)
1540 k = neighbor_list(l, 3)
1541 partner = neighbor_ranks(i, j, k)
1542 send_tag = neighbor_tag(-i, -j, -k)
1543
1544 send_count = send_count + 1
1545 call mpi_isend(p_send_counts(i, j, k), 1, mpi_integer, partner, send_tag, mpi_comm_world, send_requests(send_count), &
1546 & ierr)
1547 end do
1548
1549 ! Wait for all count exchanges to complete
1550 if (recv_count > 0) then
1551 call mpi_waitall(recv_count, recv_requests(1:recv_count), mpi_statuses_ignore, ierr)
1552 end if
1553 if (send_count > 0) then
1554 call mpi_waitall(send_count, send_requests(1:send_count), mpi_statuses_ignore, ierr)
1555 end if
1556
1557 ! Phase 2: Exchange particle data using non-blocking communication
1558 send_count = 0
1559 recv_count = 0
1560
1561 ! Post all receives for particle data first
1562 recv_offset = 1
1563 do l = 1, n_neighbors
1564 i = neighbor_list(l, 1)
1565 j = neighbor_list(l, 2)
1566 k = neighbor_list(l, 3)
1567
1568 if (p_recv_counts(i, j, k) > 0) then
1569 partner = neighbor_ranks(i, j, k)
1570 p_recv_size = p_recv_counts(i, j, k)*p_var_size
1571 recv_tag = neighbor_tag(i, j, k)
1572
1573 recv_count = recv_count + 1
1574 call mpi_irecv(p_recv_buff(recv_offset), p_recv_size, mpi_packed, partner, recv_tag, mpi_comm_world, &
1575 & recv_requests(recv_count), ierr)
1576 recv_offsets(l) = recv_offset
1577 recv_offset = recv_offset + p_recv_size
1578 end if
1579 end do
1580
1581 ! Pack and send particle data
1582 send_offset = 0
1583 do l = 1, n_neighbors
1584 i = neighbor_list(l, 1)
1585 j = neighbor_list(l, 2)
1586 k = neighbor_list(l, 3)
1587
1588 if (p_send_counts(i, j, k) > 0 .and. abs(i) + abs(j) + abs(k) /= 0) then
1589 partner = neighbor_ranks(i, j, k)
1590 send_tag = neighbor_tag(-i, -j, -k)
1591
1592 ! Pack data for sending
1593 position = 0
1594 do q = 0, p_send_counts(i, j, k) - 1
1595 bub_id = p_send_ids(i, j, k, q)
1596
1597 call mpi_pack(lag_id(bub_id, 1), 1, mpi_integer, p_send_buff(send_offset), p_buff_size, position, &
1598 & mpi_comm_world, ierr)
1599 call mpi_pack(bub_r0(bub_id), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, ierr)
1600 call mpi_pack(rmax_stats(bub_id), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1601 & ierr)
1602 call mpi_pack(rmin_stats(bub_id), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1603 & ierr)
1604 call mpi_pack(gas_mg(bub_id), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, ierr)
1605 call mpi_pack(gas_betat(bub_id), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1606 & ierr)
1607 call mpi_pack(gas_betac(bub_id), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1608 & ierr)
1609 call mpi_pack(bub_dphidt(bub_id), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1610 & ierr)
1611 do r = 1, 2
1612 call mpi_pack(gas_p(bub_id, r), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1613 & mpi_comm_world, ierr)
1614 call mpi_pack(gas_mv(bub_id, r), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1615 & mpi_comm_world, ierr)
1616 call mpi_pack(rad(bub_id, r), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1617 & ierr)
1618 call mpi_pack(rvel(bub_id, r), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1619 & ierr)
1620 call mpi_pack(pos(bub_id,:,r), 3, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1621 & ierr)
1622 call mpi_pack(posprev(bub_id,:,r), 3, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1623 & mpi_comm_world, ierr)
1624 call mpi_pack(vel(bub_id,:,r), 3, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1625 & ierr)
1626 call mpi_pack(scoord(bub_id,:,r), 3, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1627 & mpi_comm_world, ierr)
1628 end do
1629 do r = 1, lag_num_ts
1630 call mpi_pack(drad(bub_id, r), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, mpi_comm_world, &
1631 & ierr)
1632 call mpi_pack(drvel(bub_id, r), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1633 & mpi_comm_world, ierr)
1634 call mpi_pack(dgasp(bub_id, r), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1635 & mpi_comm_world, ierr)
1636 call mpi_pack(dgasmv(bub_id, r), 1, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1637 & mpi_comm_world, ierr)
1638 call mpi_pack(dpos(bub_id,:,r), 3, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1639 & mpi_comm_world, ierr)
1640 call mpi_pack(dvel(bub_id,:,r), 3, mpi_p, p_send_buff(send_offset), p_buff_size, position, &
1641 & mpi_comm_world, ierr)
1642 end do
1643 end do
1644
1645 send_count = send_count + 1
1646 call mpi_isend(p_send_buff(send_offset), position, mpi_packed, partner, send_tag, mpi_comm_world, &
1647 & send_requests(send_count), ierr)
1648 send_offset = send_offset + position
1649 end if
1650 end do
1651
1652 ! Wait for all recvs for contiguous data to complete
1653 call mpi_waitall(recv_count, recv_requests(1:recv_count), mpi_statuses_ignore, ierr)
1654
1655 ! Process received data as it arrives
1656 do l = 1, n_neighbors
1657 i = neighbor_list(l, 1)
1658 j = neighbor_list(l, 2)
1659 k = neighbor_list(l, 3)
1660
1661 if (p_recv_counts(i, j, k) > 0 .and. abs(i) + abs(j) + abs(k) /= 0) then
1662 p_recv_size = p_recv_counts(i, j, k)*p_var_size
1663 recv_offset = recv_offsets(l)
1664
1665 position = 0
1666 ! Unpack received data
1667 do q = 0, p_recv_counts(i, j, k) - 1
1668 nbubs = nbubs + 1
1669 bub_id = nbubs
1670 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, lag_id(bub_id, 1), 1, mpi_integer, &
1671 & mpi_comm_world, ierr)
1672 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, bub_r0(bub_id), 1, mpi_p, mpi_comm_world, ierr)
1673 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, rmax_stats(bub_id), 1, mpi_p, &
1674 & mpi_comm_world, ierr)
1675 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, rmin_stats(bub_id), 1, mpi_p, &
1676 & mpi_comm_world, ierr)
1677 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, gas_mg(bub_id), 1, mpi_p, mpi_comm_world, ierr)
1678 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, gas_betat(bub_id), 1, mpi_p, mpi_comm_world, &
1679 & ierr)
1680 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, gas_betac(bub_id), 1, mpi_p, mpi_comm_world, &
1681 & ierr)
1682 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, bub_dphidt(bub_id), 1, mpi_p, &
1683 & mpi_comm_world, ierr)
1684 do r = 1, 2
1685 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, gas_p(bub_id, r), 1, mpi_p, &
1686 & mpi_comm_world, ierr)
1687 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, gas_mv(bub_id, r), 1, mpi_p, &
1688 & mpi_comm_world, ierr)
1689 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, rad(bub_id, r), 1, mpi_p, &
1690 & mpi_comm_world, ierr)
1691 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, rvel(bub_id, r), 1, mpi_p, &
1692 & mpi_comm_world, ierr)
1693 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, pos(bub_id,:,r), 3, mpi_p, &
1694 & mpi_comm_world, ierr)
1695 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, posprev(bub_id,:,r), 3, mpi_p, &
1696 & mpi_comm_world, ierr)
1697 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, vel(bub_id,:,r), 3, mpi_p, &
1698 & mpi_comm_world, ierr)
1699 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, scoord(bub_id,:,r), 3, mpi_p, &
1700 & mpi_comm_world, ierr)
1701 end do
1702 do r = 1, lag_num_ts
1703 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, drad(bub_id, r), 1, mpi_p, &
1704 & mpi_comm_world, ierr)
1705 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, drvel(bub_id, r), 1, mpi_p, &
1706 & mpi_comm_world, ierr)
1707 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, dgasp(bub_id, r), 1, mpi_p, &
1708 & mpi_comm_world, ierr)
1709 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, dgasmv(bub_id, r), 1, mpi_p, &
1710 & mpi_comm_world, ierr)
1711 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, dpos(bub_id,:,r), 3, mpi_p, &
1712 & mpi_comm_world, ierr)
1713 call mpi_unpack(p_recv_buff(recv_offset), p_recv_size, position, dvel(bub_id,:,r), 3, mpi_p, &
1714 & mpi_comm_world, ierr)
1715 end do
1716 lag_id(bub_id, 2) = bub_id
1717 end do
1718 recv_offset = recv_offset + p_recv_size
1719 end if
1720 end do
1721
1722 ! Wait for all sends to complete
1723 if (send_count > 0) then
1724 call mpi_waitall(send_count, send_requests(1:send_count), mpi_statuses_ignore, ierr)
1725 end if
1726#endif
1727
1728 if (any(periodic_bc)) then
1729 call s_wrap_particle_positions(pos, posprev, nbubs, dest)
1730 end if
1731
1732 end subroutine s_mpi_sendrecv_particles
1733
1734 !> Return a unique tag for each neighbor based on its position relative to the current process.
1735 integer function neighbor_tag(i, j, k) result(tag)
1736
1737 integer, intent(in) :: i, j, k
1738
1739 tag = (k + 1)*9 + (j + 1)*3 + (i + 1)
1740
1741 end function neighbor_tag
1742
1743 subroutine s_wrap_particle_positions(pos, posPrev, nbubs, dest)
1744
1745 real(wp), dimension(:,:,:) :: pos, posPrev
1746 integer :: nbubs, dest
1747 integer :: i, q
1748 real(wp) :: offset
1749
1750 do i = 1, nbubs
1751 if (periodic_bc(1)) then
1752 offset = glb_bounds(1)%end - glb_bounds(1)%beg
1753 if (pos(i, 1, dest) > x_cb(m + buff_size)) then
1754 do q = 1, 2
1755 pos(i, 1, q) = pos(i, 1, q) - offset
1756 posprev(i, 1, q) = posprev(i, 1, q) - offset
1757 end do
1758 end if
1759 if (pos(i, 1, dest) < x_cb(-1 - buff_size)) then
1760 do q = 1, 2
1761 pos(i, 1, q) = pos(i, 1, q) + offset
1762 posprev(i, 1, q) = posprev(i, 1, q) + offset
1763 end do
1764 end if
1765 end if
1766
1767 if (periodic_bc(2)) then
1768 offset = glb_bounds(2)%end - glb_bounds(2)%beg
1769 if (pos(i, 2, dest) > y_cb(n + buff_size)) then
1770 do q = 1, 2
1771 pos(i, 2, q) = pos(i, 2, q) - offset
1772 posprev(i, 2, q) = posprev(i, 2, q) - offset
1773 end do
1774 end if
1775 if (pos(i, 2, dest) < y_cb(-buff_size - 1)) then
1776 do q = 1, 2
1777 pos(i, 2, q) = pos(i, 2, q) + offset
1778 posprev(i, 2, q) = posprev(i, 2, q) + offset
1779 end do
1780 end if
1781 end if
1782
1783 if (periodic_bc(3)) then
1784 offset = glb_bounds(3)%end - glb_bounds(3)%beg
1785 if (pos(i, 3, dest) > z_cb(p + buff_size)) then
1786 do q = 1, 2
1787 pos(i, 3, q) = pos(i, 3, q) - offset
1788 posprev(i, 3, q) = posprev(i, 3, q) - offset
1789 end do
1790 end if
1791 if (pos(i, 3, dest) < z_cb(-1 - buff_size)) then
1792 do q = 1, 2
1793 pos(i, 3, q) = pos(i, 3, q) + offset
1794 posprev(i, 3, q) = posprev(i, 3, q) + offset
1795 end do
1796 end if
1797 end if
1798 end do
1799
1800 end subroutine s_wrap_particle_positions
1801
1802 !> Broadcast random phase numbers from rank 0 to all MPI processes
1803 impure subroutine s_mpi_send_random_number(phi_rn, num_freq)
1804
1805 integer, intent(in) :: num_freq
1806 real(wp), intent(inout), dimension(1:num_freq) :: phi_rn
1807
1808#ifdef MFC_MPI
1809 integer :: ierr !< Generic flag used to identify and report MPI errors
1810 call mpi_bcast(phi_rn, num_freq, mpi_p, 0, mpi_comm_world, ierr)
1811#endif
1812
1813 end subroutine s_mpi_send_random_number
1814
1815 !> Finalize the MPI proxy module
1817
1818#ifdef MFC_MPI
1819 if (ib) then
1820#ifdef MFC_DEBUG
1821# 670 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1822 block
1823# 670 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1824 use iso_fortran_env, only: output_unit
1825# 670 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1826
1827# 670 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1828 print *, 'm_mpi_proxy.fpp:670: ', '@:DEALLOCATE(ib_buff_send, ib_buff_recv)'
1829# 670 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1830
1831# 670 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1832 call flush (output_unit)
1833# 670 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1834 end block
1835# 670 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1836#endif
1837# 670 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1838
1839# 670 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1840#if defined(MFC_OpenACC)
1841# 670 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1842!$acc exit data delete(ib_buff_send, ib_buff_recv)
1843# 670 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1844#elif defined(MFC_OpenMP)
1845# 670 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1846!$omp target exit data map(release:ib_buff_send, ib_buff_recv)
1847# 670 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1848#endif
1849# 670 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1850 deallocate (ib_buff_send, ib_buff_recv)
1851# 671 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1852 end if
1853
1854 if (allocated(p_send_buff)) then
1855#ifdef MFC_DEBUG
1856# 674 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1857 block
1858# 674 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1859 use iso_fortran_env, only: output_unit
1860# 674 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1861
1862# 674 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1863 print *, 'm_mpi_proxy.fpp:674: ', '@:DEALLOCATE(p_send_buff, p_recv_buff)'
1864# 674 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1865
1866# 674 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1867 call flush (output_unit)
1868# 674 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1869 end block
1870# 674 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1871#endif
1872# 674 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1873
1874# 674 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1875#if defined(MFC_OpenACC)
1876# 674 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1877!$acc exit data delete(p_send_buff, p_recv_buff)
1878# 674 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1879#elif defined(MFC_OpenMP)
1880# 674 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1881!$omp target exit data map(release:p_send_buff, p_recv_buff)
1882# 674 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1883#endif
1884# 674 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1885 deallocate (p_send_buff, p_recv_buff)
1886# 675 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1887#ifdef MFC_DEBUG
1888# 675 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1889 block
1890# 675 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1891 use iso_fortran_env, only: output_unit
1892# 675 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1893
1894# 675 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1895 print *, 'm_mpi_proxy.fpp:675: ', '@:DEALLOCATE(p_send_ids)'
1896# 675 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1897
1898# 675 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1899 call flush (output_unit)
1900# 675 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1901 end block
1902# 675 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1903#endif
1904# 675 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1905
1906# 675 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1907#if defined(MFC_OpenACC)
1908# 675 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1909!$acc exit data delete(p_send_ids)
1910# 675 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1911#elif defined(MFC_OpenMP)
1912# 675 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1913!$omp target exit data map(release:p_send_ids)
1914# 675 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1915#endif
1916# 675 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1917 deallocate (p_send_ids)
1918# 676 "/home/runner/work/MFC/MFC/src/simulation/m_mpi_proxy.fpp"
1919 end if
1920#endif
1921
1922 end subroutine s_finalize_mpi_proxy_module
1923
1924end 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