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, tangental_vector, normal_force, tangental_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"
546# 96 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
547#elif defined(MFC_OpenMP)
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# 96 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
562# 100 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
563 do i = 1, num_considered_collisions
566 call s_decode_patch_periodicity(encoded_pid1, pid1, xp1, yp1, zp1)
567 call s_decode_patch_periodicity(encoded_pid2, pid2, xp2, yp2, zp2)
572 if (pid1 <= 0 .or. pid2 <= 0) cycle
574 centroid_1(1) = patch_ib(pid1)%x_centroid + real(xp1, wp)*(x_domain%end - x_domain%beg)
575 centroid_1(2) = patch_ib(pid1)%y_centroid + real(yp1, wp)*(y_domain%end - y_domain%beg)
576 centroid_1(3) = 0._wp
577 centroid_2(1) = patch_ib(pid2)%x_centroid + real(xp2, wp)*(x_domain%end - x_domain%beg)
578 centroid_2(2) = patch_ib(pid2)%y_centroid + real(yp2, wp)*(y_domain%end - y_domain%beg)
579 centroid_2(3) = 0._wp
580 if (num_dims == 3)
then
581 centroid_1(3) = patch_ib(pid1)%z_centroid + real(zp1, wp)*(z_domain%end - z_domain%beg)
582 centroid_2(3) = patch_ib(pid2)%z_centroid + real(zp2, wp)*(z_domain%end - z_domain%beg)
585 normal_vector = centroid_2 - centroid_1
586 overlap_distance = patch_ib(pid1)%radius + patch_ib(pid2)%radius - norm2(normal_vector)
587 if (overlap_distance > 0._wp)
then
588 normal_vector = normal_vector/norm2(normal_vector)
591 effective_mass = 1.0_wp/((1.0_wp/patch_ib(pid1)%mass) + (1._wp/(patch_ib(pid2)%mass)))
596 radial_vector = normal_vector*(patch_ib(pid1)%radius - 0.5_wp*overlap_distance)
597 call s_cross_product(patch_ib(pid1)%angular_vel, radial_vector, rotation_velocity)
598 vel1 = patch_ib(pid1)%vel + rotation_velocity
599 radial_vector = normal_vector*(-1.0_wp)*(patch_ib(pid2)%radius - 0.5_wp*overlap_distance)
600 call s_cross_product(patch_ib(pid2)%angular_vel, radial_vector, rotation_velocity)
601 vel2 = patch_ib(pid2)%vel + rotation_velocity
603 normal_velocity = dot_product(vel1 - vel2, normal_vector)*normal_vector
604 tangental_vector = (vel1 - vel2) - normal_velocity
605 if (.not. f_approx_equal(norm2(tangental_vector), &
606 & 0._wp)) tangental_vector = tangental_vector/norm2(tangental_vector)
609 normal_force = -k*overlap_distance*normal_vector - eta*normal_velocity
610 tangental_force = -ib_coefficient_of_friction*norm2(normal_force)*tangental_vector
611 call s_cross_product(normal_vector*patch_ib(pid1)%radius, tangental_force, torque)
616# 152 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
617#if defined(MFC_OpenACC)
618# 152 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
620# 152 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
621#elif defined(MFC_OpenMP)
622# 152 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
624# 152 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
626 forces(pid1, l) = forces(pid1, l) + (normal_force(l) + tangental_force(l))
628# 154 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
629#if defined(MFC_OpenACC)
630# 154 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
632# 154 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
633#elif defined(MFC_OpenMP)
634# 154 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
636# 154 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
638 torques(pid1, l) = torques(pid1, l) + torque(l)
642# 158 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
643#if defined(MFC_OpenACC)
644# 158 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
646# 158 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
647#elif defined(MFC_OpenMP)
648# 158 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
650# 158 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
652 forces(pid2, l) = forces(pid2, l) - (normal_force(l) + tangental_force(l))
654# 160 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
655#if defined(MFC_OpenACC)
656# 160 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
658# 160 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
659#elif defined(MFC_OpenMP)
660# 160 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
662# 160 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
664 torques(pid2, l) = torques(pid2, l) + torque(l)*patch_ib(pid2)%radius/patch_ib(pid1)%radius
670# 166 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
671#if defined(MFC_OpenACC)
672# 166 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
674# 166 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
675#elif defined(MFC_OpenMP)
676# 166 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
678# 166 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
680# 166 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
688 real(wp),
dimension(num_ibs, 3),
intent(inout) :: forces, torques
689 integer :: patch_id, i, l
690 real(wp),
dimension(3) :: normal_force, tangental_force, normal_vector, normal_velocity, tangental_vector, &
691 & collision_location, torque, radial_vector, rotation_velocity, velocity
695# 179 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
697# 179 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
698#if defined(MFC_OpenACC)
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"
705# 179 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
706#elif defined(MFC_OpenMP)
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# 179 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
721# 182 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
722 do patch_id = 1, num_ibs
729 normal_vector = [-1._wp, 0._wp, 0._wp]
731 normal_vector = [1._wp, 0._wp, 0._wp]
733 normal_vector = [0._wp, -1._wp, 0._wp]
735 normal_vector = [0._wp, 1._wp, 0._wp]
737 normal_vector = [0._wp, 0._wp, -1._wp]
739 normal_vector = [0._wp, 0._wp, 1._wp]
743 collision_location = [patch_ib(patch_id)%x_centroid, patch_ib(patch_id)%y_centroid, 0._wp]
744 if (num_dims == 3) collision_location(3) = patch_ib(patch_id)%z_centroid
752 call s_cross_product(patch_ib(patch_id)%angular_vel, radial_vector, rotation_velocity)
753 velocity = patch_ib(patch_id)%vel + rotation_velocity
756 normal_velocity = dot_product(velocity, normal_vector)*normal_vector
757 tangental_vector = velocity - normal_velocity
758 if (.not. f_approx_equal(norm2(tangental_vector), &
759 & 0._wp)) tangental_vector = tangental_vector/norm2(tangental_vector)
761 tangental_force = -ib_coefficient_of_friction*norm2(normal_force)*tangental_vector
762 call s_cross_product(normal_vector*patch_ib(patch_id)%radius, tangental_force, torque)
766# 225 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
767#if defined(MFC_OpenACC)
768# 225 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
770# 225 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
771#elif defined(MFC_OpenMP)
772# 225 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
774# 225 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
776 forces(patch_id, l) = forces(patch_id, l) + (normal_force(l) + tangental_force(l))
778# 227 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
779#if defined(MFC_OpenACC)
780# 227 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
782# 227 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
783#elif defined(MFC_OpenMP)
784# 227 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
786# 227 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
788 torques(patch_id, l) = torques(patch_id, l) + torque(l)
794# 233 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
795#if defined(MFC_OpenACC)
796# 233 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
798# 233 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
799#elif defined(MFC_OpenMP)
800# 233 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
802# 233 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
804# 233 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
813 type(ghost_point),
dimension(num_gps),
intent(in) :: gps
814 type(integer_field),
intent(in) :: ib_markers
815 integer,
intent(in) :: num_gps
816 integer,
intent(out) :: num_considered_collisions
817 integer :: i, j, k, z_bound, ii, jj, kk
818 integer,
dimension(2) :: decoded_pairs
819 integer :: gp_idx, gp_patch_id, neighbor_patch_id
820 integer :: pair_idx, out_idx
821 logical :: already_found
824 integer,
dimension(num_gps, 2) :: raw_pairs
825 integer :: num_raw, local_num_raw
828 z_bound = 0;
if (num_dims == 3) z_bound = 1
831# 258 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
833# 258 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
834#if defined(MFC_OpenACC)
835# 258 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
837# 258 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
838#elif defined(MFC_OpenMP)
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# 258 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
851# 260 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
852 do gp_idx = 1, num_gps
853 i = gps(gp_idx)%loc(1)
854 j = gps(gp_idx)%loc(2)
855 k = 0;
if (num_dims == 3) k = gps(gp_idx)%loc(3)
856 gp_patch_id = ib_markers%sf(i, j, k)
859 neighbor_search:
do ii = i - 1, i + 1
861 do kk = k - z_bound, k + z_bound
862 neighbor_patch_id = ib_markers%sf(ii, jj, kk)
865 if (gp_patch_id < neighbor_patch_id)
then
867# 274 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
868#if defined(MFC_OpenACC)
869# 274 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
871# 274 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
872#elif defined(MFC_OpenMP)
873# 274 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
875# 274 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
877 num_raw = num_raw + 1
878 local_num_raw = num_raw
879#if defined(MFC_OpenACC)
880# 277 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
882# 277 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
883#elif defined(MFC_OpenMP)
884# 277 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
886# 277 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
890 raw_pairs(local_num_raw, 1) = gp_patch_id
891 raw_pairs(local_num_raw, 2) = neighbor_patch_id
896 end do neighbor_search
899# 288 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
900#if defined(MFC_OpenACC)
901# 288 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
903# 288 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
904#elif defined(MFC_OpenMP)
905# 288 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
907# 288 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
909# 288 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
913 num_considered_collisions = 0
916 do pair_idx = 1, num_raw
917 already_found = .false.
920 call s_decode_patch_periodicity(raw_pairs(pair_idx, 1), decoded_pairs(1), ii, jj, kk)
921 call s_decode_patch_periodicity(raw_pairs(pair_idx, 2), decoded_pairs(2), ii, jj, kk)
926 if (decoded_pairs(1) == decoded_pairs(2)) cycle
929 if (decoded_pairs(2) < decoded_pairs(1))
then
930 decoded_pairs(1) = decoded_pairs(1) + decoded_pairs(2)
931 decoded_pairs(2) = decoded_pairs(1) - decoded_pairs(2)
932 decoded_pairs(1) = decoded_pairs(1) - decoded_pairs(2)
933 raw_pairs(pair_idx, 1) = raw_pairs(pair_idx, 1) + raw_pairs(pair_idx, 2)
934 raw_pairs(pair_idx, 2) = raw_pairs(pair_idx, 1) - raw_pairs(pair_idx, 2)
935 raw_pairs(pair_idx, 1) = raw_pairs(pair_idx, 1) - raw_pairs(pair_idx, 2)
939 do out_idx = 1, num_considered_collisions
941 already_found = .true.
947 if (.not. already_found)
then
948 num_considered_collisions = num_considered_collisions + 1
956# 333 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
957#if defined(MFC_OpenACC)
958# 333 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
960# 333 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
961#elif defined(MFC_OpenMP)
962# 333 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
964# 333 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
971 integer,
intent(out) :: num_considered_collisions
972 integer :: pid1, pid2, encoded_pid2, current_collisions
973 integer :: xp_lower, xp_upper, yp_lower, yp_upper, zp_lower, zp_upper, xp, yp, zp
974 real(wp),
dimension(3) :: centroid_1, centroid_2, distance_vec
976 num_considered_collisions = 0
978 call s_get_periodicities(xp_lower, xp_upper, yp_lower, yp_upper, zp_lower, zp_upper)
981# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
983# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
984#if defined(MFC_OpenACC)
985# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
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# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1005# 350 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1006 do pid1 = 1, num_ibs - 1
1007 centroid_1 = [patch_ib(pid1)%x_centroid, patch_ib(pid1)%y_centroid, 0._wp]
1008 if (num_dims == 3) centroid_1(3) = patch_ib(pid1)%z_centroid
1009 do pid2 = pid1 + 1, num_ibs
1010 periodic_search:
do xp = xp_lower, xp_upper
1011 do yp = yp_lower, yp_upper
1012 do zp = zp_lower, zp_upper
1013 centroid_2(1) = patch_ib(pid2)%x_centroid + real(xp, wp)*(x_domain%end - x_domain%beg)
1014 centroid_2(2) = patch_ib(pid2)%y_centroid + real(yp, wp)*(y_domain%end - y_domain%beg)
1015 if (num_dims == 3) centroid_2(3) = patch_ib(pid2)%z_centroid + real(zp, &
1016 & wp)*(z_domain%end - z_domain%beg)
1017 distance_vec = centroid_2 - centroid_1
1019 if (norm2(distance_vec) < patch_ib(pid1)%radius + patch_ib(pid2)%radius)
then
1021# 364 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1022#if defined(MFC_OpenACC)
1023# 364 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1025# 364 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1026#elif defined(MFC_OpenMP)
1027# 364 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1029# 364 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1031 num_considered_collisions = num_considered_collisions + 1
1032 current_collisions = num_considered_collisions
1033#if defined(MFC_OpenACC)
1034# 367 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1036# 367 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1037#elif defined(MFC_OpenMP)
1038# 367 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1040# 367 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1043 call s_encode_patch_periodicity(patch_ib(pid2)%gbl_patch_id, xp, yp, zp, encoded_pid2)
1049 exit periodic_search
1053 end do periodic_search
1057# 382 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1058#if defined(MFC_OpenACC)
1059# 382 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1061# 382 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1062#elif defined(MFC_OpenMP)
1063# 382 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1065# 382 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1067# 382 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1075 integer :: gp_idx, i, j, k, patch_id
1076 real(wp) :: edge_location, overlap_distance
1081# 394 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1083# 394 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1084#if defined(MFC_OpenACC)
1085# 394 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1087# 394 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1088#elif defined(MFC_OpenMP)
1089# 394 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1091# 394 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1093# 394 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1095# 394 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1097# 394 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1099# 394 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1101 do patch_id = 1, num_ibs
1102# 397 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1104 if (ib_bc_x%beg == bc_slip_wall .or. ib_bc_x%beg == bc_no_slip_wall)
then
1106 edge_location = patch_ib(patch_id)%x_centroid - patch_ib(patch_id)%radius
1108 if (edge_location < x_domain%beg)
then
1109 overlap_distance = x_domain%beg - edge_location
1111 overlap_distance = 0._wp
1116 if (ib_bc_x%end == bc_slip_wall .or. ib_bc_x%end == bc_no_slip_wall)
then
1117 edge_location = patch_ib(patch_id)%x_centroid + patch_ib(patch_id)%radius
1118 if (edge_location > x_domain%end)
then
1119 overlap_distance = edge_location - x_domain%end
1121 overlap_distance = 0._wp
1125# 397 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1127 if (ib_bc_y%beg == bc_slip_wall .or. ib_bc_y%beg == bc_no_slip_wall)
then
1129 edge_location = patch_ib(patch_id)%y_centroid - patch_ib(patch_id)%radius
1131 if (edge_location < y_domain%beg)
then
1132 overlap_distance = y_domain%beg - edge_location
1134 overlap_distance = 0._wp
1139 if (ib_bc_y%end == bc_slip_wall .or. ib_bc_y%end == bc_no_slip_wall)
then
1140 edge_location = patch_ib(patch_id)%y_centroid + patch_ib(patch_id)%radius
1141 if (edge_location > y_domain%end)
then
1142 overlap_distance = edge_location - y_domain%end
1144 overlap_distance = 0._wp
1148# 397 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1150 if (ib_bc_z%beg == bc_slip_wall .or. ib_bc_z%beg == bc_no_slip_wall)
then
1152 edge_location = patch_ib(patch_id)%z_centroid - patch_ib(patch_id)%radius
1154 if (edge_location < z_domain%beg)
then
1155 overlap_distance = z_domain%beg - edge_location
1157 overlap_distance = 0._wp
1162 if (ib_bc_z%end == bc_slip_wall .or. ib_bc_z%end == bc_no_slip_wall)
then
1163 edge_location = patch_ib(patch_id)%z_centroid + patch_ib(patch_id)%radius
1164 if (edge_location > z_domain%end)
then
1165 overlap_distance = edge_location - z_domain%end
1167 overlap_distance = 0._wp
1171# 420 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1174# 421 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1175#if defined(MFC_OpenACC)
1176# 421 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1178# 421 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1179#elif defined(MFC_OpenMP)
1180# 421 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1182# 421 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1184# 421 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1193# 428 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1195# 428 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1197# 428 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1199# 428 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1201# 428 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1203# 428 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1205# 428 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1208 real(wp),
dimension(3),
intent(in) :: location
1209 logical :: owns_collision
1210 real(wp),
dimension(3) :: projected_location
1212 owns_collision = .true.
1215 if (num_procs > 1)
then
1216 projected_location(:) = location(:)
1219# 442 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1220 if (num_dims >= 1)
then
1221 if (ib_bc_x%beg /= bc_periodic)
then
1223 if (location(1) < x_domain%beg)
then
1224 projected_location(1) = x_domain%beg
1225 else if (x_domain%end < location(1))
then
1226 projected_location(1) = x_domain%end - 1.0e-10_wp
1229 owns_collision = owns_collision .and. x_cb(-1) <= projected_location(1) &
1230 & .and. projected_location(1) < x_cb(m)
1232# 442 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1233 if (num_dims >= 2)
then
1234 if (ib_bc_y%beg /= bc_periodic)
then
1236 if (location(2) < y_domain%beg)
then
1237 projected_location(2) = y_domain%beg
1238 else if (y_domain%end < location(2))
then
1239 projected_location(2) = y_domain%end - 1.0e-10_wp
1242 owns_collision = owns_collision .and. y_cb(-1) <= projected_location(2) &
1243 & .and. projected_location(2) < y_cb(n)
1245# 442 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1246 if (num_dims >= 3)
then
1247 if (ib_bc_z%beg /= bc_periodic)
then
1249 if (location(3) < z_domain%beg)
then
1250 projected_location(3) = z_domain%beg
1251 else if (z_domain%end < location(3))
then
1252 projected_location(3) = z_domain%end - 1.0e-10_wp
1255 owns_collision = owns_collision .and. z_cb(-1) <= projected_location(3) &
1256 & .and. projected_location(3) < z_cb(p)
1258# 455 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1267 real(wp),
dimension(3),
intent(in) :: location
1268 logical :: owns_collision, periodic_owner
1269 real(wp) :: temp_neighbor_domain
1272 owns_collision = .true.
1275 if (num_procs > 2)
then
1277 owns_collision = .true.
1278# 475 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1279 if (num_dims >= 1)
then
1280 if (ib_bc_x%beg == bc_periodic .and. neighbor_domain_x%beg >= neighbor_domain_x%end)
then
1282 temp_neighbor_domain = neighbor_domain_x%end + (x_domain%end - x_domain%beg)
1283 periodic_owner = neighbor_domain_x%beg <= location(1) .and. location(1) < temp_neighbor_domain
1285 temp_neighbor_domain = neighbor_domain_x%beg - (x_domain%end - x_domain%beg)
1286 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(1) .and. location(1) &
1287 & < neighbor_domain_x%end)
1289 owns_collision = owns_collision .and. periodic_owner
1291 owns_collision = owns_collision .and. neighbor_domain_x%beg <= location(1) .and. location(1) &
1292 & < neighbor_domain_x%end
1295# 475 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1296 if (num_dims >= 2)
then
1297 if (ib_bc_y%beg == bc_periodic .and. neighbor_domain_y%beg >= neighbor_domain_y%end)
then
1299 temp_neighbor_domain = neighbor_domain_y%end + (y_domain%end - y_domain%beg)
1300 periodic_owner = neighbor_domain_y%beg <= location(2) .and. location(2) < temp_neighbor_domain
1302 temp_neighbor_domain = neighbor_domain_y%beg - (y_domain%end - y_domain%beg)
1303 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(2) .and. location(2) &
1304 & < neighbor_domain_y%end)
1306 owns_collision = owns_collision .and. periodic_owner
1308 owns_collision = owns_collision .and. neighbor_domain_y%beg <= location(2) .and. location(2) &
1309 & < neighbor_domain_y%end
1312# 475 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1313 if (num_dims >= 3)
then
1314 if (ib_bc_z%beg == bc_periodic .and. neighbor_domain_z%beg >= neighbor_domain_z%end)
then
1316 temp_neighbor_domain = neighbor_domain_z%end + (z_domain%end - z_domain%beg)
1317 periodic_owner = neighbor_domain_z%beg <= location(3) .and. location(3) < temp_neighbor_domain
1319 temp_neighbor_domain = neighbor_domain_z%beg - (z_domain%end - z_domain%beg)
1320 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(3) .and. location(3) &
1321 & < neighbor_domain_z%end)
1323 owns_collision = owns_collision .and. periodic_owner
1325 owns_collision = owns_collision .and. neighbor_domain_z%beg <= location(3) .and. location(3) &
1326 & < neighbor_domain_z%end
1329# 492 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"