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# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
34# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
35# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
36# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
37# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
38# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
40# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
42# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
44# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
46# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
48# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
50# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
52# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
56# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
58# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
60# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
62# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
63# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
64# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
65# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
66# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
68# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
70# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
72# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
74# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
76# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
78# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
80# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
82# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
84# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
86# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
88# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
90# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
92# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
94# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
96# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
98# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
100# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
102# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
104# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
106# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
108# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
110# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
112# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
115# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
117# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
119# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
121# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
123# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
125# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
127# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
129# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
131# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
133# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
135# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
140# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
141# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
142# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
143# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
144# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
145# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
146# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
148# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
149# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
150# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
152# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
154# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
156# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
158# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
160# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
162# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
164# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
166# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
168# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
170# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
172# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
174# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
176# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
178# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
180# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
182# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
184# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
186# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
188# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
190# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
192# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
194# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
196# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
198# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
200# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
202# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
204# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
206# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
208# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
210# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
212# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
214# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
216# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
218# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
227# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
230# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
233# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
236# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
239# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
242# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
245# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
248# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
251# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
254# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
257# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
260# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
263# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
266# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
269# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
272# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
275# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
278# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
281# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
283# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
286# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
288# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
293# 57 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
296# 77 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
299# 85 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
302# 109 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
305# 125 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
308# 150 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
310# 156 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
312# 163 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
314# 6 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp" 2
335 type(
ghost_point),
dimension(:),
intent(inout) :: gps
336 integer,
intent(in) :: num_gps
337 integer :: i, patch_id, patch_geometry
343# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
345# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
346#if defined(MFC_OpenACC)
347# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
349# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
350#elif defined(MFC_OpenMP)
351# 33 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
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"
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"
362 patch_id = gps(i)%ib_patch_id
363 patch_geometry =
patch_ib(patch_id)%geometry
365 if (patch_geometry == 8)
then
367 else if (patch_geometry == 9)
then
369 else if (patch_geometry == 10)
then
371 else if (patch_geometry == 11)
then
373 else if (patch_geometry == 12)
then
378# 50 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
379#if defined(MFC_OpenACC)
380# 50 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
382# 50 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
383#elif defined(MFC_OpenMP)
384# 50 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
386# 50 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
388# 50 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
394# 54 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
396# 54 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
397#if defined(MFC_OpenACC)
398# 54 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
400# 54 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
401#elif defined(MFC_OpenMP)
402# 54 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
404# 54 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
406# 54 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
408# 54 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
410# 54 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
413 patch_id = gps(i)%ib_patch_id
414 patch_geometry =
patch_ib(patch_id)%geometry
416 if (patch_geometry == 2)
then
418 else if (patch_geometry == 3)
then
420 else if (patch_geometry == 4)
then
422 else if (patch_geometry == 5)
then
424 else if (patch_geometry == 6)
then
429# 71 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
430#if defined(MFC_OpenACC)
431# 71 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
433# 71 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
434#elif defined(MFC_OpenMP)
435# 71 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
437# 71 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
439# 71 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
449# 79 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
451# 79 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
453# 79 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
455# 79 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
457# 79 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
459# 79 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
461# 79 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
465 real(wp) :: radius, dist
466 real(wp),
dimension(2) :: center
467 real(wp),
dimension(3) :: dist_vec
468 integer :: i, j, ib_patch_id
469 ib_patch_id = gp%ib_patch_id
473 radius =
patch_ib(ib_patch_id)%radius
478 dist = sqrt(sum(dist_vec**2))
480 gp%levelset = dist - radius
482 gp%levelset_norm = 0._wp
484 gp%levelset_norm = dist_vec(:)/dist
493# 109 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
495# 109 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
497# 109 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
499# 109 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
501# 109 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
503# 109 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
505# 109 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
509 real(wp) :: dist, global_dist
511 real(wp),
dimension(3) :: dist_vec
512 real(wp),
dimension(1:3) :: xy_local, offset
513 real(wp),
dimension(1:2) :: center
514 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
515 integer :: i, j, k, ib_patch_id
516 ib_patch_id = gp%ib_patch_id
522 inverse_rotation(:,:) =
patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
523 rotation(:,:) =
patch_ib(ib_patch_id)%rotation_matrix(:,:)
524 offset(:) =
patch_ib(ib_patch_id)%centroid_offset(:)
526 xy_local = [
x_cc(i) - center(1),
y_cc(j) - center(2), 0._wp]
527 xy_local = matmul(inverse_rotation, xy_local)
528 xy_local = xy_local - offset
530 if (xy_local(2) >= 0._wp)
then
536 dist = sqrt(sum(dist_vec**2))
541 if (dist < global_dist)
then
556 dist = sqrt(sum(dist_vec**2))
561 if (dist < global_dist)
then
575 gp%levelset_norm = 0._wp
577 gp%levelset_norm = matmul(rotation, dist_vec(:))/dist
586# 188 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
588# 188 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
590# 188 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
592# 188 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
594# 188 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
596# 188 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
598# 188 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
602 real(wp) :: dist, dist_surf, dist_side, global_dist
604 real(wp) :: lz, z_max, z_min
605 real(wp),
dimension(3) :: dist_vec
606 real(wp),
dimension(1:3) :: xyz_local, center, offset, normal
607 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
609 integer :: i, j, k, l, ib_patch_id
610 ib_patch_id = gp%ib_patch_id
619 inverse_rotation(:,:) =
patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
620 rotation(:,:) =
patch_ib(ib_patch_id)%rotation_matrix(:,:)
621 offset(:) =
patch_ib(ib_patch_id)%centroid_offset(:)
627 xyz_local = matmul(inverse_rotation, xyz_local)
628 xyz_local = xyz_local - offset
630 if (xyz_local(2) >= 0._wp)
then
635 dist_surf = sqrt(sum(dist_vec**2))
637 global_dist = dist_surf
640 if (dist_surf < global_dist)
then
641 global_dist = dist_surf
649 dist_surf = global_dist
655 dist_surf = sqrt(sum(dist_vec**2))
657 global_dist = dist_surf
660 if (dist_surf < global_dist)
then
661 global_dist = dist_surf
669 dist_surf = global_dist
672 dist_side = min(abs(xyz_local(3) - z_min), abs(z_max - xyz_local(3)))
674 if (dist_side < dist_surf)
then
675 gp%levelset = dist_side
682 gp%levelset_norm = matmul(rotation, normal)
684 gp%levelset = dist_surf
686 gp%levelset_norm = 0._wp
688 gp%levelset_norm = matmul(rotation, dist_vec(:)/dist_surf)
698# 286 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
700# 286 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
702# 286 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
704# 286 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
706# 286 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
708# 286 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
710# 286 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
714 real(wp) :: top_right(2), bottom_left(2)
716 real(wp) :: side_dists(4)
717 real(wp) :: length_x, length_y
718 real(wp),
dimension(1:3) :: xy_local, dist_vec
719 real(wp),
dimension(2) :: center
720 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
723 integer :: ib_patch_id
724 ib_patch_id = gp%ib_patch_id
728 length_x =
patch_ib(ib_patch_id)%length_x
729 length_y =
patch_ib(ib_patch_id)%length_y
732 inverse_rotation(:,:) =
patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
733 rotation(:,:) =
patch_ib(ib_patch_id)%rotation_matrix(:,:)
735 top_right(1) = length_x/2
736 top_right(2) = length_y/2
737 bottom_left(1) = -length_x/2
738 bottom_left(2) = -length_y/2
741 xy_local = [
x_cc(i) - center(1),
y_cc(j) - center(2), 0._wp]
742 xy_local = matmul(inverse_rotation, xy_local)
744 side_dists(1) = bottom_left(1) - xy_local(1)
745 side_dists(2) = top_right(1) - xy_local(1)
746 side_dists(3) = bottom_left(2) - xy_local(2)
747 side_dists(4) = top_right(2) - xy_local(2)
748 min_dist = side_dists(1)
752 if (abs(side_dists(k)) < abs(min_dist))
then
754 min_dist = side_dists(idx)
758 gp%levelset = side_dists(idx)
761 if (idx == 1 .or. idx == 2)
then
763 dist_vec(1) = side_dists(idx)/abs(side_dists(idx))
766 dist_vec(2) = side_dists(idx)/abs(side_dists(idx))
769 gp%levelset_norm = matmul(rotation, dist_vec)
771 gp%levelset_norm = 0._wp
780# 354 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
782# 354 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
784# 354 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
786# 354 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
788# 354 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
790# 354 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
792# 354 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
796 real(wp) :: ellipse_coeffs(2)
797 real(wp) :: quadratic_coeffs(3)
798 real(wp) :: length_x, length_y
799 real(wp),
dimension(1:3) :: xy_local, normal_vector
800 real(wp),
dimension(2) :: center
801 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
804 integer :: ib_patch_id
805 ib_patch_id = gp%ib_patch_id
809 length_x =
patch_ib(ib_patch_id)%length_x
810 length_y =
patch_ib(ib_patch_id)%length_y
813 inverse_rotation(:,:) =
patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
814 rotation(:,:) =
patch_ib(ib_patch_id)%rotation_matrix(:,:)
816 ellipse_coeffs(1) = 0.5_wp*length_x
817 ellipse_coeffs(2) = 0.5_wp*length_y
819 xy_local = [
x_cc(i) - center(1),
y_cc(j) - center(2), 0._wp]
820 xy_local = matmul(inverse_rotation, xy_local)
822 normal_vector = xy_local
823 normal_vector(2) = normal_vector(2)*(ellipse_coeffs(1)/ellipse_coeffs(2)) &
825 normal_vector = normal_vector/sqrt(dot_product(normal_vector, normal_vector))
826 gp%levelset_norm = matmul(rotation, normal_vector)
829 quadratic_coeffs(1) = (normal_vector(1)/ellipse_coeffs(1))**2 + (normal_vector(2)/ellipse_coeffs(2))**2
830 quadratic_coeffs(2) = 2._wp*((xy_local(1)*normal_vector(1)/(ellipse_coeffs(1)**2)) + (xy_local(2)*normal_vector(2) &
831 & /(ellipse_coeffs(2)**2)))
832 quadratic_coeffs(3) = (xy_local(1)/ellipse_coeffs(1))**2._wp + (xy_local(2)/ellipse_coeffs(2))**2._wp - 1._wp
835 gp%levelset = -0.5_wp*(-quadratic_coeffs(2) + sqrt(quadratic_coeffs(2)**2._wp - 4._wp*quadratic_coeffs(1) &
836 & *quadratic_coeffs(3)))/quadratic_coeffs(1)
844# 404 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
846# 404 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
848# 404 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
850# 404 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
852# 404 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
854# 404 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
856# 404 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
860 real(wp) :: Right, Left, Bottom, Top, Front, Back
862 real(wp) :: dist_left, dist_right, dist_bottom, dist_top, dist_back, dist_front
863 real(wp),
dimension(3) :: center
864 real(wp) :: length_x, length_y, length_z
865 real(wp),
dimension(1:3) :: xyz_local, dist_vec
866 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
868 integer :: ib_patch_id
869 ib_patch_id = gp%ib_patch_id
874 length_x =
patch_ib(ib_patch_id)%length_x
875 length_y =
patch_ib(ib_patch_id)%length_y
876 length_z =
patch_ib(ib_patch_id)%length_z
882 inverse_rotation(:,:) =
patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
883 rotation(:,:) =
patch_ib(ib_patch_id)%rotation_matrix(:,:)
893 xyz_local = matmul(inverse_rotation, xyz_local)
895 dist_left = left - xyz_local(1)
896 dist_right = xyz_local(1) - right
897 dist_bottom = bottom - xyz_local(2)
898 dist_top = xyz_local(2) - top
899 dist_back = back - xyz_local(3)
900 dist_front = xyz_local(3) - front
902 min_dist = min(abs(dist_left), abs(dist_right), abs(dist_bottom), abs(dist_top), abs(dist_back), abs(dist_front))
906 gp%levelset = dist_left
908 dist_vec(1) = dist_left/abs(dist_left)
911 gp%levelset = dist_right
913 dist_vec(1) = -dist_right/abs(dist_right)
916 gp%levelset = dist_bottom
918 dist_vec(2) = dist_bottom/abs(dist_bottom)
921 gp%levelset = dist_top
923 dist_vec(2) = -dist_top/abs(dist_top)
926 gp%levelset = dist_back
928 dist_vec(3) = dist_back/abs(dist_back)
931 gp%levelset = dist_front
933 dist_vec(3) = -dist_front/abs(dist_front)
937 gp%levelset_norm = matmul(rotation, dist_vec)
945# 491 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
947# 491 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
949# 491 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
951# 491 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
953# 491 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
955# 491 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
957# 491 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
961 real(wp) :: radius, dist
962 real(wp),
dimension(3) :: dist_vec, center, periodicity
963 integer :: i, j, k, ib_patch_id
964 ib_patch_id = gp%ib_patch_id
969 radius =
patch_ib(ib_patch_id)%radius
973 center(1) =
patch_ib(ib_patch_id)%x_centroid
974 center(2) =
patch_ib(ib_patch_id)%y_centroid
975 center(3) =
patch_ib(ib_patch_id)%z_centroid
976 center = center + periodicity
978 dist_vec(1) =
x_cc(i) - center(1)
979 dist_vec(2) =
y_cc(j) - center(2)
980 dist_vec(3) =
z_cc(k) - center(3)
981 dist = sqrt(sum(dist_vec**2))
982 gp%levelset = dist - radius
984 gp%levelset_norm = (/1, 0, 0/)
986 gp%levelset_norm = dist_vec(:)/dist
995# 527 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
997# 527 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
999# 527 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1001# 527 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1003# 527 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1005# 527 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1007# 527 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1012 real(wp),
dimension(3) :: dist_sides_vec, dist_surface_vec, length
1013 real(wp),
dimension(2) :: boundary
1014 real(wp) :: dist_side, dist_surface, side_pos
1016 integer :: ib_patch_id
1017 real(wp),
dimension(1:3) :: xyz_local, center
1018 real(wp),
dimension(1:3,1:3) :: rotation, inverse_rotation
1020 ib_patch_id = gp%ib_patch_id
1025 radius =
patch_ib(ib_patch_id)%radius
1029 length(1) =
patch_ib(ib_patch_id)%length_x
1030 length(2) =
patch_ib(ib_patch_id)%length_y
1031 length(3) =
patch_ib(ib_patch_id)%length_z
1033 inverse_rotation(:,:) =
patch_ib(ib_patch_id)%rotation_matrix_inverse(:,:)
1034 rotation(:,:) =
patch_ib(ib_patch_id)%rotation_matrix(:,:)
1037 boundary(1) = -0.5_wp*length(1)
1038 boundary(2) = 0.5_wp*length(1)
1039 dist_sides_vec = (/1, 0, 0/)
1040 dist_surface_vec = (/0, 1, 1/)
1042 boundary(1) = -0.5_wp*length(2)
1043 boundary(2) = 0.5_wp*length(2)
1044 dist_sides_vec = (/0, 1, 0/)
1045 dist_surface_vec = (/1, 0, 1/)
1047 boundary(1) = -0.5_wp*length(3)
1048 boundary(2) = 0.5_wp*length(3)
1049 dist_sides_vec = (/0, 0, 1/)
1050 dist_surface_vec = (/1, 1, 0/)
1054 xyz_local = matmul(inverse_rotation, xyz_local)
1057 side_pos = dot_product(xyz_local, dist_sides_vec)
1058 dist_side = min(abs(side_pos - boundary(1)), abs(boundary(2) - side_pos))
1060 dist_surface = norm2(xyz_local*dist_surface_vec) - radius
1062 if (dist_side < abs(dist_surface))
then
1064 gp%levelset = -dist_side
1066 gp%levelset_norm = matmul(rotation, -dist_sides_vec)
1068 gp%levelset_norm = matmul(rotation, dist_sides_vec)
1071 gp%levelset = dist_surface
1072 xyz_local = xyz_local*dist_surface_vec
1073 xyz_local = xyz_local/max(norm2(xyz_local), sgm_eps)
1074 gp%levelset_norm = matmul(rotation, xyz_local)
1083# 601 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1085# 601 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1087# 601 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1089# 601 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1091# 601 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1093# 601 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1095# 601 "/home/runner/work/MFC/MFC/src/simulation/m_compute_levelset.fpp"
1099 integer :: i, j, k, patch_id, boundary_edge_count, total_vertices
1100 real(wp),
dimension(1:3) :: center, xyz_local
1101 real(wp) :: normals(1:3)
1102 real(wp) :: distance
1103 real(wp),
dimension(1:3,1:3) :: inverse_rotation, rotation
1105 patch_id = gp%ib_patch_id
1124 inverse_rotation(:,:) =
patch_ib(patch_id)%rotation_matrix_inverse(:,:)
1125 rotation(:,:) =
patch_ib(patch_id)%rotation_matrix(:,:)
1128 xyz_local = (/
x_cc(i) - center(1),
y_cc(j) - center(2), 0._wp/)
1130 xyz_local(3) =
z_cc(k) - center(3)
1132 xyz_local = matmul(inverse_rotation, xyz_local)
1140 gp%levelset = distance
1141 gp%levelset = -abs(gp%levelset)
1144 gp%levelset_norm = matmul(rotation, normals(1:3))
1148 gp%levelset = -abs(distance)
1149 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)
Subroutine for computing the levelset values at a ghost point belonging to the rectangle IB.
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(ib_patch_parameters), dimension(num_patches_max) patch_ib
Immersed boundary patch parameters.
type(bounds_info) z_domain
type(bounds_info) x_domain
type(vec3_dt), dimension(:), allocatable airfoil_grid_u
real(wp), dimension(:), allocatable, target y_cc
type(bounds_info) y_domain
real(wp), dimension(:), allocatable, target z_cc
type(vec3_dt), dimension(:), allocatable airfoil_grid_l
real(wp), dimension(:), allocatable, target x_cc
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)
Checks 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.
integer, dimension(:), allocatable, public gpu_total_vertices
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.