814 type(scalar_field),
dimension(sys_size),
intent(inout) ::
q_cons_vf
815 type(scalar_field),
dimension(sys_size),
intent(inout) :: q_prim_vf
816 real(stp),
dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:),
optional,
intent(inout) :: pb_in, mv_in
817 integer :: i,
j,
k,
l, q, r
818 integer :: patch_id, patch_id_temp
819 real(wp) :: rho, gamma, pi_inf, dyn_pres
820 real(wp),
dimension(2) :: re_k
824 real(wp),
dimension(3) :: vel_ip, vel_norm_ip
827# 166 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
828 real(wp),
dimension(num_fluids) :: gs
829 real(wp),
dimension(num_fluids) :: alpha_rho_ip, alpha_ip
830 real(wp),
dimension(nb) :: r_ip, v_ip, pb_ip, mv_ip
831 real(wp),
dimension(nb*nmom) :: nmom_ip
832 real(wp),
dimension(nb*nnode) :: presb_ip, massv_ip
833 real(wp),
dimension(num_species) :: ys_ip
834# 173 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
835 real(wp) :: t_ip, mw_ip, e_ip
836 real(wp) :: v_blow_eff
839 real(wp),
dimension(3) :: norm
840 real(wp),
dimension(3) :: physical_loc
841 real(wp),
dimension(3) :: vel_g
842 real(wp),
dimension(3) :: radial_vector
843 real(wp),
dimension(3) :: rotation_velocity
846 type(ghost_point) :: gp
847 type(ghost_point) :: innerp
851# 188 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
853# 188 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
854#if defined(MFC_OpenACC)
855# 188 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
857# 188 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
858#elif defined(MFC_OpenMP)
859# 188 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
861# 188 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
863# 188 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
865# 188 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
867# 188 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
869# 188 "/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
885 if (.not. chemistry) q_prim_vf(eqn_idx%E)%sf(
j,
k,
l) = 1._wp
888 rho = rho + q_prim_vf(eqn_idx%cont%beg + i - 1)%sf(
j,
k,
l)
893 q_cons_vf(eqn_idx%mom%beg + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)*rho
894 q_prim_vf(eqn_idx%mom%beg + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)
902# 219 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
903#if defined(MFC_OpenACC)
904# 219 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
906# 219 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
907#elif defined(MFC_OpenMP)
908# 219 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
910# 219 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
912# 219 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
917# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
919# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
920#if defined(MFC_OpenACC)
921# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
923# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
925# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
926#elif defined(MFC_OpenMP)
927# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
929# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
931# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
933# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
935# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
937# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
939# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
941# 226 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
951 physical_loc = [x_cc(
j), y_cc(
k), z_cc(
l)]
953 physical_loc = [x_cc(
j), y_cc(
k), 0._wp]
957 if (bubbles_euler .and. .not. qbmm)
then
960 else if (qbmm .and. polytropic)
then
962 & pb_ip, mv_ip, nmom_ip)
963 else if (qbmm .and. .not. polytropic)
then
965 & pb_ip, mv_ip, nmom_ip, pb_in, mv_in, presb_ip, massv_ip)
966 else if (chemistry)
then
976 if (chemistry .and. patch_ib(patch_id)%inj_species > 0)
then
977 call get_mixture_molecular_weight(ys_ip, mw_ip)
978 t_ip = pres_ip*mw_ip/(alpha_rho_ip(1)*gas_constant)
980 ys_ip(patch_ib(patch_id)%inj_species) = 1._wp
981 call get_mixture_molecular_weight(ys_ip, mw_ip)
982 alpha_rho_ip(1) = pres_ip*mw_ip/(t_ip*gas_constant)
989# 272 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
990#if defined(MFC_OpenACC)
991# 272 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
993# 272 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
994#elif defined(MFC_OpenMP)
995# 272 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
997# 272 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1000 q_prim_vf(q)%sf(
j,
k,
l) = alpha_rho_ip(q)
1001 q_prim_vf(eqn_idx%adv%beg + q - 1)%sf(
j,
k,
l) = alpha_ip(q)
1004 if (surface_tension)
then
1005 q_prim_vf(eqn_idx%c)%sf(
j,
k,
l) = c_ip
1009 if (patch_ib(patch_id)%moving_ibm <= 1)
then
1010 q_prim_vf(eqn_idx%E)%sf(
j,
k,
l) = pres_ip
1012 q_prim_vf(eqn_idx%E)%sf(
j,
k,
l) = 0._wp
1014# 287 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1015#if defined(MFC_OpenACC)
1016# 287 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1018# 287 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1019#elif defined(MFC_OpenMP)
1020# 287 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1022# 287 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1024 do q = 1, num_fluids
1026 q_prim_vf(eqn_idx%E)%sf(
j,
k,
l) = q_prim_vf(eqn_idx%E)%sf(
j,
k, &
1027 &
l) + pres_ip/(1._wp - 2._wp*abs(gp%levelset*alpha_rho_ip(q)/pres_ip) &
1028 & *dot_product(patch_ib(patch_id)%force/patch_ib(patch_id)%mass, gp%levelset_norm))
1033 if (hypoelasticity)
then
1034 call s_convert_species_to_mixture_variables_kernel(rho, gamma, pi_inf, qv_k, alpha_ip, alpha_rho_ip, re_k, &
1037 call s_convert_species_to_mixture_variables_kernel(rho, gamma, pi_inf, qv_k, alpha_ip, alpha_rho_ip, re_k)
1040 if (patch_ib(patch_id)%moving_ibm /= 0)
then
1042 radial_vector(1) = physical_loc(1) - (patch_ib(patch_id)%x_centroid + real(
ghost_points(i)%x_periodicity, &
1043 & wp)*(glb_bounds(1)%end - glb_bounds(1)%beg))
1044 radial_vector(2) = physical_loc(2) - (patch_ib(patch_id)%y_centroid + real(
ghost_points(i)%y_periodicity, &
1045 & wp)*(glb_bounds(2)%end - glb_bounds(2)%beg))
1046 radial_vector(3) = 0._wp
1047 if (num_dims == 3) radial_vector(3) = physical_loc(3) - (patch_ib(patch_id)%z_centroid &
1048 & + real(
ghost_points(i)%z_periodicity, wp)*(glb_bounds(3)%end - glb_bounds(3)%beg))
1053 norm(1:3) = gp%levelset_norm
1054 buf = sqrt(sum(norm**2))
1056 vel_norm_ip = sum(vel_ip*norm)*norm
1057 vel_g = vel_ip - vel_norm_ip
1058 if (patch_ib(patch_id)%moving_ibm /= 0)
then
1060 call s_cross_product(patch_ib(patch_id)%angular_vel, radial_vector, rotation_velocity)
1063 vel_g = vel_g + sum((patch_ib(patch_id)%vel + rotation_velocity)*norm)*norm
1066 if (patch_ib(patch_id)%moving_ibm == 0)
then
1072 call s_cross_product(patch_ib(patch_id)%angular_vel, radial_vector, rotation_velocity)
1075 vel_g(q) = patch_ib(patch_id)%vel(q)
1076 vel_g(q) = vel_g(q) + rotation_velocity(q)
1083 if (patch_ib(patch_id)%v_blow > 0._wp)
then
1084 v_blow_eff = patch_ib(patch_id)%v_blow
1088 if (patch_ib(patch_id)%burn_rate_pref > 0._wp)
then
1091 v_blow_eff = v_blow_eff*(max(pres_ip, &
1092 & 0._wp)/patch_ib(patch_id)%burn_rate_pref)**patch_ib(patch_id)%burn_rate_exp
1094 norm(1:3) = gp%levelset_norm
1095 buf = sqrt(sum(norm**2))
1096 if (buf > 0._wp) vel_g = vel_g + v_blow_eff*norm/buf
1101# 364 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1102#if defined(MFC_OpenACC)
1103# 364 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1105# 364 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1106#elif defined(MFC_OpenMP)
1107# 364 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1109# 364 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1111 do q = eqn_idx%mom%beg, eqn_idx%mom%end
1112 q_cons_vf(q)%sf(
j,
k,
l) = rho*vel_g(q - eqn_idx%mom%beg + 1)
1113 dyn_pres = dyn_pres +
q_cons_vf(q)%sf(
j,
k,
l)*vel_g(q - eqn_idx%mom%beg + 1)/2._wp
1118# 371 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1119#if defined(MFC_OpenACC)
1120# 371 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1122# 371 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1123#elif defined(MFC_OpenMP)
1124# 371 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1126# 371 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1128 do q = 1, num_fluids
1130 q_cons_vf(eqn_idx%adv%beg + q - 1)%sf(
j,
k,
l) = alpha_ip(q)
1134 if (surface_tension)
then
1145 call get_mixture_molecular_weight(ys_ip, mw_ip)
1146 t_ip = pres_ip*mw_ip/(rho*gas_constant)
1147 call get_mixture_energy_mass(t_ip, ys_ip, e_ip)
1149# 392 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1150#if defined(MFC_OpenACC)
1151# 392 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1153# 392 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1154#elif defined(MFC_OpenMP)
1155# 392 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1157# 392 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1159 do q = 1, num_species
1160 q_cons_vf(eqn_idx%species%beg + q - 1)%sf(
j,
k,
l) = rho*ys_ip(q)
1163 else if (bubbles_euler)
then
1164 q_cons_vf(eqn_idx%E)%sf(
j,
k,
l) = (1 - alpha_ip(1))*(gamma*pres_ip + pi_inf + dyn_pres)
1166 q_cons_vf(eqn_idx%E)%sf(
j,
k,
l) = gamma*pres_ip + pi_inf + dyn_pres
1169 if (bubbles_euler .and. .not. qbmm)
then
1170 call s_comp_n_from_prim(alpha_ip(1), r_ip, nbub, weight)
1172# 405 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1173#if defined(MFC_OpenACC)
1174# 405 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1176# 405 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1177#elif defined(MFC_OpenMP)
1178# 405 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1180# 405 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1183 q_cons_vf(eqn_idx%bub%beg + (q - 1)*2)%sf(
j,
k,
l) = nbub*r_ip(q)
1184 q_cons_vf(eqn_idx%bub%beg + (q - 1)*2 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1185 if (.not. polytropic)
then
1186 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4)%sf(
j,
k,
l) = nbub*r_ip(q)
1187 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1188 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 2)%sf(
j,
k,
l) = nbub*pb_ip(q)
1189 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 3)%sf(
j,
k,
l) = nbub*mv_ip(q)
1197# 420 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1198#if defined(MFC_OpenACC)
1199# 420 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1201# 420 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1202#elif defined(MFC_OpenMP)
1203# 420 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1205# 420 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1208 q_cons_vf(eqn_idx%bub%beg + q - 1)%sf(
j,
k,
l) = nbub*nmom_ip(q)
1212# 425 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1213#if defined(MFC_OpenACC)
1214# 425 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1216# 425 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1217#elif defined(MFC_OpenMP)
1218# 425 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1220# 425 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1223 q_cons_vf(eqn_idx%bub%beg + (q - 1)*nmom)%sf(
j,
k,
l) = nbub
1226 if (.not. polytropic)
then
1228# 431 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1229#if defined(MFC_OpenACC)
1230# 431 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1232# 431 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1233#elif defined(MFC_OpenMP)
1234# 431 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1236# 431 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1240# 433 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1241#if defined(MFC_OpenACC)
1242# 433 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1244# 433 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1245#elif defined(MFC_OpenMP)
1246# 433 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1248# 433 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1251 pb_in(
j,
k,
l, r, q) = presb_ip((q - 1)*nnode + r)
1252 mv_in(
j,
k,
l, r, q) = massv_ip((q - 1)*nnode + r)
1258 if (model_eqns == model_eqns_6eq)
then
1260# 443 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1261#if defined(MFC_OpenACC)
1262# 443 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1264# 443 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1265#elif defined(MFC_OpenMP)
1266# 443 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1268# 443 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1270 do q = eqn_idx%int_en%beg, eqn_idx%int_en%end
1272 &
l) = alpha_ip(q - eqn_idx%int_en%beg + 1)*(gammas(q - eqn_idx%int_en%beg + 1)*pres_ip &
1273 & + pi_infs(q - eqn_idx%int_en%beg + 1))
1278# 451 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1279#if defined(MFC_OpenACC)
1280# 451 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1282# 451 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1283#elif defined(MFC_OpenMP)
1284# 451 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1286# 451 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1288# 451 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2118 type(scalar_field),
dimension(1:sys_size),
intent(in) :: q_prim_vf
2119 type(physical_parameters),
dimension(1:num_fluids),
intent(in) :: fluid_pp
2120 integer :: i, j, k, l, encoded_ib_idx, xp, yp, zp, ib_idx, ib_idx_temp, fluid_idx
2121 real(wp),
dimension(num_ibs, 3) :: forces, torques
2123 real(wp),
dimension(1:3,1:3) :: viscous_stress
2124 real(wp),
dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution
2125 real(wp) :: cell_volume, dynamic_viscosity
2127# 988 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2128 real(wp),
dimension(num_fluids) :: dynamic_viscosities
2129# 990 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2131 call nvtxstartrange(
"COMPUTE-IB-FORCES")
2137 do fluid_idx = 1, num_fluids
2138 if (fluid_pp(fluid_idx)%Re(1) > 0._wp)
then
2139 dynamic_viscosities(fluid_idx) = 1._wp/fluid_pp(fluid_idx)%Re(1)
2141 dynamic_viscosities(fluid_idx) = 0._wp
2147# 1006 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2149# 1006 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2150#if defined(MFC_OpenACC)
2151# 1006 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2153# 1006 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2155# 1006 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2157# 1006 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2158#elif defined(MFC_OpenMP)
2159# 1006 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2161# 1006 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2163# 1006 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2165# 1006 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2167# 1006 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2169# 1006 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2171# 1006 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2173# 1009 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2178 if (encoded_ib_idx /= 0)
then
2179 call s_decode_patch_periodicity(encoded_ib_idx, ib_idx_temp, xp, yp, zp)
2181 if (ib_idx > 0)
then
2183 radial_vector(1) = x_cc(i) - (patch_ib(ib_idx)%x_centroid + real(xp, &
2184 & wp)*(glb_bounds(1)%end - glb_bounds(1)%beg))
2185 radial_vector(2) = y_cc(j) - (patch_ib(ib_idx)%y_centroid + real(yp, &
2186 & wp)*(glb_bounds(2)%end - glb_bounds(2)%beg))
2187 radial_vector(3) = 0._wp
2188 if (num_dims == 3) radial_vector(3) = z_cc(k) - (patch_ib(ib_idx)%z_centroid + real(zp, &
2189 & wp)*(glb_bounds(3)%end - glb_bounds(3)%beg))
2191 local_force_contribution(:) = 0._wp
2194 do l = -fd_number, fd_number
2195 local_force_contribution(1) = local_force_contribution(1) - (fd_coeff_x(l, &
2196 & i)*q_prim_vf(eqn_idx%E)%sf(i + l, j, k))
2197 local_force_contribution(2) = local_force_contribution(2) - (fd_coeff_y(l, &
2198 & j)*q_prim_vf(eqn_idx%E)%sf(i, j + l, k))
2199 if (num_dims == 3)
then
2200 local_force_contribution(3) = local_force_contribution(3) - (fd_coeff_z(l, &
2201 & k)*q_prim_vf(eqn_idx%E)%sf(i, j, k + l))
2208 dynamic_viscosity = 0._wp
2209 do fluid_idx = 1, num_fluids
2211 dynamic_viscosity = dynamic_viscosity + (q_prim_vf(fluid_idx + eqn_idx%adv%beg - 1)%sf(i, j, &
2212 & k)*dynamic_viscosities(fluid_idx))
2215 do l = -fd_number, fd_number
2216 call s_compute_viscous_stress_tensor(viscous_stress, q_prim_vf, dynamic_viscosity, i + l, j, k)
2217 local_force_contribution(1:3) = local_force_contribution(1:3) + fd_coeff_x(l, &
2218 & i)*viscous_stress(1,1:3)
2220 call s_compute_viscous_stress_tensor(viscous_stress, q_prim_vf, dynamic_viscosity, i, j + l, k)
2221 local_force_contribution(1:3) = local_force_contribution(1:3) + fd_coeff_y(l, &
2222 & j)*viscous_stress(2,1:3)
2224 if (num_dims == 3)
then
2225 call s_compute_viscous_stress_tensor(viscous_stress, q_prim_vf, dynamic_viscosity, i, j, &
2227 local_force_contribution(1:3) = local_force_contribution(1:3) + fd_coeff_z(l, &
2228 & k)*viscous_stress(3,1:3)
2233 call s_cross_product(radial_vector, local_force_contribution, local_torque_contribution)
2236 cell_volume = dx(i)*dy(j)
2237 if (num_dims == 3) cell_volume = cell_volume*dz(k)
2240# 1074 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2241#if defined(MFC_OpenACC)
2242# 1074 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2244# 1074 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2245#elif defined(MFC_OpenMP)
2246# 1074 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2248# 1074 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2250 forces(ib_idx, l) = forces(ib_idx, l) + (local_force_contribution(l)*cell_volume)
2252# 1076 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2253#if defined(MFC_OpenACC)
2254# 1076 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2256# 1076 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2257#elif defined(MFC_OpenMP)
2258# 1076 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2260# 1076 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2262 torques(ib_idx, l) = torques(ib_idx, l) + local_torque_contribution(l)*cell_volume
2270# 1084 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2271#if defined(MFC_OpenACC)
2272# 1084 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2274# 1084 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2275#elif defined(MFC_OpenMP)
2276# 1084 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2278# 1084 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2280# 1084 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2291 forces(i, 1) = forces(i, 1) + accel_bf(1)*patch_ib(i)%mass
2294 forces(i, 2) = forces(i, 2) + accel_bf(2)*patch_ib(i)%mass
2297 forces(i, 3) = forces(i, 3) + accel_bf(3)*patch_ib(i)%mass
2303# 1105 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2305# 1105 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2306#if defined(MFC_OpenACC)
2307# 1105 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2309# 1105 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2310#elif defined(MFC_OpenMP)
2311# 1105 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2313# 1105 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2315# 1105 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2317# 1105 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2319# 1105 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2322 patch_ib(i)%force(:) = forces(i,:)
2323 patch_ib(i)%torque(:) = torques(i,:)
2326# 1110 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2327#if defined(MFC_OpenACC)
2328# 1110 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2330# 1110 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2331#elif defined(MFC_OpenMP)
2332# 1110 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2334# 1110 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2336# 1110 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2592 real(wp),
dimension(num_ibs, 3),
intent(inout) :: forces, torques
2595 integer :: i, j, k, pack_pos, unpack_pos, buf_size, ierr
2596 integer :: send_neighbor, recv_neighbor, recv_count, tag
2597 character(len=1),
allocatable :: ib_force_send_buf(:), ib_force_recv_buf(:)
2599 if (num_procs == 1)
return
2601 buf_size = storage_size(0)/8 + (storage_size(0)/8 + 6*storage_size(0._wp)/8)*
size(patch_ib)
2602 allocate (ib_force_send_buf(buf_size), ib_force_recv_buf(buf_size))
2605# 1303 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2606 if (num_dims >= 1)
then
2607 send_neighbor = merge(bc_x%end, mpi_proc_null, bc_x%end >= 0)
2608 recv_neighbor = merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0)
2614 do k = 1, min(2*ib_neighborhood_radius, num_procs_x - 1)
2618# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2620# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2621#if defined(MFC_OpenACC)
2622# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2624# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2625#elif defined(MFC_OpenMP)
2626# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2628# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2630# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2632# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2634# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2637 send_ids(i) = patch_ib(i)%gbl_patch_id
2642# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2643#if defined(MFC_OpenACC)
2644# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2646# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2647#elif defined(MFC_OpenMP)
2648# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2650# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2652# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2655# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2656#if defined(MFC_OpenACC)
2657# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2659# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2660#elif defined(MFC_OpenMP)
2661# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2663# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2665 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2666 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2667 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2668 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
2669 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
2671 if (recv_neighbor /= mpi_proc_null)
then
2673 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
2674 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
2675 & mpi_comm_world, ierr)
2676 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
2678# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2680# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2681#if defined(MFC_OpenACC)
2682# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2684# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2685#elif defined(MFC_OpenMP)
2686# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2688# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2690# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2692# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2694# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2696# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2698# 1336 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2699 do i = 1, recv_count
2710# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2711#if defined(MFC_OpenACC)
2712# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2714# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2715#elif defined(MFC_OpenMP)
2716# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2718# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2720# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2726# 1303 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2727 if (num_dims >= 2)
then
2728 send_neighbor = merge(bc_y%end, mpi_proc_null, bc_y%end >= 0)
2729 recv_neighbor = merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0)
2735 do k = 1, min(2*ib_neighborhood_radius, num_procs_y - 1)
2739# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2741# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2742#if defined(MFC_OpenACC)
2743# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2745# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2746#elif defined(MFC_OpenMP)
2747# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2749# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2751# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2753# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2755# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2758 send_ids(i) = patch_ib(i)%gbl_patch_id
2763# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2764#if defined(MFC_OpenACC)
2765# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2767# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2768#elif defined(MFC_OpenMP)
2769# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2771# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2773# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2776# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2777#if defined(MFC_OpenACC)
2778# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2780# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2781#elif defined(MFC_OpenMP)
2782# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2784# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2786 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2787 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2788 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2789 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
2790 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
2792 if (recv_neighbor /= mpi_proc_null)
then
2794 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
2795 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
2796 & mpi_comm_world, ierr)
2797 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
2799# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2801# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2802#if defined(MFC_OpenACC)
2803# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2805# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2806#elif defined(MFC_OpenMP)
2807# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2809# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2811# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2813# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2815# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2817# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2819# 1336 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2820 do i = 1, recv_count
2831# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2832#if defined(MFC_OpenACC)
2833# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2835# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2836#elif defined(MFC_OpenMP)
2837# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2839# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2841# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2847# 1303 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2848 if (num_dims >= 3)
then
2849 send_neighbor = merge(bc_z%end, mpi_proc_null, bc_z%end >= 0)
2850 recv_neighbor = merge(bc_z%beg, mpi_proc_null, bc_z%beg >= 0)
2856 do k = 1, min(2*ib_neighborhood_radius, num_procs_z - 1)
2860# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2862# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2863#if defined(MFC_OpenACC)
2864# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2866# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2867#elif defined(MFC_OpenMP)
2868# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2870# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2872# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2874# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2876# 1314 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2879 send_ids(i) = patch_ib(i)%gbl_patch_id
2884# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2885#if defined(MFC_OpenACC)
2886# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2888# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2889#elif defined(MFC_OpenMP)
2890# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2892# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2894# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2897# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2898#if defined(MFC_OpenACC)
2899# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2901# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2902#elif defined(MFC_OpenMP)
2903# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2905# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2907 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2908 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2909 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
2910 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
2911 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
2913 if (recv_neighbor /= mpi_proc_null)
then
2915 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
2916 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
2917 & mpi_comm_world, ierr)
2918 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
2920# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2922# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2923#if defined(MFC_OpenACC)
2924# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2926# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2927#elif defined(MFC_OpenMP)
2928# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2930# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2932# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2934# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2936# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2938# 1334 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2940# 1336 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2941 do i = 1, recv_count
2952# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2953#if defined(MFC_OpenACC)
2954# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2956# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2957#elif defined(MFC_OpenMP)
2958# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2960# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2962# 1346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2968# 1352 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2971# 1355 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2972 if (num_dims >= 1)
then
2973 send_neighbor = merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0)
2974 recv_neighbor = merge(bc_x%end, mpi_proc_null, bc_x%end >= 0)
2976 do k = 1, min(2*ib_neighborhood_radius, num_procs_x - 1)
2979# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2981# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2982#if defined(MFC_OpenACC)
2983# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2985# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2986#elif defined(MFC_OpenMP)
2987# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2989# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2991# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2993# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2995# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2998 send_ids(i) = patch_ib(i)%gbl_patch_id
3003# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3004#if defined(MFC_OpenACC)
3005# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3007# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3008#elif defined(MFC_OpenMP)
3009# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3011# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3013# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3016# 1368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3017#if defined(MFC_OpenACC)
3018# 1368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3020# 1368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3021#elif defined(MFC_OpenMP)
3022# 1368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3024# 1368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3026 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3027 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3028 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3029 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
3030 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
3031 if (recv_neighbor /= mpi_proc_null)
then
3033 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
3034 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
3035 & mpi_comm_world, ierr)
3036 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
3038# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3040# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3041#if defined(MFC_OpenACC)
3042# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3044# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3045#elif defined(MFC_OpenMP)
3046# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3048# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3050# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3052# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3054# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3056# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3058 do i = 1, recv_count
3066# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3067#if defined(MFC_OpenACC)
3068# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3070# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3071#elif defined(MFC_OpenMP)
3072# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3074# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3076# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3082# 1355 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3083 if (num_dims >= 2)
then
3084 send_neighbor = merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0)
3085 recv_neighbor = merge(bc_y%end, mpi_proc_null, bc_y%end >= 0)
3087 do k = 1, min(2*ib_neighborhood_radius, num_procs_y - 1)
3090# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3092# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3093#if defined(MFC_OpenACC)
3094# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3096# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3097#elif defined(MFC_OpenMP)
3098# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3100# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3102# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3104# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3106# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3109 send_ids(i) = patch_ib(i)%gbl_patch_id
3114# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3115#if defined(MFC_OpenACC)
3116# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3118# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3119#elif defined(MFC_OpenMP)
3120# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3122# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3124# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3127# 1368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3128#if defined(MFC_OpenACC)
3129# 1368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3131# 1368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3132#elif defined(MFC_OpenMP)
3133# 1368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3135# 1368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3137 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3138 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3139 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3140 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
3141 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
3142 if (recv_neighbor /= mpi_proc_null)
then
3144 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
3145 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
3146 & mpi_comm_world, ierr)
3147 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
3149# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3151# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3152#if defined(MFC_OpenACC)
3153# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3155# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3156#elif defined(MFC_OpenMP)
3157# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3159# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3161# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3163# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3165# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3167# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3169 do i = 1, recv_count
3177# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3178#if defined(MFC_OpenACC)
3179# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3181# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3182#elif defined(MFC_OpenMP)
3183# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3185# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3187# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3193# 1355 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3194 if (num_dims >= 3)
then
3195 send_neighbor = merge(bc_z%beg, mpi_proc_null, bc_z%beg >= 0)
3196 recv_neighbor = merge(bc_z%end, mpi_proc_null, bc_z%end >= 0)
3198 do k = 1, min(2*ib_neighborhood_radius, num_procs_z - 1)
3201# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3203# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3204#if defined(MFC_OpenACC)
3205# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3207# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3208#elif defined(MFC_OpenMP)
3209# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3211# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3213# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3215# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3217# 1361 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3220 send_ids(i) = patch_ib(i)%gbl_patch_id
3225# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3226#if defined(MFC_OpenACC)
3227# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3229# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3230#elif defined(MFC_OpenMP)
3231# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3233# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3235# 1367 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3238# 1368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3239#if defined(MFC_OpenACC)
3240# 1368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3242# 1368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3243#elif defined(MFC_OpenMP)
3244# 1368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3246# 1368 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3248 call mpi_pack(num_ibs, 1, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3249 call mpi_pack(
send_ids, num_ibs, mpi_integer, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3250 call mpi_pack(
send_ft, 6*num_ibs, mpi_p, ib_force_send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3251 call mpi_sendrecv(ib_force_send_buf, pack_pos, mpi_packed, send_neighbor, tag, ib_force_recv_buf, buf_size, &
3252 & mpi_packed, recv_neighbor, tag, mpi_comm_world, mpi_status_ignore, ierr)
3253 if (recv_neighbor /= mpi_proc_null)
then
3255 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
3256 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ids, recv_count, mpi_integer, &
3257 & mpi_comm_world, ierr)
3258 call mpi_unpack(ib_force_recv_buf, buf_size, unpack_pos,
recv_ft, 6*recv_count, mpi_p, mpi_comm_world, ierr)
3260# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3262# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3263#if defined(MFC_OpenACC)
3264# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3266# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3267#elif defined(MFC_OpenMP)
3268# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3270# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3272# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3274# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3276# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3278# 1380 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3280 do i = 1, recv_count
3288# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3289#if defined(MFC_OpenACC)
3290# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3292# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3293#elif defined(MFC_OpenMP)
3294# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3296# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3298# 1388 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3304# 1394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3311 integer :: i, j, k, output_idx, local_output_idx
3312 integer :: old_num_local_ibs
3313 integer :: new_count, recv_count
3314 integer :: pack_pos, unpack_pos, buf_size, patch_bytes
3315 integer :: send_neighbor, recv_neighbor, ierr
3316 integer :: dx, dy, dz, tag, nbr_idx, nreqs
3317 real(wp),
dimension(3) :: centroid
3319 type(ib_patch_parameters) :: tmp_patch
3320 integer,
dimension(num_local_ibs_max) :: local_ib_idx_old
3322 integer,
parameter :: max_nbrs = 26
3323 character(len=1),
allocatable :: send_buf(:), recv_bufs(:,:)
3324 integer,
dimension(2*max_nbrs) :: requests
3325 integer,
dimension(max_nbrs) :: recv_neighbor_list
3328 if (num_procs > 1)
then
3330 local_ib_idx_old = 0
3331 old_num_local_ibs = num_local_ibs
3332 do i = 1, num_local_ibs
3333 local_ib_idx_old(i) = patch_ib(local_ib_patch_ids(i))%gbl_patch_id
3339# 1427 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3340#if defined(MFC_OpenACC)
3341# 1427 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3343# 1427 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3344#elif defined(MFC_OpenMP)
3345# 1427 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3347# 1427 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3352 local_output_idx = 0
3354 centroid = [patch_ib(i)%x_centroid, patch_ib(i)%y_centroid, 0._wp]
3355 if (num_dims == 3) centroid(3) = patch_ib(i)%z_centroid
3358 if (f_neighborhood_ranks_own_location(centroid))
then
3359 output_idx = output_idx + 1
3360 if (i /= output_idx)
then
3361 patch_ib(output_idx) = patch_ib(i)
3365 if (f_local_rank_owns_location(centroid))
then
3366 local_output_idx = local_output_idx + 1
3367 local_ib_patch_ids(local_output_idx) = output_idx
3371 num_ibs = output_idx
3372 num_local_ibs = local_output_idx
3374# 1452 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3375#if defined(MFC_OpenACC)
3376# 1452 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3378# 1452 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3379#elif defined(MFC_OpenMP)
3380# 1452 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3382# 1452 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3387 patch_bytes = storage_size(tmp_patch)/8
3388 buf_size = storage_size(0)/8 + patch_bytes*num_local_ibs_max
3389 allocate (send_buf(buf_size), recv_bufs(buf_size, max_nbrs))
3393 call mpi_pack(0, 1, mpi_integer, send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3397 do i = 1, num_local_ibs
3398 k = local_ib_patch_ids(i)
3400 do j = 1, old_num_local_ibs
3401 if (patch_ib(k)%gbl_patch_id == local_ib_idx_old(j))
then
3407 call mpi_pack(patch_ib(k), patch_bytes, mpi_byte, send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3408 new_count = new_count + 1
3414 call mpi_pack(new_count, 1, mpi_integer, send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3415 pack_pos = storage_size(0)/8 + new_count*patch_bytes
3420 do dz = merge(-1, 0, num_dims == 3), merge(1, 0, num_dims == 3)
3423 if (dx == 0 .and. dy == 0 .and. dz == 0) cycle
3424 nbr_idx = nbr_idx + 1
3425 tag = 200 + (dx + 1)*9 + (dy + 1)*3 + (dz + 1)
3426 recv_neighbor = ib_neighbor_ranks(-dx, -dy, -dz)
3427 recv_neighbor_list(nbr_idx) = mpi_proc_null
3428 if (recv_neighbor < 0) cycle
3429 recv_neighbor_list(nbr_idx) = recv_neighbor
3431 call mpi_irecv(recv_bufs(:,nbr_idx), buf_size, mpi_packed, recv_neighbor, tag, mpi_comm_world, &
3432 & requests(nreqs), ierr)
3437 do dz = merge(-1, 0, num_dims == 3), merge(1, 0, num_dims == 3)
3440 if (dx == 0 .and. dy == 0 .and. dz == 0) cycle
3441 tag = 200 + (dx + 1)*9 + (dy + 1)*3 + (dz + 1)
3442 send_neighbor = ib_neighbor_ranks(dx, dy, dz)
3443 if (send_neighbor < 0) cycle
3445 call mpi_isend(send_buf, pack_pos, mpi_packed, send_neighbor, tag, mpi_comm_world, requests(nreqs), ierr)
3450 call mpi_waitall(nreqs, requests, mpi_statuses_ignore, ierr)
3453 do nbr_idx = 1, merge(26, 8, num_dims == 3)
3454 if (recv_neighbor_list(nbr_idx) == mpi_proc_null) cycle
3456 call mpi_unpack(recv_bufs(:,nbr_idx), buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
3457 do i = 1, recv_count
3458 call mpi_unpack(recv_bufs(:,nbr_idx), buf_size, unpack_pos, tmp_patch, patch_bytes, mpi_byte, mpi_comm_world, &
3462 num_ibs = num_ibs + 1
3463 if (.not. (num_ibs <=
size(patch_ib)))
then
3464# 1532 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3465 call s_mpi_abort(
"m_ibm.fpp:1532: " //
"Assertion failed: num_ibs <= size(patch_ib). " &
3466# 1532 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3467 & //
'patch_ib overflow in neighborhood handoff')
3468# 1532 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3470 patch_ib(num_ibs) = tmp_patch
3475 deallocate (send_buf, recv_bufs)
3477# 1539 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3478#if defined(MFC_OpenACC)
3479# 1539 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3481# 1539 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3482#elif defined(MFC_OpenMP)
3483# 1539 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3485# 1539 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"