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