1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
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"
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"
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"
23# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
25# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
27# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
29# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
31# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
33# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
35# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
37# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
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"
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"
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"
56# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
58# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
60# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
62# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
64# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
66# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
68# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
70# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
72# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
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"
80# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
82# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
84# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
86# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
88# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
90# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
92# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
94# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
96# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
98# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
100# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
102# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
104# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
106# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
108# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
110# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
112# 126 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
114# 156 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116# 197 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118# 211 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120# 236 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122# 247 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
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"
127# 310 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
129# 320 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
131# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
133# 339 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
135# 356 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137# 366 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139# 373 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141# 379 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
143# 385 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
145# 391 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
147# 397 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
149# 403 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
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"
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"
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"
168# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
170# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
172# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
174# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
176# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
178# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
180# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
182# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
184# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
186# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
188# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
190# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
192# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
194# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
196# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
198# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
200# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
202# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
204# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
206# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
208# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
210# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
212# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
214# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
216# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
218# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
226# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
228# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
230# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
232# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
234# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
236# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
238# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
240# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
242# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
245# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
248# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
251# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
254# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
257# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
260# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
263# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
266# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
269# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
272# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
275# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
278# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
281# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
287# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
290# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
293# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
296# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
299# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
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"
304# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
306# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
311# 52 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
314# 72 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
317# 80 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
320# 104 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
323# 120 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
326# 145 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
328# 151 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
330# 158 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
332# 6 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp" 2
353 type(
ghost_point),
dimension(:),
intent(inout) :: gps
354 integer,
intent(in) :: num_gps
355 integer :: i, patch_id, patch_geometry
361# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
363# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
364#if defined(MFC_OpenACC)
365# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
367# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
368#elif defined(MFC_OpenMP)
369# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
371# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
373# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
375# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
377# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
379# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
381# 35 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
383 patch_id = gps(i)%ib_patch_id
384 patch_geometry = patch_ib(patch_id)%geometry
386 if (patch_geometry == 8)
then
388 else if (patch_geometry == 9)
then
390 else if (patch_geometry == 10)
then
392 else if (patch_geometry == 11)
then
394 else if (patch_geometry == 12)
then
399# 51 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
400#if defined(MFC_OpenACC)
401# 51 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
403# 51 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
404#elif defined(MFC_OpenMP)
405# 51 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
407# 51 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
409# 51 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
415# 55 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
417# 55 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
418#if defined(MFC_OpenACC)
419# 55 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
421# 55 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
422#elif defined(MFC_OpenMP)
423# 55 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
425# 55 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
427# 55 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
429# 55 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
431# 55 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
433# 55 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
435# 57 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
437 patch_id = gps(i)%ib_patch_id
438 patch_geometry = patch_ib(patch_id)%geometry
440 if (patch_geometry == 2)
then
442 else if (patch_geometry == 3)
then
444 else if (patch_geometry == 4)
then
446 else if (patch_geometry == 5)
then
448 else if (patch_geometry == 6)
then
453# 73 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
454#if defined(MFC_OpenACC)
455# 73 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
457# 73 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
458#elif defined(MFC_OpenMP)
459# 73 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
461# 73 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
463# 73 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
473# 81 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
475# 81 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
477# 81 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
479# 81 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
481# 81 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
483# 81 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
485# 81 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
489 real(wp) :: radius, dist
490 real(wp),
dimension(3) :: dist_vec
491 integer :: i, j, ib_patch_id
492 ib_patch_id = gp%ib_patch_id
496 radius = patch_ib(ib_patch_id)%radius
498 dist_vec(1) =
x_cc(i) - (patch_ib(ib_patch_id)%x_centroid + real(gp%x_periodicity, &
500 dist_vec(2) =
y_cc(j) - (patch_ib(ib_patch_id)%y_centroid + real(gp%y_periodicity, &
503 dist = sqrt(sum(dist_vec**2))
505 gp%levelset = dist - radius
507 gp%levelset_norm = 0._wp
509 gp%levelset_norm = dist_vec(:)/dist
518# 112 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
520# 112 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
522# 112 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
524# 112 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
526# 112 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
528# 112 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
530# 112 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
534 real(wp) :: dist, global_dist
535 integer :: global_id, airfoil_id, Np_local
536 real(wp),
dimension(3) :: dist_vec
537 real(wp),
dimension(1:3) :: xy_local, offset
538 real(wp),
dimension(1:2) :: center
539 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
540 integer :: i, j, k, ib_patch_id
541 ib_patch_id = gp%ib_patch_id
545 airfoil_id = patch_ib(ib_patch_id)%airfoil_id
547 center(1) = patch_ib(ib_patch_id)%x_centroid + real(gp%x_periodicity, wp)*(
glb_bounds(1)%end -
glb_bounds(1)%beg)
548 center(2) = patch_ib(ib_patch_id)%y_centroid + real(gp%y_periodicity, wp)*(
glb_bounds(2)%end -
glb_bounds(2)%beg)
550 inverse_rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
551 rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix(:,:)
552 offset(:) = patch_ib(ib_patch_id)%centroid_offset(:)
554 xy_local = [
x_cc(i) - center(1),
y_cc(j) - center(2), 0._wp]
555 xy_local = matmul(inverse_rotation, xy_local)
556 xy_local = xy_local - offset
558 if (xy_local(2) >= 0._wp)
then
564 dist = sqrt(sum(dist_vec**2))
569 if (dist < global_dist)
then
584 dist = sqrt(sum(dist_vec**2))
589 if (dist < global_dist)
then
603 gp%levelset_norm = 0._wp
605 gp%levelset_norm = matmul(rotation, dist_vec(:))/dist
614# 194 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
616# 194 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
618# 194 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
620# 194 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
622# 194 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
624# 194 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
626# 194 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
630 real(wp) :: dist_surf, dist_side, global_dist
631 integer :: global_id, airfoil_id, Np_local
632 real(wp) :: lz, z_max, z_min
633 real(wp),
dimension(3) :: dist_vec
634 real(wp),
dimension(1:3) :: xyz_local, center, offset, normal
635 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
636 integer :: i, j, k, l, ib_patch_id
637 ib_patch_id = gp%ib_patch_id
642 airfoil_id = patch_ib(ib_patch_id)%airfoil_id
644 center(1) = patch_ib(ib_patch_id)%x_centroid + real(gp%x_periodicity, wp)*(
glb_bounds(1)%end -
glb_bounds(1)%beg)
645 center(2) = patch_ib(ib_patch_id)%y_centroid + real(gp%y_periodicity, wp)*(
glb_bounds(2)%end -
glb_bounds(2)%beg)
646 center(3) = patch_ib(ib_patch_id)%z_centroid + real(gp%z_periodicity, wp)*(
glb_bounds(3)%end -
glb_bounds(3)%beg)
648 lz = patch_ib(ib_patch_id)%length_z
649 inverse_rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
650 rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix(:,:)
651 offset(:) = patch_ib(ib_patch_id)%centroid_offset(:)
657 xyz_local = matmul(inverse_rotation, xyz_local)
658 xyz_local = xyz_local - offset
660 if (xyz_local(2) >= 0._wp)
then
665 dist_surf = sqrt(sum(dist_vec**2))
667 global_dist = dist_surf
670 if (dist_surf < global_dist)
then
671 global_dist = dist_surf
676 dist_vec(1) =
ib_airfoil_grids(airfoil_id)%upper(global_id)%x - xyz_local(1)
677 dist_vec(2) =
ib_airfoil_grids(airfoil_id)%upper(global_id)%y - xyz_local(2)
679 dist_surf = global_dist
685 dist_surf = sqrt(sum(dist_vec**2))
687 global_dist = dist_surf
690 if (dist_surf < global_dist)
then
691 global_dist = dist_surf
696 dist_vec(1) =
ib_airfoil_grids(airfoil_id)%lower(global_id)%x - xyz_local(1)
697 dist_vec(2) =
ib_airfoil_grids(airfoil_id)%lower(global_id)%y - xyz_local(2)
699 dist_surf = global_dist
702 dist_side = min(abs(xyz_local(3) - z_min), abs(z_max - xyz_local(3)))
704 if (dist_side < dist_surf)
then
705 gp%levelset = dist_side
712 gp%levelset_norm = matmul(rotation, normal)
714 gp%levelset = dist_surf
716 gp%levelset_norm = 0._wp
718 gp%levelset_norm = matmul(rotation, dist_vec(:)/dist_surf)
728# 294 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
730# 294 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
732# 294 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
734# 294 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
736# 294 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
738# 294 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
740# 294 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
744 real(wp) :: top_right(2), bottom_left(2)
746 real(wp) :: side_dists(4)
747 real(wp) :: length_x, length_y
748 real(wp),
dimension(1:3) :: xy_local, dist_vec
749 real(wp),
dimension(2) :: center
750 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
753 integer :: ib_patch_id
754 ib_patch_id = gp%ib_patch_id
758 length_x = patch_ib(ib_patch_id)%length_x
759 length_y = patch_ib(ib_patch_id)%length_y
760 center(1) = patch_ib(ib_patch_id)%x_centroid + real(gp%x_periodicity, wp)*(
glb_bounds(1)%end -
glb_bounds(1)%beg)
761 center(2) = patch_ib(ib_patch_id)%y_centroid + real(gp%y_periodicity, wp)*(
glb_bounds(2)%end -
glb_bounds(2)%beg)
762 inverse_rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
763 rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix(:,:)
765 top_right(1) = length_x/2
766 top_right(2) = length_y/2
767 bottom_left(1) = -length_x/2
768 bottom_left(2) = -length_y/2
771 xy_local = [
x_cc(i) - center(1),
y_cc(j) - center(2), 0._wp]
772 xy_local = matmul(inverse_rotation, xy_local)
774 side_dists(1) = bottom_left(1) - xy_local(1)
775 side_dists(2) = top_right(1) - xy_local(1)
776 side_dists(3) = bottom_left(2) - xy_local(2)
777 side_dists(4) = top_right(2) - xy_local(2)
778 min_dist = side_dists(1)
782 if (abs(side_dists(k)) < abs(min_dist))
then
784 min_dist = side_dists(idx)
788 gp%levelset = side_dists(idx)
791 if (idx == 1 .or. idx == 2)
then
793 dist_vec(1) = side_dists(idx)/abs(side_dists(idx))
796 dist_vec(2) = side_dists(idx)/abs(side_dists(idx))
799 gp%levelset_norm = matmul(rotation, dist_vec)
801 gp%levelset_norm = 0._wp
810# 362 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
812# 362 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
814# 362 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
816# 362 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
818# 362 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
820# 362 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
822# 362 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
826 real(wp) :: ellipse_coeffs(2)
827 real(wp) :: quadratic_coeffs(3)
828 real(wp) :: length_x, length_y
829 real(wp),
dimension(1:3) :: xy_local, normal_vector
830 real(wp),
dimension(2) :: center
831 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
833 integer :: ib_patch_id
834 ib_patch_id = gp%ib_patch_id
838 length_x = patch_ib(ib_patch_id)%length_x
839 length_y = patch_ib(ib_patch_id)%length_y
840 center(1) = patch_ib(ib_patch_id)%x_centroid + real(gp%x_periodicity, wp)*(
glb_bounds(1)%end -
glb_bounds(1)%beg)
841 center(2) = patch_ib(ib_patch_id)%y_centroid + real(gp%y_periodicity, wp)*(
glb_bounds(2)%end -
glb_bounds(2)%beg)
842 inverse_rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
843 rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix(:,:)
845 ellipse_coeffs(1) = 0.5_wp*length_x
846 ellipse_coeffs(2) = 0.5_wp*length_y
848 xy_local = [
x_cc(i) - center(1),
y_cc(j) - center(2), 0._wp]
849 xy_local = matmul(inverse_rotation, xy_local)
851 normal_vector = xy_local
853 normal_vector(2) = normal_vector(2)*(ellipse_coeffs(1)/ellipse_coeffs(2))**2._wp
854 normal_vector = normal_vector/sqrt(dot_product(normal_vector, normal_vector))
855 gp%levelset_norm = matmul(rotation, normal_vector)
858 quadratic_coeffs(1) = (normal_vector(1)/ellipse_coeffs(1))**2 + (normal_vector(2)/ellipse_coeffs(2))**2
859 quadratic_coeffs(2) = 2._wp*((xy_local(1)*normal_vector(1)/(ellipse_coeffs(1)**2)) + (xy_local(2)*normal_vector(2) &
860 & /(ellipse_coeffs(2)**2)))
861 quadratic_coeffs(3) = (xy_local(1)/ellipse_coeffs(1))**2._wp + (xy_local(2)/ellipse_coeffs(2))**2._wp - 1._wp
864 gp%levelset = -0.5_wp*(-quadratic_coeffs(2) + sqrt(quadratic_coeffs(2)**2._wp - 4._wp*quadratic_coeffs(1) &
865 & *quadratic_coeffs(3)))/quadratic_coeffs(1)
873# 411 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
875# 411 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
877# 411 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
879# 411 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
881# 411 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
883# 411 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
885# 411 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
889 real(wp) :: Right, Left, Bottom, Top, Front, Back
891 real(wp) :: dist_left, dist_right, dist_bottom, dist_top, dist_back, dist_front
892 real(wp),
dimension(3) :: center
893 real(wp) :: length_x, length_y, length_z
894 real(wp),
dimension(1:3) :: xyz_local, dist_vec
895 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
897 integer :: ib_patch_id
898 ib_patch_id = gp%ib_patch_id
903 length_x = patch_ib(ib_patch_id)%length_x
904 length_y = patch_ib(ib_patch_id)%length_y
905 length_z = patch_ib(ib_patch_id)%length_z
907 center(1) = patch_ib(ib_patch_id)%x_centroid + real(gp%x_periodicity, wp)*(
glb_bounds(1)%end -
glb_bounds(1)%beg)
908 center(2) = patch_ib(ib_patch_id)%y_centroid + real(gp%y_periodicity, wp)*(
glb_bounds(2)%end -
glb_bounds(2)%beg)
909 center(3) = patch_ib(ib_patch_id)%z_centroid + real(gp%z_periodicity, wp)*(
glb_bounds(3)%end -
glb_bounds(3)%beg)
911 inverse_rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
912 rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix(:,:)
922 xyz_local = matmul(inverse_rotation, xyz_local)
924 dist_left = left - xyz_local(1)
925 dist_right = xyz_local(1) - right
926 dist_bottom = bottom - xyz_local(2)
927 dist_top = xyz_local(2) - top
928 dist_back = back - xyz_local(3)
929 dist_front = xyz_local(3) - front
931 min_dist = min(abs(dist_left), abs(dist_right), abs(dist_bottom), abs(dist_top), abs(dist_back), abs(dist_front))
935 gp%levelset = dist_left
937 dist_vec(1) = dist_left/abs(dist_left)
940 gp%levelset = dist_right
942 dist_vec(1) = -dist_right/abs(dist_right)
945 gp%levelset = dist_bottom
947 dist_vec(2) = dist_bottom/abs(dist_bottom)
950 gp%levelset = dist_top
952 dist_vec(2) = -dist_top/abs(dist_top)
955 gp%levelset = dist_back
957 dist_vec(3) = dist_back/abs(dist_back)
960 gp%levelset = dist_front
962 dist_vec(3) = -dist_front/abs(dist_front)
966 gp%levelset_norm = matmul(rotation, dist_vec)
974# 498 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
976# 498 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
978# 498 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
980# 498 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
982# 498 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
984# 498 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
986# 498 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
990 real(wp) :: radius, dist
991 real(wp),
dimension(3) :: dist_vec, center, periodicity
992 integer :: i, j, k, ib_patch_id
993 ib_patch_id = gp%ib_patch_id
998 radius = patch_ib(ib_patch_id)%radius
1002 center(1) = patch_ib(ib_patch_id)%x_centroid
1003 center(2) = patch_ib(ib_patch_id)%y_centroid
1004 center(3) = patch_ib(ib_patch_id)%z_centroid
1005 center = center + periodicity
1007 dist_vec(1) =
x_cc(i) - center(1)
1008 dist_vec(2) =
y_cc(j) - center(2)
1009 dist_vec(3) =
z_cc(k) - center(3)
1010 dist = sqrt(sum(dist_vec**2))
1011 gp%levelset = dist - radius
1013 gp%levelset_norm = (/1, 0, 0/)
1015 gp%levelset_norm = dist_vec(:)/dist
1024# 534 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1026# 534 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1028# 534 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1030# 534 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1032# 534 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1034# 534 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1036# 534 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1041 real(wp),
dimension(3) :: dist_sides_vec, dist_surface_vec, length
1042 real(wp),
dimension(2) :: boundary
1043 real(wp) :: dist_side, dist_surface, side_pos
1045 integer :: ib_patch_id
1046 real(wp),
dimension(1:3) :: xyz_local, center
1047 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
1049 ib_patch_id = gp%ib_patch_id
1054 radius = patch_ib(ib_patch_id)%radius
1055 center(1) = patch_ib(ib_patch_id)%x_centroid + real(gp%x_periodicity, wp)*(
glb_bounds(1)%end -
glb_bounds(1)%beg)
1056 center(2) = patch_ib(ib_patch_id)%y_centroid + real(gp%y_periodicity, wp)*(
glb_bounds(2)%end -
glb_bounds(2)%beg)
1057 center(3) = patch_ib(ib_patch_id)%z_centroid + real(gp%z_periodicity, wp)*(
glb_bounds(3)%end -
glb_bounds(3)%beg)
1058 length(1) = patch_ib(ib_patch_id)%length_x
1059 length(2) = patch_ib(ib_patch_id)%length_y
1060 length(3) = patch_ib(ib_patch_id)%length_z
1062 inverse_rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
1063 rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix(:,:)
1066 boundary(1) = -0.5_wp*length(1)
1067 boundary(2) = 0.5_wp*length(1)
1068 dist_sides_vec = (/1, 0, 0/)
1069 dist_surface_vec = (/0, 1, 1/)
1071 boundary(1) = -0.5_wp*length(2)
1072 boundary(2) = 0.5_wp*length(2)
1073 dist_sides_vec = (/0, 1, 0/)
1074 dist_surface_vec = (/1, 0, 1/)
1076 boundary(1) = -0.5_wp*length(3)
1077 boundary(2) = 0.5_wp*length(3)
1078 dist_sides_vec = (/0, 0, 1/)
1079 dist_surface_vec = (/1, 1, 0/)
1083 xyz_local = matmul(inverse_rotation, xyz_local)
1086 side_pos = dot_product(xyz_local, dist_sides_vec)
1087 dist_side = min(abs(side_pos - boundary(1)), abs(boundary(2) - side_pos))
1089 dist_surface = norm2(xyz_local*dist_surface_vec) - radius
1091 if (dist_side < abs(dist_surface))
then
1093 gp%levelset = -dist_side
1095 gp%levelset_norm = matmul(rotation, -dist_sides_vec)
1097 gp%levelset_norm = matmul(rotation, dist_sides_vec)
1100 gp%levelset = dist_surface
1101 xyz_local = xyz_local*dist_surface_vec
1102 xyz_local = xyz_local/max(norm2(xyz_local), sgm_eps)
1103 gp%levelset_norm = matmul(rotation, xyz_local)
1112# 608 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1114# 608 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1116# 608 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1118# 608 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1120# 608 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1122# 608 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1124# 608 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1128 integer :: i, j, k, patch_id, boundary_edge_count
1129 real(wp),
dimension(1:3) :: center, xyz_local
1130 real(wp) :: normals(1:3)
1131 real(wp) :: distance
1132 real(wp),
dimension(1:3,1:3) :: inverse_rotation, rotation
1134 patch_id = gp%ib_patch_id
1143 if (.not.
f_is_default(patch_ib(patch_id)%x_centroid)) center(1) = patch_ib(patch_id)%x_centroid + real(gp%x_periodicity, &
1145 if (.not.
f_is_default(patch_ib(patch_id)%y_centroid)) center(2) = patch_ib(patch_id)%y_centroid + real(gp%y_periodicity, &
1148 if (.not.
f_is_default(patch_ib(patch_id)%z_centroid)) center(3) = patch_ib(patch_id)%z_centroid &
1152 inverse_rotation(:,:) = patch_ib(patch_id)%rotation_matrix_inverse(:,:)
1153 rotation(:,:) = patch_ib(patch_id)%rotation_matrix(:,:)
1156 xyz_local = (/
x_cc(i) - center(1),
y_cc(j) - center(2), 0._wp/)
1158 xyz_local(3) =
z_cc(k) - center(3)
1160 xyz_local = matmul(inverse_rotation, xyz_local)
1169 gp%levelset = distance
1170 gp%levelset = -abs(gp%levelset)
1173 gp%levelset_norm = matmul(rotation, normals(1:3))
1176 call s_distance_normals_2d(patch_ib(patch_id)%model_id, boundary_edge_count, xyz_local, normals, distance)
1177 gp%levelset = -abs(distance)
1178 gp%levelset_norm = matmul(rotation, normals(1:3))
Computes signed-distance level-set fields and surface normals for immersed-boundary patch geometries.
impure subroutine, public s_apply_levelset(gps, num_gps)
Dispatch level-set distance and normal computations for all ghost points based on patch geometry type...
subroutine s_airfoil_levelset(gp)
Compute the signed distance and outward normal from a ghost point to a 2D NACA airfoil surface.
subroutine s_sphere_levelset(gp)
Compute the signed distance and outward normal from a ghost point to a spherical immersed boundary.
subroutine s_circle_levelset(gp)
Compute the signed distance and outward normal from a ghost point to a circular immersed boundary.
subroutine s_ellipse_levelset(gp)
Compute the signed distance and outward normal from a ghost point to an elliptical immersed boundary.
subroutine s_cylinder_levelset(gp)
Compute the signed distance and outward normal from a ghost point to a cylindrical immersed boundary.
subroutine s_3d_airfoil_levelset(gp)
Compute the signed distance and outward normal from a ghost point to a 3D extruded airfoil surface.
subroutine s_rectangle_levelset(gp)
Compute the signed distance and outward normal from a ghost point to a 2D rectangle.
subroutine s_model_levelset(gp)
The STL patch is a 2/3D geometry that is imported from an STL file.
subroutine s_cuboid_levelset(gp)
Compute the signed distance and outward normal from a ghost point to a cuboid immersed boundary.
Shared derived types for field data, patch geometry, bubble dynamics, and MPI I/O structures.
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
type(bounds_info), dimension(3) glb_bounds
real(wp), dimension(:), allocatable, target y_cc
real(wp), dimension(:), allocatable, target z_cc
real(wp), dimension(:), allocatable, target x_cc
type(ib_airfoil_grid), dimension(num_ib_airfoils_max) ib_airfoil_grids
Per-airfoil computed surface grids.
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.
logical elemental function, public f_is_default(var)
Check if a real(wp) variable is of default value.
Allocate memory and read initial condition data for IC extrusion.
Binary STL file reader and processor for immersed boundary geometry.
subroutine, public s_distance_normals_2d(pid, boundary_edge_count, point, normals, distance)
Determine the levelset distance and normals of 2D models by computing the exact closest point via pro...
integer, dimension(:), allocatable, public gpu_ntrs
GPU-friendly flat arrays for STL model data.
subroutine, public s_distance_normals_3d(ntrs, pid, point, normals, distance)
Determine the levelset distance and normals of 3D models by computing the exact closest point via pro...
integer, dimension(:), allocatable, public gpu_boundary_edge_count
MPI halo exchange, domain decomposition, and buffer packing/unpacking for the simulation solver.
Ghost Point for Immersed Boundaries.