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