MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_boundary_common.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
2!>
3!! @file
4!! @brief Contains module m_boundary_common
5
6!> @brief Noncharacteristic and processor boundary condition application for ghost cells and buffer regions
7# 1 "/home/runner/work/MFC/MFC/src/common/include/case.fpp" 1
8! This file exists so that Fypp can be run without generating case.fpp files for
9! each target. This is useful when generating documentation, for example. This
10! should also let MFC be built with CMake directly, without invoking mfc.sh.
11
12! For pre-process.
13# 8 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
14
15! For moving immersed boundaries in simulation
16# 12 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
17# 7 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp" 2
18# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
19# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
20# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
21# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
22# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
23# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
24# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
25# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
26
27# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
29# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
30
31# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
32
33# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
34
35# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
36
37# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
38
39# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
40
41# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
42
43# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
44! New line at end of file is required for FYPP
45# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
46# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
47# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
48# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
50# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
52# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53
54# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
56# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57
58# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
59
60# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
61
62# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
63
64# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
65
66# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
67
68# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
69
70# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
71! New line at end of file is required for FYPP
72# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
73
74# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
75# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
76# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
77# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
78# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
79
80# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
81
82# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
83
84# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
85
86# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
87
88# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
89
90# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
91
92# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
93
94# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
95
96# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
97
98# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
99
100# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
101
102# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
103
104# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
105
106# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107
108# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109
110# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111
112# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113
114# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
115
116# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
117
118# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
119
120# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
121
122# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
123
124# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
125# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128
129# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130
131# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132
133# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134
135# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136
137# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
138
139# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
140
141# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
142
143# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
144
145# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
146
147# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
148
149# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
150! New line at end of file is required for FYPP
151# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
152# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
153# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
154# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
155# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
156# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
157# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
158# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
159
160# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
161# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
162# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
163
164# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
165
166# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
167
168# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
169
170# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
171
172# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
173
174# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
175
176# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
177! New line at end of file is required for FYPP
178# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
179
180# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
181
182# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
183
184# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
185
186# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
187
188# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
189
190# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
191
192# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
193
194# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
195
196# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
197
198# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
199
200# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
201
202# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
203
204# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
205
206# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
207
208# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
209
210# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
211
212# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
213
214# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
215
216# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
217
218# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
219
220# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221
222# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
223
224# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
225
226# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
227
228# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
229
230# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
231
232# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
233
234# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
235! New line at end of file is required for FYPP
236# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
237
238! GPU parallel region (scalar reductions, maxval/minval)
239# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
240
241! GPU parallel loop over threads (most common GPU macro)
242# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
243
244! Required closing for GPU_PARALLEL_LOOP
245# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
246
247! Mark routine for device compilation
248# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
249
250! Declare device-resident data
251# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
252
253! Inner loop within a GPU parallel region
254# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
255
256! Scoped GPU data region
257# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
258
259! Host code with device pointers (for MPI with GPU buffers)
260# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
261
262! Allocate device memory (unscoped)
263# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
264
265! Free device memory
266# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
267
268! Atomic operation on device
269# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
270
271! End atomic capture block
272# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
273
274! Copy data between host and device
275# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
276
277! Synchronization barrier
278# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
279
280! Import GPU library module (openacc or omp_lib)
281# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
282
283! Emit code only for AMD compiler
284# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
285
286! Emit code for non-Cray compilers
287# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
288
289! Emit code only for Cray compiler
290# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
291
292! Emit code for non-NVIDIA compilers
293# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
294
295# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
296# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
297! New line at end of file is required for FYPP
298# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
299
300# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
301
302! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
303! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
304! example see misc/nvidia_uvm/bind.sh. NVIDIA unified memory page placement hint
305# 57 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
306
307! Allocate and create GPU device memory
308# 77 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
309
310! Free GPU device memory and deallocate
311# 85 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
312
313! Cray-specific GPU pointer setup for vector fields
314# 109 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
315
316! Cray-specific GPU pointer setup for scalar fields
317# 125 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
318
319! Cray-specific GPU pointer setup for acoustic source spatials
320# 150 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
321
322# 156 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
323
324# 163 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
325! New line at end of file is required for FYPP
326# 8 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp" 2
327
329
332 use m_mpi_proxy
333 use m_constants
335 use m_boundary_io
336
337 implicit none
338
344
345 public :: bc_buffers
346
347#ifdef MFC_MPI
349#endif
350
351contains
352
353 !> Allocate and set up boundary condition buffer arrays for all coordinate directions.
355
356 integer :: i, j, sys_size_alloc
357
358#ifdef MFC_DEBUG
359# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
360 block
361# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
362 use iso_fortran_env, only: output_unit
363# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
364
365# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
366 print *, 'm_boundary_common.fpp:39: ', '@:ALLOCATE(bc_buffers(1:3, 1:2))'
367# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
368
369# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
370 call flush (output_unit)
371# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
372 end block
373# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
374#endif
375# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
376 allocate (bc_buffers(1:3, 1:2))
377# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
378
379# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
380
381# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
382#if defined(MFC_OpenACC)
383# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
384!$acc enter data create(bc_buffers)
385# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
386#elif defined(MFC_OpenMP)
387# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
388!$omp target enter data map(always,alloc:bc_buffers)
389# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
390#endif
391
392 if (bc_io) then
393 sys_size_alloc = sys_size
394 if (chemistry) sys_size_alloc = sys_size + 1
395
396#ifdef MFC_DEBUG
397# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
398 block
399# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
400 use iso_fortran_env, only: output_unit
401# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
402
403# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
404 print *, 'm_boundary_common.fpp:45: ', '@:ALLOCATE(bc_buffers(1, 1)%sf(1:sys_size_alloc, 0:n, 0:p))'
405# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
406
407# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
408 call flush (output_unit)
409# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
410 end block
411# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
412#endif
413# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
414 allocate (bc_buffers(1, 1)%sf(1:sys_size_alloc, 0:n, 0:p))
415# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
416
417# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
418
419# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
420#if defined(MFC_OpenACC)
421# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
422!$acc enter data create(bc_buffers(1, 1)%sf)
423# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
424#elif defined(MFC_OpenMP)
425# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
426!$omp target enter data map(always,alloc:bc_buffers(1, 1)%sf)
427# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
428#endif
429#ifdef MFC_DEBUG
430# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
431 block
432# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
433 use iso_fortran_env, only: output_unit
434# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
435
436# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
437 print *, 'm_boundary_common.fpp:46: ', '@:ALLOCATE(bc_buffers(1, 2)%sf(1:sys_size_alloc, 0:n, 0:p))'
438# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
439
440# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
441 call flush (output_unit)
442# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
443 end block
444# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
445#endif
446# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
447 allocate (bc_buffers(1, 2)%sf(1:sys_size_alloc, 0:n, 0:p))
448# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
449
450# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
451
452# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
453#if defined(MFC_OpenACC)
454# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
455!$acc enter data create(bc_buffers(1, 2)%sf)
456# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
457#elif defined(MFC_OpenMP)
458# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
459!$omp target enter data map(always,alloc:bc_buffers(1, 2)%sf)
460# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
461#endif
462# 48 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
463 if (n > 0) then
464#ifdef MFC_DEBUG
465# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
466 block
467# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
468 use iso_fortran_env, only: output_unit
469# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
470
471# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
472 print *, 'm_boundary_common.fpp:49: ', '@:ALLOCATE(bc_buffers(2,1)%sf(-buff_size:m+buff_size,1:sys_size_alloc,0:p))'
473# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
474
475# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
476 call flush (output_unit)
477# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
478 end block
479# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
480#endif
481# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
482 allocate (bc_buffers(2,1)%sf(-buff_size:m+buff_size,1:sys_size_alloc,0:p))
483# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
484
485# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
486
487# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
488#if defined(MFC_OpenACC)
489# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
490!$acc enter data create(bc_buffers(2,1)%sf)
491# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
492#elif defined(MFC_OpenMP)
493# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
494!$omp target enter data map(always,alloc:bc_buffers(2,1)%sf)
495# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
496#endif
497#ifdef MFC_DEBUG
498# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
499 block
500# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
501 use iso_fortran_env, only: output_unit
502# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
503
504# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
505 print *, 'm_boundary_common.fpp:50: ', '@:ALLOCATE(bc_buffers(2,2)%sf(-buff_size:m+buff_size,1:sys_size_alloc,0:p))'
506# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
507
508# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
509 call flush (output_unit)
510# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
511 end block
512# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
513#endif
514# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
515 allocate (bc_buffers(2,2)%sf(-buff_size:m+buff_size,1:sys_size_alloc,0:p))
516# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
517
518# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
519
520# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
521#if defined(MFC_OpenACC)
522# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
523!$acc enter data create(bc_buffers(2,2)%sf)
524# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
525#elif defined(MFC_OpenMP)
526# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
527!$omp target enter data map(always,alloc:bc_buffers(2,2)%sf)
528# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
529#endif
530# 52 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
531 if (p > 0) then
532#ifdef MFC_DEBUG
533# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
534 block
535# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
536 use iso_fortran_env, only: output_unit
537# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
538
539# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
540 print *, 'm_boundary_common.fpp:53: ', '@:ALLOCATE(bc_buffers(3,1)%sf(-buff_size:m+buff_size,-buff_size:n+buff_size,1:sys_size_alloc))'
541# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
542
543# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
544 call flush (output_unit)
545# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
546 end block
547# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
548#endif
549# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
550 allocate (bc_buffers(3,1)%sf(-buff_size:m+buff_size,-buff_size:n+buff_size,1:sys_size_alloc))
551# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
552
553# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
554
555# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
556#if defined(MFC_OpenACC)
557# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
558!$acc enter data create(bc_buffers(3,1)%sf)
559# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
560#elif defined(MFC_OpenMP)
561# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
562!$omp target enter data map(always,alloc:bc_buffers(3,1)%sf)
563# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
564#endif
565#ifdef MFC_DEBUG
566# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
567 block
568# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
569 use iso_fortran_env, only: output_unit
570# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
571
572# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
573 print *, 'm_boundary_common.fpp:54: ', '@:ALLOCATE(bc_buffers(3,2)%sf(-buff_size:m+buff_size,-buff_size:n+buff_size,1:sys_size_alloc))'
574# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
575
576# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
577 call flush (output_unit)
578# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
579 end block
580# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
581#endif
582# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
583 allocate (bc_buffers(3,2)%sf(-buff_size:m+buff_size,-buff_size:n+buff_size,1:sys_size_alloc))
584# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
585
586# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
587
588# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
589#if defined(MFC_OpenACC)
590# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
591!$acc enter data create(bc_buffers(3,2)%sf)
592# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
593#elif defined(MFC_OpenMP)
594# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
595!$omp target enter data map(always,alloc:bc_buffers(3,2)%sf)
596# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
597#endif
598 end if
599# 57 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
600 end if
601# 59 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
602 do i = 1, num_dims
603 do j = 1, 2
604#ifdef _CRAYFTN
605# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
606 block
607# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
608#ifdef MFC_DEBUG
609# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
610 block
611# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
612 use iso_fortran_env, only: output_unit
613# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
614
615# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
616 print *, 'm_boundary_common.fpp:61: ', '@:ACC_SETUP_SFs(bc_buffers(i,j))'
617# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
618
619# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
620 call flush (output_unit)
621# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
622 end block
623# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
624#endif
625# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
626
627# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
628
629# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
630#if defined(MFC_OpenACC)
631# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
632!$acc enter data copyin(bc_buffers(i,j))
633# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
634#elif defined(MFC_OpenMP)
635# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
636!$omp target enter data map(to:bc_buffers(i,j))
637# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
638#endif
639# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
640 if (associated(bc_buffers(i,j)%sf)) then
641# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
642
643# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
644#if defined(MFC_OpenACC)
645# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
646!$acc enter data copyin(bc_buffers(i,j)%sf)
647# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
648#elif defined(MFC_OpenMP)
649# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
650!$omp target enter data map(to:bc_buffers(i,j)%sf)
651# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
652#endif
653# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
654 end if
655# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
656 end block
657# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
658#endif
659 end do
660 end do
661 end if
662
664
665 !> Populate the buffers of the primitive variables based on the selected boundary conditions.
666 impure subroutine s_populate_variables_buffers(bc_type, q_prim_vf, pb_in, mv_in, q_T_sf)
667
668 type(scalar_field), dimension(sys_size), intent(inout) :: q_prim_vf
669 real(stp), optional, dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:), intent(inout) :: pb_in, mv_in
670 type(integer_field), dimension(1:num_dims,1:2), intent(in) :: bc_type
671 type(scalar_field), optional, intent(inout) :: q_t_sf
672
673 call s_populate_bc_direction(1, -1, bc_x, bc_type(1, 1), q_prim_vf, pb_in, mv_in, q_t_sf)
674 call s_populate_bc_direction(1, 1, bc_x, bc_type(1, 2), q_prim_vf, pb_in, mv_in, q_t_sf)
675
676 ! Population of Buffers in y-direction
677
678 if (n == 0) return
679
680# 84 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
681 call s_populate_bc_direction(2, -1, bc_y, bc_type(2, 1), q_prim_vf, pb_in, mv_in, q_t_sf)
682 call s_populate_bc_direction(2, 1, bc_y, bc_type(2, 2), q_prim_vf, pb_in, mv_in, q_t_sf)
683# 87 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
684
685 ! Population of Buffers in z-direction
686
687 if (p == 0) return
688
689# 93 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
690 call s_populate_bc_direction(3, -1, bc_z, bc_type(3, 1), q_prim_vf, pb_in, mv_in, q_t_sf)
691 call s_populate_bc_direction(3, 1, bc_z, bc_type(3, 2), q_prim_vf, pb_in, mv_in, q_t_sf)
692# 96 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
693
694 end subroutine s_populate_variables_buffers
695
696 !> Populate the variable buffers along one direction and location, via MPI exchange for processor boundaries or by dispatching
697 !! the per-cell BC routines over the boundary face.
698 impure subroutine s_populate_bc_direction(bc_dir, bc_loc, bc_bounds, bc_type_edge, q_prim_vf, pb_in, mv_in, q_T_sf)
699
700 integer, intent(in) :: bc_dir, bc_loc
701 type(int_bounds_info), intent(in) :: bc_bounds
702 type(integer_field), intent(in) :: bc_type_edge
703 type(scalar_field), dimension(sys_size), intent(inout) :: q_prim_vf
704 real(stp), optional, dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:), intent(inout) :: pb_in, mv_in
705 type(scalar_field), optional, intent(inout) :: q_t_sf
706 integer :: bc_edge, k_beg, k_end, l_beg, l_end
707 integer :: bc_code, k, l
708
709 if (bc_loc == -1) then
710 bc_edge = bc_bounds%beg
711 else
712 bc_edge = bc_bounds%end
713 end if
714
715 ! BC type codes defined in m_constants.fpp; non-negative values are MPI boundaries
716 if (bc_edge >= 0) then
717 call s_mpi_sendrecv_variables_buffers(q_prim_vf, bc_dir, bc_loc, sys_size, pb_in, mv_in, q_t_sf)
718 return
719 end if
720
721 if (bc_dir == 1) then
722 k_beg = 0; k_end = n; l_beg = 0; l_end = p
723 else if (bc_dir == 2) then
724 k_beg = -buff_size; k_end = m + buff_size; l_beg = 0; l_end = p
725 else
726 k_beg = -buff_size; k_end = m + buff_size; l_beg = -buff_size; l_end = n + buff_size
727 end if
728
729
730# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
731
732# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
733#if defined(MFC_OpenACC)
734# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
735!$acc parallel loop collapse(2) gang vector default(present) private(l, k, bc_code)
736# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
737#elif defined(MFC_OpenMP)
738# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
739
740# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
741
742# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
743
744# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
745!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(2) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(l, k, bc_code)
746# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
747#endif
748 do l = l_beg, l_end
749 do k = k_beg, k_end
750 if (bc_dir == 1) then
751 bc_code = int(bc_type_edge%sf(0, k, l))
752 else if (bc_dir == 2) then
753 bc_code = int(bc_type_edge%sf(k, 0, l))
754 else
755 bc_code = int(bc_type_edge%sf(k, l, 0))
756 end if
757
758 select case (bc_code)
759 case (bc_char_sup_outflow:bc_ghost_extrap)
760 call s_ghost_cell_extrapolation(q_prim_vf, bc_dir, bc_loc, k, l, q_t_sf)
761 case (bc_axis)
762 if (bc_dir == 2 .and. bc_loc == -1) call s_axis(q_prim_vf, pb_in, mv_in, k, l)
763 case (bc_reflective)
764 call s_symmetry(q_prim_vf, bc_dir, bc_loc, k, l, pb_in, mv_in, q_t_sf)
765 case (bc_periodic)
766 call s_periodic(q_prim_vf, bc_dir, bc_loc, k, l, pb_in, mv_in, q_t_sf)
767 case (bc_slip_wall)
768 call s_slip_wall(q_prim_vf, bc_dir, bc_loc, k, l, q_t_sf)
769 case (bc_no_slip_wall)
770 call s_no_slip_wall(q_prim_vf, bc_dir, bc_loc, k, l, q_t_sf)
771 case (bc_dirichlet)
772 call s_dirichlet(q_prim_vf, bc_dir, bc_loc, k, l, q_t_sf)
773 end select
774
775 if (qbmm .and. (.not. polytropic) .and. present(pb_in) .and. present(mv_in) .and. (bc_code <= bc_ghost_extrap) &
776 & .and. .not. (bc_dir == 2 .and. bc_loc == -1 .and. bc_code == bc_axis)) then
777 call s_qbmm_extrapolation(bc_dir, bc_loc, k, l, pb_in, mv_in)
778 end if
779 end do
780 end do
781
782# 166 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
783#if defined(MFC_OpenACC)
784# 166 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
785!$acc end parallel loop
786# 166 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
787#elif defined(MFC_OpenMP)
788# 166 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
789
790# 166 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
791!$omp end target teams loop
792# 166 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
793#endif
794
795 end subroutine s_populate_bc_direction
796
797 !> Deallocate boundary condition buffer arrays allocated during module initialization.
799
800 if (bc_io) then
801 deallocate (bc_buffers(1, 1)%sf)
802 deallocate (bc_buffers(1, 2)%sf)
803# 177 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
804 if (n > 0) then
805 deallocate (bc_buffers(2, 1)%sf)
806 deallocate (bc_buffers(2, 2)%sf)
807# 181 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
808 if (p > 0) then
809 deallocate (bc_buffers(3, 1)%sf)
810 deallocate (bc_buffers(3, 2)%sf)
811 end if
812# 186 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
813 end if
814# 188 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
815 end if
816
817 deallocate (bc_buffers)
818
820
821end module m_boundary_common
integer, intent(in) k
integer, intent(in) j
integer, intent(in) l
Noncharacteristic and processor boundary condition application for ghost cells and buffer regions.
impure subroutine s_populate_bc_direction(bc_dir, bc_loc, bc_bounds, bc_type_edge, q_prim_vf, pb_in, mv_in, q_t_sf)
Populate the variable buffers along one direction and location, via MPI exchange for processor bounda...
impure subroutine, public s_initialize_boundary_common_module()
Allocate and set up boundary condition buffer arrays for all coordinate directions.
subroutine, public s_finalize_boundary_common_module()
Deallocate boundary condition buffer arrays allocated during module initialization.
impure subroutine, public s_populate_variables_buffers(bc_type, q_prim_vf, pb_in, mv_in, q_t_sf)
Populate the buffers of the primitive variables based on the selected boundary conditions.
Boundary condition restart I/O, capillary/IGR buffer population, and grid-variable buffers.
integer, dimension(1:3, 1:2) mpi_bc_type_type
subroutine s_write_parallel_boundary_condition_files(q_prim_vf, bc_type, q_t_sf)
Write boundary condition type and buffer data to per-rank parallel files using MPI I/O.
subroutine s_populate_grid_variables_buffers
Populate the buffers of the grid variables, which are constituted of the cell-boundary locations and ...
integer, dimension(1:3, 1:2) mpi_bc_buffer_type
impure subroutine s_populate_capillary_buffers(c_divs, bc_type, bc)
Populate ghost cell buffers for the color function and its divergence used in capillary surface tensi...
subroutine s_assign_default_bc_type(bc_type)
Initialize the per-cell boundary condition type arrays with the global default BC values.
subroutine s_read_serial_boundary_condition_files(step_dirpath, bc_type)
Read boundary condition type and buffer data from serial (unformatted) restart files.
impure subroutine s_create_mpi_types(bc_type)
Create MPI derived datatypes for boundary condition type arrays and buffer arrays used in parallel I/...
subroutine s_read_parallel_boundary_condition_files(bc_type)
Read boundary condition type and buffer data from per-rank parallel files using MPI I/O.
impure subroutine s_populate_f_igr_buffers(bc_type, jac_sf)
Populate ghost cell buffers for the Jacobian scalar field used in the IGR elliptic solver.
subroutine s_write_serial_boundary_condition_files(q_prim_vf, bc_type, step_dirpath, old_grid_in, q_t_sf)
Write boundary condition type and buffer data to serial (unformatted) restart files.
Per-cell noncharacteristic boundary condition primitives applied in the ghost cells.
type(scalar_field), dimension(:,:), allocatable bc_buffers
Compile-time constant parameters: default values, tolerances, and physical constants.
Shared derived types for field data, patch geometry, bubble dynamics, and MPI I/O structures.
Global parameters for the post-process: domain geometry, equation of state, and output database setti...
MPI gather and scatter operations for distributing post-process grid and flow-variable data.