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