819 type(scalar_field),
dimension(sys_size),
intent(inout) ::
q_cons_vf
820 type(scalar_field),
dimension(sys_size),
intent(inout) :: q_prim_vf
821 real(stp),
dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:),
optional,
intent(inout) :: pb_in, mv_in
822 integer :: i,
j,
k,
l, q, r
823 integer :: patch_id, patch_id_temp
824 real(wp) :: rho, gamma, pi_inf, dyn_pres
825 real(wp),
dimension(2) :: re_k
829 real(wp),
dimension(3) :: vel_ip, vel_norm_ip
832# 166 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
833 real(wp),
dimension(num_fluids) :: gs
834 real(wp),
dimension(num_fluids) :: alpha_rho_ip, alpha_ip
835 real(wp),
dimension(nb) :: r_ip, v_ip, pb_ip, mv_ip
836 real(wp),
dimension(nb*nmom) :: nmom_ip
837 real(wp),
dimension(nb*nnode) :: presb_ip, massv_ip
838# 172 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
841 real(wp),
dimension(3) :: norm
842 real(wp),
dimension(3) :: physical_loc
843 real(wp),
dimension(3) :: vel_g
844 real(wp),
dimension(3) :: radial_vector
845 real(wp),
dimension(3) :: rotation_velocity
848 type(ghost_point) :: gp
849 type(ghost_point) :: innerp
853# 185 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
855# 185 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
856#if defined(MFC_OpenACC)
857# 185 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
859# 185 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
860#elif defined(MFC_OpenMP)
861# 185 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
863# 185 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
865# 185 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
867# 185 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
869# 185 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
875 if (patch_id /= 0)
then
876 call s_decode_patch_periodicity(patch_id, patch_id_temp)
878 if (patch_id > 0)
then
879 q_prim_vf(eqn_idx%E)%sf(
j,
k,
l) = 1._wp
882 rho = rho + q_prim_vf(eqn_idx%cont%beg + i - 1)%sf(
j,
k,
l)
887 q_cons_vf(eqn_idx%mom%beg + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)*rho
888 q_prim_vf(eqn_idx%mom%beg + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)
896# 210 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
897#if defined(MFC_OpenACC)
898# 210 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
900# 210 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
901#elif defined(MFC_OpenMP)
902# 210 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
904# 210 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
906# 210 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
911# 213 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
913# 213 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
914#if defined(MFC_OpenACC)
915# 213 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
917# 213 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
918#elif defined(MFC_OpenMP)
919# 213 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
921# 213 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
923# 213 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
925# 213 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
927# 213 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
929# 216 "/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# 247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
963#if defined(MFC_OpenACC)
964# 247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
966# 247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
967#elif defined(MFC_OpenMP)
968# 247 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
970# 247 "/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# 262 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
988#if defined(MFC_OpenACC)
989# 262 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
991# 262 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
992#elif defined(MFC_OpenMP)
993# 262 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
995# 262 "/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 /= 4)
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)
1017 norm(1:3) = gp%levelset_norm
1018 buf = sqrt(sum(norm**2))
1020 vel_norm_ip = sum(vel_ip*norm)*norm
1021 vel_g = vel_ip - vel_norm_ip
1022 if (patch_ib(patch_id)%moving_ibm /= 0)
then
1024 radial_vector = physical_loc - [patch_ib(patch_id)%x_centroid, patch_ib(patch_id)%y_centroid, &
1025 & patch_ib(patch_id)%z_centroid]
1026 call s_cross_product(patch_ib(patch_id)%angular_vel, radial_vector, rotation_velocity)
1029 vel_g = vel_g + sum((patch_ib(patch_id)%vel + rotation_velocity)*norm)*norm
1032 if (patch_ib(patch_id)%moving_ibm == 0)
then
1037 radial_vector = physical_loc - [patch_ib(patch_id)%x_centroid, patch_ib(patch_id)%y_centroid, &
1038 & patch_ib(patch_id)%z_centroid]
1041 call s_cross_product(patch_ib(patch_id)%angular_vel, radial_vector, rotation_velocity)
1044 vel_g(q) = patch_ib(patch_id)%vel(q)
1045 vel_g(q) = vel_g(q) + rotation_velocity(q)
1052# 317 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1053#if defined(MFC_OpenACC)
1054# 317 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1056# 317 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1057#elif defined(MFC_OpenMP)
1058# 317 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1060# 317 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1062 do q = eqn_idx%mom%beg, eqn_idx%mom%end
1063 q_cons_vf(q)%sf(
j,
k,
l) = rho*vel_g(q - eqn_idx%mom%beg + 1)
1064 dyn_pres = dyn_pres +
q_cons_vf(q)%sf(
j,
k,
l)*vel_g(q - eqn_idx%mom%beg + 1)/2._wp
1069# 324 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1070#if defined(MFC_OpenACC)
1071# 324 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1073# 324 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1074#elif defined(MFC_OpenMP)
1075# 324 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1077# 324 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1079 do q = 1, num_fluids
1081 q_cons_vf(eqn_idx%adv%beg + q - 1)%sf(
j,
k,
l) = alpha_ip(q)
1085 if (surface_tension)
then
1090 if (bubbles_euler)
then
1091 q_cons_vf(eqn_idx%E)%sf(
j,
k,
l) = (1 - alpha_ip(1))*(gamma*pres_ip + pi_inf + dyn_pres)
1093 q_cons_vf(eqn_idx%E)%sf(
j,
k,
l) = gamma*pres_ip + pi_inf + dyn_pres
1096 if (bubbles_euler .and. .not. qbmm)
then
1097 call s_comp_n_from_prim(alpha_ip(1), r_ip, nbub, weight)
1099# 344 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1100#if defined(MFC_OpenACC)
1101# 344 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1103# 344 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1104#elif defined(MFC_OpenMP)
1105# 344 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1107# 344 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1110 q_cons_vf(eqn_idx%bub%beg + (q - 1)*2)%sf(
j,
k,
l) = nbub*r_ip(q)
1111 q_cons_vf(eqn_idx%bub%beg + (q - 1)*2 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1112 if (.not. polytropic)
then
1113 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4)%sf(
j,
k,
l) = nbub*r_ip(q)
1114 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1115 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 2)%sf(
j,
k,
l) = nbub*pb_ip(q)
1116 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 3)%sf(
j,
k,
l) = nbub*mv_ip(q)
1124# 359 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1125#if defined(MFC_OpenACC)
1126# 359 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1128# 359 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1129#elif defined(MFC_OpenMP)
1130# 359 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1132# 359 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1135 q_cons_vf(eqn_idx%bub%beg + q - 1)%sf(
j,
k,
l) = nbub*nmom_ip(q)
1139# 364 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1140#if defined(MFC_OpenACC)
1141# 364 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1143# 364 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1144#elif defined(MFC_OpenMP)
1145# 364 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1147# 364 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1150 q_cons_vf(eqn_idx%bub%beg + (q - 1)*nmom)%sf(
j,
k,
l) = nbub
1153 if (.not. polytropic)
then
1155# 370 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1156#if defined(MFC_OpenACC)
1157# 370 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1159# 370 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1160#elif defined(MFC_OpenMP)
1161# 370 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1163# 370 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1167# 372 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1168#if defined(MFC_OpenACC)
1169# 372 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1171# 372 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1172#elif defined(MFC_OpenMP)
1173# 372 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1175# 372 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1178 pb_in(
j,
k,
l, r, q) = presb_ip((q - 1)*nnode + r)
1179 mv_in(
j,
k,
l, r, q) = massv_ip((q - 1)*nnode + r)
1185 if (model_eqns == 3)
then
1187# 382 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1188#if defined(MFC_OpenACC)
1189# 382 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1191# 382 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1192#elif defined(MFC_OpenMP)
1193# 382 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1195# 382 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1197 do q = eqn_idx%int_en%beg, eqn_idx%int_en%end
1199 &
l) = alpha_ip(q - eqn_idx%int_en%beg + 1)*(gammas(q - eqn_idx%int_en%beg + 1)*pres_ip &
1200 & + pi_infs(q - eqn_idx%int_en%beg + 1))
1205# 390 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1206#if defined(MFC_OpenACC)
1207# 390 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1209# 390 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1210#elif defined(MFC_OpenMP)
1211# 390 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1213# 390 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1215# 390 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2016 type(scalar_field),
dimension(1:sys_size),
intent(in) :: q_prim_vf
2017 type(physical_parameters),
dimension(1:num_fluids),
intent(in) :: fluid_pp
2018 integer :: i, j, k, l, encoded_ib_idx, ib_idx, ib_idx_temp, fluid_idx
2019 real(wp),
dimension(num_ibs, 3) :: forces, torques
2021 real(wp),
dimension(1:3,1:3) :: viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2
2022 real(wp),
dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution
2023 real(wp) :: cell_volume, dx, dy, dz, dynamic_viscosity
2025# 919 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2026 real(wp),
dimension(num_fluids) :: dynamic_viscosities
2027# 921 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2029 call nvtxstartrange(
"COMPUTE-IB-FORCES")
2035 do fluid_idx = 1, num_fluids
2036 if (fluid_pp(fluid_idx)%Re(1) > 0._wp)
then
2037 dynamic_viscosities(fluid_idx) = 1._wp/fluid_pp(fluid_idx)%Re(1)
2039 dynamic_viscosities(fluid_idx) = 0._wp
2045# 937 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2047# 937 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2048#if defined(MFC_OpenACC)
2049# 937 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2051# 937 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2052#elif defined(MFC_OpenMP)
2053# 937 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2055# 937 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2057# 937 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2059# 937 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2061# 937 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2063# 941 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2068 if (encoded_ib_idx /= 0)
then
2069 call s_decode_patch_periodicity(encoded_ib_idx, ib_idx_temp)
2071 if (ib_idx > 0)
then
2073 if (num_dims == 3)
then
2074 radial_vector = [x_cc(i), y_cc(j), z_cc(k)] - [patch_ib(ib_idx)%x_centroid, &
2075 & patch_ib(ib_idx)%y_centroid, patch_ib(ib_idx)%z_centroid]
2077 radial_vector = [x_cc(i), y_cc(j), 0._wp] - [patch_ib(ib_idx)%x_centroid, &
2078 & patch_ib(ib_idx)%y_centroid, 0._wp]
2080 dx = x_cc(i + 1) - x_cc(i)
2081 dy = y_cc(j + 1) - y_cc(j)
2083 local_force_contribution(:) = 0._wp
2084 do fluid_idx = 0, num_fluids - 1
2087 local_force_contribution(1) = local_force_contribution(1) - (q_prim_vf(eqn_idx%E &
2088 & + fluid_idx)%sf(i + 1, j, &
2089 & k) - q_prim_vf(eqn_idx%E + fluid_idx)%sf(i - 1, j, k))/(2._wp*dx)
2090 local_force_contribution(2) = local_force_contribution(2) - (q_prim_vf(eqn_idx%E &
2091 & + fluid_idx)%sf(i, j + 1, k) - q_prim_vf(eqn_idx%E + fluid_idx)%sf(i, &
2092 & j - 1, k))/(2._wp*dy)
2093 cell_volume = abs(dx*dy)
2095 if (num_dims == 3)
then
2096 dz = z_cc(k + 1) - z_cc(k)
2097 local_force_contribution(3) = local_force_contribution(3) - (q_prim_vf(eqn_idx%E &
2098 & + fluid_idx)%sf(i, j, &
2099 & k + 1) - q_prim_vf(eqn_idx%E + fluid_idx)%sf(i, j, k - 1))/(2._wp*dz)
2100 cell_volume = abs(cell_volume*dz)
2107 dynamic_viscosity = 0._wp
2108 do fluid_idx = 1, num_fluids
2110 dynamic_viscosity = dynamic_viscosity + (q_prim_vf(fluid_idx + eqn_idx%adv%beg - 1)%sf(i, j, &
2111 & k)*dynamic_viscosities(fluid_idx))
2115 call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i - 1, &
2117 call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i + 1, &
2120 viscous_stress_div(1,1:3) = (viscous_stress_div_2(1,1:3) - viscous_stress_div_1(1,1:3))/(2._wp*dx)
2122 local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(1,1:3)
2124 call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, &
2126 call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, &
2129 viscous_stress_div(2,1:3) = (viscous_stress_div_2(2,1:3) - viscous_stress_div_1(2,1:3))/(2._wp*dy)
2131 local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(2,1:3)
2133 if (num_dims == 3)
then
2134 call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, &
2136 call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, &
2138 viscous_stress_div(3,1:3) = (viscous_stress_div_2(3,1:3) - viscous_stress_div_1(3, &
2141 local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(3,1:3)
2145 call s_cross_product(radial_vector, local_force_contribution, local_torque_contribution)
2150# 1026 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2151#if defined(MFC_OpenACC)
2152# 1026 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2154# 1026 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2155#elif defined(MFC_OpenMP)
2156# 1026 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2158# 1026 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2160 forces(ib_idx, l) = forces(ib_idx, l) + (local_force_contribution(l)*cell_volume)
2162# 1028 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2163#if defined(MFC_OpenACC)
2164# 1028 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2166# 1028 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2167#elif defined(MFC_OpenMP)
2168# 1028 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2170# 1028 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2172 torques(ib_idx, l) = torques(ib_idx, l) + local_torque_contribution(l)*cell_volume
2180# 1036 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2181#if defined(MFC_OpenACC)
2182# 1036 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2184# 1036 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2185#elif defined(MFC_OpenMP)
2186# 1036 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2188# 1036 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2190# 1036 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2201 forces(i, 1) = forces(i, 1) + accel_bf(1)*patch_ib(i)%mass
2204 forces(i, 2) = forces(i, 2) + accel_bf(2)*patch_ib(i)%mass
2207 forces(i, 3) = forces(i, 3) + accel_bf(3)*patch_ib(i)%mass
2213# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2215# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2216#if defined(MFC_OpenACC)
2217# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2219# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2220#elif defined(MFC_OpenMP)
2221# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2223# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2225# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2227# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2229# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2232 patch_ib(i)%force(:) = forces(i,:)
2233 patch_ib(i)%torque(:) = torques(i,:)
2236# 1062 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2237#if defined(MFC_OpenACC)
2238# 1062 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2240# 1062 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2241#elif defined(MFC_OpenMP)
2242# 1062 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2244# 1062 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2246# 1062 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2463 real(wp),
dimension(num_ibs, 3),
intent(inout) :: forces, torques
2466 integer :: i, j, k, pack_pos, unpack_pos, buf_size, ierr
2467 integer :: send_neighbor, recv_neighbor, recv_count, tag
2468 character(len=1),
allocatable :: ib_force_send_buf(:), ib_force_recv_buf(:)
2470 if (num_procs == 1)
return
2472 buf_size = storage_size(0)/8 + (storage_size(0)/8 + 6*storage_size(0._wp)/8)*
size(patch_ib)
2473 allocate (ib_force_send_buf(buf_size), ib_force_recv_buf(buf_size))
2476# 1264 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2477 if (num_dims >= 1)
then
2478 send_neighbor = merge(bc_x%end, mpi_proc_null, bc_x%end >= 0)
2479 recv_neighbor = merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0)
2485 do k = 1, 2*ib_neighborhood_radius
2489# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2491# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2492#if defined(MFC_OpenACC)
2493# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2495# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2496#elif defined(MFC_OpenMP)
2497# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2499# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2501# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2503# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2505# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2508 send_ids(i) = patch_ib(i)%gbl_patch_id
2513# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2514#if defined(MFC_OpenACC)
2515# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2517# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2518#elif defined(MFC_OpenMP)
2519# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2521# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2523# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2526# 1282 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2527#if defined(MFC_OpenACC)
2528# 1282 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2530# 1282 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2531#elif defined(MFC_OpenMP)
2532# 1282 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2534# 1282 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2536 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2537 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2538 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2539 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
2540 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
2542 if (recv_neighbor /= mpi_proc_null)
then
2544 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
2545 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
2546 & mpi_comm_world, ierr)
2547 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
2549# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2551# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2552#if defined(MFC_OpenACC)
2553# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2555# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2556#elif defined(MFC_OpenMP)
2557# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2559# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2561# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2563# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2565# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2567# 1297 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2568 do i = 1, recv_count
2579# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2580#if defined(MFC_OpenACC)
2581# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2583# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2584#elif defined(MFC_OpenMP)
2585# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2587# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2589# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2595# 1264 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2596 if (num_dims >= 2)
then
2597 send_neighbor = merge(bc_y%end, mpi_proc_null, bc_y%end >= 0)
2598 recv_neighbor = merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0)
2604 do k = 1, 2*ib_neighborhood_radius
2608# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2610# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2611#if defined(MFC_OpenACC)
2612# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2614# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2615#elif defined(MFC_OpenMP)
2616# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2618# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2620# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2622# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2624# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2627 send_ids(i) = patch_ib(i)%gbl_patch_id
2632# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2633#if defined(MFC_OpenACC)
2634# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2636# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2637#elif defined(MFC_OpenMP)
2638# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2640# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2642# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2645# 1282 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2646#if defined(MFC_OpenACC)
2647# 1282 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2649# 1282 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2650#elif defined(MFC_OpenMP)
2651# 1282 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2653# 1282 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2655 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2656 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2657 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2658 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
2659 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
2661 if (recv_neighbor /= mpi_proc_null)
then
2663 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
2664 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
2665 & mpi_comm_world, ierr)
2666 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
2668# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2670# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2671#if defined(MFC_OpenACC)
2672# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2674# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2675#elif defined(MFC_OpenMP)
2676# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2678# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2680# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2682# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2684# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2686# 1297 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2687 do i = 1, recv_count
2698# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2699#if defined(MFC_OpenACC)
2700# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2702# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2703#elif defined(MFC_OpenMP)
2704# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2706# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2708# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2714# 1264 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2715 if (num_dims >= 3)
then
2716 send_neighbor = merge(bc_z%end, mpi_proc_null, bc_z%end >= 0)
2717 recv_neighbor = merge(bc_z%beg, mpi_proc_null, bc_z%beg >= 0)
2723 do k = 1, 2*ib_neighborhood_radius
2727# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2729# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2730#if defined(MFC_OpenACC)
2731# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2733# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2734#elif defined(MFC_OpenMP)
2735# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2737# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2739# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2741# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2743# 1275 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2746 send_ids(i) = patch_ib(i)%gbl_patch_id
2751# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2752#if defined(MFC_OpenACC)
2753# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2755# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2756#elif defined(MFC_OpenMP)
2757# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2759# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2761# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2764# 1282 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2765#if defined(MFC_OpenACC)
2766# 1282 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2768# 1282 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2769#elif defined(MFC_OpenMP)
2770# 1282 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2772# 1282 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2774 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2775 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2776 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2777 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
2778 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
2780 if (recv_neighbor /= mpi_proc_null)
then
2782 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
2783 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
2784 & mpi_comm_world, ierr)
2785 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
2787# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2789# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2790#if defined(MFC_OpenACC)
2791# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2793# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2794#elif defined(MFC_OpenMP)
2795# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2797# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2799# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2801# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2803# 1295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2805# 1297 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2806 do i = 1, recv_count
2817# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2818#if defined(MFC_OpenACC)
2819# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2821# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2822#elif defined(MFC_OpenMP)
2823# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2825# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2827# 1307 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2833# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2836# 1316 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2837 if (num_dims >= 1)
then
2838 send_neighbor = merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0)
2839 recv_neighbor = merge(bc_x%end, mpi_proc_null, bc_x%end >= 0)
2841 do k = 1, 2*ib_neighborhood_radius
2844# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2846# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2847#if defined(MFC_OpenACC)
2848# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2850# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2851#elif defined(MFC_OpenMP)
2852# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2854# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2856# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2858# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2860# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2863 send_ids(i) = patch_ib(i)%gbl_patch_id
2868# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2869#if defined(MFC_OpenACC)
2870# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2872# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2873#elif defined(MFC_OpenMP)
2874# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2876# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2878# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2881# 1329 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2882#if defined(MFC_OpenACC)
2883# 1329 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2885# 1329 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2886#elif defined(MFC_OpenMP)
2887# 1329 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2889# 1329 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2891 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2892 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2893 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2894 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
2895 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
2896 if (recv_neighbor /= mpi_proc_null)
then
2898 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
2899 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
2900 & mpi_comm_world, ierr)
2901 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
2903# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2905# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2906#if defined(MFC_OpenACC)
2907# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2909# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2910#elif defined(MFC_OpenMP)
2911# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2913# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2915# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2917# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2919# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2921 do i = 1, recv_count
2929# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2930#if defined(MFC_OpenACC)
2931# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2933# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2934#elif defined(MFC_OpenMP)
2935# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2937# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2939# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2945# 1316 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2946 if (num_dims >= 2)
then
2947 send_neighbor = merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0)
2948 recv_neighbor = merge(bc_y%end, mpi_proc_null, bc_y%end >= 0)
2950 do k = 1, 2*ib_neighborhood_radius
2953# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2955# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2956#if defined(MFC_OpenACC)
2957# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2959# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2960#elif defined(MFC_OpenMP)
2961# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2963# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2965# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2967# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2969# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2972 send_ids(i) = patch_ib(i)%gbl_patch_id
2977# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2978#if defined(MFC_OpenACC)
2979# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2981# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2982#elif defined(MFC_OpenMP)
2983# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2985# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2987# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2990# 1329 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2991#if defined(MFC_OpenACC)
2992# 1329 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2994# 1329 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2995#elif defined(MFC_OpenMP)
2996# 1329 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2998# 1329 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3000 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3001 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3002 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3003 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
3004 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
3005 if (recv_neighbor /= mpi_proc_null)
then
3007 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
3008 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
3009 & mpi_comm_world, ierr)
3010 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
3012# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3014# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3015#if defined(MFC_OpenACC)
3016# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3018# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3019#elif defined(MFC_OpenMP)
3020# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3022# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3024# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3026# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3028# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3030 do i = 1, recv_count
3038# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3039#if defined(MFC_OpenACC)
3040# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3042# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3043#elif defined(MFC_OpenMP)
3044# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3046# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3048# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3054# 1316 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3055 if (num_dims >= 3)
then
3056 send_neighbor = merge(bc_z%beg, mpi_proc_null, bc_z%beg >= 0)
3057 recv_neighbor = merge(bc_z%end, mpi_proc_null, bc_z%end >= 0)
3059 do k = 1, 2*ib_neighborhood_radius
3062# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3064# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3065#if defined(MFC_OpenACC)
3066# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3068# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3069#elif defined(MFC_OpenMP)
3070# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3072# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3074# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3076# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3078# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3081 send_ids(i) = patch_ib(i)%gbl_patch_id
3086# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3087#if defined(MFC_OpenACC)
3088# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3090# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3091#elif defined(MFC_OpenMP)
3092# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3094# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3096# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3099# 1329 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3100#if defined(MFC_OpenACC)
3101# 1329 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3103# 1329 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3104#elif defined(MFC_OpenMP)
3105# 1329 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3107# 1329 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3109 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3110 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3111 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3112 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
3113 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
3114 if (recv_neighbor /= mpi_proc_null)
then
3116 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
3117 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
3118 & mpi_comm_world, ierr)
3119 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
3121# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3123# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3124#if defined(MFC_OpenACC)
3125# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3127# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3128#elif defined(MFC_OpenMP)
3129# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3131# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3133# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3135# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3137# 1341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3139 do i = 1, recv_count
3147# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3148#if defined(MFC_OpenACC)
3149# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3151# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3152#elif defined(MFC_OpenMP)
3153# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3155# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3157# 1349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3163# 1355 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3170 integer :: i, j, k, output_idx, local_output_idx
3171 integer :: old_num_local_ibs
3172 integer :: new_count, recv_count
3173 integer :: pack_pos, unpack_pos, buf_size, patch_bytes
3174 integer :: send_neighbor, recv_neighbor, ierr
3175 integer :: dx, dy, dz, tag, nbr_idx, nreqs
3176 real(wp),
dimension(3) :: centroid
3178 type(ib_patch_parameters) :: tmp_patch
3179 integer,
dimension(num_local_ibs_max) :: local_ib_idx_old
3181 integer,
parameter :: max_nbrs = 26
3182 character(len=1),
allocatable :: send_buf(:), recv_bufs(:,:)
3183 integer,
dimension(2*max_nbrs) :: requests
3184 integer,
dimension(max_nbrs) :: recv_neighbor_list
3187 if (num_procs > 1)
then
3189 local_ib_idx_old = 0
3190 old_num_local_ibs = num_local_ibs
3191 do i = 1, num_local_ibs
3192 local_ib_idx_old(i) = patch_ib(local_ib_patch_ids(i))%gbl_patch_id
3197 local_output_idx = 0
3199 centroid = [patch_ib(i)%x_centroid, patch_ib(i)%y_centroid, 0._wp]
3200 if (num_dims == 3) centroid(3) = patch_ib(i)%z_centroid
3203 if (f_neighborhood_ranks_own_location(centroid))
then
3204 output_idx = output_idx + 1
3205 if (i /= output_idx)
then
3206 patch_ib(output_idx) = patch_ib(i)
3210 if (f_local_rank_owns_location(centroid))
then
3211 local_output_idx = local_output_idx + 1
3212 local_ib_patch_ids(local_output_idx) = output_idx
3216 num_ibs = output_idx
3217 num_local_ibs = local_output_idx
3219# 1409 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3220#if defined(MFC_OpenACC)
3221# 1409 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3223# 1409 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3224#elif defined(MFC_OpenMP)
3225# 1409 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3227# 1409 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3232 patch_bytes = storage_size(tmp_patch)/8
3233 buf_size = storage_size(0)/8 + patch_bytes*num_local_ibs_max
3234 allocate (send_buf(buf_size), recv_bufs(buf_size, max_nbrs))
3238 call mpi_pack(0, 1, mpi_integer, send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3242 do i = 1, num_local_ibs
3243 k = local_ib_patch_ids(i)
3245 do j = 1, old_num_local_ibs
3246 if (patch_ib(k)%gbl_patch_id == local_ib_idx_old(j))
then
3252 call mpi_pack(patch_ib(k), patch_bytes, mpi_byte, send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3253 new_count = new_count + 1
3259 call mpi_pack(new_count, 1, mpi_integer, send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3260 pack_pos = storage_size(0)/8 + new_count*patch_bytes
3265 do dz = merge(-1, 0, num_dims == 3), merge(1, 0, num_dims == 3)
3268 if (dx == 0 .and. dy == 0 .and. dz == 0) cycle
3269 nbr_idx = nbr_idx + 1
3270 tag = 200 + (dx + 1)*9 + (dy + 1)*3 + (dz + 1)
3271 recv_neighbor = ib_neighbor_ranks(-dx, -dy, -dz)
3272 recv_neighbor_list(nbr_idx) = mpi_proc_null
3273 if (recv_neighbor < 0) cycle
3274 recv_neighbor_list(nbr_idx) = recv_neighbor
3276 call mpi_irecv(recv_bufs(:,nbr_idx), buf_size, mpi_packed, recv_neighbor, tag, mpi_comm_world, &
3277 & requests(nreqs), ierr)
3282 do dz = merge(-1, 0, num_dims == 3), merge(1, 0, num_dims == 3)
3285 if (dx == 0 .and. dy == 0 .and. dz == 0) cycle
3286 tag = 200 + (dx + 1)*9 + (dy + 1)*3 + (dz + 1)
3287 send_neighbor = ib_neighbor_ranks(dx, dy, dz)
3288 if (send_neighbor < 0) cycle
3290 call mpi_isend(send_buf, pack_pos, mpi_packed, send_neighbor, tag, mpi_comm_world, requests(nreqs), ierr)
3295 call mpi_waitall(nreqs, requests, mpi_statuses_ignore, ierr)
3298 do nbr_idx = 1, merge(26, 8, num_dims == 3)
3299 if (recv_neighbor_list(nbr_idx) == mpi_proc_null) cycle
3301 call mpi_unpack(recv_bufs(:,nbr_idx), buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
3302 do i = 1, recv_count
3303 call mpi_unpack(recv_bufs(:,nbr_idx), buf_size, unpack_pos, tmp_patch, patch_bytes, mpi_byte, mpi_comm_world, &
3307 num_ibs = num_ibs + 1
3308 if (.not. (num_ibs <=
size(patch_ib)))
then
3309# 1489 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3310 call s_mpi_abort(
"m_ibm.fpp:1489: " //
"Assertion failed: num_ibs <= size(patch_ib). " &
3311# 1489 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3312 & //
'patch_ib overflow in neighborhood handoff')
3313# 1489 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3315 patch_ib(num_ibs) = tmp_patch
3320 deallocate (send_buf, recv_bufs)
3322# 1496 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3323#if defined(MFC_OpenACC)
3324# 1496 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3326# 1496 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3327#elif defined(MFC_OpenMP)
3328# 1496 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3330# 1496 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"