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 = 1
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 - 1, i + 1
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
954# 333 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
955#if defined(MFC_OpenACC)
956# 333 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
958# 333 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
959#elif defined(MFC_OpenMP)
960# 333 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
962# 333 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
969 integer,
intent(out) :: num_considered_collisions
970 integer :: pid1, pid2, encoded_pid2, current_collisions
971 integer :: xp_lower, xp_upper, yp_lower, yp_upper, zp_lower, zp_upper, xp, yp, zp
972 real(wp),
dimension(3) :: centroid_1, centroid_2, distance_vec
974 num_considered_collisions = 0
976 call s_get_periodicities(xp_lower, xp_upper, yp_lower, yp_upper, zp_lower, zp_upper)
979# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
981# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
982#if defined(MFC_OpenACC)
983# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
985# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
987# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
988#elif defined(MFC_OpenMP)
989# 348 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
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# 350 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1004 do pid1 = 1, num_ibs - 1
1005 centroid_1 = [patch_ib(pid1)%x_centroid, patch_ib(pid1)%y_centroid, 0._wp]
1006 if (num_dims == 3) centroid_1(3) = patch_ib(pid1)%z_centroid
1007 do pid2 = pid1 + 1, num_ibs
1008 periodic_search:
do xp = xp_lower, xp_upper
1009 do yp = yp_lower, yp_upper
1010 do zp = zp_lower, zp_upper
1011 centroid_2(1) = patch_ib(pid2)%x_centroid + real(xp, wp)*(glb_bounds(1)%end - glb_bounds(1)%beg)
1012 centroid_2(2) = patch_ib(pid2)%y_centroid + real(yp, wp)*(glb_bounds(2)%end - glb_bounds(2)%beg)
1013 if (num_dims == 3) centroid_2(3) = patch_ib(pid2)%z_centroid + real(zp, &
1014 & wp)*(glb_bounds(3)%end - glb_bounds(3)%beg)
1015 distance_vec = centroid_2 - centroid_1
1017 if (norm2(distance_vec) < patch_ib(pid1)%radius + patch_ib(pid2)%radius)
then
1019# 364 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1020#if defined(MFC_OpenACC)
1021# 364 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1023# 364 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1024#elif defined(MFC_OpenMP)
1025# 364 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1027# 364 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1029 num_considered_collisions = num_considered_collisions + 1
1030 current_collisions = num_considered_collisions
1031#if defined(MFC_OpenACC)
1032# 367 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1034# 367 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1035#elif defined(MFC_OpenMP)
1036# 367 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1038# 367 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1041 call s_encode_patch_periodicity(patch_ib(pid2)%gbl_patch_id, xp, yp, zp, encoded_pid2)
1047 exit periodic_search
1051 end do periodic_search
1055# 382 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1056#if defined(MFC_OpenACC)
1057# 382 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1059# 382 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1060#elif defined(MFC_OpenMP)
1061# 382 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1063# 382 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1065# 382 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1073 integer :: gp_idx, i, j, k, patch_id
1074 real(wp) :: edge_location, overlap_distance
1079# 394 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1081# 394 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1082#if defined(MFC_OpenACC)
1083# 394 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1085# 394 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1086#elif defined(MFC_OpenMP)
1087# 394 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
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 do patch_id = 1, num_ibs
1100# 397 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1102 if (ib_bc_x%beg == bc_slip_wall .or. ib_bc_x%beg == bc_no_slip_wall)
then
1104 edge_location = patch_ib(patch_id)%x_centroid - patch_ib(patch_id)%radius
1106 if (edge_location < glb_bounds(1)%beg)
then
1108 overlap_distance = glb_bounds(1)%beg - edge_location
1110 overlap_distance = 0._wp
1115 if (ib_bc_x%end == bc_slip_wall .or. ib_bc_x%end == bc_no_slip_wall)
then
1116 edge_location = patch_ib(patch_id)%x_centroid + patch_ib(patch_id)%radius
1117 if (edge_location > glb_bounds(1)%end)
then
1118 overlap_distance = edge_location - glb_bounds(1)%end
1120 overlap_distance = 0._wp
1124# 397 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1126 if (ib_bc_y%beg == bc_slip_wall .or. ib_bc_y%beg == bc_no_slip_wall)
then
1128 edge_location = patch_ib(patch_id)%y_centroid - patch_ib(patch_id)%radius
1130 if (edge_location < glb_bounds(2)%beg)
then
1132 overlap_distance = glb_bounds(2)%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 > glb_bounds(2)%end)
then
1142 overlap_distance = edge_location - glb_bounds(2)%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 < glb_bounds(3)%beg)
then
1156 overlap_distance = glb_bounds(3)%beg - edge_location
1158 overlap_distance = 0._wp
1163 if (ib_bc_z%end == bc_slip_wall .or. ib_bc_z%end == bc_no_slip_wall)
then
1164 edge_location = patch_ib(patch_id)%z_centroid + patch_ib(patch_id)%radius
1165 if (edge_location > glb_bounds(3)%end)
then
1166 overlap_distance = edge_location - glb_bounds(3)%end
1168 overlap_distance = 0._wp
1172# 421 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1175# 422 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1176#if defined(MFC_OpenACC)
1177# 422 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1179# 422 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1180#elif defined(MFC_OpenMP)
1181# 422 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1183# 422 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1185# 422 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1194# 429 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1196# 429 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1198# 429 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1200# 429 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1202# 429 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1204# 429 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1206# 429 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1209 real(wp),
dimension(3),
intent(in) :: location
1210 logical :: owns_collision
1211 real(wp),
dimension(3) :: projected_location
1213 owns_collision = .true.
1216 if (num_procs > 1)
then
1217 projected_location(:) = location(:)
1220# 443 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1221 if (num_dims >= 1)
then
1222 if (ib_bc_x%beg /= bc_periodic)
then
1224 if (location(1) < glb_bounds(1)%beg)
then
1225 projected_location(1) = glb_bounds(1)%beg
1226 else if (glb_bounds(1)%end < location(1))
then
1227 projected_location(1) = glb_bounds(1)%end - 1.0e-10_wp
1230 owns_collision = owns_collision .and. x_cb(-1) <= projected_location(1) &
1231 & .and. projected_location(1) < x_cb(m)
1233# 443 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1234 if (num_dims >= 2)
then
1235 if (ib_bc_y%beg /= bc_periodic)
then
1237 if (location(2) < glb_bounds(2)%beg)
then
1238 projected_location(2) = glb_bounds(2)%beg
1239 else if (glb_bounds(2)%end < location(2))
then
1240 projected_location(2) = glb_bounds(2)%end - 1.0e-10_wp
1243 owns_collision = owns_collision .and. y_cb(-1) <= projected_location(2) &
1244 & .and. projected_location(2) < y_cb(n)
1246# 443 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1247 if (num_dims >= 3)
then
1248 if (ib_bc_z%beg /= bc_periodic)
then
1250 if (location(3) < glb_bounds(3)%beg)
then
1251 projected_location(3) = glb_bounds(3)%beg
1252 else if (glb_bounds(3)%end < location(3))
then
1253 projected_location(3) = glb_bounds(3)%end - 1.0e-10_wp
1256 owns_collision = owns_collision .and. z_cb(-1) <= projected_location(3) &
1257 & .and. projected_location(3) < z_cb(p)
1259# 456 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1268 real(wp),
dimension(3),
intent(in) :: location
1269 logical :: owns_collision, periodic_owner
1270 real(wp) :: temp_neighbor_domain
1273 owns_collision = .true.
1276 if (num_procs > 2)
then
1278 owns_collision = .true.
1279# 476 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1280 if (num_dims >= 1)
then
1281 if (ib_bc_x%beg == bc_periodic .and. neighbor_domain_x%beg >= neighbor_domain_x%end)
then
1283 temp_neighbor_domain = neighbor_domain_x%end + (glb_bounds(1)%end - glb_bounds(1)%beg)
1284 periodic_owner = neighbor_domain_x%beg <= location(1) .and. location(1) < temp_neighbor_domain
1286 temp_neighbor_domain = neighbor_domain_x%beg - (glb_bounds(1)%end - glb_bounds(1)%beg)
1287 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(1) .and. location(1) &
1288 & < neighbor_domain_x%end)
1290 owns_collision = owns_collision .and. periodic_owner
1292 owns_collision = owns_collision .and. neighbor_domain_x%beg <= location(1) .and. location(1) &
1293 & < neighbor_domain_x%end
1296# 476 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1297 if (num_dims >= 2)
then
1298 if (ib_bc_y%beg == bc_periodic .and. neighbor_domain_y%beg >= neighbor_domain_y%end)
then
1300 temp_neighbor_domain = neighbor_domain_y%end + (glb_bounds(2)%end - glb_bounds(2)%beg)
1301 periodic_owner = neighbor_domain_y%beg <= location(2) .and. location(2) < temp_neighbor_domain
1303 temp_neighbor_domain = neighbor_domain_y%beg - (glb_bounds(2)%end - glb_bounds(2)%beg)
1304 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(2) .and. location(2) &
1305 & < neighbor_domain_y%end)
1307 owns_collision = owns_collision .and. periodic_owner
1309 owns_collision = owns_collision .and. neighbor_domain_y%beg <= location(2) .and. location(2) &
1310 & < neighbor_domain_y%end
1313# 476 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1314 if (num_dims >= 3)
then
1315 if (ib_bc_z%beg == bc_periodic .and. neighbor_domain_z%beg >= neighbor_domain_z%end)
then
1317 temp_neighbor_domain = neighbor_domain_z%end + (glb_bounds(3)%end - glb_bounds(3)%beg)
1318 periodic_owner = neighbor_domain_z%beg <= location(3) .and. location(3) < temp_neighbor_domain
1320 temp_neighbor_domain = neighbor_domain_z%beg - (glb_bounds(3)%end - glb_bounds(3)%beg)
1321 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(3) .and. location(3) &
1322 & < neighbor_domain_z%end)
1324 owns_collision = owns_collision .and. periodic_owner
1326 owns_collision = owns_collision .and. neighbor_domain_z%beg <= location(3) .and. location(3) &
1327 & < neighbor_domain_z%end
1330# 493 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"