813 type(scalar_field),
dimension(sys_size),
intent(inout) ::
q_cons_vf
814 type(scalar_field),
dimension(sys_size),
intent(inout) :: q_prim_vf
815 real(stp),
dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:),
optional,
intent(inout) :: pb_in, mv_in
816 integer :: i,
j,
k,
l, q, r
817 integer :: patch_id, patch_id_temp
818 real(wp) :: rho, gamma, pi_inf, dyn_pres
819 real(wp),
dimension(2) :: re_k
823 real(wp),
dimension(3) :: vel_ip, vel_norm_ip
826# 164 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
827 real(wp),
dimension(num_fluids) :: gs
828 real(wp),
dimension(num_fluids) :: alpha_rho_ip, alpha_ip
829 real(wp),
dimension(nb) :: r_ip, v_ip, pb_ip, mv_ip
830 real(wp),
dimension(nb*nmom) :: nmom_ip
831 real(wp),
dimension(nb*nnode) :: presb_ip, massv_ip
832# 170 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
835 real(wp),
dimension(3) :: norm
836 real(wp),
dimension(3) :: physical_loc
837 real(wp),
dimension(3) :: vel_g
838 real(wp),
dimension(3) :: radial_vector
839 real(wp),
dimension(3) :: rotation_velocity
842 type(ghost_point) :: gp
843 type(ghost_point) :: innerp
847# 183 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
849# 183 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
850#if defined(MFC_OpenACC)
851# 183 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
853# 183 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
854#elif defined(MFC_OpenMP)
855# 183 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
857# 183 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
859# 183 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
861# 183 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
863# 183 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
865# 183 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
871 if (patch_id /= 0)
then
872 call s_decode_patch_periodicity(patch_id, patch_id_temp)
874 if (patch_id > 0)
then
875 q_prim_vf(eqn_idx%E)%sf(
j,
k,
l) = 1._wp
878 rho = rho + q_prim_vf(eqn_idx%cont%beg + i - 1)%sf(
j,
k,
l)
883 q_cons_vf(eqn_idx%mom%beg + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)*rho
884 q_prim_vf(eqn_idx%mom%beg + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)
892# 208 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
893#if defined(MFC_OpenACC)
894# 208 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
896# 208 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
897#elif defined(MFC_OpenMP)
898# 208 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
900# 208 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
902# 208 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
907# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
909# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
910#if defined(MFC_OpenACC)
911# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
913# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
915# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
916#elif defined(MFC_OpenMP)
917# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
919# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
921# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
923# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
925# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
927# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
929# 214 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
939 physical_loc = [x_cc(
j), y_cc(
k), z_cc(
l)]
941 physical_loc = [x_cc(
j), y_cc(
k), 0._wp]
945 if (bubbles_euler .and. .not. qbmm)
then
948 else if (qbmm .and. polytropic)
then
950 & pb_ip, mv_ip, nmom_ip)
951 else if (qbmm .and. .not. polytropic)
then
953 & pb_ip, mv_ip, nmom_ip, pb_in, mv_in, presb_ip, massv_ip)
962# 245 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
963#if defined(MFC_OpenACC)
964# 245 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
966# 245 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
967#elif defined(MFC_OpenMP)
968# 245 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
970# 245 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
973 q_prim_vf(q)%sf(
j,
k,
l) = alpha_rho_ip(q)
974 q_prim_vf(eqn_idx%adv%beg + q - 1)%sf(
j,
k,
l) = alpha_ip(q)
977 if (surface_tension)
then
978 q_prim_vf(eqn_idx%c)%sf(
j,
k,
l) = c_ip
982 if (patch_ib(patch_id)%moving_ibm <= 1)
then
983 q_prim_vf(eqn_idx%E)%sf(
j,
k,
l) = pres_ip
985 q_prim_vf(eqn_idx%E)%sf(
j,
k,
l) = 0._wp
987# 260 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
988#if defined(MFC_OpenACC)
989# 260 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
991# 260 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
992#elif defined(MFC_OpenMP)
993# 260 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
995# 260 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
999 q_prim_vf(eqn_idx%E)%sf(
j,
k,
l) = q_prim_vf(eqn_idx%E)%sf(
j,
k, &
1000 &
l) + pres_ip/(1._wp - 2._wp*abs(gp%levelset*alpha_rho_ip(q)/pres_ip) &
1001 & *dot_product(patch_ib(patch_id)%force/patch_ib(patch_id)%mass, gp%levelset_norm))
1005 if (model_eqns /= model_eqns_4eq)
then
1007 if (elasticity)
then
1008 call s_convert_species_to_mixture_variables_acc(rho, gamma, pi_inf, qv_k, alpha_ip, alpha_rho_ip, re_k, &
1011 call s_convert_species_to_mixture_variables_acc(rho, gamma, pi_inf, qv_k, alpha_ip, alpha_rho_ip, re_k)
1015 if (patch_ib(patch_id)%moving_ibm /= 0)
then
1017 radial_vector(1) = physical_loc(1) - (patch_ib(patch_id)%x_centroid + real(
ghost_points(i)%x_periodicity, &
1018 & wp)*(x_domain%end - x_domain%beg))
1019 radial_vector(2) = physical_loc(2) - (patch_ib(patch_id)%y_centroid + real(
ghost_points(i)%y_periodicity, &
1020 & wp)*(y_domain%end - y_domain%beg))
1021 radial_vector(3) = 0._wp
1022 if (num_dims == 3) radial_vector(3) = physical_loc(3) - (patch_ib(patch_id)%z_centroid &
1023 & + real(
ghost_points(i)%z_periodicity, wp)*(z_domain%end - z_domain%beg))
1028 norm(1:3) = gp%levelset_norm
1029 buf = sqrt(sum(norm**2))
1031 vel_norm_ip = sum(vel_ip*norm)*norm
1032 vel_g = vel_ip - vel_norm_ip
1033 if (patch_ib(patch_id)%moving_ibm /= 0)
then
1035 call s_cross_product(patch_ib(patch_id)%angular_vel, radial_vector, rotation_velocity)
1038 vel_g = vel_g + sum((patch_ib(patch_id)%vel + rotation_velocity)*norm)*norm
1041 if (patch_ib(patch_id)%moving_ibm == 0)
then
1047 call s_cross_product(patch_ib(patch_id)%angular_vel, radial_vector, rotation_velocity)
1050 vel_g(q) = patch_ib(patch_id)%vel(q)
1051 vel_g(q) = vel_g(q) + rotation_velocity(q)
1058# 321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1059#if defined(MFC_OpenACC)
1060# 321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1062# 321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1063#elif defined(MFC_OpenMP)
1064# 321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1066# 321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1068 do q = eqn_idx%mom%beg, eqn_idx%mom%end
1069 q_cons_vf(q)%sf(
j,
k,
l) = rho*vel_g(q - eqn_idx%mom%beg + 1)
1070 dyn_pres = dyn_pres +
q_cons_vf(q)%sf(
j,
k,
l)*vel_g(q - eqn_idx%mom%beg + 1)/2._wp
1075# 328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1076#if defined(MFC_OpenACC)
1077# 328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1079# 328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1080#elif defined(MFC_OpenMP)
1081# 328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1083# 328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1085 do q = 1, num_fluids
1087 q_cons_vf(eqn_idx%adv%beg + q - 1)%sf(
j,
k,
l) = alpha_ip(q)
1091 if (surface_tension)
then
1096 if (bubbles_euler)
then
1097 q_cons_vf(eqn_idx%E)%sf(
j,
k,
l) = (1 - alpha_ip(1))*(gamma*pres_ip + pi_inf + dyn_pres)
1099 q_cons_vf(eqn_idx%E)%sf(
j,
k,
l) = gamma*pres_ip + pi_inf + dyn_pres
1102 if (bubbles_euler .and. .not. qbmm)
then
1103 call s_comp_n_from_prim(alpha_ip(1), r_ip, nbub, weight)
1105# 348 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1106#if defined(MFC_OpenACC)
1107# 348 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1109# 348 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1110#elif defined(MFC_OpenMP)
1111# 348 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1113# 348 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1116 q_cons_vf(eqn_idx%bub%beg + (q - 1)*2)%sf(
j,
k,
l) = nbub*r_ip(q)
1117 q_cons_vf(eqn_idx%bub%beg + (q - 1)*2 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1118 if (.not. polytropic)
then
1119 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4)%sf(
j,
k,
l) = nbub*r_ip(q)
1120 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1121 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 2)%sf(
j,
k,
l) = nbub*pb_ip(q)
1122 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 3)%sf(
j,
k,
l) = nbub*mv_ip(q)
1130# 363 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1131#if defined(MFC_OpenACC)
1132# 363 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1134# 363 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1135#elif defined(MFC_OpenMP)
1136# 363 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1138# 363 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1141 q_cons_vf(eqn_idx%bub%beg + q - 1)%sf(
j,
k,
l) = nbub*nmom_ip(q)
1145# 368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1146#if defined(MFC_OpenACC)
1147# 368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1149# 368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1150#elif defined(MFC_OpenMP)
1151# 368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1153# 368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1156 q_cons_vf(eqn_idx%bub%beg + (q - 1)*nmom)%sf(
j,
k,
l) = nbub
1159 if (.not. polytropic)
then
1161# 374 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1162#if defined(MFC_OpenACC)
1163# 374 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1165# 374 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1166#elif defined(MFC_OpenMP)
1167# 374 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1169# 374 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1173# 376 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1174#if defined(MFC_OpenACC)
1175# 376 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1177# 376 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1178#elif defined(MFC_OpenMP)
1179# 376 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1181# 376 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1184 pb_in(
j,
k,
l, r, q) = presb_ip((q - 1)*nnode + r)
1185 mv_in(
j,
k,
l, r, q) = massv_ip((q - 1)*nnode + r)
1191 if (model_eqns == model_eqns_6eq)
then
1193# 386 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1194#if defined(MFC_OpenACC)
1195# 386 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1197# 386 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1198#elif defined(MFC_OpenMP)
1199# 386 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1201# 386 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1203 do q = eqn_idx%int_en%beg, eqn_idx%int_en%end
1205 &
l) = alpha_ip(q - eqn_idx%int_en%beg + 1)*(gammas(q - eqn_idx%int_en%beg + 1)*pres_ip &
1206 & + pi_infs(q - eqn_idx%int_en%beg + 1))
1211# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1212#if defined(MFC_OpenACC)
1213# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1215# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1216#elif defined(MFC_OpenMP)
1217# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1219# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1221# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2034 type(scalar_field),
dimension(1:sys_size),
intent(in) :: q_prim_vf
2035 type(physical_parameters),
dimension(1:num_fluids),
intent(in) :: fluid_pp
2036 integer :: i, j, k, l, encoded_ib_idx, xp, yp, zp, ib_idx, ib_idx_temp, fluid_idx
2037 real(wp),
dimension(num_ibs, 3) :: forces, torques
2039 real(wp),
dimension(1:3,1:3) :: viscous_stress
2040 real(wp),
dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution
2041 real(wp) :: cell_volume, dynamic_viscosity
2043# 923 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2044 real(wp),
dimension(num_fluids) :: dynamic_viscosities
2045# 925 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2047 call nvtxstartrange(
"COMPUTE-IB-FORCES")
2053 do fluid_idx = 1, num_fluids
2054 if (fluid_pp(fluid_idx)%Re(1) > 0._wp)
then
2055 dynamic_viscosities(fluid_idx) = 1._wp/fluid_pp(fluid_idx)%Re(1)
2057 dynamic_viscosities(fluid_idx) = 0._wp
2063# 941 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2065# 941 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2066#if defined(MFC_OpenACC)
2067# 941 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2069# 941 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2071# 941 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2073# 941 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2074#elif defined(MFC_OpenMP)
2075# 941 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2077# 941 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2079# 941 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2081# 941 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2083# 941 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2085# 941 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2087# 941 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2089# 944 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2094 if (encoded_ib_idx /= 0)
then
2095 call s_decode_patch_periodicity(encoded_ib_idx, ib_idx_temp, xp, yp, zp)
2097 if (ib_idx > 0)
then
2099 radial_vector(1) = x_cc(i) - (patch_ib(ib_idx)%x_centroid + real(xp, wp)*(x_domain%end - x_domain%beg))
2100 radial_vector(2) = y_cc(j) - (patch_ib(ib_idx)%y_centroid + real(yp, wp)*(y_domain%end - y_domain%beg))
2101 radial_vector(3) = 0._wp
2102 if (num_dims == 3) radial_vector(3) = z_cc(k) - (patch_ib(ib_idx)%z_centroid + real(zp, &
2103 & wp)*(z_domain%end - z_domain%beg))
2105 local_force_contribution(:) = 0._wp
2108 do l = -fd_number, fd_number
2109 local_force_contribution(1) = local_force_contribution(1) - (fd_coeff_x(l, &
2110 & i)*q_prim_vf(eqn_idx%E)%sf(i + l, j, k))
2111 local_force_contribution(2) = local_force_contribution(2) - (fd_coeff_y(l, &
2112 & j)*q_prim_vf(eqn_idx%E)%sf(i, j + l, k))
2113 if (num_dims == 3)
then
2114 local_force_contribution(3) = local_force_contribution(3) - (fd_coeff_z(l, &
2115 & k)*q_prim_vf(eqn_idx%E)%sf(i, j, k + l))
2122 dynamic_viscosity = 0._wp
2123 do fluid_idx = 1, num_fluids
2125 dynamic_viscosity = dynamic_viscosity + (q_prim_vf(fluid_idx + eqn_idx%adv%beg - 1)%sf(i, j, &
2126 & k)*dynamic_viscosities(fluid_idx))
2129 do l = -fd_number, fd_number
2130 call s_compute_viscous_stress_tensor(viscous_stress, q_prim_vf, dynamic_viscosity, i + l, j, k)
2131 local_force_contribution(1:3) = local_force_contribution(1:3) + fd_coeff_x(l, &
2132 & i)*viscous_stress(1,1:3)
2134 call s_compute_viscous_stress_tensor(viscous_stress, q_prim_vf, dynamic_viscosity, i, j + l, k)
2135 local_force_contribution(1:3) = local_force_contribution(1:3) + fd_coeff_y(l, &
2136 & j)*viscous_stress(2,1:3)
2138 if (num_dims == 3)
then
2139 call s_compute_viscous_stress_tensor(viscous_stress, q_prim_vf, dynamic_viscosity, i, j, &
2141 local_force_contribution(1:3) = local_force_contribution(1:3) + fd_coeff_z(l, &
2142 & k)*viscous_stress(3,1:3)
2147 call s_cross_product(radial_vector, local_force_contribution, local_torque_contribution)
2150 cell_volume = dx(i)*dy(j)
2151 if (num_dims == 3) cell_volume = cell_volume*dz(k)
2154# 1007 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2155#if defined(MFC_OpenACC)
2156# 1007 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2158# 1007 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2159#elif defined(MFC_OpenMP)
2160# 1007 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2162# 1007 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2164 forces(ib_idx, l) = forces(ib_idx, l) + (local_force_contribution(l)*cell_volume)
2166# 1009 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2167#if defined(MFC_OpenACC)
2168# 1009 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2170# 1009 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2171#elif defined(MFC_OpenMP)
2172# 1009 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2174# 1009 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2176 torques(ib_idx, l) = torques(ib_idx, l) + local_torque_contribution(l)*cell_volume
2184# 1017 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2185#if defined(MFC_OpenACC)
2186# 1017 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2188# 1017 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2189#elif defined(MFC_OpenMP)
2190# 1017 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2192# 1017 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2194# 1017 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2205 forces(i, 1) = forces(i, 1) + accel_bf(1)*patch_ib(i)%mass
2208 forces(i, 2) = forces(i, 2) + accel_bf(2)*patch_ib(i)%mass
2211 forces(i, 3) = forces(i, 3) + accel_bf(3)*patch_ib(i)%mass
2217# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2219# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2220#if defined(MFC_OpenACC)
2221# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2223# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2224#elif defined(MFC_OpenMP)
2225# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2227# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2229# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2231# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2233# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2236 patch_ib(i)%force(:) = forces(i,:)
2237 patch_ib(i)%torque(:) = torques(i,:)
2240# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2241#if defined(MFC_OpenACC)
2242# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2244# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2245#elif defined(MFC_OpenMP)
2246# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2248# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2250# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2506 real(wp),
dimension(num_ibs, 3),
intent(inout) :: forces, torques
2509 integer :: i, j, k, pack_pos, unpack_pos, buf_size, ierr
2510 integer :: send_neighbor, recv_neighbor, recv_count, tag
2511 character(len=1),
allocatable :: ib_force_send_buf(:), ib_force_recv_buf(:)
2513 if (num_procs == 1)
return
2515 buf_size = storage_size(0)/8 + (storage_size(0)/8 + 6*storage_size(0._wp)/8)*
size(patch_ib)
2516 allocate (ib_force_send_buf(buf_size), ib_force_recv_buf(buf_size))
2519# 1236 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2520 if (num_dims >= 1)
then
2521 send_neighbor = merge(bc_x%end, mpi_proc_null, bc_x%end >= 0)
2522 recv_neighbor = merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0)
2528 do k = 1, min(2*ib_neighborhood_radius, num_procs_x - 1)
2532# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2534# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2535#if defined(MFC_OpenACC)
2536# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2538# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2539#elif defined(MFC_OpenMP)
2540# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2542# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2544# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2546# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2548# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2551 send_ids(i) = patch_ib(i)%gbl_patch_id
2556# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2557#if defined(MFC_OpenACC)
2558# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2560# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2561#elif defined(MFC_OpenMP)
2562# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2564# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2566# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2569# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2570#if defined(MFC_OpenACC)
2571# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2573# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2574#elif defined(MFC_OpenMP)
2575# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2577# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2579 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2580 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2581 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2582 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
2583 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
2585 if (recv_neighbor /= mpi_proc_null)
then
2587 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
2588 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
2589 & mpi_comm_world, ierr)
2590 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
2592# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2594# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2595#if defined(MFC_OpenACC)
2596# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2598# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2599#elif defined(MFC_OpenMP)
2600# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2602# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2604# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2606# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2608# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2610# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2612# 1269 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2613 do i = 1, recv_count
2624# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2625#if defined(MFC_OpenACC)
2626# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2628# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2629#elif defined(MFC_OpenMP)
2630# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2632# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2634# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2640# 1236 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2641 if (num_dims >= 2)
then
2642 send_neighbor = merge(bc_y%end, mpi_proc_null, bc_y%end >= 0)
2643 recv_neighbor = merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0)
2649 do k = 1, min(2*ib_neighborhood_radius, num_procs_y - 1)
2653# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2655# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2656#if defined(MFC_OpenACC)
2657# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2659# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2660#elif defined(MFC_OpenMP)
2661# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2663# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2665# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2667# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2669# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2672 send_ids(i) = patch_ib(i)%gbl_patch_id
2677# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2678#if defined(MFC_OpenACC)
2679# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2681# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2682#elif defined(MFC_OpenMP)
2683# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2685# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2687# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2690# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2691#if defined(MFC_OpenACC)
2692# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2694# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2695#elif defined(MFC_OpenMP)
2696# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2698# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2700 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2701 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2702 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2703 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
2704 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
2706 if (recv_neighbor /= mpi_proc_null)
then
2708 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
2709 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
2710 & mpi_comm_world, ierr)
2711 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
2713# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2715# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2716#if defined(MFC_OpenACC)
2717# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2719# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2720#elif defined(MFC_OpenMP)
2721# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2723# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2725# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2727# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2729# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2731# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2733# 1269 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2734 do i = 1, recv_count
2745# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2746#if defined(MFC_OpenACC)
2747# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2749# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2750#elif defined(MFC_OpenMP)
2751# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2753# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2755# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2761# 1236 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2762 if (num_dims >= 3)
then
2763 send_neighbor = merge(bc_z%end, mpi_proc_null, bc_z%end >= 0)
2764 recv_neighbor = merge(bc_z%beg, mpi_proc_null, bc_z%beg >= 0)
2770 do k = 1, min(2*ib_neighborhood_radius, num_procs_z - 1)
2774# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2776# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2777#if defined(MFC_OpenACC)
2778# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2780# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2781#elif defined(MFC_OpenMP)
2782# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2784# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2786# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2788# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2790# 1247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2793 send_ids(i) = patch_ib(i)%gbl_patch_id
2798# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2799#if defined(MFC_OpenACC)
2800# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2802# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2803#elif defined(MFC_OpenMP)
2804# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2806# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2808# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2811# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2812#if defined(MFC_OpenACC)
2813# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2815# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2816#elif defined(MFC_OpenMP)
2817# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2819# 1254 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2821 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2822 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2823 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2824 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
2825 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
2827 if (recv_neighbor /= mpi_proc_null)
then
2829 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
2830 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
2831 & mpi_comm_world, ierr)
2832 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
2834# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2836# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2837#if defined(MFC_OpenACC)
2838# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2840# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2841#elif defined(MFC_OpenMP)
2842# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2844# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2846# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2848# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2850# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2852# 1267 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2854# 1269 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2855 do i = 1, recv_count
2866# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2867#if defined(MFC_OpenACC)
2868# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2870# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2871#elif defined(MFC_OpenMP)
2872# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2874# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2876# 1279 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2882# 1285 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2885# 1288 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2886 if (num_dims >= 1)
then
2887 send_neighbor = merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0)
2888 recv_neighbor = merge(bc_x%end, mpi_proc_null, bc_x%end >= 0)
2890 do k = 1, min(2*ib_neighborhood_radius, num_procs_x - 1)
2893# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2895# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2896#if defined(MFC_OpenACC)
2897# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2899# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2900#elif defined(MFC_OpenMP)
2901# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2903# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2905# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2907# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2909# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2912 send_ids(i) = patch_ib(i)%gbl_patch_id
2917# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2918#if defined(MFC_OpenACC)
2919# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2921# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2922#elif defined(MFC_OpenMP)
2923# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2925# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2927# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2930# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2931#if defined(MFC_OpenACC)
2932# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2934# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2935#elif defined(MFC_OpenMP)
2936# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2938# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2940 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2941 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2942 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2943 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
2944 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
2945 if (recv_neighbor /= mpi_proc_null)
then
2947 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
2948 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
2949 & mpi_comm_world, ierr)
2950 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
2952# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2954# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2955#if defined(MFC_OpenACC)
2956# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2958# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2959#elif defined(MFC_OpenMP)
2960# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2962# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2964# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2966# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2968# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2970# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2972 do i = 1, recv_count
2980# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2981#if defined(MFC_OpenACC)
2982# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2984# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2985#elif defined(MFC_OpenMP)
2986# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2988# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2990# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2996# 1288 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2997 if (num_dims >= 2)
then
2998 send_neighbor = merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0)
2999 recv_neighbor = merge(bc_y%end, mpi_proc_null, bc_y%end >= 0)
3001 do k = 1, min(2*ib_neighborhood_radius, num_procs_y - 1)
3004# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3006# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3007#if defined(MFC_OpenACC)
3008# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3010# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3011#elif defined(MFC_OpenMP)
3012# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3014# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3016# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3018# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3020# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3023 send_ids(i) = patch_ib(i)%gbl_patch_id
3028# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3029#if defined(MFC_OpenACC)
3030# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3032# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3033#elif defined(MFC_OpenMP)
3034# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3036# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3038# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3041# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3042#if defined(MFC_OpenACC)
3043# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3045# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3046#elif defined(MFC_OpenMP)
3047# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3049# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3051 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3052 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3053 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3054 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
3055 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
3056 if (recv_neighbor /= mpi_proc_null)
then
3058 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
3059 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
3060 & mpi_comm_world, ierr)
3061 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
3063# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3065# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3066#if defined(MFC_OpenACC)
3067# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3069# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3070#elif defined(MFC_OpenMP)
3071# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3073# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3075# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3077# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3079# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3081# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3083 do i = 1, recv_count
3091# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3092#if defined(MFC_OpenACC)
3093# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3095# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3096#elif defined(MFC_OpenMP)
3097# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3099# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3101# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3107# 1288 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3108 if (num_dims >= 3)
then
3109 send_neighbor = merge(bc_z%beg, mpi_proc_null, bc_z%beg >= 0)
3110 recv_neighbor = merge(bc_z%end, mpi_proc_null, bc_z%end >= 0)
3112 do k = 1, min(2*ib_neighborhood_radius, num_procs_z - 1)
3115# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3117# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3118#if defined(MFC_OpenACC)
3119# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3121# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3122#elif defined(MFC_OpenMP)
3123# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3125# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3127# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3129# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3131# 1294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3134 send_ids(i) = patch_ib(i)%gbl_patch_id
3139# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3140#if defined(MFC_OpenACC)
3141# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3143# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3144#elif defined(MFC_OpenMP)
3145# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3147# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3149# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3152# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3153#if defined(MFC_OpenACC)
3154# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3156# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3157#elif defined(MFC_OpenMP)
3158# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3160# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3162 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3163 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3164 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3165 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
3166 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
3167 if (recv_neighbor /= mpi_proc_null)
then
3169 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
3170 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
3171 & mpi_comm_world, ierr)
3172 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
3174# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3176# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3177#if defined(MFC_OpenACC)
3178# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3180# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3181#elif defined(MFC_OpenMP)
3182# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3184# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3186# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3188# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3190# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3192# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3194 do i = 1, recv_count
3202# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3203#if defined(MFC_OpenACC)
3204# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3206# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3207#elif defined(MFC_OpenMP)
3208# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3210# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3212# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3218# 1327 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3225 integer :: i, j, k, output_idx, local_output_idx
3226 integer :: old_num_local_ibs
3227 integer :: new_count, recv_count
3228 integer :: pack_pos, unpack_pos, buf_size, patch_bytes
3229 integer :: send_neighbor, recv_neighbor, ierr
3230 integer :: dx, dy, dz, tag, nbr_idx, nreqs
3231 real(wp),
dimension(3) :: centroid
3233 type(ib_patch_parameters) :: tmp_patch
3234 integer,
dimension(num_local_ibs_max) :: local_ib_idx_old
3236 integer,
parameter :: max_nbrs = 26
3237 character(len=1),
allocatable :: send_buf(:), recv_bufs(:,:)
3238 integer,
dimension(2*max_nbrs) :: requests
3239 integer,
dimension(max_nbrs) :: recv_neighbor_list
3242 if (num_procs > 1)
then
3244 local_ib_idx_old = 0
3245 old_num_local_ibs = num_local_ibs
3246 do i = 1, num_local_ibs
3247 local_ib_idx_old(i) = patch_ib(local_ib_patch_ids(i))%gbl_patch_id
3252 local_output_idx = 0
3254 centroid = [patch_ib(i)%x_centroid, patch_ib(i)%y_centroid, 0._wp]
3255 if (num_dims == 3) centroid(3) = patch_ib(i)%z_centroid
3258 if (f_neighborhood_ranks_own_location(centroid))
then
3259 output_idx = output_idx + 1
3260 if (i /= output_idx)
then
3261 patch_ib(output_idx) = patch_ib(i)
3265 if (f_local_rank_owns_location(centroid))
then
3266 local_output_idx = local_output_idx + 1
3267 local_ib_patch_ids(local_output_idx) = output_idx
3271 num_ibs = output_idx
3272 num_local_ibs = local_output_idx
3274# 1381 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3275#if defined(MFC_OpenACC)
3276# 1381 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3278# 1381 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3279#elif defined(MFC_OpenMP)
3280# 1381 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3282# 1381 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3287 patch_bytes = storage_size(tmp_patch)/8
3288 buf_size = storage_size(0)/8 + patch_bytes*num_local_ibs_max
3289 allocate (send_buf(buf_size), recv_bufs(buf_size, max_nbrs))
3293 call mpi_pack(0, 1, mpi_integer, send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3297 do i = 1, num_local_ibs
3298 k = local_ib_patch_ids(i)
3300 do j = 1, old_num_local_ibs
3301 if (patch_ib(k)%gbl_patch_id == local_ib_idx_old(j))
then
3307 call mpi_pack(patch_ib(k), patch_bytes, mpi_byte, send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3308 new_count = new_count + 1
3314 call mpi_pack(new_count, 1, mpi_integer, send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3315 pack_pos = storage_size(0)/8 + new_count*patch_bytes
3320 do dz = merge(-1, 0, num_dims == 3), merge(1, 0, num_dims == 3)
3323 if (dx == 0 .and. dy == 0 .and. dz == 0) cycle
3324 nbr_idx = nbr_idx + 1
3325 tag = 200 + (dx + 1)*9 + (dy + 1)*3 + (dz + 1)
3326 recv_neighbor = ib_neighbor_ranks(-dx, -dy, -dz)
3327 recv_neighbor_list(nbr_idx) = mpi_proc_null
3328 if (recv_neighbor < 0) cycle
3329 recv_neighbor_list(nbr_idx) = recv_neighbor
3331 call mpi_irecv(recv_bufs(:,nbr_idx), buf_size, mpi_packed, recv_neighbor, tag, mpi_comm_world, &
3332 & requests(nreqs), ierr)
3337 do dz = merge(-1, 0, num_dims == 3), merge(1, 0, num_dims == 3)
3340 if (dx == 0 .and. dy == 0 .and. dz == 0) cycle
3341 tag = 200 + (dx + 1)*9 + (dy + 1)*3 + (dz + 1)
3342 send_neighbor = ib_neighbor_ranks(dx, dy, dz)
3343 if (send_neighbor < 0) cycle
3345 call mpi_isend(send_buf, pack_pos, mpi_packed, send_neighbor, tag, mpi_comm_world, requests(nreqs), ierr)
3350 call mpi_waitall(nreqs, requests, mpi_statuses_ignore, ierr)
3353 do nbr_idx = 1, merge(26, 8, num_dims == 3)
3354 if (recv_neighbor_list(nbr_idx) == mpi_proc_null) cycle
3356 call mpi_unpack(recv_bufs(:,nbr_idx), buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
3357 do i = 1, recv_count
3358 call mpi_unpack(recv_bufs(:,nbr_idx), buf_size, unpack_pos, tmp_patch, patch_bytes, mpi_byte, mpi_comm_world, &
3362 num_ibs = num_ibs + 1
3363 if (.not. (num_ibs <=
size(patch_ib)))
then
3364# 1461 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3365 call s_mpi_abort(
"m_ibm.fpp:1461: " //
"Assertion failed: num_ibs <= size(patch_ib). " &
3366# 1461 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3367 & //
'patch_ib overflow in neighborhood handoff')
3368# 1461 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3370 patch_ib(num_ibs) = tmp_patch
3375 deallocate (send_buf, recv_bufs)
3377# 1468 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3378#if defined(MFC_OpenACC)
3379# 1468 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3381# 1468 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3382#elif defined(MFC_OpenMP)
3383# 1468 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3385# 1468 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"