502 integer,
intent(in) :: num_considered_collisions
503 real(wp),
dimension(num_ibs, 3),
intent(inout) :: forces, torques
504 integer :: i, encoded_pid1, encoded_pid2, xp1, xp2, yp1, yp2, zp1, zp2, pid1, pid2, l
505 real(wp) :: overlap_distance
506 real(wp),
dimension(3) :: normal_vector, centroid_1, centroid_2
507 real(wp),
dimension(3) :: normal_velocity, tangental_vector, normal_force, tangental_force, torque, radial_vector, &
508 & rotation_velocity, vel1, vel2
509 real(wp) :: k, eta, effective_mass
511 if (num_considered_collisions == 0)
return
517# 93 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
519# 93 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
520#if defined(MFC_OpenACC)
521# 93 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
523# 93 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
524#elif defined(MFC_OpenMP)
525# 93 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
527# 93 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
529# 93 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
531# 93 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
533# 93 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
535# 97 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
536 do i = 1, num_considered_collisions
539 call s_decode_patch_periodicity(encoded_pid1, pid1, xp1, yp1, zp1)
540 call s_decode_patch_periodicity(encoded_pid2, pid2, xp2, yp2, zp2)
542 if (pid1 <= 0 .or. pid2 <= 0) cycle
544 centroid_1(1) = patch_ib(pid1)%x_centroid + real(xp1, wp)*(x_domain%end - x_domain%beg)
545 centroid_1(2) = patch_ib(pid1)%y_centroid + real(yp1, wp)*(y_domain%end - y_domain%beg)
546 centroid_1(3) = 0._wp
547 centroid_2(1) = patch_ib(pid2)%x_centroid + real(xp2, wp)*(x_domain%end - x_domain%beg)
548 centroid_2(2) = patch_ib(pid2)%y_centroid + real(yp2, wp)*(y_domain%end - y_domain%beg)
549 centroid_2(3) = 0._wp
550 if (num_dims == 3)
then
551 centroid_1(3) = patch_ib(pid1)%z_centroid + real(zp1, wp)*(z_domain%end - z_domain%beg)
552 centroid_2(3) = patch_ib(pid2)%z_centroid + real(zp2, wp)*(z_domain%end - z_domain%beg)
555 normal_vector = centroid_2 - centroid_1
556 overlap_distance = patch_ib(pid1)%radius + patch_ib(pid2)%radius - norm2(normal_vector)
557 if (overlap_distance > 0._wp)
then
558 normal_vector = normal_vector/norm2(normal_vector)
561 effective_mass = 1.0_wp/((1.0_wp/patch_ib(pid1)%mass) + (1._wp/(patch_ib(pid2)%mass)))
566 radial_vector = normal_vector*(patch_ib(pid1)%radius - 0.5_wp*overlap_distance)
567 call s_cross_product(patch_ib(pid1)%angular_vel, radial_vector, rotation_velocity)
568 vel1 = patch_ib(pid1)%vel + rotation_velocity
569 radial_vector = normal_vector*(-1.0_wp)*(patch_ib(pid2)%radius - 0.5_wp*overlap_distance)
570 call s_cross_product(patch_ib(pid2)%angular_vel, radial_vector, rotation_velocity)
571 vel2 = patch_ib(pid2)%vel + rotation_velocity
573 normal_velocity = dot_product(vel1 - vel2, normal_vector)*normal_vector
574 tangental_vector = (vel1 - vel2) - normal_velocity
575 if (.not. f_approx_equal(norm2(tangental_vector), &
576 & 0._wp)) tangental_vector = tangental_vector/norm2(tangental_vector)
579 normal_force = -k*overlap_distance*normal_vector - eta*normal_velocity
580 tangental_force = -ib_coefficient_of_friction*norm2(normal_force)*tangental_vector
581 call s_cross_product(normal_vector*patch_ib(pid1)%radius, tangental_force, torque)
586# 146 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
587#if defined(MFC_OpenACC)
588# 146 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
590# 146 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
591#elif defined(MFC_OpenMP)
592# 146 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
594# 146 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
596 forces(pid1, l) = forces(pid1, l) + (normal_force(l) + tangental_force(l))
598# 148 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
599#if defined(MFC_OpenACC)
600# 148 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
602# 148 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
603#elif defined(MFC_OpenMP)
604# 148 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
606# 148 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
608 torques(pid1, l) = torques(pid1, l) + torque(l)
612# 152 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
613#if defined(MFC_OpenACC)
614# 152 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
616# 152 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
617#elif defined(MFC_OpenMP)
618# 152 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
620# 152 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
622 forces(pid2, l) = forces(pid2, l) - (normal_force(l) + tangental_force(l))
624# 154 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
625#if defined(MFC_OpenACC)
626# 154 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
628# 154 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
629#elif defined(MFC_OpenMP)
630# 154 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
632# 154 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
634 torques(pid2, l) = torques(pid2, l) + torque(l)*patch_ib(pid2)%radius/patch_ib(pid1)%radius
640# 160 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
641#if defined(MFC_OpenACC)
642# 160 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
644# 160 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
645#elif defined(MFC_OpenMP)
646# 160 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
648# 160 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
650# 160 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
658 real(wp),
dimension(num_ibs, 3),
intent(inout) :: forces, torques
659 integer :: patch_id, i, l
660 real(wp),
dimension(3) :: normal_force, tangental_force, normal_vector, normal_velocity, tangental_vector, &
661 & collision_location, torque, radial_vector, rotation_velocity, velocity
665# 173 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
667# 173 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
668#if defined(MFC_OpenACC)
669# 173 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
671# 173 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
672#elif defined(MFC_OpenMP)
673# 173 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
675# 173 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
677# 173 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
679# 173 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
681# 173 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
683# 176 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
684 do patch_id = 1, num_ibs
691 normal_vector = [-1._wp, 0._wp, 0._wp]
693 normal_vector = [1._wp, 0._wp, 0._wp]
695 normal_vector = [0._wp, -1._wp, 0._wp]
697 normal_vector = [0._wp, 1._wp, 0._wp]
699 normal_vector = [0._wp, 0._wp, -1._wp]
701 normal_vector = [0._wp, 0._wp, 1._wp]
705 collision_location = [patch_ib(patch_id)%x_centroid, patch_ib(patch_id)%y_centroid, 0._wp]
706 if (num_dims == 3) collision_location(3) = patch_ib(patch_id)%z_centroid
714 call s_cross_product(patch_ib(patch_id)%angular_vel, radial_vector, rotation_velocity)
715 velocity = patch_ib(patch_id)%vel + rotation_velocity
718 normal_velocity = dot_product(velocity, normal_vector)*normal_vector
719 tangental_vector = velocity - normal_velocity
720 if (.not. f_approx_equal(norm2(tangental_vector), &
721 & 0._wp)) tangental_vector = tangental_vector/norm2(tangental_vector)
723 tangental_force = -ib_coefficient_of_friction*norm2(normal_force)*tangental_vector
724 call s_cross_product(normal_vector*patch_ib(patch_id)%radius, tangental_force, torque)
728# 219 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
729#if defined(MFC_OpenACC)
730# 219 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
732# 219 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
733#elif defined(MFC_OpenMP)
734# 219 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
736# 219 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
738 forces(patch_id, l) = forces(patch_id, l) + (normal_force(l) + tangental_force(l))
740# 221 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
741#if defined(MFC_OpenACC)
742# 221 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
744# 221 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
745#elif defined(MFC_OpenMP)
746# 221 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
748# 221 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
750 torques(patch_id, l) = torques(patch_id, l) + torque(l)
756# 227 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
757#if defined(MFC_OpenACC)
758# 227 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
760# 227 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
761#elif defined(MFC_OpenMP)
762# 227 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
764# 227 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
766# 227 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
775 type(ghost_point),
dimension(num_gps),
intent(in) :: gps
776 type(integer_field),
intent(in) :: ib_markers
777 integer,
intent(in) :: num_gps
778 integer,
intent(out) :: num_considered_collisions
779 integer :: i, j, k, z_bound, ii, jj, kk
780 integer,
dimension(2) :: decoded_pairs
781 integer :: gp_idx, gp_patch_id, neighbor_patch_id
782 integer :: pair_idx, out_idx
783 logical :: already_found
786 integer,
dimension(num_gps, 2) :: raw_pairs
787 integer :: num_raw, local_num_raw
790 z_bound = 0;
if (num_dims == 3) z_bound = 1
793# 252 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
795# 252 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
796#if defined(MFC_OpenACC)
797# 252 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
799# 252 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
800#elif defined(MFC_OpenMP)
801# 252 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
803# 252 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
805# 252 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
807# 252 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
809# 252 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
811# 254 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
812 do gp_idx = 1, num_gps
813 i = gps(gp_idx)%loc(1)
814 j = gps(gp_idx)%loc(2)
815 k = 0;
if (num_dims == 3) k = gps(gp_idx)%loc(3)
816 gp_patch_id = ib_markers%sf(i, j, k)
819 neighbor_search:
do ii = i - 1, i + 1
821 do kk = k - z_bound, k + z_bound
822 neighbor_patch_id = ib_markers%sf(ii, jj, kk)
825 if (gp_patch_id < neighbor_patch_id)
then
827# 268 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
828#if defined(MFC_OpenACC)
829# 268 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
831# 268 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
832#elif defined(MFC_OpenMP)
833# 268 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
835# 268 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
837 num_raw = num_raw + 1
838 local_num_raw = num_raw
839#if defined(MFC_OpenACC)
840# 271 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
842# 271 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
843#elif defined(MFC_OpenMP)
844# 271 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
846# 271 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
850 raw_pairs(local_num_raw, 1) = gp_patch_id
851 raw_pairs(local_num_raw, 2) = neighbor_patch_id
856 end do neighbor_search
859# 282 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
860#if defined(MFC_OpenACC)
861# 282 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
863# 282 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
864#elif defined(MFC_OpenMP)
865# 282 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
867# 282 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
869# 282 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
873 num_considered_collisions = 0
876 do pair_idx = 1, num_raw
877 already_found = .false.
880 call s_decode_patch_periodicity(raw_pairs(pair_idx, 1), decoded_pairs(1), ii, jj, kk)
881 call s_decode_patch_periodicity(raw_pairs(pair_idx, 2), decoded_pairs(2), ii, jj, kk)
884 if (decoded_pairs(1) == decoded_pairs(2)) cycle
887 if (decoded_pairs(2) < decoded_pairs(1))
then
888 decoded_pairs(1) = decoded_pairs(1) + decoded_pairs(2)
889 decoded_pairs(2) = decoded_pairs(1) - decoded_pairs(2)
890 decoded_pairs(1) = decoded_pairs(1) - decoded_pairs(2)
891 raw_pairs(pair_idx, 1) = raw_pairs(pair_idx, 1) + raw_pairs(pair_idx, 2)
892 raw_pairs(pair_idx, 2) = raw_pairs(pair_idx, 1) - raw_pairs(pair_idx, 2)
893 raw_pairs(pair_idx, 1) = raw_pairs(pair_idx, 1) - raw_pairs(pair_idx, 2)
897 do out_idx = 1, num_considered_collisions
899 already_found = .true.
905 if (.not. already_found)
then
906 num_considered_collisions = num_considered_collisions + 1
914# 325 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
915#if defined(MFC_OpenACC)
916# 325 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
918# 325 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
919#elif defined(MFC_OpenMP)
920# 325 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
922# 325 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
929 integer,
intent(out) :: num_considered_collisions
930 integer :: pid1, pid2, encoded_pid1, encoded_pid2, current_collisions
931 real(wp),
dimension(3) :: centroid_1, centroid_2, distance_vec
933 num_considered_collisions = 0
936# 337 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
938# 337 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
939#if defined(MFC_OpenACC)
940# 337 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
942# 337 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
943#elif defined(MFC_OpenMP)
944# 337 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
946# 337 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
948# 337 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
950# 337 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
952# 337 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
954# 339 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
955 do pid1 = 1, num_ibs - 1
956 do pid2 = pid1 + 1, num_ibs
957 centroid_1 = [patch_ib(pid1)%x_centroid, patch_ib(pid1)%y_centroid, 0._wp]
958 centroid_2 = [patch_ib(pid2)%x_centroid, patch_ib(pid2)%y_centroid, 0._wp]
959 if (num_dims == 3)
then
960 centroid_1(3) = patch_ib(pid1)%z_centroid
961 centroid_2(3) = patch_ib(pid2)%z_centroid
963 distance_vec = centroid_2 - centroid_1
965 if (norm2(distance_vec) < patch_ib(pid1)%radius + patch_ib(pid2)%radius)
then
967# 350 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
968#if defined(MFC_OpenACC)
969# 350 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
971# 350 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
972#elif defined(MFC_OpenMP)
973# 350 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
975# 350 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
977 num_considered_collisions = num_considered_collisions + 1
978 current_collisions = num_considered_collisions
979#if defined(MFC_OpenACC)
980# 353 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
982# 353 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
983#elif defined(MFC_OpenMP)
984# 353 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
986# 353 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
997# 362 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
998#if defined(MFC_OpenACC)
999# 362 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1001# 362 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1002#elif defined(MFC_OpenMP)
1003# 362 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1005# 362 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1007# 362 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1015 integer :: gp_idx, i, j, k, patch_id
1016 real(wp) :: edge_location, overlap_distance
1021# 374 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1023# 374 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1024#if defined(MFC_OpenACC)
1025# 374 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1027# 374 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1028#elif defined(MFC_OpenMP)
1029# 374 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1031# 374 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1033# 374 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1035# 374 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1037# 374 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1039 do patch_id = 1, num_ibs
1040# 377 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1042 if (ib_bc_x%beg == bc_slip_wall .or. ib_bc_x%beg == bc_no_slip_wall)
then
1044 edge_location = patch_ib(patch_id)%x_centroid - patch_ib(patch_id)%radius
1046 if (edge_location < x_domain%beg)
then
1047 overlap_distance = x_domain%beg - edge_location
1049 overlap_distance = 0._wp
1054 if (ib_bc_x%end == bc_slip_wall .or. ib_bc_x%end == bc_no_slip_wall)
then
1055 edge_location = patch_ib(patch_id)%x_centroid + patch_ib(patch_id)%radius
1056 if (edge_location > x_domain%end)
then
1057 overlap_distance = edge_location - x_domain%end
1059 overlap_distance = 0._wp
1063# 377 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1065 if (ib_bc_y%beg == bc_slip_wall .or. ib_bc_y%beg == bc_no_slip_wall)
then
1067 edge_location = patch_ib(patch_id)%y_centroid - patch_ib(patch_id)%radius
1069 if (edge_location < y_domain%beg)
then
1070 overlap_distance = y_domain%beg - edge_location
1072 overlap_distance = 0._wp
1077 if (ib_bc_y%end == bc_slip_wall .or. ib_bc_y%end == bc_no_slip_wall)
then
1078 edge_location = patch_ib(patch_id)%y_centroid + patch_ib(patch_id)%radius
1079 if (edge_location > y_domain%end)
then
1080 overlap_distance = edge_location - y_domain%end
1082 overlap_distance = 0._wp
1086# 377 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1088 if (ib_bc_z%beg == bc_slip_wall .or. ib_bc_z%beg == bc_no_slip_wall)
then
1090 edge_location = patch_ib(patch_id)%z_centroid - patch_ib(patch_id)%radius
1092 if (edge_location < z_domain%beg)
then
1093 overlap_distance = z_domain%beg - edge_location
1095 overlap_distance = 0._wp
1100 if (ib_bc_z%end == bc_slip_wall .or. ib_bc_z%end == bc_no_slip_wall)
then
1101 edge_location = patch_ib(patch_id)%z_centroid + patch_ib(patch_id)%radius
1102 if (edge_location > z_domain%end)
then
1103 overlap_distance = edge_location - z_domain%end
1105 overlap_distance = 0._wp
1109# 400 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1112# 401 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1113#if defined(MFC_OpenACC)
1114# 401 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1116# 401 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1117#elif defined(MFC_OpenMP)
1118# 401 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1120# 401 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1122# 401 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1131# 408 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1133# 408 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1135# 408 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1137# 408 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1139# 408 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1141# 408 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1143# 408 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1146 real(wp),
dimension(3),
intent(in) :: location
1147 logical :: owns_collision
1148 real(wp),
dimension(3) :: projected_location
1150 owns_collision = .true.
1153 if (num_procs > 1)
then
1154 projected_location(:) = location(:)
1157# 422 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1158 if (num_dims >= 1)
then
1159 if (ib_bc_x%beg /= bc_periodic)
then
1161 if (location(1) < x_domain%beg)
then
1162 projected_location(1) = x_domain%beg
1163 else if (x_domain%end < location(1))
then
1164 projected_location(1) = x_domain%end - 1.0e-10_wp
1167 owns_collision = owns_collision .and. x_cb(-1) <= projected_location(1) &
1168 & .and. projected_location(1) < x_cb(m)
1170# 422 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1171 if (num_dims >= 2)
then
1172 if (ib_bc_y%beg /= bc_periodic)
then
1174 if (location(2) < y_domain%beg)
then
1175 projected_location(2) = y_domain%beg
1176 else if (y_domain%end < location(2))
then
1177 projected_location(2) = y_domain%end - 1.0e-10_wp
1180 owns_collision = owns_collision .and. y_cb(-1) <= projected_location(2) &
1181 & .and. projected_location(2) < y_cb(n)
1183# 422 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1184 if (num_dims >= 3)
then
1185 if (ib_bc_z%beg /= bc_periodic)
then
1187 if (location(3) < z_domain%beg)
then
1188 projected_location(3) = z_domain%beg
1189 else if (z_domain%end < location(3))
then
1190 projected_location(3) = z_domain%end - 1.0e-10_wp
1193 owns_collision = owns_collision .and. z_cb(-1) <= projected_location(3) &
1194 & .and. projected_location(3) < z_cb(p)
1196# 435 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1205 real(wp),
dimension(3),
intent(in) :: location
1206 logical :: owns_collision, periodic_owner
1207 real(wp) :: temp_neighbor_domain
1210 owns_collision = .true.
1213 if (num_procs > 2)
then
1215 owns_collision = .true.
1216# 455 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1217 if (num_dims >= 1)
then
1218 if (ib_bc_x%beg == bc_periodic .and. neighbor_domain_x%beg >= neighbor_domain_x%end)
then
1220 temp_neighbor_domain = neighbor_domain_x%end + (x_domain%end - x_domain%beg)
1221 periodic_owner = neighbor_domain_x%beg <= location(1) .and. location(1) < temp_neighbor_domain
1223 temp_neighbor_domain = neighbor_domain_x%beg - (x_domain%end - x_domain%beg)
1224 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(1) .and. location(1) &
1225 & < neighbor_domain_x%end)
1227 owns_collision = owns_collision .and. periodic_owner
1229 owns_collision = owns_collision .and. neighbor_domain_x%beg <= location(1) .and. location(1) &
1230 & < neighbor_domain_x%end
1233# 455 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1234 if (num_dims >= 2)
then
1235 if (ib_bc_y%beg == bc_periodic .and. neighbor_domain_y%beg >= neighbor_domain_y%end)
then
1237 temp_neighbor_domain = neighbor_domain_y%end + (y_domain%end - y_domain%beg)
1238 periodic_owner = neighbor_domain_y%beg <= location(2) .and. location(2) < temp_neighbor_domain
1240 temp_neighbor_domain = neighbor_domain_y%beg - (y_domain%end - y_domain%beg)
1241 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(2) .and. location(2) &
1242 & < neighbor_domain_y%end)
1244 owns_collision = owns_collision .and. periodic_owner
1246 owns_collision = owns_collision .and. neighbor_domain_y%beg <= location(2) .and. location(2) &
1247 & < neighbor_domain_y%end
1250# 455 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"
1251 if (num_dims >= 3)
then
1252 if (ib_bc_z%beg == bc_periodic .and. neighbor_domain_z%beg >= neighbor_domain_z%end)
then
1254 temp_neighbor_domain = neighbor_domain_z%end + (z_domain%end - z_domain%beg)
1255 periodic_owner = neighbor_domain_z%beg <= location(3) .and. location(3) < temp_neighbor_domain
1257 temp_neighbor_domain = neighbor_domain_z%beg - (z_domain%end - z_domain%beg)
1258 periodic_owner = periodic_owner .or. (temp_neighbor_domain <= location(3) .and. location(3) &
1259 & < neighbor_domain_z%end)
1261 owns_collision = owns_collision .and. periodic_owner
1263 owns_collision = owns_collision .and. neighbor_domain_z%beg <= location(3) .and. location(3) &
1264 & < neighbor_domain_z%end
1267# 472 "/home/runner/work/MFC/MFC/src/simulation/m_collisions.fpp"