MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_check_ib_patches.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
2!>
3!! @file
4!! @brief Contains module m_check_ib_patches
5
6!> @brief Validates geometry parameters and constraints for immersed boundary patches
7
8# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
9# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
10# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
11# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
12# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
13# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
14# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
15# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
16
17# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
18# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
19# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
20
21# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
22# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
23! Default for Fypp runs outside the toolchain (e.g. documentation). Searched last, so the
24! build/include/<target>/thermochem.fpp the toolchain writes from m_thermochem takes precedence.
25# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
26# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
27# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
28
29# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
30# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
31
32# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
33
34# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
35
36# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
37
38# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39
40# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41
42# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43
44# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45
46# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
47! New line at end of file is required for FYPP
48# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
49# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
50# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
51# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
52# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
56
57# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
58# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
59# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
60
61# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
62# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
63! Default for Fypp runs outside the toolchain (e.g. documentation). Searched last, so the
64! build/include/<target>/thermochem.fpp the toolchain writes from m_thermochem takes precedence.
65# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
66# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
67# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
68
69# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
70# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
71
72# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
73
74# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
75
76# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
77
78# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
79
80# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
81
82# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
83
84# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
85
86# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
87! New line at end of file is required for FYPP
88# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
89
90# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
91# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
92# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
93# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
94# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
95
96# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
97
98# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
99
100# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
101
102# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
103
104# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
105
106# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107
108# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109
110# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111
112# 95 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113
114# 100 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
115
116# 105 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
117
118# 110 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
119
120# 115 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
121
122# 120 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
123
124# 125 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
125
126# 130 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
127
128# 135 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
129
130# 165 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
131
132# 219 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
133
134# 233 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
135
136# 258 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137
138# 269 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139
140# 271 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141# 282 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
142
143# 332 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
144
145# 342 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
146
147# 352 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
148
149# 361 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
150
151# 378 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
152
153# 388 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
154
155# 395 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
156
157# 401 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
158
159# 407 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
160
161# 413 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
162
163# 419 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
164
165# 425 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
166! New line at end of file is required for FYPP
167# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
168# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
169# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
170# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
171# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
172# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
173# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
174# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
175
176# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
177# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
178# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
179
180# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
181# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
182! Default for Fypp runs outside the toolchain (e.g. documentation). Searched last, so the
183! build/include/<target>/thermochem.fpp the toolchain writes from m_thermochem takes precedence.
184# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
185# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
186# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
187
188# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
189# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
190
191# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
192
193# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
194
195# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
196
197# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
198
199# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
200
201# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
202
203# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
204
205# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
206! New line at end of file is required for FYPP
207# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
208
209# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
210
211# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
212
213# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
214
215# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
216
217# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
218
219# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220
221# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222
223# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224
225# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
226
227# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
228
229# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
230
231# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
232
233# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
234
235# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
236
237# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
238
239# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
240
241# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
242
243# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
244
245# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
246
247# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
248
249# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
250
251# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
252
253# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
254
255# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
256
257# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
258
259# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
260
261# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
262
263# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
264! New line at end of file is required for FYPP
265# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
266
267! GPU parallel region (scalar reductions, maxval/minval)
268# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
269
270! GPU parallel loop over threads (most common GPU macro)
271# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
272
273! Required closing for GPU_PARALLEL_LOOP
274# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
275
276! Mark routine for device compilation
277# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
278
279! Declare device-resident data
280# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
281
282! Inner loop within a GPU parallel region
283# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284
285! Scoped GPU data region
286# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
287
288! Host code with device pointers (for MPI with GPU buffers)
289# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
290
291! Allocate device memory (unscoped)
292# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
293
294! Free device memory
295# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
296
297! Atomic operation on device
298# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
299
300! End atomic capture block
301# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
302
303! Copy data between host and device
304# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
305
306! Synchronization barrier
307# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
308
309! Import GPU library module (openacc or omp_lib)
310# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
311
312! Emit code only for AMD compiler
313# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
314
315! Emit code for non-Cray compilers
316# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
317
318! Emit code only for Cray compiler
319# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
320
321! Emit code for non-NVIDIA compilers
322# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
323
324# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
325# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
326! New line at end of file is required for FYPP
327# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
328
329# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
330
331! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
332! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
333! example see misc/nvidia_uvm/bind.sh.
334# 52 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
335
336! Allocate and create GPU device memory
337# 72 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
338
339! Free GPU device memory and deallocate
340# 80 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
341
342! Cray-specific GPU pointer setup for vector fields
343# 104 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
344
345! Cray-specific GPU pointer setup for scalar fields
346# 120 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
347
348! Cray-specific GPU pointer setup for acoustic source spatials
349# 145 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
350
351# 151 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
352
353# 158 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
354! New line at end of file is required for FYPP
355# 8 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp" 2
356
358
361 use m_mpi_proxy
362 use m_data_output
363#ifdef MFC_MPI
364 use mpi !< message passing interface (mpi) module
365#endif
366
369 use m_helper
370
371 implicit none
372
373 private
374 public :: s_check_ib_patches
375
376 character(len=10) :: istr
377
378contains
379
380 !> Validate the geometry parameters of all active and inactive immersed boundary patches.
381 impure subroutine s_check_ib_patches
382
383 integer :: i
384
385 do i = 1, num_patches_max
386 if (i <= num_ibs) then
387 call s_int_to_str(i, istr)
388 if (patch_ib(i)%geometry == dflt_int) then
389# 40 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
390 call s_prohibit_abort("patch_ib(i)%geometry == dflt_int", "IB patch undefined. patch_ib("//trim(istr)//")%geometry must be set.")
391# 40 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
392 end if
393# 41 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
394
395 ! Constraints on the geometric initial condition patch parameters
396 if (patch_ib(i)%geometry == 2) then
398 else if (patch_ib(i)%geometry == 3) then
400 else if (patch_ib(i)%geometry == 8) then
402 else if (patch_ib(i)%geometry == 9) then
404 else if (patch_ib(i)%geometry == 4) then
406 else if (patch_ib(i)%geometry == 11) then
408 else if (patch_ib(i)%geometry == 10) then
410 else if (patch_ib(i)%geometry == 5 .or. patch_ib(i)%geometry == 12) then
412 else if (patch_ib(i)%geometry == 6) then
414 else
415 call s_prohibit_abort("Invalid IB patch", &
416 & "patch_ib(" // trim(istr) // ")%geometry must be " // "2-4, 8-10, 11 or 12.")
417 end if
418 else
419 if (patch_ib(i)%geometry /= dflt_int) then
420# 66 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
421 call s_prohibit_abort("patch_ib(i)%geometry /= dflt_int", "Inactive IB patch defined. " // "patch_ib(" // trim(istr) // ")%geometry must not be set for inactive patches.")
422# 66 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
423 end if
424# 69 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
426 end if
427 end do
428
429 end subroutine s_check_ib_patches
430
431 !> Verify that the geometric parameters of the circle patch have been consistently inputted.
432
433 impure subroutine s_check_circle_ib_patch_geometry(patch_id)
434
435 integer, intent(in) :: patch_id
436
437 call s_int_to_str(patch_id, istr)
438
439 if (n == 0 .or. p > 0 .or. patch_ib(patch_id)%radius <= 0._wp) then
440# 83 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
441 call s_prohibit_abort(.or..or."n == 0 p > 0 patch_ib(patch_id)%radius <= 0._wp", 'in circle IB patch ' // trim(istr))
442# 83 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
443 end if
444# 84 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
445
447
448 !> Verify that the geometric parameters of the ellipse patch have been consistently inputted.
449
450 impure subroutine s_check_ellipse_ib_patch_geometry(patch_id)
451
452 integer, intent(in) :: patch_id
453
454 call s_int_to_str(patch_id, istr)
455
456 if (n == 0 .or. p > 0 .or. patch_ib(patch_id)%length_x <= 0._wp .or. patch_ib(patch_id)%length_y <= 0._wp) then
457# 95 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
458 call s_prohibit_abort(.or..or..or."n == 0 p > 0 patch_ib(patch_id)%length_x <= 0._wp patch_ib(patch_id)%length_y <= 0._wp", 'in ellipse IB patch ' // trim(istr))
459# 95 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
460 end if
461# 97 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
462
464
465 !> Verify that the geometric parameters of the airfoil patch have been consistently inputted.
466
467 impure subroutine s_check_airfoil_ib_patch_geometry(patch_id)
468
469 integer, intent(in) :: patch_id
470
471 call s_int_to_str(patch_id, istr)
472
473 if (n == 0 .or. p > 0 .or. patch_ib(patch_id)%airfoil_id <= 0 .or. ib_airfoil(patch_ib(patch_id)%airfoil_id)%c <= 0._wp .or. ib_airfoil(patch_ib(patch_id)%airfoil_id)%p <= 0._wp .or. ib_airfoil(patch_ib(patch_id)%airfoil_id)%t <= 0._wp .or. ib_airfoil(patch_ib(patch_id)%airfoil_id)%m <= 0._wp) then
474# 108 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
475 call s_prohibit_abort(.or..or..or..or..or..or."n == 0 p > 0 patch_ib(patch_id)%airfoil_id <= 0 ib_airfoil(patch_ib(patch_id)%airfoil_id)%c <= 0._wp ib_airfoil(patch_ib(patch_id)%airfoil_id)%p <= 0._wp ib_airfoil(patch_ib(patch_id)%airfoil_id)%t <= 0._wp ib_airfoil(patch_ib(patch_id)%airfoil_id)%m <= 0._wp", 'in airfoil IB patch ' // trim(istr))
476# 108 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
477 end if
478# 113 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
479
481
482 !> Verify that the geometric parameters of the 3D airfoil patch have been consistently inputted.
483
484 impure subroutine s_check_3d_airfoil_ib_patch_geometry(patch_id)
485
486 integer, intent(in) :: patch_id
487
488 call s_int_to_str(patch_id, istr)
489
490 if (n == 0 .or. p == 0 .or. patch_ib(patch_id)%airfoil_id <= 0 .or. ib_airfoil(patch_ib(patch_id)%airfoil_id)%c <= 0._wp .or. ib_airfoil(patch_ib(patch_id)%airfoil_id)%p <= 0._wp .or. ib_airfoil(patch_ib(patch_id)%airfoil_id)%t <= 0._wp .or. ib_airfoil(patch_ib(patch_id)%airfoil_id)%m <= 0._wp .or. f_is_default(patch_ib(patch_id)%length_z)) then
491# 124 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
492 call s_prohibit_abort(.or..or..or..or..or..or..or."n == 0 p == 0 patch_ib(patch_id)%airfoil_id <= 0 ib_airfoil(patch_ib(patch_id)%airfoil_id)%c <= 0._wp ib_airfoil(patch_ib(patch_id)%airfoil_id)%p <= 0._wp ib_airfoil(patch_ib(patch_id)%airfoil_id)%t <= 0._wp ib_airfoil(patch_ib(patch_id)%airfoil_id)%m <= 0._wp f_is_default(patch_ib(patch_id)%length_z)", 'in 3d airfoil IB patch ' // trim(istr))
493# 124 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
494 end if
495# 130 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
496
498
499 !> Verify that the geometric parameters of the rectangle patch have been consistently inputted.
500
501 impure subroutine s_check_rectangle_ib_patch_geometry(patch_id)
502
503 integer, intent(in) :: patch_id
504
505 call s_int_to_str(patch_id, istr)
506
507 if (n == 0 .or. p > 0 .or. patch_ib(patch_id)%length_x <= 0._wp .or. patch_ib(patch_id)%length_y <= 0._wp) then
508# 141 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
509 call s_prohibit_abort(.or..or..or."n == 0 p > 0 patch_ib(patch_id)%length_x <= 0._wp patch_ib(patch_id)%length_y <= 0._wp", 'in rectangle IB patch ' // trim(istr))
510# 141 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
511 end if
512# 143 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
513
515
516 !> Verify that the geometric parameters of the sphere patch have been consistently inputted.
517
518 impure subroutine s_check_sphere_ib_patch_geometry(patch_id)
519
520 integer, intent(in) :: patch_id
521
522 call s_int_to_str(patch_id, istr)
523
524 if (n == 0 .or. p == 0 .or. patch_ib(patch_id)%radius <= 0._wp) then
525# 154 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
526 call s_prohibit_abort(.or..or."n == 0 p == 0 patch_ib(patch_id)%radius <= 0._wp", 'in sphere IB patch ' // trim(istr))
527# 154 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
528 end if
529# 155 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
530
532
533 !> Verify that the geometric parameters of the cuboid patch have been consistently inputted.
534
535 impure subroutine s_check_cuboid_ib_patch_geometry(patch_id)
536
537 integer, intent(in) :: patch_id
538
539 call s_int_to_str(patch_id, istr)
540
541 if (n == 0 .or. p == 0 .or. patch_ib(patch_id)%length_x <= 0._wp .or. patch_ib(patch_id)%length_y <= 0._wp .or. patch_ib(patch_id)%length_z <= 0._wp) then
542# 166 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
543 call s_prohibit_abort(.or..or..or..or."n == 0 p == 0 patch_ib(patch_id)%length_x <= 0._wp patch_ib(patch_id)%length_y <= 0._wp patch_ib(patch_id)%length_z <= 0._wp", 'in cuboid IB patch ' // trim(istr))
544# 166 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
545 end if
546# 168 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
547
549
550 !> Verify that the geometric parameters of the cylinder patch have been consistently inputted.
551
552 impure subroutine s_check_cylinder_ib_patch_geometry(patch_id)
553
554 integer, intent(in) :: patch_id
555
556 call s_int_to_str(patch_id, istr)
557
558 if (p == 0 .or. (patch_ib(patch_id)%length_x <= 0._wp .and. patch_ib(patch_id)%length_y <= 0._wp .and. patch_ib(patch_id)%length_z <= 0._wp) .or. patch_ib(patch_id)%radius <= 0._wp) then
559# 179 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
560 call s_prohibit_abort(.or..and..and..or."p == 0 (patch_ib(patch_id)%length_x <= 0._wp patch_ib(patch_id)%length_y <= 0._wp patch_ib(patch_id)%length_z <= 0._wp) patch_ib(patch_id)%radius <= 0._wp", 'in cylinder IB patch ' // trim(istr))
561# 179 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
562 end if
563# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
564
565 if ((patch_ib(patch_id)%length_x > 0._wp .and. ((.not. f_is_default(patch_ib(patch_id)%length_y)) .or. (.not. f_is_default(patch_ib(patch_id)%length_z)))) .or. (patch_ib(patch_id)%length_y > 0._wp .and. ((.not. f_is_default(patch_ib(patch_id)%length_x)) .or. (.not. f_is_default(patch_ib(patch_id)%length_z)))) .or. (patch_ib(patch_id)%length_z > 0._wp .and. ((.not. f_is_default(patch_ib(patch_id)%length_x)) .or. (.not. f_is_default(patch_ib(patch_id)%length_y))))) then
566# 183 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
567 call s_prohibit_abort(.and..not..or..not..or..and..not..or..not..or..and..not..or..not."(patch_ib(patch_id)%length_x > 0._wp (( f_is_default(patch_ib(patch_id)%length_y)) ( f_is_default(patch_ib(patch_id)%length_z)))) (patch_ib(patch_id)%length_y > 0._wp (( f_is_default(patch_ib(patch_id)%length_x)) ( f_is_default(patch_ib(patch_id)%length_z)))) (patch_ib(patch_id)%length_z > 0._wp (( f_is_default(patch_ib(patch_id)%length_x)) ( f_is_default(patch_ib(patch_id)%length_y))))", 'in cylinder IB patch ' // trim(istr))
568# 183 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
569 end if
570# 189 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
571
573
574 !> Verify that the geometric parameters of the model patch have been consistently inputted.
575
576 impure subroutine s_check_model_ib_patch_geometry(patch_id)
577
578 integer, intent(in) :: patch_id
579 integer :: mid
580 character(len=10) :: midstr
581
582 call s_int_to_str(patch_id, istr)
583
584 mid = patch_ib(patch_id)%model_id
585 call s_int_to_str(mid, midstr)
586
587 if (mid <= 0 .or. mid > num_stl_models) then
588# 205 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
589 call s_prohibit_abort(.or."mid <= 0 mid > num_stl_models", 'patch_ib('//trim(istr)//')%model_id='//trim(midstr)//' must be in [1, num_stl_models]')
590# 205 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
591 end if
592# 207 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
593
594 if (stl_models(mid)%model_filepath == dflt_char) then
595# 208 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
596 call s_prohibit_abort("stl_models(mid)%model_filepath == dflt_char", 'Empty model file path for stl_models('//trim(midstr)//')')
597# 208 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
598 end if
599# 209 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
600
601 if (stl_models(mid)%model_scale(1) <= 0._wp .or. stl_models(mid)%model_scale(2) <= 0._wp .or. stl_models(mid)%model_scale(3) <= 0._wp) then
602# 210 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
603 call s_prohibit_abort(.or..or."stl_models(mid)%model_scale(1) <= 0._wp stl_models(mid)%model_scale(2) <= 0._wp stl_models(mid)%model_scale(3) <= 0._wp", 'Negative scale in stl_models(' // trim(midstr) // ')')
604# 210 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
605 end if
606# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
607
609
610 !> Verify that inactive IB patch geometry parameters remain at defaults
611 impure subroutine s_check_inactive_ib_patch_geometry(patch_id)
612
613 integer, intent(in) :: patch_id
614
615 call s_int_to_str(patch_id, istr)
616
617 if ((.not. f_is_default(patch_ib(patch_id)%length_x)) .or. (.not. f_is_default(patch_ib(patch_id)%length_y)) .or. (.not. f_is_default(patch_ib(patch_id)%length_z)) .or. (.not. f_is_default(patch_ib(patch_id)%radius))) then
618# 222 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
619 call s_prohibit_abort(.not..or..not..or..not..or..not."( f_is_default(patch_ib(patch_id)%length_x)) ( f_is_default(patch_ib(patch_id)%length_y)) ( f_is_default(patch_ib(patch_id)%length_z)) ( f_is_default(patch_ib(patch_id)%radius))", 'in inactive IB patch ' // trim(istr))
620# 222 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
621 end if
622# 225 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
623
625
626end module m_check_ib_patches
Validates geometry parameters and constraints for immersed boundary patches.
impure subroutine s_check_circle_ib_patch_geometry(patch_id)
Verify that the geometric parameters of the circle patch have been consistently inputted.
impure subroutine s_check_rectangle_ib_patch_geometry(patch_id)
Verify that the geometric parameters of the rectangle patch have been consistently inputted.
impure subroutine, public s_check_ib_patches
Validate the geometry parameters of all active and inactive immersed boundary patches.
impure subroutine s_check_sphere_ib_patch_geometry(patch_id)
Verify that the geometric parameters of the sphere patch have been consistently inputted.
impure subroutine s_check_ellipse_ib_patch_geometry(patch_id)
Verify that the geometric parameters of the ellipse patch have been consistently inputted.
impure subroutine s_check_cylinder_ib_patch_geometry(patch_id)
Verify that the geometric parameters of the cylinder patch have been consistently inputted.
impure subroutine s_check_model_ib_patch_geometry(patch_id)
Verify that the geometric parameters of the model patch have been consistently inputted.
impure subroutine s_check_airfoil_ib_patch_geometry(patch_id)
Verify that the geometric parameters of the airfoil patch have been consistently inputted.
impure subroutine s_check_inactive_ib_patch_geometry(patch_id)
Verify that inactive IB patch geometry parameters remain at defaults.
impure subroutine s_check_3d_airfoil_ib_patch_geometry(patch_id)
Verify that the geometric parameters of the 3D airfoil patch have been consistently inputted.
impure subroutine s_check_cuboid_ib_patch_geometry(patch_id)
Verify that the geometric parameters of the cuboid patch have been consistently inputted.
Platform-specific file and directory operations: create, delete, inquire, getcwd, and basename.
Writes grid and initial condition data to serial or parallel output files.
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.
Basic floating-point utilities: approximate equality, default detection, and coordinate bounds.
logical elemental function, public f_is_default(var)
Check if a real(wp) variable is of default value.
Utility routines for bubble model setup, coordinate transforms, array sampling, and special functions...
elemental subroutine, public s_int_to_str(i, res)
Convert an integer to its trimmed string representation.
Broadcasts user inputs and decomposes the domain across MPI ranks for pre-processing.