521 integer,
intent(in) :: num_considered_collisions
522 real(wp),
dimension(num_ibs, 3),
intent(inout) :: forces, torques
523 integer :: i, encoded_pid1, encoded_pid2, xp1, xp2, yp1, yp2, zp1, zp2, pid1, pid2, l
524 real(wp) :: overlap_distance
525 real(wp),
dimension(3) :: normal_vector, centroid_1, centroid_2
526 real(wp),
dimension(3) :: normal_velocity, tangential_vector, normal_force, tangential_force, torque, radial_vector, &
527 & rotation_velocity, vel1, vel2
528 real(wp) :: k, eta, effective_mass
530 if (num_considered_collisions == 0)
return
536# 96 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
538# 96 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
539#if defined(MFC_OpenACC)
540# 96 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
542# 96 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
544# 96 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
545#elif defined(MFC_OpenMP)
546# 96 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
548# 96 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
550# 96 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
552# 96 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
554# 96 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
556# 96 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
558# 96 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
560# 100 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
561 do i = 1, num_considered_collisions
564 call s_decode_patch_periodicity(encoded_pid1, pid1, xp1, yp1, zp1)
565 call s_decode_patch_periodicity(encoded_pid2, pid2, xp2, yp2, zp2)
570 if (pid1 <= 0 .or. pid2 <= 0) cycle
572 centroid_1(1) = patch_ib(pid1)%x_centroid + real(xp1, wp)*(glb_bounds(1)%end - glb_bounds(1)%beg)
573 centroid_1(2) = patch_ib(pid1)%y_centroid + real(yp1, wp)*(glb_bounds(2)%end - glb_bounds(2)%beg)
574 centroid_1(3) = 0._wp
575 centroid_2(1) = patch_ib(pid2)%x_centroid + real(xp2, wp)*(glb_bounds(1)%end - glb_bounds(1)%beg)
576 centroid_2(2) = patch_ib(pid2)%y_centroid + real(yp2, wp)*(glb_bounds(2)%end - glb_bounds(2)%beg)
577 centroid_2(3) = 0._wp
578 if (num_dims == 3)
then
579 centroid_1(3) = patch_ib(pid1)%z_centroid + real(zp1, wp)*(glb_bounds(3)%end - glb_bounds(3)%beg)
580 centroid_2(3) = patch_ib(pid2)%z_centroid + real(zp2, wp)*(glb_bounds(3)%end - glb_bounds(3)%beg)
583 normal_vector = centroid_2 - centroid_1
584 overlap_distance = patch_ib(pid1)%radius + patch_ib(pid2)%radius - norm2(normal_vector)
585 if (overlap_distance > 0._wp)
then
586 normal_vector = normal_vector/norm2(normal_vector)
589 effective_mass = 1.0_wp/((1.0_wp/patch_ib(pid1)%mass) + (1._wp/(patch_ib(pid2)%mass)))
594 radial_vector = normal_vector*(patch_ib(pid1)%radius - 0.5_wp*overlap_distance)
595 call s_cross_product(patch_ib(pid1)%angular_vel, radial_vector, rotation_velocity)
596 vel1 = patch_ib(pid1)%vel + rotation_velocity
597 radial_vector = normal_vector*(-1.0_wp)*(patch_ib(pid2)%radius - 0.5_wp*overlap_distance)
598 call s_cross_product(patch_ib(pid2)%angular_vel, radial_vector, rotation_velocity)
599 vel2 = patch_ib(pid2)%vel + rotation_velocity
601 normal_velocity = dot_product(vel1 - vel2, normal_vector)*normal_vector
602 tangential_vector = (vel1 - vel2) - normal_velocity
603 if (.not. f_approx_equal(norm2(tangential_vector), &
604 & 0._wp)) tangential_vector = tangential_vector/norm2(tangential_vector)
607 normal_force = -k*overlap_distance*normal_vector - eta*normal_velocity
608 tangential_force = -ib_coefficient_of_friction*norm2(normal_force)*tangential_vector
609 call s_cross_product(normal_vector*patch_ib(pid1)%radius, tangential_force, torque)
614# 152 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
615#if defined(MFC_OpenACC)
616# 152 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
618# 152 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
619#elif defined(MFC_OpenMP)
620# 152 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
622# 152 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
624 forces(pid1, l) = forces(pid1, l) + (normal_force(l) + tangential_force(l))
626# 154 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
627#if defined(MFC_OpenACC)
628# 154 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
630# 154 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
631#elif defined(MFC_OpenMP)
632# 154 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
634# 154 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
636 torques(pid1, l) = torques(pid1, l) + torque(l)
640# 158 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
641#if defined(MFC_OpenACC)
642# 158 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
644# 158 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
645#elif defined(MFC_OpenMP)
646# 158 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
648# 158 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
650 forces(pid2, l) = forces(pid2, l) - (normal_force(l) + tangential_force(l))
652# 160 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
653#if defined(MFC_OpenACC)
654# 160 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
656# 160 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
657#elif defined(MFC_OpenMP)
658# 160 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
660# 160 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
662 torques(pid2, l) = torques(pid2, l) + torque(l)*patch_ib(pid2)%radius/patch_ib(pid1)%radius
668# 166 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
669#if defined(MFC_OpenACC)
670# 166 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
672# 166 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
673#elif defined(MFC_OpenMP)
674# 166 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
676# 166 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
678# 166 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
686 real(wp),
dimension(num_ibs, 3),
intent(inout) :: forces, torques
687 integer :: patch_id, i, l
688 real(wp),
dimension(3) :: normal_force, tangential_force, normal_vector, normal_velocity, tangential_vector, &
689 & collision_location, torque, radial_vector, rotation_velocity, velocity
693# 179 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
695# 179 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
696#if defined(MFC_OpenACC)
697# 179 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
699# 179 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
701# 179 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
703# 179 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
704#elif defined(MFC_OpenMP)
705# 179 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
707# 179 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
709# 179 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
711# 179 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
713# 179 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
715# 179 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
717# 179 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
719# 182 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
720 do patch_id = 1, num_ibs
727 normal_vector = [-1._wp, 0._wp, 0._wp]
729 normal_vector = [1._wp, 0._wp, 0._wp]
731 normal_vector = [0._wp, -1._wp, 0._wp]
733 normal_vector = [0._wp, 1._wp, 0._wp]
735 normal_vector = [0._wp, 0._wp, -1._wp]
737 normal_vector = [0._wp, 0._wp, 1._wp]
741 collision_location = [patch_ib(patch_id)%x_centroid, patch_ib(patch_id)%y_centroid, 0._wp]
742 if (num_dims == 3) collision_location(3) = patch_ib(patch_id)%z_centroid
750 call s_cross_product(patch_ib(patch_id)%angular_vel, radial_vector, rotation_velocity)
751 velocity = patch_ib(patch_id)%vel + rotation_velocity
754 normal_velocity = dot_product(velocity, normal_vector)*normal_vector
755 tangential_vector = velocity - normal_velocity
756 if (.not. f_approx_equal(norm2(tangential_vector), &
757 & 0._wp)) tangential_vector = tangential_vector/norm2(tangential_vector)
759 tangential_force = -ib_coefficient_of_friction*norm2(normal_force)*tangential_vector
760 call s_cross_product(normal_vector*patch_ib(patch_id)%radius, tangential_force, torque)
764# 225 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
765#if defined(MFC_OpenACC)
766# 225 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
768# 225 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
769#elif defined(MFC_OpenMP)
770# 225 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
772# 225 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
774 forces(patch_id, l) = forces(patch_id, l) + (normal_force(l) + tangential_force(l))
776# 227 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
777#if defined(MFC_OpenACC)
778# 227 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
780# 227 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
781#elif defined(MFC_OpenMP)
782# 227 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
784# 227 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
786 torques(patch_id, l) = torques(patch_id, l) + torque(l)
792# 233 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
793#if defined(MFC_OpenACC)
794# 233 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
796# 233 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
797#elif defined(MFC_OpenMP)
798# 233 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
800# 233 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
802# 233 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
811 type(ghost_point),
dimension(num_gps),
intent(in) :: gps
812 type(integer_field),
intent(in) :: ib_markers
813 integer,
intent(in) :: num_gps
814 integer,
intent(out) :: num_considered_collisions
815 integer :: i, j, k, z_bound, ii, jj, kk
816 integer,
dimension(2) :: decoded_pairs
817 integer :: gp_idx, gp_patch_id, neighbor_patch_id
818 integer :: pair_idx, out_idx
819 logical :: already_found
822 integer,
dimension(num_gps, 2) :: raw_pairs
823 integer :: num_raw, local_num_raw
826 z_bound = 0;
if (num_dims == 3) z_bound = 2
829# 258 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
831# 258 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
832#if defined(MFC_OpenACC)
833# 258 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
835# 258 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
836#elif defined(MFC_OpenMP)
837# 258 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
839# 258 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
841# 258 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
843# 258 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
845# 258 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
847# 258 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
849# 260 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
850 do gp_idx = 1, num_gps
851 i = gps(gp_idx)%loc(1)
852 j = gps(gp_idx)%loc(2)
853 k = 0;
if (num_dims == 3) k = gps(gp_idx)%loc(3)
854 gp_patch_id = ib_markers%sf(i, j, k)
857 neighbor_search:
do ii = i - 2, i + 2
859 do kk = k - z_bound, k + z_bound
860 neighbor_patch_id = ib_markers%sf(ii, jj, kk)
863 if (gp_patch_id < neighbor_patch_id)
then
865# 274 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
866#if defined(MFC_OpenACC)
867# 274 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
869# 274 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
870#elif defined(MFC_OpenMP)
871# 274 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
873# 274 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
875 num_raw = num_raw + 1
876 local_num_raw = num_raw
877#if defined(MFC_OpenACC)
878# 277 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
880# 277 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
881#elif defined(MFC_OpenMP)
882# 277 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
884# 277 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
888 raw_pairs(local_num_raw, 1) = gp_patch_id
889 raw_pairs(local_num_raw, 2) = neighbor_patch_id
894 end do neighbor_search
897# 288 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
898#if defined(MFC_OpenACC)
899# 288 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
901# 288 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
902#elif defined(MFC_OpenMP)
903# 288 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
905# 288 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
907# 288 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
911 num_considered_collisions = 0
914 do pair_idx = 1, num_raw
915 already_found = .false.
918 call s_decode_patch_periodicity(raw_pairs(pair_idx, 1), decoded_pairs(1), ii, jj, kk)
919 call s_decode_patch_periodicity(raw_pairs(pair_idx, 2), decoded_pairs(2), ii, jj, kk)
924 if (decoded_pairs(1) == decoded_pairs(2)) cycle
927 if (decoded_pairs(2) < decoded_pairs(1))
then
928 decoded_pairs(1) = decoded_pairs(1) + decoded_pairs(2)
929 decoded_pairs(2) = decoded_pairs(1) - decoded_pairs(2)
930 decoded_pairs(1) = decoded_pairs(1) - decoded_pairs(2)
931 raw_pairs(pair_idx, 1) = raw_pairs(pair_idx, 1) + raw_pairs(pair_idx, 2)
932 raw_pairs(pair_idx, 2) = raw_pairs(pair_idx, 1) - raw_pairs(pair_idx, 2)
933 raw_pairs(pair_idx, 1) = raw_pairs(pair_idx, 1) - raw_pairs(pair_idx, 2)
937 do out_idx = 1, num_considered_collisions
939 already_found = .true.
945 if (.not. already_found)
then
946 num_considered_collisions = num_considered_collisions + 1
948# 327 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
949 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")
950# 327 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
952# 329 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
961# 336 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
962#if defined(MFC_OpenACC)
963# 336 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
965# 336 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
966#elif defined(MFC_OpenMP)
967# 336 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
969# 336 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
977 integer :: gp_idx, i, j, k, patch_id
978 real(wp) :: edge_location, overlap_distance
983# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
985# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
986#if defined(MFC_OpenACC)
987# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
989# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
990#elif defined(MFC_OpenMP)
991# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
993# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
995# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
997# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
999# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1001# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1003 do patch_id = 1, num_ibs
1004# 351 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1006 if (ib_bc_x%beg == bc_slip_wall .or. ib_bc_x%beg == bc_no_slip_wall)
then
1008 edge_location = patch_ib(patch_id)%x_centroid - patch_ib(patch_id)%radius
1010 if (edge_location < glb_bounds(1)%beg)
then
1012 overlap_distance = glb_bounds(1)%beg - edge_location
1014 overlap_distance = 0._wp
1019 if (ib_bc_x%end == bc_slip_wall .or. ib_bc_x%end == bc_no_slip_wall)
then
1020 edge_location = patch_ib(patch_id)%x_centroid + patch_ib(patch_id)%radius
1021 if (edge_location > glb_bounds(1)%end)
then
1022 overlap_distance = edge_location - glb_bounds(1)%end
1024 overlap_distance = 0._wp
1028# 351 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1030 if (ib_bc_y%beg == bc_slip_wall .or. ib_bc_y%beg == bc_no_slip_wall)
then
1032 edge_location = patch_ib(patch_id)%y_centroid - patch_ib(patch_id)%radius
1034 if (edge_location < glb_bounds(2)%beg)
then
1036 overlap_distance = glb_bounds(2)%beg - edge_location
1038 overlap_distance = 0._wp
1043 if (ib_bc_y%end == bc_slip_wall .or. ib_bc_y%end == bc_no_slip_wall)
then
1044 edge_location = patch_ib(patch_id)%y_centroid + patch_ib(patch_id)%radius
1045 if (edge_location > glb_bounds(2)%end)
then
1046 overlap_distance = edge_location - glb_bounds(2)%end
1048 overlap_distance = 0._wp
1052# 351 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1054 if (ib_bc_z%beg == bc_slip_wall .or. ib_bc_z%beg == bc_no_slip_wall)
then
1056 edge_location = patch_ib(patch_id)%z_centroid - patch_ib(patch_id)%radius
1058 if (edge_location < glb_bounds(3)%beg)
then
1060 overlap_distance = glb_bounds(3)%beg - edge_location
1062 overlap_distance = 0._wp
1067 if (ib_bc_z%end == bc_slip_wall .or. ib_bc_z%end == bc_no_slip_wall)
then
1068 edge_location = patch_ib(patch_id)%z_centroid + patch_ib(patch_id)%radius
1069 if (edge_location > glb_bounds(3)%end)
then
1070 overlap_distance = edge_location - glb_bounds(3)%end
1072 overlap_distance = 0._wp
1076# 375 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1079# 376 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1080#if defined(MFC_OpenACC)
1081# 376 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1083# 376 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1084#elif defined(MFC_OpenMP)
1085# 376 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1087# 376 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1089# 376 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1098# 383 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1100# 383 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1102# 383 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1104# 383 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1106# 383 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1108# 383 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1110# 383 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1113 real(wp),
dimension(3),
intent(in) :: location
1114 logical :: owns_collision
1115 real(wp),
dimension(3) :: projected_location
1117 owns_collision = .true.
1120 if (num_procs > 1)
then
1121 projected_location(:) = location(:)
1124# 397 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1125 if (num_dims >= 1)
then
1126 if (ib_bc_x%beg /= bc_periodic)
then
1128 if (location(1) < glb_bounds(1)%beg)
then
1129 projected_location(1) = glb_bounds(1)%beg
1130 else if (glb_bounds(1)%end < location(1))
then
1131 projected_location(1) = glb_bounds(1)%end - 1.0e-10_wp
1134 owns_collision = owns_collision .and. x_cb(-1) <= projected_location(1) &
1135 & .and. projected_location(1) < x_cb(m)
1137# 397 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1138 if (num_dims >= 2)
then
1139 if (ib_bc_y%beg /= bc_periodic)
then
1141 if (location(2) < glb_bounds(2)%beg)
then
1142 projected_location(2) = glb_bounds(2)%beg
1143 else if (glb_bounds(2)%end < location(2))
then
1144 projected_location(2) = glb_bounds(2)%end - 1.0e-10_wp
1147 owns_collision = owns_collision .and. y_cb(-1) <= projected_location(2) &
1148 & .and. projected_location(2) < y_cb(n)
1150# 397 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1151 if (num_dims >= 3)
then
1152 if (ib_bc_z%beg /= bc_periodic)
then
1154 if (location(3) < glb_bounds(3)%beg)
then
1155 projected_location(3) = glb_bounds(3)%beg
1156 else if (glb_bounds(3)%end < location(3))
then
1157 projected_location(3) = glb_bounds(3)%end - 1.0e-10_wp
1160 owns_collision = owns_collision .and. z_cb(-1) <= projected_location(3) &
1161 & .and. projected_location(3) < z_cb(p)
1163# 410 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1172 real(wp),
dimension(3),
intent(in) :: location
1173 logical :: owns_collision, periodic_owner
1174 real(wp) :: temp_neighbor_domain
1177 owns_collision = .true.
1180 if (num_procs > 2)
then
1182 owns_collision = .true.
1183# 430 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1184 if (num_dims >= 1)
then
1185 if (ib_bc_x%beg == bc_periodic .and. neighbor_domain_x%beg >= neighbor_domain_x%end)
then
1187 temp_neighbor_domain = neighbor_domain_x%end + (glb_bounds(1)%end - glb_bounds(1)%beg)
1188 periodic_owner = neighbor_domain_x%beg <= location(1) .and. location(1) < temp_neighbor_domain
1190 temp_neighbor_domain = neighbor_domain_x%beg - (glb_bounds(1)%end - glb_bounds(1)%beg)
1191 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(1) .and. location(1) &
1192 & < neighbor_domain_x%end)
1194 owns_collision = owns_collision .and. periodic_owner
1196 owns_collision = owns_collision .and. neighbor_domain_x%beg <= location(1) .and. location(1) &
1197 & < neighbor_domain_x%end
1200# 430 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1201 if (num_dims >= 2)
then
1202 if (ib_bc_y%beg == bc_periodic .and. neighbor_domain_y%beg >= neighbor_domain_y%end)
then
1204 temp_neighbor_domain = neighbor_domain_y%end + (glb_bounds(2)%end - glb_bounds(2)%beg)
1205 periodic_owner = neighbor_domain_y%beg <= location(2) .and. location(2) < temp_neighbor_domain
1207 temp_neighbor_domain = neighbor_domain_y%beg - (glb_bounds(2)%end - glb_bounds(2)%beg)
1208 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(2) .and. location(2) &
1209 & < neighbor_domain_y%end)
1211 owns_collision = owns_collision .and. periodic_owner
1213 owns_collision = owns_collision .and. neighbor_domain_y%beg <= location(2) .and. location(2) &
1214 & < neighbor_domain_y%end
1217# 430 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1218 if (num_dims >= 3)
then
1219 if (ib_bc_z%beg == bc_periodic .and. neighbor_domain_z%beg >= neighbor_domain_z%end)
then
1221 temp_neighbor_domain = neighbor_domain_z%end + (glb_bounds(3)%end - glb_bounds(3)%beg)
1222 periodic_owner = neighbor_domain_z%beg <= location(3) .and. location(3) < temp_neighbor_domain
1224 temp_neighbor_domain = neighbor_domain_z%beg - (glb_bounds(3)%end - glb_bounds(3)%beg)
1225 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(3) .and. location(3) &
1226 & < neighbor_domain_z%end)
1228 owns_collision = owns_collision .and. periodic_owner
1230 owns_collision = owns_collision .and. neighbor_domain_z%beg <= location(3) .and. location(3) &
1231 & < neighbor_domain_z%end
1234# 447 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"