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