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# 207 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109
110# 232 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111
112# 243 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113
114# 245 "/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# 283 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 293 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 303 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 312 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124
125# 329 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 339 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128
129# 346 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130
131# 352 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132
133# 358 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134
135# 364 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136
137# 370 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
138
139# 376 "/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# 192 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
209
210# 213 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
211
212# 241 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
213
214# 256 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
215
216# 266 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
217
218# 275 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
219
220# 291 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221
222# 301 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
223
224# 308 "/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# 21 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
229
230# 37 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
231
232# 50 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
233
234# 76 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
235
236# 91 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
237
238# 102 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
239
240# 115 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
241
242# 143 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
243
244# 154 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
245
246# 165 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
247
248# 176 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
249
250# 187 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
251
252# 198 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
253
254# 208 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
255
256# 214 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
257
258# 220 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
259
260# 226 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
261
262# 232 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
263
264# 234 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
265# 235 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
266! New line at end of file is required for FYPP
267# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
268
269# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
270
271! Caution:
272! This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI rank.
273! That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0.
274! For an example see misc/nvidia_uvm/bind.sh.
275# 63 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
276
277# 81 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
278
279# 88 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
280
281# 111 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
282
283# 127 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
284
285# 153 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
286
287# 159 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
288
289# 167 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
290! New line at end of file is required for FYPP
291# 8 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp" 2
292
294
295 use m_derived_types !< definitions of the derived types
296
297 use m_global_parameters !< global parameters
298
299 use m_mpi_proxy !< message passing interface (mpi) module proxy
300
301 use m_data_output !< procedures to write the grid data and the
302 !! conservative variables to files
303
304#ifdef MFC_MPI
305 use mpi !< message passing interface (mpi) module
306#endif
307
309
310 use m_helper_basic !< functions to compare floating point numbers
311
312 use m_helper
313
314 implicit none
315
316 private;
317 public :: s_check_ib_patches
318
319 character(len=10) :: istr
320
321contains
322
323 !> @brief Validates the geometry parameters of all active and inactive immersed boundary patches.
324 impure subroutine s_check_ib_patches
325
326 integer :: i
327
328 do i = 1, num_patches_max
329 if (i <= num_ibs) then
330 ! call s_check_patch_geometry(i)
331 call s_int_to_str(i, istr)
332 if (patch_ib(i)%geometry == dflt_int) then
333# 48 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
334 call s_prohibit_abort("patch_ib(i)%geometry == dflt_int", "IB patch undefined. patch_ib("//trim(istr)//")%geometry must be set.")
335# 48 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
336 end if
337# 50 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
338
339 ! Constraints on the geometric initial condition patch parameters
340 if (patch_ib(i)%geometry == 2) then
342 else if (patch_ib(i)%geometry == 3) then
344 else if (patch_ib(i)%geometry == 8) then
346 else if (patch_ib(i)%geometry == 9) then
348 else if (patch_ib(i)%geometry == 4) then
350 else if (patch_ib(i)%geometry == 11) then
352 else if (patch_ib(i)%geometry == 10) then
354 else if (patch_ib(i)%geometry == 5 .or. &
355 patch_ib(i)%geometry == 12) then
357 else if (patch_ib(i)%geometry == 6) then
359 else
360 call s_prohibit_abort("Invalid IB patch", &
361 "patch_ib("//trim(istr)//")%geometry must be "// &
362 "2-4, 8-10, 11 or 12.")
363 end if
364 else
365 if (patch_ib(i)%geometry /= dflt_int) then
366# 77 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
367 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.")
368# 77 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
369 end if
370# 79 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
372 end if
373 end do
374
375 end subroutine s_check_ib_patches
376
377 !> This subroutine verifies that the geometric parameters of
378 !! the circle patch have consistently been inputted by the
379 !! user.
380 !! @param patch_id Patch identifier
381 impure subroutine s_check_circle_ib_patch_geometry(patch_id)
382
383 integer, intent(in) :: patch_id
384
385 call s_int_to_str(patch_id, istr)
386
387 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
388# 95 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
389 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))
390# 95 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
391 end if
392# 100 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
393
395
396 !> This subroutine verifies that the geometric parameters of
397 !! the ellipse patch have consistently been inputted by the
398 !! user.
399 !! @param patch_id Patch identifier
400 impure subroutine s_check_ellipse_ib_patch_geometry(patch_id)
401
402 integer, intent(in) :: patch_id
403
404 call s_int_to_str(patch_id, istr)
405
406 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
407# 113 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
408 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))
409# 113 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
410 end if
411# 119 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
412
414
415 !> This subroutine verifies that the geometric parameters of
416 !! the airfoil patch have consistently been inputted by the
417 !! user.
418 !! @param patch_id Patch identifier
419 impure subroutine s_check_airfoil_ib_patch_geometry(patch_id)
420
421 integer, intent(in) :: patch_id
422
423 call s_int_to_str(patch_id, istr)
424
425 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
426# 132 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
427 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))
428# 132 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
429 end if
430# 140 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
431
433
434 !> This subroutine verifies that the geometric parameters of
435 !! the 3d airfoil patch have consistently been inputted by the
436 !! user.
437 !! @param patch_id Patch identifier
438 impure subroutine s_check_3d_airfoil_ib_patch_geometry(patch_id)
439
440 integer, intent(in) :: patch_id
441
442 call s_int_to_str(patch_id, istr)
443
444 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
445# 153 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
446 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))
447# 153 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
448 end if
449# 163 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
450
452
453 !> This subroutine verifies that the geometric parameters of
454 !! the rectangle patch have consistently been inputted by
455 !! the user.
456 !! @param patch_id Patch identifier
457 impure subroutine s_check_rectangle_ib_patch_geometry(patch_id)
458
459 integer, intent(in) :: patch_id
460
461 call s_int_to_str(patch_id, istr)
462
463 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
464# 176 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
465 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))
466# 176 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
467 end if
468# 186 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
469
471
472 !> This subroutine verifies that the geometric parameters of
473 !! the sphere patch have consistently been inputted by
474 !! the user.
475 !! @param patch_id Patch identifier
476 impure subroutine s_check_sphere_ib_patch_geometry(patch_id)
477
478 integer, intent(in) :: patch_id
479
480 call s_int_to_str(patch_id, istr)
481
482 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
483# 199 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
484 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))
485# 199 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
486 end if
487# 209 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
488
490
491 !> This subroutine verifies that the geometric parameters of
492 !! the cuboid patch have consistently been inputted by
493 !! the user.
494 !! @param patch_id Patch identifier
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# 222 "/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# 222 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
505 end if
506# 236 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
507
509
510 !> This subroutine verifies that the geometric parameters of
511 !! the cylinder patch have consistently been inputted by
512 !! the user.
513 !! @param patch_id Patch identifier
514 impure subroutine s_check_cylinder_ib_patch_geometry(patch_id)
515
516 integer, intent(in) :: patch_id
517
518 call s_int_to_str(patch_id, istr)
519
520 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
521# 249 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
522 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))
523# 249 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
524 end if
525# 263 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
526
527 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
528# 264 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
529 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))
530# 264 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
531 end if
532# 277 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
533
535
536 !> This subroutine verifies that the geometric parameters of
537 !! the model patch have consistently been inputted by
538 !! the user.
539 !! @param patch_id Patch identifier
540 impure subroutine s_check_model_ib_patch_geometry(patch_id)
541
542 integer, intent(in) :: patch_id
543
544 call s_int_to_str(patch_id, istr)
545
546 if (patch_ib(patch_id)%model_filepath == dflt_char) then
547# 290 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
548 call s_prohibit_abort("patch_ib(patch_id)%model_filepath == dflt_char", 'Empty model file path for patch '//trim(istr))
549# 290 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
550 end if
551# 292 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
552
553 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
554# 293 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
555 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))
556# 293 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
557 end if
558# 299 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
559
561
562 !!> This subroutine verifies that the geometric parameters of
563 !! the inactive patch remain unaltered by the user inputs.
564 !! @param patch_id Patch identifier
565 impure subroutine s_check_inactive_ib_patch_geometry(patch_id)
566
567 integer, intent(in) :: patch_id
568
569 call s_int_to_str(patch_id, istr)
570
571 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
572# 311 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
573 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))
574# 311 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
575 end if
576# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_check_ib_patches.fpp"
577
579
580end module m_check_ib_patches
Validates geometry parameters and constraints for immersed boundary patches.
impure subroutine s_check_circle_ib_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the circle patch have consistently been inp...
impure subroutine s_check_rectangle_ib_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the rectangle patch have consistently been ...
impure subroutine, public s_check_ib_patches
Validates the geometry parameters of all active and inactive immersed boundary patches.
impure subroutine s_check_sphere_ib_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the sphere patch have consistently been inp...
impure subroutine s_check_ellipse_ib_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the ellipse patch have consistently been in...
impure subroutine s_check_cylinder_ib_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the cylinder patch have consistently been i...
impure subroutine s_check_model_ib_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the model patch have consistently been inpu...
impure subroutine s_check_airfoil_ib_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the airfoil patch have consistently been in...
impure subroutine s_check_inactive_ib_patch_geometry(patch_id)
impure subroutine s_check_3d_airfoil_ib_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the 3d airfoil patch have consistently been...
impure subroutine s_check_cuboid_ib_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the cuboid patch have consistently been inp...
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
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)
Converts an integer to its trimmed string representation.
Broadcasts user inputs and decomposes the domain across MPI ranks for pre-processing.