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
45# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
46! New line at end of file is required for FYPP
47# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
48# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
49# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
50# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
52# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55
56# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
58# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
59
60# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
61
62# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
63
64# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
65
66# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
67
68# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
69
70# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
71
72# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
73
74# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
75! New line at end of file is required for FYPP
76# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
77
78# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
79# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
80# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
81# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
82# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
83
84# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
85
86# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
87
88# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
89
90# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
91
92# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
93
94# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
95
96# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
97
98# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
99
100# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
101
102# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
103
104# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
105
106# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107
108# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109
110# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111
112# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113
114# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
115
116# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
117
118# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
119
120# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
121
122# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
123
124# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
125
126# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
127
128# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
129# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130
131# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132
133# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134
135# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136
137# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
138
139# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
140
141# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
142
143# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
144
145# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
146
147# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
148
149# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
150
151# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
152
153# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
154! New line at end of file is required for FYPP
155# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
156# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
157# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
158# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
159# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
160# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
161# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
162# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
163
164# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
165# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
166# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
167
168# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
169
170# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
171
172# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
173
174# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
175
176# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
177
178# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
179
180# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
181
182# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
183! New line at end of file is required for FYPP
184# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
185
186# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
187
188# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
189
190# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
191
192# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
193
194# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
195
196# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
197
198# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
199
200# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
201
202# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
203
204# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
205
206# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
207
208# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
209
210# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
211
212# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
213
214# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
215
216# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
217
218# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
219
220# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221
222# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
223
224# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
225
226# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
227
228# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
229
230# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
231
232# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
233
234# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
235
236# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
237
238# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
239
240# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
241! New line at end of file is required for FYPP
242# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
243
244! GPU parallel region (scalar reductions, maxval/minval)
245# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
246
247! GPU parallel loop over threads (most common GPU macro)
248# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
249
250! Required closing for GPU_PARALLEL_LOOP
251# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
252
253! Mark routine for device compilation
254# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
255
256! Declare device-resident data
257# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
258
259! Inner loop within a GPU parallel region
260# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
261
262! Scoped GPU data region
263# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
264
265! Host code with device pointers (for MPI with GPU buffers)
266# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
267
268! Allocate device memory (unscoped)
269# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
270
271! Free device memory
272# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
273
274! Atomic operation on device
275# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
276
277! End atomic capture block
278# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
279
280! Copy data between host and device
281# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
282
283! Synchronization barrier
284# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
285
286! Import GPU library module (openacc or omp_lib)
287# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
288
289! Emit code only for AMD compiler
290# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
291
292! Emit code for non-Cray compilers
293# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
294
295! Emit code only for Cray compiler
296# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
297
298! Emit code for non-NVIDIA compilers
299# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
300
301# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
302# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
303! New line at end of file is required for FYPP
304# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
305
306# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
307
308! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
309! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
310! example see misc/nvidia_uvm/bind.sh. NVIDIA unified memory page placement hint
311# 57 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
312
313! Allocate and create GPU device memory
314# 77 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
315
316! Free GPU device memory and deallocate
317# 85 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
318
319! Cray-specific GPU pointer setup for vector fields
320# 109 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
321
322! Cray-specific GPU pointer setup for scalar fields
323# 125 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
324
325! Cray-specific GPU pointer setup for acoustic source spatials
326# 150 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
327
328# 156 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
329
330# 163 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
331! New line at end of file is required for FYPP
332# 8 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp" 2
333
335
338 use m_mpi_proxy
339 use m_constants
341 use m_boundary_io
342
343 implicit none
344
350
351 public :: bc_buffers
352
353#ifdef MFC_MPI
355#endif
356
357contains
358
359 !> Allocate and set up boundary condition buffer arrays for all coordinate directions.
361
362 integer :: i, j, sys_size_alloc
363
364#ifdef MFC_DEBUG
365# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
366 block
367# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
368 use iso_fortran_env, only: output_unit
369# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
370
371# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
372 print *, 'm_boundary_common.fpp:39: ', '@:ALLOCATE(bc_buffers(1:3, 1:2))'
373# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
374
375# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
376 call flush (output_unit)
377# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
378 end block
379# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
380#endif
381# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
382 allocate (bc_buffers(1:3, 1:2))
383# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
384
385# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
386
387# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
388#if defined(MFC_OpenACC)
389# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
390!$acc enter data create(bc_buffers)
391# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
392#elif defined(MFC_OpenMP)
393# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
394!$omp target enter data map(always,alloc:bc_buffers)
395# 39 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
396#endif
397
398 if (bc_io) then
399 sys_size_alloc = sys_size
400 if (chemistry) sys_size_alloc = sys_size + 1
401
402#ifdef MFC_DEBUG
403# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
404 block
405# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
406 use iso_fortran_env, only: output_unit
407# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
408
409# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
410 print *, 'm_boundary_common.fpp:45: ', '@:ALLOCATE(bc_buffers(1, 1)%sf(1:sys_size_alloc, 0:n, 0:p))'
411# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
412
413# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
414 call flush (output_unit)
415# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
416 end block
417# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
418#endif
419# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
420 allocate (bc_buffers(1, 1)%sf(1:sys_size_alloc, 0:n, 0:p))
421# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
422
423# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
424
425# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
426#if defined(MFC_OpenACC)
427# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
428!$acc enter data create(bc_buffers(1, 1)%sf)
429# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
430#elif defined(MFC_OpenMP)
431# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
432!$omp target enter data map(always,alloc:bc_buffers(1, 1)%sf)
433# 45 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
434#endif
435#ifdef MFC_DEBUG
436# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
437 block
438# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
439 use iso_fortran_env, only: output_unit
440# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
441
442# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
443 print *, 'm_boundary_common.fpp:46: ', '@:ALLOCATE(bc_buffers(1, 2)%sf(1:sys_size_alloc, 0:n, 0:p))'
444# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
445
446# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
447 call flush (output_unit)
448# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
449 end block
450# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
451#endif
452# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
453 allocate (bc_buffers(1, 2)%sf(1:sys_size_alloc, 0:n, 0:p))
454# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
455
456# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
457
458# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
459#if defined(MFC_OpenACC)
460# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
461!$acc enter data create(bc_buffers(1, 2)%sf)
462# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
463#elif defined(MFC_OpenMP)
464# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
465!$omp target enter data map(always,alloc:bc_buffers(1, 2)%sf)
466# 46 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
467#endif
468# 48 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
469 if (n > 0) then
470#ifdef MFC_DEBUG
471# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
472 block
473# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
474 use iso_fortran_env, only: output_unit
475# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
476
477# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
478 print *, 'm_boundary_common.fpp:49: ', '@:ALLOCATE(bc_buffers(2,1)%sf(-buff_size:m+buff_size,1:sys_size_alloc,0:p))'
479# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
480
481# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
482 call flush (output_unit)
483# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
484 end block
485# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
486#endif
487# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
488 allocate (bc_buffers(2,1)%sf(-buff_size:m+buff_size,1:sys_size_alloc,0:p))
489# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
490
491# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
492
493# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
494#if defined(MFC_OpenACC)
495# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
496!$acc enter data create(bc_buffers(2,1)%sf)
497# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
498#elif defined(MFC_OpenMP)
499# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
500!$omp target enter data map(always,alloc:bc_buffers(2,1)%sf)
501# 49 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
502#endif
503#ifdef MFC_DEBUG
504# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
505 block
506# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
507 use iso_fortran_env, only: output_unit
508# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
509
510# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
511 print *, 'm_boundary_common.fpp:50: ', '@:ALLOCATE(bc_buffers(2,2)%sf(-buff_size:m+buff_size,1:sys_size_alloc,0:p))'
512# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
513
514# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
515 call flush (output_unit)
516# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
517 end block
518# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
519#endif
520# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
521 allocate (bc_buffers(2,2)%sf(-buff_size:m+buff_size,1:sys_size_alloc,0:p))
522# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
523
524# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
525
526# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
527#if defined(MFC_OpenACC)
528# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
529!$acc enter data create(bc_buffers(2,2)%sf)
530# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
531#elif defined(MFC_OpenMP)
532# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
533!$omp target enter data map(always,alloc:bc_buffers(2,2)%sf)
534# 50 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
535#endif
536# 52 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
537 if (p > 0) then
538#ifdef MFC_DEBUG
539# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
540 block
541# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
542 use iso_fortran_env, only: output_unit
543# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
544
545# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
546 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))'
547# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
548
549# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
550 call flush (output_unit)
551# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
552 end block
553# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
554#endif
555# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
556 allocate (bc_buffers(3,1)%sf(-buff_size:m+buff_size,-buff_size:n+buff_size,1:sys_size_alloc))
557# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
558
559# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
560
561# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
562#if defined(MFC_OpenACC)
563# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
564!$acc enter data create(bc_buffers(3,1)%sf)
565# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
566#elif defined(MFC_OpenMP)
567# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
568!$omp target enter data map(always,alloc:bc_buffers(3,1)%sf)
569# 53 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
570#endif
571#ifdef MFC_DEBUG
572# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
573 block
574# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
575 use iso_fortran_env, only: output_unit
576# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
577
578# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
579 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))'
580# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
581
582# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
583 call flush (output_unit)
584# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
585 end block
586# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
587#endif
588# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
589 allocate (bc_buffers(3,2)%sf(-buff_size:m+buff_size,-buff_size:n+buff_size,1:sys_size_alloc))
590# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
591
592# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
593
594# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
595#if defined(MFC_OpenACC)
596# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
597!$acc enter data create(bc_buffers(3,2)%sf)
598# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
599#elif defined(MFC_OpenMP)
600# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
601!$omp target enter data map(always,alloc:bc_buffers(3,2)%sf)
602# 54 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
603#endif
604 end if
605# 57 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
606 end if
607# 59 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
608 do i = 1, num_dims
609 do j = 1, 2
610#ifdef _CRAYFTN
611# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
612 block
613# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
614#ifdef MFC_DEBUG
615# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
616 block
617# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
618 use iso_fortran_env, only: output_unit
619# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
620
621# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
622 print *, 'm_boundary_common.fpp:61: ', '@:ACC_SETUP_SFs(bc_buffers(i,j))'
623# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
624
625# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
626 call flush (output_unit)
627# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
628 end block
629# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
630#endif
631# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
632
633# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
634
635# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
636#if defined(MFC_OpenACC)
637# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
638!$acc enter data copyin(bc_buffers(i,j))
639# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
640#elif defined(MFC_OpenMP)
641# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
642!$omp target enter data map(to:bc_buffers(i,j))
643# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
644#endif
645# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
646 if (associated(bc_buffers(i,j)%sf)) then
647# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
648
649# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
650#if defined(MFC_OpenACC)
651# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
652!$acc enter data copyin(bc_buffers(i,j)%sf)
653# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
654#elif defined(MFC_OpenMP)
655# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
656!$omp target enter data map(to:bc_buffers(i,j)%sf)
657# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
658#endif
659# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
660 end if
661# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
662 end block
663# 61 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
664#endif
665 end do
666 end do
667 end if
668
670
671 !> Populate the buffers of the primitive variables based on the selected boundary conditions.
672 impure subroutine s_populate_variables_buffers(bc_type, q_prim_vf, pb_in, mv_in, q_T_sf)
673
674 type(scalar_field), dimension(sys_size), intent(inout) :: q_prim_vf
675 real(stp), optional, dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:), intent(inout) :: pb_in, mv_in
676 type(integer_field), dimension(1:num_dims,1:2), intent(in) :: bc_type
677 type(scalar_field), optional, intent(inout) :: q_t_sf
678
679 call s_populate_bc_direction(1, -1, bc_x, bc_type(1, 1), q_prim_vf, pb_in, mv_in, q_t_sf)
680 call s_populate_bc_direction(1, 1, bc_x, bc_type(1, 2), q_prim_vf, pb_in, mv_in, q_t_sf)
681
682 ! Population of Buffers in y-direction
683
684 if (n == 0) return
685
686# 84 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
687 call s_populate_bc_direction(2, -1, bc_y, bc_type(2, 1), q_prim_vf, pb_in, mv_in, q_t_sf)
688 call s_populate_bc_direction(2, 1, bc_y, bc_type(2, 2), q_prim_vf, pb_in, mv_in, q_t_sf)
689# 87 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
690
691 ! Population of Buffers in z-direction
692
693 if (p == 0) return
694
695# 93 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
696 call s_populate_bc_direction(3, -1, bc_z, bc_type(3, 1), q_prim_vf, pb_in, mv_in, q_t_sf)
697 call s_populate_bc_direction(3, 1, bc_z, bc_type(3, 2), q_prim_vf, pb_in, mv_in, q_t_sf)
698# 96 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
699
700 end subroutine s_populate_variables_buffers
701
702 !> Populate the variable buffers along one direction and location, via MPI exchange for processor boundaries or by dispatching
703 !! the per-cell BC routines over the boundary face.
704 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)
705
706 integer, intent(in) :: bc_dir, bc_loc
707 type(int_bounds_info), intent(in) :: bc_bounds
708 type(integer_field), intent(in) :: bc_type_edge
709 type(scalar_field), dimension(sys_size), intent(inout) :: q_prim_vf
710 real(stp), optional, dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:), intent(inout) :: pb_in, mv_in
711 type(scalar_field), optional, intent(inout) :: q_t_sf
712 integer :: bc_edge, k_beg, k_end, l_beg, l_end
713 integer :: bc_code, k, l
714
715 if (bc_loc == -1) then
716 bc_edge = bc_bounds%beg
717 else
718 bc_edge = bc_bounds%end
719 end if
720
721 ! BC type codes defined in m_constants.fpp; non-negative values are MPI boundaries
722 if (bc_edge >= 0) then
723 call s_mpi_sendrecv_variables_buffers(q_prim_vf, bc_dir, bc_loc, sys_size, pb_in, mv_in, q_t_sf)
724 return
725 end if
726
727 if (bc_dir == 1) then
728 k_beg = 0; k_end = n; l_beg = 0; l_end = p
729 else if (bc_dir == 2) then
730 k_beg = -buff_size; k_end = m + buff_size; l_beg = 0; l_end = p
731 else
732 k_beg = -buff_size; k_end = m + buff_size; l_beg = -buff_size; l_end = n + buff_size
733 end if
734
735
736# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
737
738# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
739#if defined(MFC_OpenACC)
740# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
741!$acc parallel loop collapse(2) gang vector default(present) private(l, k, bc_code)
742# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
743#elif defined(MFC_OpenMP)
744# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
745
746# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
747
748# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
749
750# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
751!$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)
752# 132 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
753#endif
754 do l = l_beg, l_end
755 do k = k_beg, k_end
756 if (bc_dir == 1) then
757 bc_code = int(bc_type_edge%sf(0, k, l))
758 else if (bc_dir == 2) then
759 bc_code = int(bc_type_edge%sf(k, 0, l))
760 else
761 bc_code = int(bc_type_edge%sf(k, l, 0))
762 end if
763
764 select case (bc_code)
765 case (bc_char_sup_outflow:bc_ghost_extrap)
766 call s_ghost_cell_extrapolation(q_prim_vf, bc_dir, bc_loc, k, l, q_t_sf)
767 case (bc_axis)
768 if (bc_dir == 2 .and. bc_loc == -1) call s_axis(q_prim_vf, pb_in, mv_in, k, l)
769 case (bc_reflective)
770 call s_symmetry(q_prim_vf, bc_dir, bc_loc, k, l, pb_in, mv_in, q_t_sf)
771 case (bc_periodic)
772 call s_periodic(q_prim_vf, bc_dir, bc_loc, k, l, pb_in, mv_in, q_t_sf)
773 case (bc_slip_wall)
774 call s_slip_wall(q_prim_vf, bc_dir, bc_loc, k, l, q_t_sf)
775 case (bc_no_slip_wall)
776 call s_no_slip_wall(q_prim_vf, bc_dir, bc_loc, k, l, q_t_sf)
777 case (bc_dirichlet)
778 call s_dirichlet(q_prim_vf, bc_dir, bc_loc, k, l, q_t_sf)
779 end select
780
781 if (qbmm .and. (.not. polytropic) .and. present(pb_in) .and. present(mv_in) .and. (bc_code <= bc_ghost_extrap) &
782 & .and. .not. (bc_dir == 2 .and. bc_loc == -1 .and. bc_code == bc_axis)) then
783 call s_qbmm_extrapolation(bc_dir, bc_loc, k, l, pb_in, mv_in)
784 end if
785 end do
786 end do
787
788# 166 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
789#if defined(MFC_OpenACC)
790# 166 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
791!$acc end parallel loop
792# 166 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
793#elif defined(MFC_OpenMP)
794# 166 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
795
796# 166 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
797!$omp end target teams loop
798# 166 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
799#endif
800
801 end subroutine s_populate_bc_direction
802
803 !> Deallocate boundary condition buffer arrays allocated during module initialization.
805
806 if (bc_io) then
807#ifdef MFC_DEBUG
808# 174 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
809 block
810# 174 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
811 use iso_fortran_env, only: output_unit
812# 174 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
813
814# 174 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
815 print *, 'm_boundary_common.fpp:174: ', '@:DEALLOCATE(bc_buffers(1, 1)%sf)'
816# 174 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
817
818# 174 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
819 call flush (output_unit)
820# 174 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
821 end block
822# 174 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
823#endif
824# 174 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
825
826# 174 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
827#if defined(MFC_OpenACC)
828# 174 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
829!$acc exit data delete(bc_buffers(1, 1)%sf)
830# 174 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
831#elif defined(MFC_OpenMP)
832# 174 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
833!$omp target exit data map(release:bc_buffers(1, 1)%sf)
834# 174 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
835#endif
836# 174 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
837 deallocate (bc_buffers(1, 1)%sf)
838#ifdef MFC_DEBUG
839# 175 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
840 block
841# 175 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
842 use iso_fortran_env, only: output_unit
843# 175 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
844
845# 175 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
846 print *, 'm_boundary_common.fpp:175: ', '@:DEALLOCATE(bc_buffers(1, 2)%sf)'
847# 175 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
848
849# 175 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
850 call flush (output_unit)
851# 175 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
852 end block
853# 175 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
854#endif
855# 175 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
856
857# 175 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
858#if defined(MFC_OpenACC)
859# 175 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
860!$acc exit data delete(bc_buffers(1, 2)%sf)
861# 175 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
862#elif defined(MFC_OpenMP)
863# 175 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
864!$omp target exit data map(release:bc_buffers(1, 2)%sf)
865# 175 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
866#endif
867# 175 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
868 deallocate (bc_buffers(1, 2)%sf)
869# 177 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
870 if (n > 0) then
871#ifdef MFC_DEBUG
872# 178 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
873 block
874# 178 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
875 use iso_fortran_env, only: output_unit
876# 178 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
877
878# 178 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
879 print *, 'm_boundary_common.fpp:178: ', '@:DEALLOCATE(bc_buffers(2, 1)%sf)'
880# 178 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
881
882# 178 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
883 call flush (output_unit)
884# 178 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
885 end block
886# 178 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
887#endif
888# 178 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
889
890# 178 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
891#if defined(MFC_OpenACC)
892# 178 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
893!$acc exit data delete(bc_buffers(2, 1)%sf)
894# 178 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
895#elif defined(MFC_OpenMP)
896# 178 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
897!$omp target exit data map(release:bc_buffers(2, 1)%sf)
898# 178 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
899#endif
900# 178 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
901 deallocate (bc_buffers(2, 1)%sf)
902#ifdef MFC_DEBUG
903# 179 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
904 block
905# 179 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
906 use iso_fortran_env, only: output_unit
907# 179 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
908
909# 179 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
910 print *, 'm_boundary_common.fpp:179: ', '@:DEALLOCATE(bc_buffers(2, 2)%sf)'
911# 179 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
912
913# 179 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
914 call flush (output_unit)
915# 179 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
916 end block
917# 179 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
918#endif
919# 179 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
920
921# 179 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
922#if defined(MFC_OpenACC)
923# 179 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
924!$acc exit data delete(bc_buffers(2, 2)%sf)
925# 179 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
926#elif defined(MFC_OpenMP)
927# 179 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
928!$omp target exit data map(release:bc_buffers(2, 2)%sf)
929# 179 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
930#endif
931# 179 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
932 deallocate (bc_buffers(2, 2)%sf)
933# 181 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
934 if (p > 0) then
935#ifdef MFC_DEBUG
936# 182 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
937 block
938# 182 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
939 use iso_fortran_env, only: output_unit
940# 182 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
941
942# 182 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
943 print *, 'm_boundary_common.fpp:182: ', '@:DEALLOCATE(bc_buffers(3, 1)%sf)'
944# 182 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
945
946# 182 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
947 call flush (output_unit)
948# 182 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
949 end block
950# 182 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
951#endif
952# 182 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
953
954# 182 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
955#if defined(MFC_OpenACC)
956# 182 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
957!$acc exit data delete(bc_buffers(3, 1)%sf)
958# 182 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
959#elif defined(MFC_OpenMP)
960# 182 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
961!$omp target exit data map(release:bc_buffers(3, 1)%sf)
962# 182 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
963#endif
964# 182 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
965 deallocate (bc_buffers(3, 1)%sf)
966#ifdef MFC_DEBUG
967# 183 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
968 block
969# 183 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
970 use iso_fortran_env, only: output_unit
971# 183 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
972
973# 183 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
974 print *, 'm_boundary_common.fpp:183: ', '@:DEALLOCATE(bc_buffers(3, 2)%sf)'
975# 183 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
976
977# 183 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
978 call flush (output_unit)
979# 183 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
980 end block
981# 183 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
982#endif
983# 183 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
984
985# 183 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
986#if defined(MFC_OpenACC)
987# 183 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
988!$acc exit data delete(bc_buffers(3, 2)%sf)
989# 183 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
990#elif defined(MFC_OpenMP)
991# 183 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
992!$omp target exit data map(release:bc_buffers(3, 2)%sf)
993# 183 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
994#endif
995# 183 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
996 deallocate (bc_buffers(3, 2)%sf)
997 end if
998# 186 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
999 end if
1000# 188 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
1001 end if
1002#ifdef MFC_DEBUG
1003# 189 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
1004 block
1005# 189 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
1006 use iso_fortran_env, only: output_unit
1007# 189 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
1008
1009# 189 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
1010 print *, 'm_boundary_common.fpp:189: ', '@:DEALLOCATE(bc_buffers)'
1011# 189 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
1012
1013# 189 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
1014 call flush (output_unit)
1015# 189 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
1016 end block
1017# 189 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
1018#endif
1019# 189 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
1020
1021# 189 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
1022#if defined(MFC_OpenACC)
1023# 189 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
1024!$acc exit data delete(bc_buffers)
1025# 189 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
1026#elif defined(MFC_OpenMP)
1027# 189 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
1028!$omp target exit data map(release:bc_buffers)
1029# 189 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
1030#endif
1031# 189 "/home/runner/work/MFC/MFC/src/common/m_boundary_common.fpp"
1032 deallocate (bc_buffers)
1033
1035
1036end 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.
Defines global parameters for the computational domain, simulation algorithm, and initial conditions.
logical bc_io
whether or not to save BC data
Broadcasts user inputs and decomposes the domain across MPI ranks for pre-processing.