752 type(scalar_field),
dimension(sys_size),
intent(inout) ::
q_cons_vf
753 type(scalar_field),
dimension(sys_size),
intent(inout) :: q_prim_vf
754 real(stp),
dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:),
optional,
intent(inout) :: pb_in, mv_in
755 integer :: i,
j,
k,
l, q, r
757 real(wp) :: rho, gamma, pi_inf, dyn_pres
758 real(wp),
dimension(2) :: re_k
762 real(wp),
dimension(3) :: vel_ip, vel_norm_ip
765# 151 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
766 real(wp),
dimension(num_fluids) :: gs
767 real(wp),
dimension(num_fluids) :: alpha_rho_ip, alpha_ip
768 real(wp),
dimension(nb) :: r_ip, v_ip, pb_ip, mv_ip
769 real(wp),
dimension(nb*nmom) :: nmom_ip
770 real(wp),
dimension(nb*nnode) :: presb_ip, massv_ip
771# 157 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
774 real(wp),
dimension(3) :: norm
775 real(wp),
dimension(3) :: physical_loc
776 real(wp),
dimension(3) :: vel_g
777 real(wp),
dimension(3) :: radial_vector
778 real(wp),
dimension(3) :: rotation_velocity
781 type(ghost_point) :: gp
782 type(ghost_point) :: innerp
787# 171 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
789# 171 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
790#if defined(MFC_OpenACC)
791# 171 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
793# 171 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
794#elif defined(MFC_OpenMP)
795# 171 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
797# 171 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
799# 171 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
801# 171 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
803# 171 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
809 if (patch_id /= 0)
then
810 q_prim_vf(eqn_idx%E)%sf(
j,
k,
l) = 1._wp
813 rho = rho + q_prim_vf(eqn_idx%cont%beg + i - 1)%sf(
j,
k,
l)
818 q_cons_vf(eqn_idx%mom%beg + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)*rho
819 q_prim_vf(eqn_idx%mom%beg + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)
826# 192 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
827#if defined(MFC_OpenACC)
828# 192 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
830# 192 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
831#elif defined(MFC_OpenMP)
832# 192 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
834# 192 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
836# 192 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
841# 195 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
843# 195 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
844#if defined(MFC_OpenACC)
845# 195 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
847# 195 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
848#elif defined(MFC_OpenMP)
849# 195 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
851# 195 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
853# 195 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
855# 195 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
857# 195 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
859# 198 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
869 physical_loc = [x_cc(
j), y_cc(
k), z_cc(
l)]
871 physical_loc = [x_cc(
j), y_cc(
k), 0._wp]
875 if (bubbles_euler .and. .not. qbmm)
then
878 else if (qbmm .and. polytropic)
then
880 & pb_ip, mv_ip, nmom_ip)
881 else if (qbmm .and. .not. polytropic)
then
883 & pb_ip, mv_ip, nmom_ip, pb_in, mv_in, presb_ip, massv_ip)
892# 229 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
893#if defined(MFC_OpenACC)
894# 229 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
896# 229 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
897#elif defined(MFC_OpenMP)
898# 229 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
900# 229 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
903 q_prim_vf(q)%sf(
j,
k,
l) = alpha_rho_ip(q)
904 q_prim_vf(eqn_idx%adv%beg + q - 1)%sf(
j,
k,
l) = alpha_ip(q)
907 if (surface_tension)
then
908 q_prim_vf(eqn_idx%c)%sf(
j,
k,
l) = c_ip
912 if (patch_ib(patch_id)%moving_ibm <= 1)
then
913 q_prim_vf(eqn_idx%E)%sf(
j,
k,
l) = pres_ip
915 q_prim_vf(eqn_idx%E)%sf(
j,
k,
l) = 0._wp
917# 244 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
918#if defined(MFC_OpenACC)
919# 244 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
921# 244 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
922#elif defined(MFC_OpenMP)
923# 244 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
925# 244 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
929 q_prim_vf(eqn_idx%E)%sf(
j,
k,
l) = q_prim_vf(eqn_idx%E)%sf(
j,
k, &
930 &
l) + pres_ip/(1._wp - 2._wp*abs(gp%levelset*alpha_rho_ip(q)/pres_ip) &
931 & *dot_product(patch_ib(patch_id) %force/patch_ib(patch_id)%mass, gp%levelset_norm))
935 if (model_eqns /= 4)
then
938 call s_convert_species_to_mixture_variables_acc(rho, gamma, pi_inf, qv_k, alpha_ip, alpha_rho_ip, re_k, &
941 call s_convert_species_to_mixture_variables_acc(rho, gamma, pi_inf, qv_k, alpha_ip, alpha_rho_ip, re_k)
947 norm(1:3) = gp%levelset_norm
948 buf = sqrt(sum(norm**2))
950 vel_norm_ip = sum(vel_ip*norm)*norm
951 vel_g = vel_ip - vel_norm_ip
952 if (patch_ib(patch_id)%moving_ibm /= 0)
then
954 radial_vector = physical_loc - [patch_ib(patch_id)%x_centroid, patch_ib(patch_id)%y_centroid, &
955 & patch_ib(patch_id)%z_centroid]
956 call s_cross_product(patch_ib(patch_id)%angular_vel, radial_vector, rotation_velocity)
959 vel_g = vel_g + sum((patch_ib(patch_id)%vel + rotation_velocity)*norm)*norm
962 if (patch_ib(patch_id)%moving_ibm == 0)
then
967 radial_vector = physical_loc - [patch_ib(patch_id)%x_centroid, patch_ib(patch_id)%y_centroid, &
968 & patch_ib(patch_id)%z_centroid]
971 call s_cross_product(patch_ib(patch_id)%angular_vel, radial_vector, rotation_velocity)
974 vel_g(q) = patch_ib(patch_id)%vel(q)
975 vel_g(q) = vel_g(q) + rotation_velocity(q)
982# 299 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
983#if defined(MFC_OpenACC)
984# 299 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
986# 299 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
987#elif defined(MFC_OpenMP)
988# 299 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
990# 299 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
992 do q = eqn_idx%mom%beg, eqn_idx%mom%end
993 q_cons_vf(q)%sf(
j,
k,
l) = rho*vel_g(q - eqn_idx%mom%beg + 1)
994 dyn_pres = dyn_pres +
q_cons_vf(q)%sf(
j,
k,
l)*vel_g(q - eqn_idx%mom%beg + 1)/2._wp
999# 306 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1000#if defined(MFC_OpenACC)
1001# 306 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1003# 306 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1004#elif defined(MFC_OpenMP)
1005# 306 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1007# 306 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1009 do q = 1, num_fluids
1011 q_cons_vf(eqn_idx%adv%beg + q - 1)%sf(
j,
k,
l) = alpha_ip(q)
1015 if (surface_tension)
then
1020 if (bubbles_euler)
then
1021 q_cons_vf(eqn_idx%E)%sf(
j,
k,
l) = (1 - alpha_ip(1))*(gamma*pres_ip + pi_inf + dyn_pres)
1023 q_cons_vf(eqn_idx%E)%sf(
j,
k,
l) = gamma*pres_ip + pi_inf + dyn_pres
1026 if (bubbles_euler .and. .not. qbmm)
then
1027 call s_comp_n_from_prim(alpha_ip(1), r_ip, nbub, weight)
1029# 326 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1030#if defined(MFC_OpenACC)
1031# 326 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1033# 326 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1034#elif defined(MFC_OpenMP)
1035# 326 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1037# 326 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1040 q_cons_vf(eqn_idx%bub%beg + (q - 1)*2)%sf(
j,
k,
l) = nbub*r_ip(q)
1041 q_cons_vf(eqn_idx%bub%beg + (q - 1)*2 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1042 if (.not. polytropic)
then
1043 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4)%sf(
j,
k,
l) = nbub*r_ip(q)
1044 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1045 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 2)%sf(
j,
k,
l) = nbub*pb_ip(q)
1046 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 3)%sf(
j,
k,
l) = nbub*mv_ip(q)
1054# 341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1055#if defined(MFC_OpenACC)
1056# 341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1058# 341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1059#elif defined(MFC_OpenMP)
1060# 341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1062# 341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1065 q_cons_vf(eqn_idx%bub%beg + q - 1)%sf(
j,
k,
l) = nbub*nmom_ip(q)
1069# 346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1070#if defined(MFC_OpenACC)
1071# 346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1073# 346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1074#elif defined(MFC_OpenMP)
1075# 346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1077# 346 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1080 q_cons_vf(eqn_idx%bub%beg + (q - 1)*nmom)%sf(
j,
k,
l) = nbub
1083 if (.not. polytropic)
then
1085# 352 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1086#if defined(MFC_OpenACC)
1087# 352 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1089# 352 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1090#elif defined(MFC_OpenMP)
1091# 352 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1093# 352 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1097# 354 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1098#if defined(MFC_OpenACC)
1099# 354 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1101# 354 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1102#elif defined(MFC_OpenMP)
1103# 354 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1105# 354 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1108 pb_in(
j,
k,
l, r, q) = presb_ip((q - 1)*nnode + r)
1109 mv_in(
j,
k,
l, r, q) = massv_ip((q - 1)*nnode + r)
1115 if (model_eqns == 3)
then
1117# 364 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1118#if defined(MFC_OpenACC)
1119# 364 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1121# 364 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1122#elif defined(MFC_OpenMP)
1123# 364 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1125# 364 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1127 do q = eqn_idx%int_en%beg, eqn_idx%int_en%end
1129 &
l) = alpha_ip(q - eqn_idx%int_en%beg + 1)*(gammas(q - eqn_idx%int_en%beg + 1)*pres_ip &
1130 & + pi_infs(q - eqn_idx%int_en%beg + 1))
1135# 372 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1136#if defined(MFC_OpenACC)
1137# 372 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1139# 372 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1140#elif defined(MFC_OpenMP)
1141# 372 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1143# 372 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1145# 372 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1154 type(ghost_point),
dimension(num_gps),
intent(inout) :: ghost_points_in
1156 real(wp),
dimension(3) :: norm
1157 real(wp),
dimension(3) :: physical_loc
1158 real(wp) :: temp_loc
1159 real(wp),
pointer,
dimension(:) :: s_cc => null()
1161 type(ghost_point) :: gp
1163 integer :: i,
j,
k,
l
1167 logical :: bounds_error
1169 bounds_error = .false.
1172# 397 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1174# 397 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1175#if defined(MFC_OpenACC)
1176# 397 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1178# 397 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1179#elif defined(MFC_OpenMP)
1180# 397 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1182# 397 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1184# 397 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1186# 397 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1188# 397 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1190# 399 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1192 gp = ghost_points_in(q)
1199 physical_loc = [x_cc(i), y_cc(
j), z_cc(
k)]
1201 physical_loc = [x_cc(i), y_cc(
j), 0._wp]
1205 patch_id = gp%ib_patch_id
1206 dist = abs(real(gp%levelset, kind=wp))
1207 norm(:) = gp%levelset_norm
1208 ghost_points_in(q)%ip_loc(:) = physical_loc(:) + 2*dist*norm(:)
1211 do dim = 1, num_dims
1215 bound = m + buff_size - 1
1216 else if (dim == 2)
then
1218 bound = n + buff_size - 1
1221 bound = p + buff_size - 1
1224 if (f_approx_equal(norm(dim), 0._wp))
then
1226 ghost_points_in(q)%ip_grid(dim) = ghost_points_in(q)%loc(dim)
1228 if (norm(dim) > 0)
then
1234 index = ghost_points_in(q)%loc(dim)
1235 temp_loc = ghost_points_in(q)%ip_loc(dim)
1236 do while ((temp_loc < s_cc(index) .or. temp_loc > s_cc(index + 1)) .and. (.not. bounds_error))
1238 if (index < -buff_size .or. index > bound)
then
1239#if !defined(MFC_OpenACC) && !defined(MFC_OpenMP)
1240 print *,
"A required image point is not located in this computational domain."
1241 print *,
"Ghost Point is located at :"
1243 print *, [x_cc(i), y_cc(
j)]
1245 print *, [x_cc(i), y_cc(
j), z_cc(
k)]
1247 print *,
"We are searching in dimension ", dim,
" for image point at ", ghost_points_in(q)%ip_loc(:)
1248 print *,
"Domain size: ", [x_cc(-buff_size), y_cc(-buff_size), z_cc(-buff_size)]
1249 print *,
"x: ", x_cc(-buff_size),
" to: ", x_cc(m + buff_size - 1)
1250 print *,
"y: ", y_cc(-buff_size),
" to: ", y_cc(n + buff_size - 1)
1251 if (p /= 0) print *,
"z: ", z_cc(-buff_size),
" to: ", z_cc(p + buff_size - 1)
1252 print *,
"Image point is located approximately ", &
1253 & (ghost_points_in(q)%loc(dim) - ghost_points_in(q) %ip_loc(dim))/(s_cc(1) - s_cc(0)), &
1254 &
" grid cells away"
1255 print *,
"Levelset ", dist,
" and Norm: ", norm(:)
1257 &
"A short term fix may include increasing buff_size further in m_helper_basic (currently set to a minimum of 10)"
1259 bounds_error = .true.
1263 ghost_points_in(q)%ip_grid(dim) = index
1264 if (ghost_points_in(q)%DB(dim) == -1)
then
1265 ghost_points_in(q)%ip_grid(dim) = ghost_points_in(q)%loc(dim) + 1
1266 else if (ghost_points_in(q)%DB(dim) == 1)
then
1267 ghost_points_in(q)%ip_grid(dim) = ghost_points_in(q)%loc(dim) - 1
1273# 480 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1274#if defined(MFC_OpenACC)
1275# 480 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1277# 480 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1278#elif defined(MFC_OpenMP)
1279# 480 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1281# 480 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1283# 480 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1286 if (bounds_error) error stop
"Ghost Point and Image Point on Different Processors. Exiting"
1378 type(ghost_point),
dimension(num_gps),
intent(inout) :: ghost_points_in
1379 integer :: i,
j,
k, ii, jj, kk, gp_layers_z
1380 integer :: xp, yp, zp
1381 integer :: count, count_i, local_idx
1382 integer :: patch_id, encoded_patch_id
1387 gp_layers_z = gp_layers
1388 if (p == 0) gp_layers_z = 0
1391# 546 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1393# 546 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1394#if defined(MFC_OpenACC)
1395# 546 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1397# 546 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1398#elif defined(MFC_OpenMP)
1399# 546 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1401# 546 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1403# 546 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1405# 546 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1407# 546 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1409# 549 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1415 marker_search:
do ii = i - gp_layers, i + gp_layers
1416 do jj =
j - gp_layers,
j + gp_layers
1417 do kk =
k - gp_layers_z,
k + gp_layers_z
1425 end do marker_search
1429# 567 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1430#if defined(MFC_OpenACC)
1431# 567 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1433# 567 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1434#elif defined(MFC_OpenMP)
1435# 567 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1437# 567 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1441#if defined(MFC_OpenACC)
1442# 570 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1444# 570 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1445#elif defined(MFC_OpenMP)
1446# 570 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1448# 570 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1451 ghost_points_in(local_idx)%loc = [i,
j,
k]
1453 call s_decode_patch_periodicity(encoded_patch_id, patch_id, xp, yp, zp)
1454 ghost_points_in(local_idx)%ib_patch_id = patch_id
1455 ghost_points_in(local_idx)%x_periodicity = xp
1456 ghost_points_in(local_idx)%y_periodicity = yp
1457 ghost_points_in(local_idx)%z_periodicity = zp
1458 ghost_points_in(local_idx)%slip = patch_ib(patch_id)%slip
1460 if ((x_cc(i) - dx(i)) < x_domain%beg)
then
1461 ghost_points_in(local_idx)%DB(1) = -1
1462 else if ((x_cc(i) + dx(i)) > x_domain%end)
then
1463 ghost_points_in(local_idx)%DB(1) = 1
1465 ghost_points_in(local_idx)%DB(1) = 0
1468 if ((y_cc(
j) - dy(
j)) < y_domain%beg)
then
1469 ghost_points_in(local_idx)%DB(2) = -1
1470 else if ((y_cc(
j) + dy(
j)) > y_domain%end)
then
1471 ghost_points_in(local_idx)%DB(2) = 1
1473 ghost_points_in(local_idx)%DB(2) = 0
1477 if ((z_cc(
k) - dz(
k)) < z_domain%beg)
then
1478 ghost_points_in(local_idx)%DB(3) = -1
1479 else if ((z_cc(
k) + dz(
k)) > z_domain%end)
then
1480 ghost_points_in(local_idx)%DB(3) = 1
1482 ghost_points_in(local_idx)%DB(3) = 0
1491# 611 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1492#if defined(MFC_OpenACC)
1493# 611 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1495# 611 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1496#elif defined(MFC_OpenMP)
1497# 611 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1499# 611 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1501# 611 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1509 type(ghost_point),
dimension(num_gps),
intent(inout) :: ghost_points_in
1510 real(wp),
dimension(2, 2, 2) :: dist
1511 real(wp),
dimension(2, 2, 2) :: alpha
1512 real(wp),
dimension(2, 2, 2) :: interp_coeffs
1514 real(wp),
dimension(2, 2, 2) :: eta
1515 type(ghost_point) :: gp
1516 integer :: q, i,
j,
k, ii, jj, kk
1518 logical :: is_cell_center
1521# 629 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1523# 629 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1524#if defined(MFC_OpenACC)
1525# 629 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1527# 629 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1528#elif defined(MFC_OpenMP)
1529# 629 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1531# 629 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1533# 629 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1535# 629 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1537# 629 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1540 gp = ghost_points_in(q)
1556 dist(1 + ii, 1 + jj, 1) = sqrt((x_cc(i + ii) - gp%ip_loc(1))**2 + (y_cc(
j + jj) - gp%ip_loc(2))**2)
1559 dist(1 + ii, 1 + jj, &
1560 & 1 + kk) = sqrt((x_cc(i + ii) - gp%ip_loc(1))**2 + (y_cc(
j + jj) - gp%ip_loc(2))**2 + (z_cc(
k &
1561 & + kk) - gp%ip_loc(3))**2)
1568 interp_coeffs = 0._wp
1569 is_cell_center = .false.
1570 check_is_cell_center:
do ii = 0, 1
1572 if (dist(ii + 1, jj + 1, 1) <= 1.e-16_wp)
then
1573 interp_coeffs(ii + 1, jj + 1, 1) = 1._wp
1574 is_cell_center = .true.
1575 exit check_is_cell_center
1578 if (dist(ii + 1, jj + 1, 2) <= 1.e-16_wp)
then
1579 interp_coeffs(ii + 1, jj + 1, 2) = 1._wp
1580 is_cell_center = .true.
1581 exit check_is_cell_center
1586 end do check_is_cell_center
1588 if (.not. is_cell_center)
then
1591 patch_id = gp%ib_patch_id
1592 if (
ib_markers%sf(i,
j,
k) /= 0) alpha(1, 1, 1) = 0._wp
1593 if (
ib_markers%sf(i + 1,
j,
k) /= 0) alpha(2, 1, 1) = 0._wp
1594 if (
ib_markers%sf(i,
j + 1,
k) /= 0) alpha(1, 2, 1) = 0._wp
1595 if (
ib_markers%sf(i + 1,
j + 1,
k) /= 0) alpha(2, 2, 1) = 0._wp
1598 eta(:,:,1) = 1._wp/dist(:,:,1)**2
1599 buf = sum(alpha(:,:,1)*eta(:,:,1))
1600 if (buf > 0._wp)
then
1601 interp_coeffs(:,:,1) = alpha(:,:,1)*eta(:,:,1)/buf
1603 buf = sum(eta(:,:,1))
1604 interp_coeffs(:,:,1) = eta(:,:,1)/buf
1607 if (
ib_markers%sf(i,
j,
k + 1) /= 0) alpha(1, 1, 2) = 0._wp
1608 if (
ib_markers%sf(i + 1,
j,
k + 1) /= 0) alpha(2, 1, 2) = 0._wp
1609 if (
ib_markers%sf(i,
j + 1,
k + 1) /= 0) alpha(1, 2, 2) = 0._wp
1610 if (
ib_markers%sf(i + 1,
j + 1,
k + 1) /= 0) alpha(2, 2, 2) = 0._wp
1612 buf = sum(alpha*eta)
1614 if (buf > 0._wp)
then
1615 interp_coeffs = alpha*eta/buf
1618 interp_coeffs = eta/buf
1623 ghost_points_in(q)%interp_coeffs = interp_coeffs
1626# 716 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1627#if defined(MFC_OpenACC)
1628# 716 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1630# 716 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1631#elif defined(MFC_OpenMP)
1632# 716 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1634# 716 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1636# 716 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1642 subroutine s_interpolate_image_point(q_prim_vf, gp, alpha_rho_IP, alpha_IP, pres_IP, vel_IP, c_IP, r_IP, v_IP, pb_IP, mv_IP, &
1644 & nmom_IP, pb_in, mv_in, presb_IP, massv_IP)
1646# 724 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1648# 724 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1650# 724 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1652# 724 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1654# 724 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1656# 724 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1658# 724 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1660 type(scalar_field),
dimension(sys_size),
intent(in) :: q_prim_vf
1661 real(stp),
optional,
dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:),
intent(in) :: pb_in, mv_in
1662 type(ghost_point),
intent(in) :: gp
1663 real(wp),
intent(inout) :: pres_ip
1664 real(wp),
dimension(3),
intent(inout) :: vel_ip
1665 real(wp),
intent(inout) :: c_ip
1666# 734 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1667 real(wp),
dimension(num_fluids),
intent(inout) :: alpha_ip, alpha_rho_ip
1668# 736 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1669 real(wp),
optional,
dimension(:),
intent(inout) :: r_ip, v_ip, pb_ip, mv_ip
1670 real(wp),
optional,
dimension(:),
intent(inout) :: nmom_ip
1671 real(wp),
optional,
dimension(:),
intent(inout) :: presb_ip, massv_ip
1672 integer :: i,
j,
k,
l, q
1673 integer :: i1, i2, j1, j2, k1, k2
1676 i1 = gp%ip_grid(1); i2 = i1 + 1
1677 j1 = gp%ip_grid(2); j2 = j1 + 1
1678 k1 = gp%ip_grid(3); k2 = k1 + 1
1685 alpha_rho_ip = 0._wp
1690 if (surface_tension) c_ip = 0._wp
1692 if (bubbles_euler)
then
1695 if (.not. polytropic)
then
1703 if (.not. polytropic)
then
1710# 776 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1711#if defined(MFC_OpenACC)
1712# 776 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1714# 776 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1715#elif defined(MFC_OpenMP)
1716# 776 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1718# 776 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1722# 778 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1723#if defined(MFC_OpenACC)
1724# 778 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1726# 778 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1727#elif defined(MFC_OpenMP)
1728# 778 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1730# 778 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1734# 780 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1735#if defined(MFC_OpenACC)
1736# 780 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1738# 780 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1739#elif defined(MFC_OpenMP)
1740# 780 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1742# 780 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1745 coeff = gp%interp_coeffs(i - i1 + 1,
j - j1 + 1,
k - k1 + 1)
1747 pres_ip = pres_ip + coeff*q_prim_vf(eqn_idx%E)%sf(i,
j,
k)
1750# 786 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1751#if defined(MFC_OpenACC)
1752# 786 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1754# 786 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1755#elif defined(MFC_OpenMP)
1756# 786 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1758# 786 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1760 do q = eqn_idx%mom%beg, eqn_idx%mom%end
1761 vel_ip(q + 1 - eqn_idx%mom%beg) = vel_ip(q + 1 - eqn_idx%mom%beg) + coeff*q_prim_vf(q)%sf(i,
j,
k)
1765# 791 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1766#if defined(MFC_OpenACC)
1767# 791 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1769# 791 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1770#elif defined(MFC_OpenMP)
1771# 791 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1773# 791 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1775 do l = eqn_idx%cont%beg, eqn_idx%cont%end
1776 alpha_rho_ip(
l) = alpha_rho_ip(
l) + coeff*q_prim_vf(
l)%sf(i,
j,
k)
1777 alpha_ip(
l) = alpha_ip(
l) + coeff*q_prim_vf(eqn_idx%adv%beg +
l - 1)%sf(i,
j,
k)
1780 if (surface_tension)
then
1781 c_ip = c_ip + coeff*q_prim_vf(eqn_idx%c)%sf(i,
j,
k)
1784 if (bubbles_euler .and. .not. qbmm)
then
1786# 802 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1787#if defined(MFC_OpenACC)
1788# 802 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1790# 802 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1791#elif defined(MFC_OpenMP)
1792# 802 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1794# 802 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1797 if (polytropic)
then
1798 r_ip(
l) = r_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + (
l - 1)*2)%sf(i,
j,
k)
1799 v_ip(
l) = v_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + 1 + (
l - 1)*2)%sf(i,
j,
k)
1801 r_ip(
l) = r_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + (
l - 1)*4)%sf(i,
j,
k)
1802 v_ip(
l) = v_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + 1 + (
l - 1)*4)%sf(i,
j,
k)
1803 pb_ip(
l) = pb_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + 2 + (
l - 1)*4)%sf(i,
j,
k)
1804 mv_ip(
l) = mv_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + 3 + (
l - 1)*4)%sf(i,
j,
k)
1811 nmom_ip(
l) = nmom_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg - 1 +
l)%sf(i,
j,
k)
1813 if (.not. polytropic)
then
1816 presb_ip((q - 1)*nnode +
l) = presb_ip((q - 1)*nnode +
l) + coeff*real(pb_in(i,
j,
k,
l, q), &
1818 massv_ip((q - 1)*nnode +
l) = massv_ip((q - 1)*nnode +
l) + coeff*real(mv_in(i,
j,
k,
l, q), &
1920 type(scalar_field),
dimension(1:sys_size),
intent(in) :: q_prim_vf
1921 type(physical_parameters),
dimension(1:num_fluids),
intent(in) :: fluid_pp
1922 integer :: i, j, k, l, encoded_ib_idx, ib_idx, fluid_idx
1923 real(wp),
dimension(num_ibs, 3) :: forces, torques
1924 real(wp),
dimension(1:3,1:3) :: viscous_stress_div, viscous_stress_div_1, &
1925 & viscous_stress_div_2
1926 real(wp),
dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution
1927 real(wp) :: cell_volume, dx, dy, dz, dynamic_viscosity
1929# 899 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1930 real(wp),
dimension(num_fluids) :: dynamic_viscosities
1931# 901 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1933 call nvtxstartrange(
"COMPUTE-IB-FORCES")
1939 do fluid_idx = 1, num_fluids
1940 if (fluid_pp(fluid_idx)%Re(1) > 0._wp)
then
1941 dynamic_viscosities(fluid_idx) = 1._wp/fluid_pp(fluid_idx)%Re(1)
1943 dynamic_viscosities(fluid_idx) = 0._wp
1949# 917 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1951# 917 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1952#if defined(MFC_OpenACC)
1953# 917 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1955# 917 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1956#elif defined(MFC_OpenMP)
1957# 917 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1959# 917 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1961# 917 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1963# 917 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1965# 917 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1967# 921 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1972 if (encoded_ib_idx /= 0)
then
1973 call s_decode_patch_periodicity(encoded_ib_idx, ib_idx)
1976 if (num_dims == 3)
then
1977 radial_vector = [x_cc(i), y_cc(j), z_cc(k)] - [patch_ib(ib_idx)%x_centroid, &
1978 & patch_ib(ib_idx)%y_centroid, patch_ib(ib_idx)%z_centroid]
1980 radial_vector = [x_cc(i), y_cc(j), 0._wp] - [patch_ib(ib_idx)%x_centroid, &
1981 & patch_ib(ib_idx)%y_centroid, 0._wp]
1983 dx = x_cc(i + 1) - x_cc(i)
1984 dy = y_cc(j + 1) - y_cc(j)
1986 local_force_contribution(:) = 0._wp
1987 do fluid_idx = 0, num_fluids - 1
1990 local_force_contribution(1) = local_force_contribution(1) - (q_prim_vf(eqn_idx%E + fluid_idx)%sf(i &
1991 & + 1, j, k) - q_prim_vf(eqn_idx%E + fluid_idx)%sf(i - 1, j, &
1993 local_force_contribution(2) = local_force_contribution(2) - (q_prim_vf(eqn_idx%E + fluid_idx)%sf(i, &
1994 & j + 1, k) - q_prim_vf(eqn_idx%E + fluid_idx)%sf(i, j - 1, k))/(2._wp*dy)
1995 cell_volume = abs(dx*dy)
1997 if (num_dims == 3)
then
1998 dz = z_cc(k + 1) - z_cc(k)
1999 local_force_contribution(3) = local_force_contribution(3) - (q_prim_vf(eqn_idx%E + fluid_idx) &
2000 & %sf(i, j, k + 1) - q_prim_vf(eqn_idx%E + fluid_idx)%sf(i, j, &
2001 & k - 1))/(2._wp*dz)
2002 cell_volume = abs(cell_volume*dz)
2009 dynamic_viscosity = 0._wp
2010 do fluid_idx = 1, num_fluids
2012 dynamic_viscosity = dynamic_viscosity + (q_prim_vf(fluid_idx + eqn_idx%adv%beg - 1)%sf(i, j, &
2013 & k)*dynamic_viscosities(fluid_idx))
2017 call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i - 1, j, k)
2018 call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i + 1, j, k)
2019 viscous_stress_div(1,1:3) = (viscous_stress_div_2(1,1:3) - viscous_stress_div_1(1, &
2021 local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(1, &
2024 call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j - 1, k)
2025 call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j + 1, k)
2026 viscous_stress_div(2,1:3) = (viscous_stress_div_2(2,1:3) - viscous_stress_div_1(2, &
2028 local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(2, &
2031 if (num_dims == 3)
then
2032 call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j, &
2034 call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j, &
2036 viscous_stress_div(3,1:3) = (viscous_stress_div_2(3,1:3) - viscous_stress_div_1(3, &
2038 local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(3, &
2043 call s_cross_product(radial_vector, local_force_contribution, local_torque_contribution)
2048# 1000 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2049#if defined(MFC_OpenACC)
2050# 1000 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2052# 1000 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2053#elif defined(MFC_OpenMP)
2054# 1000 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2056# 1000 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2058 forces(ib_idx, l) = forces(ib_idx, l) + (local_force_contribution(l)*cell_volume)
2060# 1002 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2061#if defined(MFC_OpenACC)
2062# 1002 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2064# 1002 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2065#elif defined(MFC_OpenMP)
2066# 1002 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2068# 1002 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2070 torques(ib_idx, l) = torques(ib_idx, l) + local_torque_contribution(l)*cell_volume
2077# 1009 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2078#if defined(MFC_OpenACC)
2079# 1009 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2081# 1009 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2082#elif defined(MFC_OpenMP)
2083# 1009 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2085# 1009 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2087# 1009 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2093 call s_mpi_allreduce_vectors_sum(forces, forces, num_ibs, 3)
2094 call s_mpi_allreduce_vectors_sum(torques, torques, num_ibs, 3)
2099 forces(i, 1) = forces(i, 1) + accel_bf(1)*patch_ib(i)%mass
2102 forces(i, 2) = forces(i, 2) + accel_bf(2)*patch_ib(i)%mass
2105 forces(i, 3) = forces(i, 3) + accel_bf(3)*patch_ib(i)%mass
2111 patch_ib(i)%force(:) = forces(i,:)
2112 patch_ib(i)%torque(:) = torques(i,:)
2226 integer,
intent(in) :: ib_marker
2227 integer :: i, j, k, num_cells, num_cells_local
2228 real(wp),
dimension(1:3) :: center_of_mass, center_of_mass_local
2232 if (patch_ib(ib_marker)%geometry == 4 .or. patch_ib(ib_marker)%geometry == 5 .or. patch_ib(ib_marker) &
2233 & %geometry == 11 .or. patch_ib(ib_marker)%geometry == 12)
then
2234 center_of_mass_local = [0._wp, 0._wp, 0._wp]
2241 if (
ib_markers%sf(i, j, k) == ib_marker)
then
2242 num_cells_local = num_cells_local + 1
2243 center_of_mass_local = center_of_mass_local + [x_cc(i), y_cc(j), 0._wp]
2244 if (num_dims == 3) center_of_mass_local(3) = center_of_mass_local(3) + z_cc(k)
2251 call s_mpi_allreduce_integer_sum(num_cells_local, num_cells)
2252 if (num_cells /= 0)
then
2253 call s_mpi_allreduce_sum(center_of_mass_local(1), center_of_mass(1))
2254 call s_mpi_allreduce_sum(center_of_mass_local(2), center_of_mass(2))
2255 call s_mpi_allreduce_sum(center_of_mass_local(3), center_of_mass(3))
2256 center_of_mass = center_of_mass/real(num_cells, wp)
2258 patch_ib(ib_marker)%centroid_offset = [0._wp, 0._wp, 0._wp]
2264 patch_ib(ib_marker)%centroid_offset = [patch_ib(ib_marker)%x_centroid, patch_ib(ib_marker)%y_centroid, &
2265 & patch_ib(ib_marker)%z_centroid] - center_of_mass
2266 patch_ib(ib_marker)%x_centroid = center_of_mass(1)
2267 patch_ib(ib_marker)%y_centroid = center_of_mass(2)
2268 patch_ib(ib_marker)%z_centroid = center_of_mass(3)
2271 patch_ib(ib_marker)%centroid_offset = matmul(patch_ib(ib_marker)%rotation_matrix_inverse, &
2272 & patch_ib(ib_marker)%centroid_offset)
2274 patch_ib(ib_marker)%centroid_offset(:) = [0._wp, 0._wp, 0._wp]
2282 real(wp),
dimension(3),
intent(in) :: axis
2283 integer,
intent(in) :: ib_marker
2284 real(wp) :: moment, distance_to_axis, cell_volume
2285 real(wp),
dimension(3) :: position, closest_point_along_axis, vector_to_axis, normal_axis
2286 integer :: i, j, k, count
2289 normal_axis = [0, 0, 1]
2290 else if (sqrt(sum(axis**2)) < sgm_eps)
then
2292 patch_ib(ib_marker)%moment = 1._wp
2295 normal_axis = axis/sqrt(sum(axis))
2299 if (patch_ib(ib_marker)%geometry == 2)
then
2300 patch_ib(ib_marker)%moment = 0.5_wp*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%radius)**2
2301 else if (patch_ib(ib_marker)%geometry == 3)
then
2302 patch_ib(ib_marker)%moment = patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%length_x**2 + patch_ib(ib_marker) &
2303 & %length_y**2)/6._wp
2304 else if (patch_ib(ib_marker)%geometry == 6)
then
2305 patch_ib(ib_marker)%moment = 0.0625_wp*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%length_x**2 + patch_ib(ib_marker) &
2307 else if (patch_ib(ib_marker)%geometry == 8)
then
2308 patch_ib(ib_marker)%moment = 0.4*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%radius)**2
2312 cell_volume = (x_cc(1) - x_cc(0))*(y_cc(1) - y_cc(0))
2315 cell_volume = cell_volume*(z_cc(1) - z_cc(0))
2319# 1149 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2321# 1149 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2322#if defined(MFC_OpenACC)
2323# 1149 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2325# 1149 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2326#elif defined(MFC_OpenMP)
2327# 1149 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2329# 1149 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2331# 1149 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2333# 1149 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2335# 1149 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2337# 1151 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2341 if (
ib_markers%sf(i, j, k) == ib_marker)
then
2343# 1155 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2344#if defined(MFC_OpenACC)
2345# 1155 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2347# 1155 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2348#elif defined(MFC_OpenMP)
2349# 1155 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2351# 1155 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2357 position = [x_cc(i), y_cc(j), 0._wp] - [patch_ib(ib_marker)%x_centroid, &
2358 & patch_ib(ib_marker)%y_centroid, 0._wp]
2360 position = [x_cc(i), y_cc(j), z_cc(k)] - [patch_ib(ib_marker)%x_centroid, &
2361 & patch_ib(ib_marker)%y_centroid, patch_ib(ib_marker)%z_centroid]
2365 closest_point_along_axis = normal_axis*dot_product(normal_axis, position)
2366 vector_to_axis = position - closest_point_along_axis
2367 distance_to_axis = dot_product(vector_to_axis, vector_to_axis)
2371# 1173 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2372#if defined(MFC_OpenACC)
2373# 1173 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2375# 1173 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2376#elif defined(MFC_OpenMP)
2377# 1173 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2379# 1173 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2381 moment = moment + distance_to_axis
2387# 1179 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2388#if defined(MFC_OpenACC)
2389# 1179 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2391# 1179 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2392#elif defined(MFC_OpenMP)
2393# 1179 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2395# 1179 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2397# 1179 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2401 patch_ib(ib_marker)%moment = moment*patch_ib(ib_marker)%mass/(count*cell_volume)
2403# 1183 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2404#if defined(MFC_OpenACC)
2405# 1183 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2407# 1183 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2408#elif defined(MFC_OpenMP)
2409# 1183 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2411# 1183 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"