556 integer,
intent(in) :: num_considered_collisions
557 real(wp),
dimension(num_ibs, 3),
intent(inout) :: forces, torques
558 integer :: i, encoded_pid1, encoded_pid2, xp1, xp2, yp1, yp2, zp1, zp2, pid1, pid2, l
559 real(wp) :: overlap_distance
560 real(wp),
dimension(3) :: normal_vector, centroid_1, centroid_2, contact_point
561 real(wp),
dimension(3) :: normal_velocity, tangential_vector, normal_force, tangential_force, torque, radial_vector, &
562 & rotation_velocity, vel1, vel2
563 real(wp) :: k, eta, effective_mass
565 if (num_considered_collisions == 0)
return
569# 99 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
571# 99 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
572#if defined(MFC_OpenACC)
573# 99 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
575# 99 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
577# 99 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
578#elif defined(MFC_OpenMP)
579# 99 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
581# 99 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
583# 99 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
585# 99 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
587# 99 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
589# 99 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
591# 99 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
593# 103 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
594 do i = 1, num_considered_collisions
597 call s_decode_patch_periodicity(encoded_pid1, pid1, xp1, yp1, zp1)
598 call s_decode_patch_periodicity(encoded_pid2, pid2, xp2, yp2, zp2)
602 if (pid1 <= 0 .or. pid2 <= 0) cycle
604 centroid_1(1) = patch_ib(pid1)%x_centroid + real(xp1, wp)*(glb_bounds(1)%end - glb_bounds(1)%beg)
605 centroid_1(2) = patch_ib(pid1)%y_centroid + real(yp1, wp)*(glb_bounds(2)%end - glb_bounds(2)%beg)
606 centroid_1(3) = 0._wp
607 centroid_2(1) = patch_ib(pid2)%x_centroid + real(xp2, wp)*(glb_bounds(1)%end - glb_bounds(1)%beg)
608 centroid_2(2) = patch_ib(pid2)%y_centroid + real(yp2, wp)*(glb_bounds(2)%end - glb_bounds(2)%beg)
609 centroid_2(3) = 0._wp
610 if (num_dims == 3)
then
611 centroid_1(3) = patch_ib(pid1)%z_centroid + real(zp1, wp)*(glb_bounds(3)%end - glb_bounds(3)%beg)
612 centroid_2(3) = patch_ib(pid2)%z_centroid + real(zp2, wp)*(glb_bounds(3)%end - glb_bounds(3)%beg)
615 normal_vector = centroid_2 - centroid_1
616 overlap_distance = patch_ib(pid1)%radius + patch_ib(pid2)%radius - norm2(normal_vector)
617 if (overlap_distance > 0._wp)
then
618 normal_vector = normal_vector/norm2(normal_vector)
620 contact_point = centroid_1 + normal_vector*(patch_ib(pid1)%radius - 0.5_wp*overlap_distance)
621 if (f_local_rank_owns_location(contact_point, glb_bounds))
then
623 effective_mass = 1.0_wp/((1.0_wp/patch_ib(pid1)%mass) + (1._wp/(patch_ib(pid2)%mass)))
628 radial_vector = normal_vector*(patch_ib(pid1)%radius - 0.5_wp*overlap_distance)
629 call s_cross_product(patch_ib(pid1)%angular_vel, radial_vector, rotation_velocity)
630 vel1 = patch_ib(pid1)%vel + rotation_velocity
631 radial_vector = normal_vector*(-1.0_wp)*(patch_ib(pid2)%radius - 0.5_wp*overlap_distance)
632 call s_cross_product(patch_ib(pid2)%angular_vel, radial_vector, rotation_velocity)
633 vel2 = patch_ib(pid2)%vel + rotation_velocity
635 normal_velocity = dot_product(vel1 - vel2, normal_vector)*normal_vector
636 tangential_vector = (vel1 - vel2) - normal_velocity
637 if (.not. f_approx_equal(norm2(tangential_vector), &
638 & 0._wp)) tangential_vector = tangential_vector/norm2(tangential_vector)
641 normal_force = -k*overlap_distance*normal_vector - eta*normal_velocity
642 tangential_force = -ib_coefficient_of_friction*norm2(normal_force)*tangential_vector
643 call s_cross_product(normal_vector*patch_ib(pid1)%radius, tangential_force, torque)
648# 156 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
649#if defined(MFC_OpenACC)
650# 156 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
652# 156 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
653#elif defined(MFC_OpenMP)
654# 156 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
656# 156 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
658# 157 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
659 forces(pid1, l) = forces(pid1, l) + (normal_force(l) + tangential_force(l))
661# 158 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
662#if defined(MFC_OpenACC)
663# 158 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
665# 158 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
666#elif defined(MFC_OpenMP)
667# 158 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
669# 158 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
671# 159 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
672 torques(pid1, l) = torques(pid1, l) + torque(l)
676# 162 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
677#if defined(MFC_OpenACC)
678# 162 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
680# 162 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
681#elif defined(MFC_OpenMP)
682# 162 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
684# 162 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
686# 163 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
687 forces(pid2, l) = forces(pid2, l) - (normal_force(l) + tangential_force(l))
689# 164 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
690#if defined(MFC_OpenACC)
691# 164 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
693# 164 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
694#elif defined(MFC_OpenMP)
695# 164 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
697# 164 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
699# 165 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
700 torques(pid2, l) = torques(pid2, l) + torque(l)*patch_ib(pid2)%radius/patch_ib(pid1)%radius
706# 170 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
707#if defined(MFC_OpenACC)
708# 170 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
710# 170 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
711#elif defined(MFC_OpenMP)
712# 170 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
714# 170 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
716# 170 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
718# 171 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
725 real(wp),
dimension(num_ibs, 3),
intent(inout) :: forces, torques
726 integer :: patch_id, i, l
727 real(wp),
dimension(3) :: normal_force, tangential_force, normal_vector, normal_velocity, tangential_vector, &
728 & collision_location, torque, radial_vector, rotation_velocity, velocity
732# 183 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
734# 183 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
735#if defined(MFC_OpenACC)
736# 183 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
738# 183 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
740# 183 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
742# 183 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
743#elif defined(MFC_OpenMP)
744# 183 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
746# 183 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
748# 183 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
750# 183 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
752# 183 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
754# 183 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
756# 183 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
758# 186 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
759 do patch_id = 1, num_ibs
766 normal_vector = [-1._wp, 0._wp, 0._wp]
768 normal_vector = [1._wp, 0._wp, 0._wp]
770 normal_vector = [0._wp, -1._wp, 0._wp]
772 normal_vector = [0._wp, 1._wp, 0._wp]
774 normal_vector = [0._wp, 0._wp, -1._wp]
776 normal_vector = [0._wp, 0._wp, 1._wp]
780 collision_location = [patch_ib(patch_id)%x_centroid, patch_ib(patch_id)%y_centroid, 0._wp]
781 if (num_dims == 3) collision_location(3) = patch_ib(patch_id)%z_centroid
782 if (f_local_rank_owns_location(collision_location, glb_bounds))
then
789 call s_cross_product(patch_ib(patch_id)%angular_vel, radial_vector, rotation_velocity)
790 velocity = patch_ib(patch_id)%vel + rotation_velocity
793 normal_velocity = dot_product(velocity, normal_vector)*normal_vector
794 tangential_vector = velocity - normal_velocity
795 if (.not. f_approx_equal(norm2(tangential_vector), &
796 & 0._wp)) tangential_vector = tangential_vector/norm2(tangential_vector)
798 tangential_force = -ib_coefficient_of_friction*norm2(normal_force)*tangential_vector
799 call s_cross_product(normal_vector*patch_ib(patch_id)%radius, tangential_force, torque)
803# 229 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
804#if defined(MFC_OpenACC)
805# 229 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
807# 229 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
808#elif defined(MFC_OpenMP)
809# 229 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
811# 229 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
813# 230 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
814 forces(patch_id, l) = forces(patch_id, l) + (normal_force(l) + tangential_force(l))
816# 231 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
817#if defined(MFC_OpenACC)
818# 231 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
820# 231 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
821#elif defined(MFC_OpenMP)
822# 231 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
824# 231 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
826# 232 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
827 torques(patch_id, l) = torques(patch_id, l) + torque(l)
833# 237 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
834#if defined(MFC_OpenACC)
835# 237 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
837# 237 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
838#elif defined(MFC_OpenMP)
839# 237 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
841# 237 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
843# 237 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
845# 238 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
853 type(ghost_point),
dimension(num_gps),
intent(in) :: gps
854 type(integer_field),
intent(in) :: ib_markers
855 integer,
intent(in) :: num_gps
856 integer,
intent(out) :: num_considered_collisions
857 integer :: i, j, k, z_bound, ii, jj, kk
858 integer,
dimension(2) :: decoded_pairs
859 integer :: gp_idx, gp_patch_id, neighbor_patch_id, local_idx
860 integer :: pair_idx, out_idx
861 logical :: already_found
864 integer,
dimension(num_gps, 2) :: raw_pairs
865 integer :: num_raw, local_num_raw
868 z_bound = 0;
if (num_dims == 3) z_bound = 2
871# 262 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
873# 262 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
874#if defined(MFC_OpenACC)
875# 262 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
877# 262 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
878#elif defined(MFC_OpenMP)
879# 262 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
881# 262 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
883# 262 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
885# 262 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
887# 262 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
889# 262 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
891# 264 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
892 do gp_idx = 1, num_gps
893 i = gps(gp_idx)%loc(1)
894 j = gps(gp_idx)%loc(2)
895 k = 0;
if (num_dims == 3) k = gps(gp_idx)%loc(3)
896 gp_patch_id = ib_markers%sf(i, j, k)
899 neighbor_search:
do ii = i - 2, i + 2
901 do kk = k - z_bound, k + z_bound
902 neighbor_patch_id = ib_markers%sf(ii, jj, kk)
908 if (neighbor_patch_id /= 0 .and. neighbor_patch_id /= gp_patch_id)
then
910# 281 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
911#if defined(MFC_OpenACC)
912# 281 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
914# 281 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
915#elif defined(MFC_OpenMP)
916# 281 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
918# 281 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
920# 282 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
921 num_raw = num_raw + 1
922 local_num_raw = num_raw
923#if defined(MFC_OpenACC)
924# 284 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
926# 284 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
927#elif defined(MFC_OpenMP)
928# 284 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
930# 284 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
932# 285 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
934 raw_pairs(local_num_raw, 1) = gp_patch_id
935 raw_pairs(local_num_raw, 2) = neighbor_patch_id
940 end do neighbor_search
943# 294 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
944#if defined(MFC_OpenACC)
945# 294 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
947# 294 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
948#elif defined(MFC_OpenMP)
949# 294 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
951# 294 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
953# 294 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
955# 295 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
958 num_considered_collisions = 0
961 do pair_idx = 1, num_raw
962 already_found = .false.
965 call s_decode_patch_periodicity(raw_pairs(pair_idx, 1), decoded_pairs(1), ii, jj, kk)
966 call s_decode_patch_periodicity(raw_pairs(pair_idx, 2), decoded_pairs(2), ii, jj, kk)
967 call s_get_neighborhood_idx(decoded_pairs(1), local_idx)
968 decoded_pairs(1) = local_idx
969 call s_get_neighborhood_idx(decoded_pairs(2), local_idx)
970 decoded_pairs(2) = local_idx
973 if (decoded_pairs(1) == decoded_pairs(2)) cycle
976 if (decoded_pairs(2) < decoded_pairs(1))
then
977 decoded_pairs(1) = decoded_pairs(1) + decoded_pairs(2)
978 decoded_pairs(2) = decoded_pairs(1) - decoded_pairs(2)
979 decoded_pairs(1) = decoded_pairs(1) - decoded_pairs(2)
980 raw_pairs(pair_idx, 1) = raw_pairs(pair_idx, 1) + raw_pairs(pair_idx, 2)
981 raw_pairs(pair_idx, 2) = raw_pairs(pair_idx, 1) - raw_pairs(pair_idx, 2)
982 raw_pairs(pair_idx, 1) = raw_pairs(pair_idx, 1) - raw_pairs(pair_idx, 2)
986 do out_idx = 1, num_considered_collisions
988 already_found = .true.
994 if (.not. already_found)
then
995 num_considered_collisions = num_considered_collisions + 1
997# 335 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
998 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")
999# 335 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1001# 337 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1010# 344 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1011#if defined(MFC_OpenACC)
1012# 344 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1014# 344 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1015#elif defined(MFC_OpenMP)
1016# 344 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1018# 344 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1020# 345 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1027 logical,
intent(out) :: any_wall_collision
1028 integer :: gp_idx, i, j, k, patch_id
1029 real(wp) :: edge_location, overlap_distance, max_overlap
1033# 356 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1035# 356 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1036#if defined(MFC_OpenACC)
1037# 356 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1039# 356 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1040#elif defined(MFC_OpenMP)
1041# 356 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1043# 356 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1045# 356 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1047# 356 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1049# 356 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1051# 356 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1053# 357 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1054 do patch_id = 1, num_ibs
1055# 359 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1057 if (ib_bc_x%beg == bc_slip_wall .or. ib_bc_x%beg == bc_no_slip_wall)
then
1058# 361 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1060 edge_location = patch_ib(patch_id)%x_centroid - patch_ib(patch_id)%radius
1061# 363 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1063 if (edge_location < glb_bounds(1)%beg)
then
1064# 365 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1066 overlap_distance = glb_bounds(1)%beg - edge_location
1067# 367 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1069 overlap_distance = 0._wp
1072# 371 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1073 max_overlap = max(max_overlap, overlap_distance)
1076 if (ib_bc_x%end == bc_slip_wall .or. ib_bc_x%end == bc_no_slip_wall)
then
1077# 375 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1078 edge_location = patch_ib(patch_id)%x_centroid + patch_ib(patch_id)%radius
1079# 376 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1080 if (edge_location > glb_bounds(1)%end)
then
1081# 377 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1082 overlap_distance = edge_location - glb_bounds(1)%end
1083# 378 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1085 overlap_distance = 0._wp
1088# 382 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1089 max_overlap = max(max_overlap, overlap_distance)
1091# 359 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1093 if (ib_bc_y%beg == bc_slip_wall .or. ib_bc_y%beg == bc_no_slip_wall)
then
1094# 361 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1096 edge_location = patch_ib(patch_id)%y_centroid - patch_ib(patch_id)%radius
1097# 363 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1099 if (edge_location < glb_bounds(2)%beg)
then
1100# 365 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1102 overlap_distance = glb_bounds(2)%beg - edge_location
1103# 367 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1105 overlap_distance = 0._wp
1108# 371 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1109 max_overlap = max(max_overlap, overlap_distance)
1112 if (ib_bc_y%end == bc_slip_wall .or. ib_bc_y%end == bc_no_slip_wall)
then
1113# 375 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1114 edge_location = patch_ib(patch_id)%y_centroid + patch_ib(patch_id)%radius
1115# 376 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1116 if (edge_location > glb_bounds(2)%end)
then
1117# 377 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1118 overlap_distance = edge_location - glb_bounds(2)%end
1119# 378 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1121 overlap_distance = 0._wp
1124# 382 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1125 max_overlap = max(max_overlap, overlap_distance)
1127# 359 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1129 if (ib_bc_z%beg == bc_slip_wall .or. ib_bc_z%beg == bc_no_slip_wall)
then
1130# 361 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1132 edge_location = patch_ib(patch_id)%z_centroid - patch_ib(patch_id)%radius
1133# 363 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1135 if (edge_location < glb_bounds(3)%beg)
then
1136# 365 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1138 overlap_distance = glb_bounds(3)%beg - edge_location
1139# 367 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1141 overlap_distance = 0._wp
1144# 371 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1145 max_overlap = max(max_overlap, overlap_distance)
1148 if (ib_bc_z%end == bc_slip_wall .or. ib_bc_z%end == bc_no_slip_wall)
then
1149# 375 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1150 edge_location = patch_ib(patch_id)%z_centroid + patch_ib(patch_id)%radius
1151# 376 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1152 if (edge_location > glb_bounds(3)%end)
then
1153# 377 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1154 overlap_distance = edge_location - glb_bounds(3)%end
1155# 378 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1157 overlap_distance = 0._wp
1160# 382 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1161 max_overlap = max(max_overlap, overlap_distance)
1163# 385 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1166# 386 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1167#if defined(MFC_OpenACC)
1168# 386 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1170# 386 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1171#elif defined(MFC_OpenMP)
1172# 386 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1174# 386 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1176# 386 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1178# 387 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1180 any_wall_collision = max_overlap > 0._wp
1187 real(wp),
dimension(3),
intent(in) :: location
1188 logical :: owns_collision, periodic_owner
1189 real(wp) :: temp_neighbor_domain
1192 owns_collision = .true.
1195 if (num_procs > 2)
then
1197 owns_collision = .true.
1198# 407 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1199 if (num_dims >= 1)
then
1200# 408 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1201 if (ib_bc_x%beg == bc_periodic .and. neighbor_domain_x%beg >= neighbor_domain_x%end)
then
1202# 409 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1204 temp_neighbor_domain = neighbor_domain_x%end + (glb_bounds(1)%end - glb_bounds(1)%beg)
1205# 411 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1206 periodic_owner = neighbor_domain_x%beg <= location(1) .and. location(1) < temp_neighbor_domain
1207# 412 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1209 temp_neighbor_domain = neighbor_domain_x%beg - (glb_bounds(1)%end - glb_bounds(1)%beg)
1210# 414 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1211 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(1) .and. location(1) &
1212# 415 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1213 & < neighbor_domain_x%end)
1214# 416 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1216 owns_collision = owns_collision .and. periodic_owner
1218 owns_collision = owns_collision .and. neighbor_domain_x%beg <= location(1) .and. location(1) &
1219# 420 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1220 & < neighbor_domain_x%end
1221# 421 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1224# 407 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1225 if (num_dims >= 2)
then
1226# 408 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1227 if (ib_bc_y%beg == bc_periodic .and. neighbor_domain_y%beg >= neighbor_domain_y%end)
then
1228# 409 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1230 temp_neighbor_domain = neighbor_domain_y%end + (glb_bounds(2)%end - glb_bounds(2)%beg)
1231# 411 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1232 periodic_owner = neighbor_domain_y%beg <= location(2) .and. location(2) < temp_neighbor_domain
1233# 412 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1235 temp_neighbor_domain = neighbor_domain_y%beg - (glb_bounds(2)%end - glb_bounds(2)%beg)
1236# 414 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1237 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(2) .and. location(2) &
1238# 415 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1239 & < neighbor_domain_y%end)
1240# 416 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1242 owns_collision = owns_collision .and. periodic_owner
1244 owns_collision = owns_collision .and. neighbor_domain_y%beg <= location(2) .and. location(2) &
1245# 420 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1246 & < neighbor_domain_y%end
1247# 421 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1250# 407 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1251 if (num_dims >= 3)
then
1252# 408 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1253 if (ib_bc_z%beg == bc_periodic .and. neighbor_domain_z%beg >= neighbor_domain_z%end)
then
1254# 409 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1256 temp_neighbor_domain = neighbor_domain_z%end + (glb_bounds(3)%end - glb_bounds(3)%beg)
1257# 411 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1258 periodic_owner = neighbor_domain_z%beg <= location(3) .and. location(3) < temp_neighbor_domain
1259# 412 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1261 temp_neighbor_domain = neighbor_domain_z%beg - (glb_bounds(3)%end - glb_bounds(3)%beg)
1262# 414 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1263 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(3) .and. location(3) &
1264# 415 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1265 & < neighbor_domain_z%end)
1266# 416 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1268 owns_collision = owns_collision .and. periodic_owner
1270 owns_collision = owns_collision .and. neighbor_domain_z%beg <= location(3) .and. location(3) &
1271# 420 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1272 & < neighbor_domain_z%end
1273# 421 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1276# 424 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"