MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_patch_geometries.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
2!>
3!! @file
4!! @brief Contains module m_patch_geometries
5
6# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
7# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
8# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
9# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
10# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
11# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
12# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
13# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
14
15# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
16# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
17# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
18
19# 15 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
20# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
21# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
22
23# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
24
25# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
26
27# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28
29# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
30
31# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
32
33# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
34
35# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
36
37# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
38! New line at end of file is required for FYPP
39# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
40# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
41# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
42# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
44# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
46# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
47
48# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
50# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51
52# 15 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55
56# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57
58# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
59
60# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
61
62# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
63
64# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
65
66# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
67
68# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
69
70# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
71! New line at end of file is required for FYPP
72# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
73
74# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
75# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
76# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
77# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
78# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
79
80# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
81
82# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
83
84# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
85
86# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
87
88# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
89
90# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
91
92# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
93
94# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
95
96# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
97
98# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
99
100# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
101
102# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
103
104# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
105
106# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107
108# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109
110# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111
112# 126 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113
114# 156 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
115
116# 197 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
117
118# 211 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
119
120# 236 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
121
122# 247 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
123
124# 249 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
125# 260 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 310 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128
129# 320 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130
131# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132
133# 339 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134
135# 356 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136
137# 366 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
138
139# 373 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
140
141# 379 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
142
143# 385 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
144
145# 391 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
146
147# 397 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
148
149# 403 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
150! New line at end of file is required for FYPP
151# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
152# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
153# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
154# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
155# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
156# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
157# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
158# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
159
160# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
161# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
162# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
163
164# 15 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
165# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
166# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
167
168# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
169
170# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
171
172# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
173
174# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
175
176# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
177
178# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
179
180# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
181
182# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
183! New line at end of file is required for FYPP
184# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
185
186# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
187
188# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
189
190# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
191
192# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
193
194# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
195
196# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
197
198# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
199
200# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
201
202# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
203
204# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
205
206# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
207
208# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
209
210# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
211
212# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
213
214# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
215
216# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
217
218# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
219
220# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221
222# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
223
224# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
225
226# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
227
228# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
229
230# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
231
232# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
233
234# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
235
236# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
237
238# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
239
240# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
241! New line at end of file is required for FYPP
242# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
243
244! GPU parallel region (scalar reductions, maxval/minval)
245# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
246
247! GPU parallel loop over threads (most common GPU macro)
248# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
249
250! Required closing for GPU_PARALLEL_LOOP
251# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
252
253! Mark routine for device compilation
254# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
255
256! Declare device-resident data
257# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
258
259! Inner loop within a GPU parallel region
260# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
261
262! Scoped GPU data region
263# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
264
265! Host code with device pointers (for MPI with GPU buffers)
266# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
267
268! Allocate device memory (unscoped)
269# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
270
271! Free device memory
272# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
273
274! Atomic operation on device
275# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
276
277! End atomic capture block
278# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
279
280! Copy data between host and device
281# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
282
283! Synchronization barrier
284# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
285
286! Import GPU library module (openacc or omp_lib)
287# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
288
289! Emit code only for AMD compiler
290# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
291
292! Emit code for non-Cray compilers
293# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
294
295! Emit code only for Cray compiler
296# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
297
298! Emit code for non-NVIDIA compilers
299# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
300
301# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
302# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
303! New line at end of file is required for FYPP
304# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
305
306# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
307
308! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
309! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
310! example see misc/nvidia_uvm/bind.sh.
311# 52 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
312
313! Allocate and create GPU device memory
314# 72 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
315
316! Free GPU device memory and deallocate
317# 80 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
318
319! Cray-specific GPU pointer setup for vector fields
320# 104 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
321
322! Cray-specific GPU pointer setup for scalar fields
323# 120 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
324
325! Cray-specific GPU pointer setup for acoustic source spatials
326# 145 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
327
328# 151 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
329
330# 158 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
331! New line at end of file is required for FYPP
332# 6 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp" 2
333
334!> @brief Contains helper functions specific to various patch gemoetries for determining if a grid cell lies inside of or outside of
335!! a patch geometry
337
341 use m_helper
343 use m_constants
344 use m_model
345
346 implicit none
347
349
350contains
351
352 !> Check if the x, y, and z coordinates would be located inside a sphere with the patch_id's radius
353 function f_is_inside_sphere(x, y, z, radius) result(is_inside)
354
355
356# 28 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
357#if MFC_OpenACC
358# 28 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
359!$acc routine seq
360# 28 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
361#elif MFC_OpenMP
362# 28 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
363
364# 28 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
365
366# 28 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
367!$omp declare target device_type(any)
368# 28 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
369#endif
370
371 real(wp), intent(in) :: radius, x, y, z
372 logical :: is_inside
373
374 is_inside = x**2 + y**2 + z**2 <= radius**2
375
376 end function f_is_inside_sphere
377
378 !> Check which length of the cylinder is not default. Use that direction as the height and the other two coordinate
379 ! values as the radius check
380 function f_is_inside_cylinder(polar_x, polar_y, height, radius, length) result(is_inside)
381
382
383# 41 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
384#if MFC_OpenACC
385# 41 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
386!$acc routine seq
387# 41 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
388#elif MFC_OpenMP
389# 41 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
390
391# 41 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
392
393# 41 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
394!$omp declare target device_type(any)
395# 41 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
396#endif
397
398 real(wp), intent(in) :: polar_x, polar_y, height, radius, length
399 logical :: is_inside
400
401 ! check if the circular component of the cylinder is correct
402 is_inside = polar_x**2 + polar_y**2 <= radius**2
403
404 ! in 3D, also check the length of the cylinder
405 if (num_dims == 3) is_inside = is_inside .and. -0.5_wp*length <= height .and. 0.5_wp*length >= height
406
407 end function f_is_inside_cylinder
408
409 !> Check if the x, y, and possibly z coordinates would be located inside a cuboid with the patch_id's lengths
410 function f_is_inside_cuboid(x, y, z, length) result(is_inside)
411
412
413# 57 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
414#if MFC_OpenACC
415# 57 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
416!$acc routine seq
417# 57 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
418#elif MFC_OpenMP
419# 57 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
420
421# 57 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
422
423# 57 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
424!$omp declare target device_type(any)
425# 57 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
426#endif
427
428 real(wp), intent(in) :: x, y, z
429 real(wp), dimension(3), intent(in) :: length
430 logical :: is_inside
431
432 ! check if x and y are inside the rectangle plane at z=0
433 is_inside = -0.5_wp*length(1) <= x .and. 0.5_wp*length(1) >= x .and. -0.5_wp*length(2) <= y .and. 0.5_wp*length(2) >= y
434
435 ! if we are in 3D, this is a cuboid and so we must also check the z axis
436 if (num_dims == 3) is_inside = is_inside .and. -0.5_wp*length(3) <= z .and. 0.5_wp*length(3) >= z
437
438 end function f_is_inside_cuboid
439
440 !> Check if the x, y, are bounded by a NACA airfoil. Check if the z coordinate is inside the left and right edges of the
441 !! airfoil, if set.
442 function f_is_inside_airfoil(x, y, z, length, airfoil_id) result(is_inside)
443
444
445# 75 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
446#if MFC_OpenACC
447# 75 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
448!$acc routine seq
449# 75 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
450#elif MFC_OpenMP
451# 75 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
452
453# 75 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
454
455# 75 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
456!$omp declare target device_type(any)
457# 75 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
458#endif
459
460 real(wp), intent(in) :: x, y, z, length
461 integer, intent(in) :: airfoil_id
462 logical :: is_inside
463 integer :: k
464 real(wp) :: f
465
466 is_inside = .false.
467
468 ! check the initial x bounds of the grid cell
469 if (.not. (x >= 0._wp .and. x <= ib_airfoil(airfoil_id)%c)) return
470
471 ! if we are in 3D, we must also check the z axis
472 if (num_dims == 3 .and. (.not. (-0.5_wp*length <= z .and. 0.5_wp*length >= z))) return
473
474 ! our check branches for the upper and lower half of the airfoil
475 if (y >= 0._wp) then
476 ! increment the iterator so we know where in the airfoil arrays to look
477 k = 1
478 do while (ib_airfoil_grids(airfoil_id)%upper(k)%x < x)
479 k = k + 1
480 end do
481
482 ! If the values are approximately equivalent, skip the next check
483 if (f_approx_equal(ib_airfoil_grids(airfoil_id)%upper(k)%x, x)) then
484 if (y <= ib_airfoil_grids(airfoil_id)%upper(k)%y) is_inside = .true.
485 else
486 ! check if the y value is below the upper edge of the airfoil
487 f = (ib_airfoil_grids(airfoil_id)%upper(k)%x - x)/(ib_airfoil_grids(airfoil_id)%upper(k)%x &
488 & - ib_airfoil_grids(airfoil_id)%upper(k - 1)%x)
489 if (y <= ((1._wp - f)*ib_airfoil_grids(airfoil_id)%upper(k)%y + f*ib_airfoil_grids(airfoil_id)%upper(k - 1)%y)) &
490 & is_inside = .true.
491 end if
492 else
493 ! increment the iterator so we know where in the airfoil arrays to look
494 k = 1
495 do while (ib_airfoil_grids(airfoil_id)%lower(k)%x < x)
496 k = k + 1
497 end do
498
499 ! If the values are approximately equivalent, skip the next check
500 if (f_approx_equal(ib_airfoil_grids(airfoil_id)%lower(k)%x, x)) then
501 if (y >= ib_airfoil_grids(airfoil_id)%lower(k)%y) is_inside = .true.
502 else
503 ! check if the y value is above the lower edge of the airfoil
504 f = (ib_airfoil_grids(airfoil_id)%lower(k)%x - x)/(ib_airfoil_grids(airfoil_id)%lower(k)%x &
505 & - ib_airfoil_grids(airfoil_id)%lower(k - 1)%x)
506 if (y >= ((1._wp - f)*ib_airfoil_grids(airfoil_id)%lower(k)%y + f*ib_airfoil_grids(airfoil_id)%lower(k - 1)%y)) &
507 & is_inside = .true.
508 end if
509 end if
510
511 end function f_is_inside_airfoil
512
513 function f_is_inside_ellipse(x, y, length) result(is_inside)
514
515
516# 132 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
517#if MFC_OpenACC
518# 132 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
519!$acc routine seq
520# 132 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
521#elif MFC_OpenMP
522# 132 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
523
524# 132 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
525
526# 132 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
527!$omp declare target device_type(any)
528# 132 "/home/runner/work/MFC/MFC/src/common/m_patch_geometries.fpp"
529#endif
530
531 real(wp), intent(in) :: x, y
532 real(wp), dimension(3), intent(in) :: length
533 logical :: is_inside
534
535 ! Ellipse condition (x/a)^2 + (y/b)^2 <= 1
536 is_inside = (x/(0.5_wp*length(1)))**2 + (y/(0.5_wp*length(2)))**2 <= 1._wp
537
538 end function f_is_inside_ellipse
539
540end module m_patch_geometries
integer, intent(in) k
Compile-time constant parameters: default values, tolerances, and physical constants.
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_airfoil_grid), dimension(:), allocatable ib_airfoil_grids
Per-airfoil computed surface grids (unused in pre_process).
Basic floating-point utilities: approximate equality, default detection, and coordinate bounds.
logical elemental function, public f_approx_equal(a, b, tol_input)
Check if two floating point numbers of wp are within tolerance.
Utility routines for bubble model setup, coordinate transforms, array sampling, and special functions...
Binary STL file reader and processor for immersed boundary geometry.
Contains helper functions specific to various patch gemoetries for determining if a grid cell lies in...
logical function, public f_is_inside_sphere(x, y, z, radius)
Check if the x, y, and z coordinates would be located inside a sphere with the patch_id's radius.
logical function, public f_is_inside_cuboid(x, y, z, length)
Check if the x, y, and possibly z coordinates would be located inside a cuboid with the patch_id's le...
logical function, public f_is_inside_cylinder(polar_x, polar_y, height, radius, length)
Check which length of the cylinder is not default. Use that direction as the height and the other two...
logical function, public f_is_inside_ellipse(x, y, length)
logical function, public f_is_inside_airfoil(x, y, z, length, airfoil_id)
Check if the x, y, are bounded by a NACA airfoil. Check if the z coordinate is inside the left and ri...
Conservative-to-primitive variable conversion, mixture property evaluation, and pressure computation.