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# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
21# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
23# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
25# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
27# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
29# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
31# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
33# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
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"
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"
48# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
50# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
52# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
56# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
58# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
60# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
62# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
64# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
66# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
67# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
68# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
69# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
70# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
72# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
74# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
76# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
78# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
80# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
82# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
84# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
86# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
88# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
90# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
92# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
94# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
96# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
98# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
100# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
102# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
104# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
106# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
108# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
110# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
112# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
114# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
117# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
119# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
121# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
123# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
125# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
127# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
129# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
131# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
133# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
135# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
143# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
144# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
145# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
146# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
147# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
148# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
149# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
150# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
152# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
153# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
154# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
156# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
158# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
160# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
162# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
164# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
166# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
168# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
170# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
172# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
174# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
176# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
178# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
180# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
182# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
184# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
186# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
188# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
190# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
192# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
194# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
196# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
198# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
200# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
202# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
204# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
206# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
208# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
210# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
212# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
214# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
216# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
218# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
226# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
228# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
230# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
233# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
236# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
239# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
242# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
245# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
248# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
251# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
254# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
257# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
260# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
263# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
266# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
269# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
272# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
275# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
278# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
281# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
287# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
289# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
290# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
292# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
294# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
299# 57 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
302# 77 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
305# 85 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
308# 109 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
311# 125 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
314# 150 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
316# 156 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
318# 163 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
320# 6 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp" 2
341 type(
ghost_point),
dimension(:),
intent(inout) :: gps
342 integer,
intent(in) :: num_gps
343 integer :: i, patch_id, patch_geometry
349# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
351# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
352#if defined(MFC_OpenACC)
353# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
355# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
356#elif defined(MFC_OpenMP)
357# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
359# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
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"
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"
369# 35 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
371 patch_id = gps(i)%ib_patch_id
372 patch_geometry = patch_ib(patch_id)%geometry
374 if (patch_geometry == 8)
then
376 else if (patch_geometry == 9)
then
378 else if (patch_geometry == 10)
then
380 else if (patch_geometry == 11)
then
382 else if (patch_geometry == 12)
then
387# 51 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
388#if defined(MFC_OpenACC)
389# 51 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
391# 51 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
392#elif defined(MFC_OpenMP)
393# 51 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
395# 51 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
397# 51 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
403# 55 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
405# 55 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
406#if defined(MFC_OpenACC)
407# 55 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
409# 55 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
410#elif defined(MFC_OpenMP)
411# 55 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
413# 55 "/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"
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"
423# 57 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
425 patch_id = gps(i)%ib_patch_id
426 patch_geometry = patch_ib(patch_id)%geometry
428 if (patch_geometry == 2)
then
430 else if (patch_geometry == 3)
then
432 else if (patch_geometry == 4)
then
434 else if (patch_geometry == 5)
then
436 else if (patch_geometry == 6)
then
441# 73 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
442#if defined(MFC_OpenACC)
443# 73 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
445# 73 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
446#elif defined(MFC_OpenMP)
447# 73 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
449# 73 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
451# 73 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
461# 81 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
463# 81 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
465# 81 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
467# 81 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
469# 81 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
471# 81 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
473# 81 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
477 real(wp) :: radius, dist
478 real(wp),
dimension(3) :: dist_vec
479 integer :: i, j, ib_patch_id
480 ib_patch_id = gp%ib_patch_id
484 radius = patch_ib(ib_patch_id)%radius
486 dist_vec(1) =
x_cc(i) - (patch_ib(ib_patch_id)%x_centroid + real(gp%x_periodicity, &
488 dist_vec(2) =
y_cc(j) - (patch_ib(ib_patch_id)%y_centroid + real(gp%y_periodicity, &
491 dist = sqrt(sum(dist_vec**2))
493 gp%levelset = dist - radius
495 gp%levelset_norm = 0._wp
497 gp%levelset_norm = dist_vec(:)/dist
506# 112 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
508# 112 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
510# 112 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
512# 112 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
514# 112 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
516# 112 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
518# 112 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
522 real(wp) :: dist, global_dist
523 integer :: global_id, airfoil_id, Np_local
524 real(wp),
dimension(3) :: dist_vec
525 real(wp),
dimension(1:3) :: xy_local, offset
526 real(wp),
dimension(1:2) :: center
527 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
528 integer :: i, j, k, ib_patch_id
529 ib_patch_id = gp%ib_patch_id
533 airfoil_id = patch_ib(ib_patch_id)%airfoil_id
535 center(1) = patch_ib(ib_patch_id)%x_centroid + real(gp%x_periodicity, wp)*(
glb_bounds(1)%end -
glb_bounds(1)%beg)
536 center(2) = patch_ib(ib_patch_id)%y_centroid + real(gp%y_periodicity, wp)*(
glb_bounds(2)%end -
glb_bounds(2)%beg)
538 inverse_rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
539 rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix(:,:)
540 offset(:) = patch_ib(ib_patch_id)%centroid_offset(:)
542 xy_local = [
x_cc(i) - center(1),
y_cc(j) - center(2), 0._wp]
543 xy_local = matmul(inverse_rotation, xy_local)
544 xy_local = xy_local - offset
546 if (xy_local(2) >= 0._wp)
then
552 dist = sqrt(sum(dist_vec**2))
557 if (dist < global_dist)
then
572 dist = sqrt(sum(dist_vec**2))
577 if (dist < global_dist)
then
591 gp%levelset_norm = 0._wp
593 gp%levelset_norm = matmul(rotation, dist_vec(:))/dist
602# 194 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
604# 194 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
606# 194 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
608# 194 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
610# 194 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
612# 194 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
614# 194 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
618 real(wp) :: dist_surf, dist_side, global_dist
619 integer :: global_id, airfoil_id, Np_local
620 real(wp) :: lz, z_max, z_min
621 real(wp),
dimension(3) :: dist_vec
622 real(wp),
dimension(1:3) :: xyz_local, center, offset, normal
623 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
624 integer :: i, j, k, l, ib_patch_id
625 ib_patch_id = gp%ib_patch_id
630 airfoil_id = patch_ib(ib_patch_id)%airfoil_id
632 center(1) = patch_ib(ib_patch_id)%x_centroid + real(gp%x_periodicity, wp)*(
glb_bounds(1)%end -
glb_bounds(1)%beg)
633 center(2) = patch_ib(ib_patch_id)%y_centroid + real(gp%y_periodicity, wp)*(
glb_bounds(2)%end -
glb_bounds(2)%beg)
634 center(3) = patch_ib(ib_patch_id)%z_centroid + real(gp%z_periodicity, wp)*(
glb_bounds(3)%end -
glb_bounds(3)%beg)
636 lz = patch_ib(ib_patch_id)%length_z
637 inverse_rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
638 rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix(:,:)
639 offset(:) = patch_ib(ib_patch_id)%centroid_offset(:)
645 xyz_local = matmul(inverse_rotation, xyz_local)
646 xyz_local = xyz_local - offset
648 if (xyz_local(2) >= 0._wp)
then
653 dist_surf = sqrt(sum(dist_vec**2))
655 global_dist = dist_surf
658 if (dist_surf < global_dist)
then
659 global_dist = dist_surf
664 dist_vec(1) =
ib_airfoil_grids(airfoil_id)%upper(global_id)%x - xyz_local(1)
665 dist_vec(2) =
ib_airfoil_grids(airfoil_id)%upper(global_id)%y - xyz_local(2)
667 dist_surf = global_dist
673 dist_surf = sqrt(sum(dist_vec**2))
675 global_dist = dist_surf
678 if (dist_surf < global_dist)
then
679 global_dist = dist_surf
684 dist_vec(1) =
ib_airfoil_grids(airfoil_id)%lower(global_id)%x - xyz_local(1)
685 dist_vec(2) =
ib_airfoil_grids(airfoil_id)%lower(global_id)%y - xyz_local(2)
687 dist_surf = global_dist
690 dist_side = min(abs(xyz_local(3) - z_min), abs(z_max - xyz_local(3)))
692 if (dist_side < dist_surf)
then
693 gp%levelset = dist_side
700 gp%levelset_norm = matmul(rotation, normal)
702 gp%levelset = dist_surf
704 gp%levelset_norm = 0._wp
706 gp%levelset_norm = matmul(rotation, dist_vec(:)/dist_surf)
716# 294 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
718# 294 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
720# 294 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
722# 294 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
724# 294 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
726# 294 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
728# 294 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
732 real(wp) :: top_right(2), bottom_left(2)
734 real(wp) :: side_dists(4)
735 real(wp) :: length_x, length_y
736 real(wp),
dimension(1:3) :: xy_local, dist_vec
737 real(wp),
dimension(2) :: center
738 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
741 integer :: ib_patch_id
742 ib_patch_id = gp%ib_patch_id
746 length_x = patch_ib(ib_patch_id)%length_x
747 length_y = patch_ib(ib_patch_id)%length_y
748 center(1) = patch_ib(ib_patch_id)%x_centroid + real(gp%x_periodicity, wp)*(
glb_bounds(1)%end -
glb_bounds(1)%beg)
749 center(2) = patch_ib(ib_patch_id)%y_centroid + real(gp%y_periodicity, wp)*(
glb_bounds(2)%end -
glb_bounds(2)%beg)
750 inverse_rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
751 rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix(:,:)
753 top_right(1) = length_x/2
754 top_right(2) = length_y/2
755 bottom_left(1) = -length_x/2
756 bottom_left(2) = -length_y/2
759 xy_local = [
x_cc(i) - center(1),
y_cc(j) - center(2), 0._wp]
760 xy_local = matmul(inverse_rotation, xy_local)
762 side_dists(1) = bottom_left(1) - xy_local(1)
763 side_dists(2) = top_right(1) - xy_local(1)
764 side_dists(3) = bottom_left(2) - xy_local(2)
765 side_dists(4) = top_right(2) - xy_local(2)
766 min_dist = side_dists(1)
770 if (abs(side_dists(k)) < abs(min_dist))
then
772 min_dist = side_dists(idx)
776 gp%levelset = side_dists(idx)
779 if (idx == 1 .or. idx == 2)
then
781 dist_vec(1) = side_dists(idx)/abs(side_dists(idx))
784 dist_vec(2) = side_dists(idx)/abs(side_dists(idx))
787 gp%levelset_norm = matmul(rotation, dist_vec)
789 gp%levelset_norm = 0._wp
798# 362 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
800# 362 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
802# 362 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
804# 362 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
806# 362 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
808# 362 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
810# 362 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
814 real(wp) :: ellipse_coeffs(2)
815 real(wp) :: quadratic_coeffs(3)
816 real(wp) :: length_x, length_y
817 real(wp),
dimension(1:3) :: xy_local, normal_vector
818 real(wp),
dimension(2) :: center
819 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
821 integer :: ib_patch_id
822 ib_patch_id = gp%ib_patch_id
826 length_x = patch_ib(ib_patch_id)%length_x
827 length_y = patch_ib(ib_patch_id)%length_y
828 center(1) = patch_ib(ib_patch_id)%x_centroid + real(gp%x_periodicity, wp)*(
glb_bounds(1)%end -
glb_bounds(1)%beg)
829 center(2) = patch_ib(ib_patch_id)%y_centroid + real(gp%y_periodicity, wp)*(
glb_bounds(2)%end -
glb_bounds(2)%beg)
830 inverse_rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
831 rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix(:,:)
833 ellipse_coeffs(1) = 0.5_wp*length_x
834 ellipse_coeffs(2) = 0.5_wp*length_y
836 xy_local = [
x_cc(i) - center(1),
y_cc(j) - center(2), 0._wp]
837 xy_local = matmul(inverse_rotation, xy_local)
839 normal_vector = xy_local
841 normal_vector(2) = normal_vector(2)*(ellipse_coeffs(1)/ellipse_coeffs(2))**2._wp
842 normal_vector = normal_vector/sqrt(dot_product(normal_vector, normal_vector))
843 gp%levelset_norm = matmul(rotation, normal_vector)
846 quadratic_coeffs(1) = (normal_vector(1)/ellipse_coeffs(1))**2 + (normal_vector(2)/ellipse_coeffs(2))**2
847 quadratic_coeffs(2) = 2._wp*((xy_local(1)*normal_vector(1)/(ellipse_coeffs(1)**2)) + (xy_local(2)*normal_vector(2) &
848 & /(ellipse_coeffs(2)**2)))
849 quadratic_coeffs(3) = (xy_local(1)/ellipse_coeffs(1))**2._wp + (xy_local(2)/ellipse_coeffs(2))**2._wp - 1._wp
852 gp%levelset = -0.5_wp*(-quadratic_coeffs(2) + sqrt(quadratic_coeffs(2)**2._wp - 4._wp*quadratic_coeffs(1) &
853 & *quadratic_coeffs(3)))/quadratic_coeffs(1)
861# 411 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
863# 411 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
865# 411 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
867# 411 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
869# 411 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
871# 411 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
873# 411 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
877 real(wp) :: Right, Left, Bottom, Top, Front, Back
879 real(wp) :: dist_left, dist_right, dist_bottom, dist_top, dist_back, dist_front
880 real(wp),
dimension(3) :: center
881 real(wp) :: length_x, length_y, length_z
882 real(wp),
dimension(1:3) :: xyz_local, dist_vec
883 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
885 integer :: ib_patch_id
886 ib_patch_id = gp%ib_patch_id
891 length_x = patch_ib(ib_patch_id)%length_x
892 length_y = patch_ib(ib_patch_id)%length_y
893 length_z = patch_ib(ib_patch_id)%length_z
895 center(1) = patch_ib(ib_patch_id)%x_centroid + real(gp%x_periodicity, wp)*(
glb_bounds(1)%end -
glb_bounds(1)%beg)
896 center(2) = patch_ib(ib_patch_id)%y_centroid + real(gp%y_periodicity, wp)*(
glb_bounds(2)%end -
glb_bounds(2)%beg)
897 center(3) = patch_ib(ib_patch_id)%z_centroid + real(gp%z_periodicity, wp)*(
glb_bounds(3)%end -
glb_bounds(3)%beg)
899 inverse_rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
900 rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix(:,:)
910 xyz_local = matmul(inverse_rotation, xyz_local)
912 dist_left = left - xyz_local(1)
913 dist_right = xyz_local(1) - right
914 dist_bottom = bottom - xyz_local(2)
915 dist_top = xyz_local(2) - top
916 dist_back = back - xyz_local(3)
917 dist_front = xyz_local(3) - front
919 min_dist = min(abs(dist_left), abs(dist_right), abs(dist_bottom), abs(dist_top), abs(dist_back), abs(dist_front))
923 gp%levelset = dist_left
925 dist_vec(1) = dist_left/abs(dist_left)
928 gp%levelset = dist_right
930 dist_vec(1) = -dist_right/abs(dist_right)
933 gp%levelset = dist_bottom
935 dist_vec(2) = dist_bottom/abs(dist_bottom)
938 gp%levelset = dist_top
940 dist_vec(2) = -dist_top/abs(dist_top)
943 gp%levelset = dist_back
945 dist_vec(3) = dist_back/abs(dist_back)
948 gp%levelset = dist_front
950 dist_vec(3) = -dist_front/abs(dist_front)
954 gp%levelset_norm = matmul(rotation, dist_vec)
962# 498 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
964# 498 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
966# 498 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
968# 498 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
970# 498 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
972# 498 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
974# 498 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
978 real(wp) :: radius, dist
979 real(wp),
dimension(3) :: dist_vec, center, periodicity
980 integer :: i, j, k, ib_patch_id
981 ib_patch_id = gp%ib_patch_id
986 radius = patch_ib(ib_patch_id)%radius
990 center(1) = patch_ib(ib_patch_id)%x_centroid
991 center(2) = patch_ib(ib_patch_id)%y_centroid
992 center(3) = patch_ib(ib_patch_id)%z_centroid
993 center = center + periodicity
995 dist_vec(1) =
x_cc(i) - center(1)
996 dist_vec(2) =
y_cc(j) - center(2)
997 dist_vec(3) =
z_cc(k) - center(3)
998 dist = sqrt(sum(dist_vec**2))
999 gp%levelset = dist - radius
1001 gp%levelset_norm = (/1, 0, 0/)
1003 gp%levelset_norm = dist_vec(:)/dist
1012# 534 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1014# 534 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1016# 534 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1018# 534 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1020# 534 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1022# 534 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1024# 534 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1029 real(wp),
dimension(3) :: dist_sides_vec, dist_surface_vec, length
1030 real(wp),
dimension(2) :: boundary
1031 real(wp) :: dist_side, dist_surface, side_pos
1033 integer :: ib_patch_id
1034 real(wp),
dimension(1:3) :: xyz_local, center
1035 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
1037 ib_patch_id = gp%ib_patch_id
1042 radius = patch_ib(ib_patch_id)%radius
1043 center(1) = patch_ib(ib_patch_id)%x_centroid + real(gp%x_periodicity, wp)*(
glb_bounds(1)%end -
glb_bounds(1)%beg)
1044 center(2) = patch_ib(ib_patch_id)%y_centroid + real(gp%y_periodicity, wp)*(
glb_bounds(2)%end -
glb_bounds(2)%beg)
1045 center(3) = patch_ib(ib_patch_id)%z_centroid + real(gp%z_periodicity, wp)*(
glb_bounds(3)%end -
glb_bounds(3)%beg)
1046 length(1) = patch_ib(ib_patch_id)%length_x
1047 length(2) = patch_ib(ib_patch_id)%length_y
1048 length(3) = patch_ib(ib_patch_id)%length_z
1050 inverse_rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
1051 rotation(:,:) = patch_ib(ib_patch_id)%rotation_matrix(:,:)
1054 boundary(1) = -0.5_wp*length(1)
1055 boundary(2) = 0.5_wp*length(1)
1056 dist_sides_vec = (/1, 0, 0/)
1057 dist_surface_vec = (/0, 1, 1/)
1059 boundary(1) = -0.5_wp*length(2)
1060 boundary(2) = 0.5_wp*length(2)
1061 dist_sides_vec = (/0, 1, 0/)
1062 dist_surface_vec = (/1, 0, 1/)
1064 boundary(1) = -0.5_wp*length(3)
1065 boundary(2) = 0.5_wp*length(3)
1066 dist_sides_vec = (/0, 0, 1/)
1067 dist_surface_vec = (/1, 1, 0/)
1071 xyz_local = matmul(inverse_rotation, xyz_local)
1074 side_pos = dot_product(xyz_local, dist_sides_vec)
1075 dist_side = min(abs(side_pos - boundary(1)), abs(boundary(2) - side_pos))
1077 dist_surface = norm2(xyz_local*dist_surface_vec) - radius
1079 if (dist_side < abs(dist_surface))
then
1081 gp%levelset = -dist_side
1083 gp%levelset_norm = matmul(rotation, -dist_sides_vec)
1085 gp%levelset_norm = matmul(rotation, dist_sides_vec)
1088 gp%levelset = dist_surface
1089 xyz_local = xyz_local*dist_surface_vec
1090 xyz_local = xyz_local/max(norm2(xyz_local), sgm_eps)
1091 gp%levelset_norm = matmul(rotation, xyz_local)
1100# 608 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1102# 608 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1104# 608 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1106# 608 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1108# 608 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1110# 608 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1112# 608 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1116 integer :: i, j, k, patch_id, boundary_edge_count
1117 real(wp),
dimension(1:3) :: center, xyz_local
1118 real(wp) :: normals(1:3)
1119 real(wp) :: distance
1120 real(wp),
dimension(1:3,1:3) :: inverse_rotation, rotation
1122 patch_id = gp%ib_patch_id
1131 if (.not.
f_is_default(patch_ib(patch_id)%x_centroid)) center(1) = patch_ib(patch_id)%x_centroid + real(gp%x_periodicity, &
1133 if (.not.
f_is_default(patch_ib(patch_id)%y_centroid)) center(2) = patch_ib(patch_id)%y_centroid + real(gp%y_periodicity, &
1136 if (.not.
f_is_default(patch_ib(patch_id)%z_centroid)) center(3) = patch_ib(patch_id)%z_centroid &
1140 inverse_rotation(:,:) = patch_ib(patch_id)%rotation_matrix_inverse(:,:)
1141 rotation(:,:) = patch_ib(patch_id)%rotation_matrix(:,:)
1144 xyz_local = (/
x_cc(i) - center(1),
y_cc(j) - center(2), 0._wp/)
1146 xyz_local(3) =
z_cc(k) - center(3)
1148 xyz_local = matmul(inverse_rotation, xyz_local)
1157 gp%levelset = distance
1158 gp%levelset = -abs(gp%levelset)
1161 gp%levelset_norm = matmul(rotation, normals(1:3))
1164 call s_distance_normals_2d(patch_ib(patch_id)%model_id, boundary_edge_count, xyz_local, normals, distance)
1165 gp%levelset = -abs(distance)
1166 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.