541 integer,
intent(in) :: num_considered_collisions
542 real(wp),
dimension(num_ibs, 3),
intent(inout) :: forces, torques
543 integer :: i, encoded_pid1, encoded_pid2, xp1, xp2, yp1, yp2, zp1, zp2, pid1, pid2, l
544 real(wp) :: overlap_distance
545 real(wp),
dimension(3) :: normal_vector, centroid_1, centroid_2
546 real(wp),
dimension(3) :: normal_velocity, tangential_vector, normal_force, tangential_force, torque, radial_vector, &
547 & rotation_velocity, vel1, vel2
548 real(wp) :: k, eta, effective_mass
550 if (num_considered_collisions == 0)
return
554# 102 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
556# 102 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
557#if defined(MFC_OpenACC)
558# 102 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
560# 102 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
562# 102 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
563#elif defined(MFC_OpenMP)
564# 102 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
566# 102 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
568# 102 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
570# 102 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
572# 102 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
574# 102 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
576# 102 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
578# 106 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
579 do i = 1, num_considered_collisions
582 call s_decode_patch_periodicity(encoded_pid1, pid1, xp1, yp1, zp1)
583 call s_decode_patch_periodicity(encoded_pid2, pid2, xp2, yp2, zp2)
587 if (pid1 <= 0 .or. pid2 <= 0) cycle
589 centroid_1(1) = patch_ib(pid1)%x_centroid + real(xp1, wp)*(glb_bounds(1)%end - glb_bounds(1)%beg)
590 centroid_1(2) = patch_ib(pid1)%y_centroid + real(yp1, wp)*(glb_bounds(2)%end - glb_bounds(2)%beg)
591 centroid_1(3) = 0._wp
592 centroid_2(1) = patch_ib(pid2)%x_centroid + real(xp2, wp)*(glb_bounds(1)%end - glb_bounds(1)%beg)
593 centroid_2(2) = patch_ib(pid2)%y_centroid + real(yp2, wp)*(glb_bounds(2)%end - glb_bounds(2)%beg)
594 centroid_2(3) = 0._wp
595 if (num_dims == 3)
then
596 centroid_1(3) = patch_ib(pid1)%z_centroid + real(zp1, wp)*(glb_bounds(3)%end - glb_bounds(3)%beg)
597 centroid_2(3) = patch_ib(pid2)%z_centroid + real(zp2, wp)*(glb_bounds(3)%end - glb_bounds(3)%beg)
600 normal_vector = centroid_2 - centroid_1
601 overlap_distance = patch_ib(pid1)%radius + patch_ib(pid2)%radius - norm2(normal_vector)
602 if (overlap_distance > 0._wp)
then
603 normal_vector = normal_vector/norm2(normal_vector)
604 if (f_local_rank_owns_location(centroid_1, glb_bounds))
then
606 effective_mass = 1.0_wp/((1.0_wp/patch_ib(pid1)%mass) + (1._wp/(patch_ib(pid2)%mass)))
611 radial_vector = normal_vector*(patch_ib(pid1)%radius - 0.5_wp*overlap_distance)
612 call s_cross_product(patch_ib(pid1)%angular_vel, radial_vector, rotation_velocity)
613 vel1 = patch_ib(pid1)%vel + rotation_velocity
614 radial_vector = normal_vector*(-1.0_wp)*(patch_ib(pid2)%radius - 0.5_wp*overlap_distance)
615 call s_cross_product(patch_ib(pid2)%angular_vel, radial_vector, rotation_velocity)
616 vel2 = patch_ib(pid2)%vel + rotation_velocity
618 normal_velocity = dot_product(vel1 - vel2, normal_vector)*normal_vector
619 tangential_vector = (vel1 - vel2) - normal_velocity
620 if (.not. f_approx_equal(norm2(tangential_vector), &
621 & 0._wp)) tangential_vector = tangential_vector/norm2(tangential_vector)
624 normal_force = -k*overlap_distance*normal_vector - eta*normal_velocity
625 tangential_force = -ib_coefficient_of_friction*norm2(normal_force)*tangential_vector
626 call s_cross_product(normal_vector*patch_ib(pid1)%radius, tangential_force, torque)
631# 157 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
632#if defined(MFC_OpenACC)
633# 157 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
635# 157 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
636#elif defined(MFC_OpenMP)
637# 157 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
639# 157 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
641 forces(pid1, l) = forces(pid1, l) + (normal_force(l) + tangential_force(l))
643# 159 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
644#if defined(MFC_OpenACC)
645# 159 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
647# 159 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
648#elif defined(MFC_OpenMP)
649# 159 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
651# 159 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
653 torques(pid1, l) = torques(pid1, l) + torque(l)
657# 163 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
658#if defined(MFC_OpenACC)
659# 163 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
661# 163 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
662#elif defined(MFC_OpenMP)
663# 163 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
665# 163 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
667 forces(pid2, l) = forces(pid2, l) - (normal_force(l) + tangential_force(l))
669# 165 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
670#if defined(MFC_OpenACC)
671# 165 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
673# 165 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
674#elif defined(MFC_OpenMP)
675# 165 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
677# 165 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
679 torques(pid2, l) = torques(pid2, l) + torque(l)*patch_ib(pid2)%radius/patch_ib(pid1)%radius
685# 171 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
686#if defined(MFC_OpenACC)
687# 171 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
689# 171 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
690#elif defined(MFC_OpenMP)
691# 171 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
693# 171 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
695# 171 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
703 real(wp),
dimension(num_ibs, 3),
intent(inout) :: forces, torques
704 integer :: patch_id, i, l
705 real(wp),
dimension(3) :: normal_force, tangential_force, normal_vector, normal_velocity, tangential_vector, &
706 & collision_location, torque, radial_vector, rotation_velocity, velocity
710# 184 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
712# 184 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
713#if defined(MFC_OpenACC)
714# 184 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
716# 184 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
718# 184 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
720# 184 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
721#elif defined(MFC_OpenMP)
722# 184 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
724# 184 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
726# 184 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
728# 184 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
730# 184 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
732# 184 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
734# 184 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
736# 187 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
737 do patch_id = 1, num_ibs
744 normal_vector = [-1._wp, 0._wp, 0._wp]
746 normal_vector = [1._wp, 0._wp, 0._wp]
748 normal_vector = [0._wp, -1._wp, 0._wp]
750 normal_vector = [0._wp, 1._wp, 0._wp]
752 normal_vector = [0._wp, 0._wp, -1._wp]
754 normal_vector = [0._wp, 0._wp, 1._wp]
758 collision_location = [patch_ib(patch_id)%x_centroid, patch_ib(patch_id)%y_centroid, 0._wp]
759 if (num_dims == 3) collision_location(3) = patch_ib(patch_id)%z_centroid
760 if (f_local_rank_owns_location(collision_location, glb_bounds))
then
767 call s_cross_product(patch_ib(patch_id)%angular_vel, radial_vector, rotation_velocity)
768 velocity = patch_ib(patch_id)%vel + rotation_velocity
771 normal_velocity = dot_product(velocity, normal_vector)*normal_vector
772 tangential_vector = velocity - normal_velocity
773 if (.not. f_approx_equal(norm2(tangential_vector), &
774 & 0._wp)) tangential_vector = tangential_vector/norm2(tangential_vector)
776 tangential_force = -ib_coefficient_of_friction*norm2(normal_force)*tangential_vector
777 call s_cross_product(normal_vector*patch_ib(patch_id)%radius, tangential_force, torque)
781# 230 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
782#if defined(MFC_OpenACC)
783# 230 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
785# 230 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
786#elif defined(MFC_OpenMP)
787# 230 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
789# 230 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
791 forces(patch_id, l) = forces(patch_id, l) + (normal_force(l) + tangential_force(l))
793# 232 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
794#if defined(MFC_OpenACC)
795# 232 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
797# 232 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
798#elif defined(MFC_OpenMP)
799# 232 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
801# 232 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
803 torques(patch_id, l) = torques(patch_id, l) + torque(l)
809# 238 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
810#if defined(MFC_OpenACC)
811# 238 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
813# 238 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
814#elif defined(MFC_OpenMP)
815# 238 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
817# 238 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
819# 238 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
828 type(ghost_point),
dimension(num_gps),
intent(in) :: gps
829 type(integer_field),
intent(in) :: ib_markers
830 integer,
intent(in) :: num_gps
831 integer,
intent(out) :: num_considered_collisions
832 integer :: i, j, k, z_bound, ii, jj, kk
833 integer,
dimension(2) :: decoded_pairs
834 integer :: gp_idx, gp_patch_id, neighbor_patch_id
835 integer :: pair_idx, out_idx
836 logical :: already_found
839 integer,
dimension(num_gps, 2) :: raw_pairs
840 integer :: num_raw, local_num_raw
843 z_bound = 0;
if (num_dims == 3) z_bound = 2
846# 263 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
848# 263 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
849#if defined(MFC_OpenACC)
850# 263 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
852# 263 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
853#elif defined(MFC_OpenMP)
854# 263 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
856# 263 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
858# 263 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
860# 263 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
862# 263 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
864# 263 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
866# 265 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
867 do gp_idx = 1, num_gps
868 i = gps(gp_idx)%loc(1)
869 j = gps(gp_idx)%loc(2)
870 k = 0;
if (num_dims == 3) k = gps(gp_idx)%loc(3)
871 gp_patch_id = ib_markers%sf(i, j, k)
874 neighbor_search:
do ii = i - 2, i + 2
876 do kk = k - z_bound, k + z_bound
877 neighbor_patch_id = ib_markers%sf(ii, jj, kk)
880 if (gp_patch_id < neighbor_patch_id)
then
882# 279 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
883#if defined(MFC_OpenACC)
884# 279 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
886# 279 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
887#elif defined(MFC_OpenMP)
888# 279 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
890# 279 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
892 num_raw = num_raw + 1
893 local_num_raw = num_raw
894#if defined(MFC_OpenACC)
895# 282 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
897# 282 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
898#elif defined(MFC_OpenMP)
899# 282 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
901# 282 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
905 raw_pairs(local_num_raw, 1) = gp_patch_id
906 raw_pairs(local_num_raw, 2) = neighbor_patch_id
911 end do neighbor_search
914# 293 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
915#if defined(MFC_OpenACC)
916# 293 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
918# 293 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
919#elif defined(MFC_OpenMP)
920# 293 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
922# 293 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
924# 293 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
928 num_considered_collisions = 0
931 do pair_idx = 1, num_raw
932 already_found = .false.
935 call s_decode_patch_periodicity(raw_pairs(pair_idx, 1), decoded_pairs(1), ii, jj, kk)
936 call s_decode_patch_periodicity(raw_pairs(pair_idx, 2), decoded_pairs(2), ii, jj, kk)
941 if (decoded_pairs(1) == decoded_pairs(2)) cycle
944 if (decoded_pairs(2) < decoded_pairs(1))
then
945 decoded_pairs(1) = decoded_pairs(1) + decoded_pairs(2)
946 decoded_pairs(2) = decoded_pairs(1) - decoded_pairs(2)
947 decoded_pairs(1) = decoded_pairs(1) - decoded_pairs(2)
948 raw_pairs(pair_idx, 1) = raw_pairs(pair_idx, 1) + raw_pairs(pair_idx, 2)
949 raw_pairs(pair_idx, 2) = raw_pairs(pair_idx, 1) - raw_pairs(pair_idx, 2)
950 raw_pairs(pair_idx, 1) = raw_pairs(pair_idx, 1) - raw_pairs(pair_idx, 2)
954 do out_idx = 1, num_considered_collisions
956 already_found = .true.
962 if (.not. already_found)
then
963 num_considered_collisions = num_considered_collisions + 1
965# 332 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
966 call s_prohibit_abort(
"num_considered_collisions > size(collision_lookup, 1)",
"More collisions detected than memory to hold them. Consider increasing the size of the collision_lookup array")
967# 332 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
969# 334 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
978# 341 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
979#if defined(MFC_OpenACC)
980# 341 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
982# 341 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
983#elif defined(MFC_OpenMP)
984# 341 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
986# 341 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
994 logical,
intent(out) :: any_wall_collision
995 integer :: gp_idx, i, j, k, patch_id
996 real(wp) :: edge_location, overlap_distance, max_overlap
1000# 353 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1002# 353 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1003#if defined(MFC_OpenACC)
1004# 353 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1006# 353 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1007#elif defined(MFC_OpenMP)
1008# 353 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1010# 353 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1012# 353 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1014# 353 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1016# 353 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1018# 353 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1020 do patch_id = 1, num_ibs
1021# 356 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1023 if (ib_bc_x%beg == bc_slip_wall .or. ib_bc_x%beg == bc_no_slip_wall)
then
1025 edge_location = patch_ib(patch_id)%x_centroid - patch_ib(patch_id)%radius
1027 if (edge_location < glb_bounds(1)%beg)
then
1029 overlap_distance = glb_bounds(1)%beg - edge_location
1031 overlap_distance = 0._wp
1034 max_overlap = max(max_overlap, overlap_distance)
1037 if (ib_bc_x%end == bc_slip_wall .or. ib_bc_x%end == bc_no_slip_wall)
then
1038 edge_location = patch_ib(patch_id)%x_centroid + patch_ib(patch_id)%radius
1039 if (edge_location > glb_bounds(1)%end)
then
1040 overlap_distance = edge_location - glb_bounds(1)%end
1042 overlap_distance = 0._wp
1045 max_overlap = max(max_overlap, overlap_distance)
1047# 356 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1049 if (ib_bc_y%beg == bc_slip_wall .or. ib_bc_y%beg == bc_no_slip_wall)
then
1051 edge_location = patch_ib(patch_id)%y_centroid - patch_ib(patch_id)%radius
1053 if (edge_location < glb_bounds(2)%beg)
then
1055 overlap_distance = glb_bounds(2)%beg - edge_location
1057 overlap_distance = 0._wp
1060 max_overlap = max(max_overlap, overlap_distance)
1063 if (ib_bc_y%end == bc_slip_wall .or. ib_bc_y%end == bc_no_slip_wall)
then
1064 edge_location = patch_ib(patch_id)%y_centroid + patch_ib(patch_id)%radius
1065 if (edge_location > glb_bounds(2)%end)
then
1066 overlap_distance = edge_location - glb_bounds(2)%end
1068 overlap_distance = 0._wp
1071 max_overlap = max(max_overlap, overlap_distance)
1073# 356 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1075 if (ib_bc_z%beg == bc_slip_wall .or. ib_bc_z%beg == bc_no_slip_wall)
then
1077 edge_location = patch_ib(patch_id)%z_centroid - patch_ib(patch_id)%radius
1079 if (edge_location < glb_bounds(3)%beg)
then
1081 overlap_distance = glb_bounds(3)%beg - edge_location
1083 overlap_distance = 0._wp
1086 max_overlap = max(max_overlap, overlap_distance)
1089 if (ib_bc_z%end == bc_slip_wall .or. ib_bc_z%end == bc_no_slip_wall)
then
1090 edge_location = patch_ib(patch_id)%z_centroid + patch_ib(patch_id)%radius
1091 if (edge_location > glb_bounds(3)%end)
then
1092 overlap_distance = edge_location - glb_bounds(3)%end
1094 overlap_distance = 0._wp
1097 max_overlap = max(max_overlap, overlap_distance)
1099# 382 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1102# 383 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1103#if defined(MFC_OpenACC)
1104# 383 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1106# 383 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1107#elif defined(MFC_OpenMP)
1108# 383 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1110# 383 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1112# 383 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1115 any_wall_collision = max_overlap > 0._wp
1122 real(wp),
dimension(3),
intent(in) :: location
1123 logical :: owns_collision, periodic_owner
1124 real(wp) :: temp_neighbor_domain
1127 owns_collision = .true.
1130 if (num_procs > 2)
then
1132 owns_collision = .true.
1133# 404 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1134 if (num_dims >= 1)
then
1135 if (ib_bc_x%beg == bc_periodic .and. neighbor_domain_x%beg >= neighbor_domain_x%end)
then
1137 temp_neighbor_domain = neighbor_domain_x%end + (glb_bounds(1)%end - glb_bounds(1)%beg)
1138 periodic_owner = neighbor_domain_x%beg <= location(1) .and. location(1) < temp_neighbor_domain
1140 temp_neighbor_domain = neighbor_domain_x%beg - (glb_bounds(1)%end - glb_bounds(1)%beg)
1141 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(1) .and. location(1) &
1142 & < neighbor_domain_x%end)
1144 owns_collision = owns_collision .and. periodic_owner
1146 owns_collision = owns_collision .and. neighbor_domain_x%beg <= location(1) .and. location(1) &
1147 & < neighbor_domain_x%end
1150# 404 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1151 if (num_dims >= 2)
then
1152 if (ib_bc_y%beg == bc_periodic .and. neighbor_domain_y%beg >= neighbor_domain_y%end)
then
1154 temp_neighbor_domain = neighbor_domain_y%end + (glb_bounds(2)%end - glb_bounds(2)%beg)
1155 periodic_owner = neighbor_domain_y%beg <= location(2) .and. location(2) < temp_neighbor_domain
1157 temp_neighbor_domain = neighbor_domain_y%beg - (glb_bounds(2)%end - glb_bounds(2)%beg)
1158 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(2) .and. location(2) &
1159 & < neighbor_domain_y%end)
1161 owns_collision = owns_collision .and. periodic_owner
1163 owns_collision = owns_collision .and. neighbor_domain_y%beg <= location(2) .and. location(2) &
1164 & < neighbor_domain_y%end
1167# 404 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1168 if (num_dims >= 3)
then
1169 if (ib_bc_z%beg == bc_periodic .and. neighbor_domain_z%beg >= neighbor_domain_z%end)
then
1171 temp_neighbor_domain = neighbor_domain_z%end + (glb_bounds(3)%end - glb_bounds(3)%beg)
1172 periodic_owner = neighbor_domain_z%beg <= location(3) .and. location(3) < temp_neighbor_domain
1174 temp_neighbor_domain = neighbor_domain_z%beg - (glb_bounds(3)%end - glb_bounds(3)%beg)
1175 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(3) .and. location(3) &
1176 & < neighbor_domain_z%end)
1178 owns_collision = owns_collision .and. periodic_owner
1180 owns_collision = owns_collision .and. neighbor_domain_z%beg <= location(3) .and. location(3) &
1181 & < neighbor_domain_z%end
1184# 421 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"