857 type(scalar_field), &
858 dimension(sys_size), &
861 type(scalar_field), &
862 dimension(sys_size), &
863 intent(INOUT) :: q_prim_vf
865 real(stp),
dimension(idwbuff(1)%beg:, idwbuff(2)%beg:, idwbuff(3)%beg:, 1:, 1:),
optional,
intent(INOUT) :: pb_in, mv_in
867 integer :: i,
j,
k,
l, q, r
869 real(wp) :: rho, gamma, pi_inf, dyn_pres
870 real(wp),
dimension(2) :: re_k
875 real(wp),
dimension(3) :: vel_ip, vel_norm_ip
877# 190 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
878 real(wp),
dimension(num_fluids) :: gs
879 real(wp),
dimension(num_fluids) :: alpha_rho_ip, alpha_ip
880 real(wp),
dimension(nb) :: r_ip, v_ip, pb_ip, mv_ip
881 real(wp),
dimension(nb*nmom) :: nmom_ip
882 real(wp),
dimension(nb*nnode) :: presb_ip, massv_ip
883# 196 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
887 real(wp),
dimension(3) :: norm
888 real(wp),
dimension(3) :: physical_loc
889 real(wp),
dimension(3) :: vel_g
890 real(wp),
dimension(3) :: radial_vector
891 real(wp),
dimension(3) :: rotation_velocity
895 type(ghost_point) :: gp
896 type(ghost_point) :: innerp
900# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
902# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
903#if defined(MFC_OpenACC)
904# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
906# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
907#elif defined(MFC_OpenMP)
908# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
910# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
912# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
914# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
916# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
918# 211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
924 if (patch_id /= 0)
then
925 q_prim_vf(e_idx)%sf(
j,
k,
l) = 1._wp
926 if (patch_ib(patch_id)%moving_ibm > 0)
then
929 rho = rho + q_prim_vf(contxb + i - 1)%sf(
j,
k,
l)
934 q_cons_vf(momxb + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)*rho
935 q_prim_vf(momxb + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)
943# 234 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
945# 234 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
946#if defined(MFC_OpenACC)
947# 234 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
949# 234 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
950#elif defined(MFC_OpenMP)
951# 234 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
953# 234 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
955# 234 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
957# 234 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
959# 234 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
964# 237 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
966# 237 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
967#if defined(MFC_OpenACC)
968# 237 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
970# 237 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
971#elif defined(MFC_OpenMP)
972# 237 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
974# 237 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
976# 237 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
978# 237 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
980# 237 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
982# 237 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
994 physical_loc = [x_cc(
j), y_cc(
k), z_cc(
l)]
996 physical_loc = [x_cc(
j), y_cc(
k), 0._wp]
1000 if (bubbles_euler .and. .not. qbmm)
then
1002 alpha_rho_ip, alpha_ip, pres_ip, vel_ip, c_ip, &
1003 r_ip, v_ip, pb_ip, mv_ip)
1004 else if (qbmm .and. polytropic)
then
1006 alpha_rho_ip, alpha_ip, pres_ip, vel_ip, c_ip, &
1007 r_ip, v_ip, pb_ip, mv_ip, nmom_ip)
1008 else if (qbmm .and. .not. polytropic)
then
1010 alpha_rho_ip, alpha_ip, pres_ip, vel_ip, c_ip, &
1011 r_ip, v_ip, pb_ip, mv_ip, nmom_ip, pb_in, mv_in, presb_ip, massv_ip)
1014 alpha_rho_ip, alpha_ip, pres_ip, vel_ip, c_ip)
1021# 274 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1022#if defined(MFC_OpenACC)
1023# 274 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1025# 274 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1026#elif defined(MFC_OpenMP)
1027# 274 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1029# 274 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1031 do q = 1, num_fluids
1032 q_prim_vf(q)%sf(
j,
k,
l) = alpha_rho_ip(q)
1033 q_prim_vf(advxb + q - 1)%sf(
j,
k,
l) = alpha_ip(q)
1036 if (surface_tension)
then
1037 q_prim_vf(c_idx)%sf(
j,
k,
l) = c_ip
1041 if (patch_ib(patch_id)%moving_ibm <= 1)
then
1042 q_prim_vf(e_idx)%sf(
j,
k,
l) = pres_ip
1044 q_prim_vf(e_idx)%sf(
j,
k,
l) = 0._wp
1046# 289 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1047#if defined(MFC_OpenACC)
1048# 289 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1050# 289 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1051#elif defined(MFC_OpenMP)
1052# 289 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1054# 289 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1056 do q = 1, num_fluids
1058 q_prim_vf(e_idx)%sf(
j,
k,
l) = q_prim_vf(e_idx)%sf(
j,
k,
l) + pres_ip/(1._wp - 2._wp*abs(gp%levelset*alpha_rho_ip(q)/pres_ip)*dot_product(patch_ib(patch_id)%force/patch_ib(patch_id)%mass, gp%levelset_norm))
1062 if (model_eqns /= 4)
then
1064 if (elasticity)
then
1065 call s_convert_species_to_mixture_variables_acc(rho, gamma, pi_inf, qv_k, alpha_ip, &
1066 alpha_rho_ip, re_k, g_k, gs)
1068 call s_convert_species_to_mixture_variables_acc(rho, gamma, pi_inf, qv_k, alpha_ip, &
1075 norm(1:3) = gp%levelset_norm
1076 buf = sqrt(sum(norm**2))
1078 vel_norm_ip = sum(vel_ip*norm)*norm
1079 vel_g = vel_ip - vel_norm_ip
1080 if (patch_ib(patch_id)%moving_ibm /= 0)
then
1082 radial_vector = physical_loc - [patch_ib(patch_id)%x_centroid, &
1083 patch_ib(patch_id)%y_centroid, patch_ib(patch_id)%z_centroid]
1084 call s_cross_product(matmul(patch_ib(patch_id)%rotation_matrix, patch_ib(patch_id)%angular_vel), radial_vector, rotation_velocity)
1087 vel_g = vel_g + sum((patch_ib(patch_id)%vel + rotation_velocity)*norm)*norm
1090 if (patch_ib(patch_id)%moving_ibm == 0)
then
1095 radial_vector = physical_loc - [patch_ib(patch_id)%x_centroid, &
1096 patch_ib(patch_id)%y_centroid, patch_ib(patch_id)%z_centroid]
1098 call s_cross_product(matmul(patch_ib(patch_id)%rotation_matrix, patch_ib(patch_id)%angular_vel), radial_vector, rotation_velocity)
1101 vel_g(q) = patch_ib(patch_id)%vel(q)
1102 vel_g(q) = vel_g(q) + rotation_velocity(q)
1109# 342 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1110#if defined(MFC_OpenACC)
1111# 342 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1113# 342 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1114#elif defined(MFC_OpenMP)
1115# 342 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1117# 342 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1122 vel_g(q - momxb + 1)/2._wp
1127# 350 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1128#if defined(MFC_OpenACC)
1129# 350 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1131# 350 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1132#elif defined(MFC_OpenMP)
1133# 350 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1135# 350 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1137 do q = 1, num_fluids
1143 if (surface_tension)
then
1148 if (bubbles_euler)
then
1149 q_cons_vf(e_idx)%sf(
j,
k,
l) = (1 - alpha_ip(1))*(gamma*pres_ip + pi_inf + dyn_pres)
1151 q_cons_vf(e_idx)%sf(
j,
k,
l) = gamma*pres_ip + pi_inf + dyn_pres
1154 if (bubbles_euler .and. .not. qbmm)
then
1155 call s_comp_n_from_prim(alpha_ip(1), r_ip, nbub, weight)
1157# 370 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1158#if defined(MFC_OpenACC)
1159# 370 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1161# 370 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1162#elif defined(MFC_OpenMP)
1163# 370 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1165# 370 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1168 q_cons_vf(bubxb + (q - 1)*2)%sf(
j,
k,
l) = nbub*r_ip(q)
1169 q_cons_vf(bubxb + (q - 1)*2 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1170 if (.not. polytropic)
then
1171 q_cons_vf(bubxb + (q - 1)*4)%sf(
j,
k,
l) = nbub*r_ip(q)
1172 q_cons_vf(bubxb + (q - 1)*4 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1173 q_cons_vf(bubxb + (q - 1)*4 + 2)%sf(
j,
k,
l) = nbub*pb_ip(q)
1174 q_cons_vf(bubxb + (q - 1)*4 + 3)%sf(
j,
k,
l) = nbub*mv_ip(q)
1183# 386 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1184#if defined(MFC_OpenACC)
1185# 386 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1187# 386 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1188#elif defined(MFC_OpenMP)
1189# 386 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1191# 386 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1198# 391 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1199#if defined(MFC_OpenACC)
1200# 391 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1202# 391 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1203#elif defined(MFC_OpenMP)
1204# 391 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1206# 391 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1212 if (.not. polytropic)
then
1214# 397 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1215#if defined(MFC_OpenACC)
1216# 397 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1218# 397 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1219#elif defined(MFC_OpenMP)
1220# 397 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1222# 397 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1226# 399 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1227#if defined(MFC_OpenACC)
1228# 399 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1230# 399 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1231#elif defined(MFC_OpenMP)
1232# 399 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1234# 399 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1237 pb_in(
j,
k,
l, r, q) = presb_ip((q - 1)*nnode + r)
1238 mv_in(
j,
k,
l, r, q) = massv_ip((q - 1)*nnode + r)
1244 if (model_eqns == 3)
then
1246# 409 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1247#if defined(MFC_OpenACC)
1248# 409 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1250# 409 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1251#elif defined(MFC_OpenMP)
1252# 409 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1254# 409 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1257 q_cons_vf(q)%sf(
j,
k,
l) = alpha_ip(q - intxb + 1)*(gammas(q - intxb + 1)*pres_ip &
1258 + pi_infs(q - intxb + 1))
1263# 416 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1265# 416 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1266#if defined(MFC_OpenACC)
1267# 416 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1269# 416 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1270#elif defined(MFC_OpenMP)
1271# 416 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1273# 416 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1275# 416 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1277# 416 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1279# 416 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1286# 421 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1288# 421 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1289#if defined(MFC_OpenACC)
1290# 421 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1292# 421 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1293#elif defined(MFC_OpenMP)
1294# 421 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1296# 421 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1298# 421 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1300# 421 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1302# 421 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1304# 421 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1314# 429 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1315#if defined(MFC_OpenACC)
1316# 429 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1318# 429 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1319#elif defined(MFC_OpenMP)
1320# 429 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1322# 429 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1329# 434 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1331# 434 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1332#if defined(MFC_OpenACC)
1333# 434 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1335# 434 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1336#elif defined(MFC_OpenMP)
1337# 434 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1339# 434 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1341# 434 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1343# 434 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1345# 434 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1355 type(ghost_point),
dimension(num_gps),
intent(INOUT) :: ghost_points_in
1358 real(wp),
dimension(3) :: norm
1359 real(wp),
dimension(3) :: physical_loc
1360 real(wp) :: temp_loc
1361 real(wp),
pointer,
dimension(:) :: s_cc => null()
1363 type(ghost_point) :: gp
1366 integer :: i,
j,
k,
l
1372 gp = ghost_points_in(q)
1379 physical_loc = [x_cc(i), y_cc(
j), z_cc(
k)]
1381 physical_loc = [x_cc(i), y_cc(
j), 0._wp]
1385 patch_id = gp%ib_patch_id
1386 dist = abs(real(gp%levelset, kind=wp))
1387 norm(:) = gp%levelset_norm
1388 ghost_points_in(q)%ip_loc(:) = physical_loc(:) + 2*dist*norm(:)
1391 do dim = 1, num_dims
1396 bound = m + buff_size - 1
1397 elseif (dim == 2)
then
1399 bound = n + buff_size - 1
1402 bound = p + buff_size - 1
1405 if (f_approx_equal(norm(dim), 0._wp))
then
1407 ghost_points_in(q)%ip_grid(dim) = ghost_points_in(q)%loc(dim)
1409 if (norm(dim) > 0)
then
1415 index = ghost_points_in(q)%loc(dim)
1416 temp_loc = ghost_points_in(q)%ip_loc(dim)
1417 do while ((temp_loc < s_cc(index) &
1418 .or. temp_loc > s_cc(index + 1)))
1420 if (index < -buff_size .or. index > bound)
then
1421 print *,
"A required image point is not located in this computational domain."
1422 print *,
"Ghost Point is located at ", [x_cc(i), y_cc(
j), z_cc(
k)],
" while moving in dimension ", dim
1423 print *,
"We are searching for image point at ", ghost_points_in(q)%ip_loc(:)
1424 print *,
"We can only support points located inside the box from ", [x_cc(-buff_size), y_cc(-buff_size), z_cc(-buff_size)]
1425 print *,
"To ", [x_cc(m + buff_size - 1), y_cc(n + buff_size - 1), z_cc(p + buff_size - 1)]
1426 print *,
"Image point is located approximately ", (ghost_points_in(q)%loc(dim) - ghost_points_in(q)%ip_loc(dim))/(s_cc(1) - s_cc(0)),
" grid cells away"
1427 print *,
"Levelset ", dist,
" and Norm: ", norm(:)
1428 print *,
"A short term fix may include increasing buff_size further in m_helper_basic (currently set to a minimum of 10)"
1429 error stop
"Ghost Point and Image Point on Different Processors"
1432 ghost_points_in(q)%ip_grid(dim) = index
1433 if (ghost_points_in(q)%DB(dim) == -1)
then
1434 ghost_points_in(q)%ip_grid(dim) = ghost_points_in(q)%loc(dim) + 1
1435 else if (ghost_points_in(q)%DB(dim) == 1)
then
1436 ghost_points_in(q)%ip_grid(dim) = ghost_points_in(q)%loc(dim) - 1
1496 type(ghost_point),
dimension(num_gps),
intent(INOUT) :: ghost_points_in
1497 type(ghost_point),
dimension(num_inner_gps),
intent(INOUT) :: inner_points_in
1498 integer,
dimension(2*gp_layers + 1, 2*gp_layers + 1) &
1500 integer,
dimension(2*gp_layers + 1, 2*gp_layers + 1, 2*gp_layers + 1) &
1503 integer :: count, count_i
1515 i - gp_layers:i + gp_layers, &
1516 j - gp_layers:
j + gp_layers, 0)
1517 if (any(subsection_2d == 0))
then
1518 ghost_points_in(count)%loc = [i,
j, 0]
1520 ghost_points_in(count)%ib_patch_id = &
1523 ghost_points_in(count)%slip = patch_ib(patch_id)%slip
1526 if ((x_cc(i) - dx(i)) < x_domain%beg)
then
1527 ghost_points_in(count)%DB(1) = -1
1528 else if ((x_cc(i) + dx(i)) > x_domain%end)
then
1529 ghost_points_in(count)%DB(1) = 1
1531 ghost_points_in(count)%DB(1) = 0
1534 if ((y_cc(
j) - dy(
j)) < y_domain%beg)
then
1535 ghost_points_in(count)%DB(2) = -1
1536 else if ((y_cc(
j) + dy(
j)) > y_domain%end)
then
1537 ghost_points_in(count)%DB(2) = 1
1539 ghost_points_in(count)%DB(2) = 0
1545 inner_points_in(count_i)%loc = [i,
j, 0]
1547 inner_points_in(count_i)%ib_patch_id = &
1549 inner_points_in(count_i)%slip = patch_ib(patch_id)%slip
1550 count_i = count_i + 1
1559 i - gp_layers:i + gp_layers, &
1560 j - gp_layers:
j + gp_layers, &
1561 k - gp_layers:
k + gp_layers)
1562 if (any(subsection_3d == 0))
then
1563 ghost_points_in(count)%loc = [i,
j,
k]
1565 ghost_points_in(count)%ib_patch_id = &
1567 ghost_points_in(count)%slip = patch_ib(patch_id)%slip
1569 if ((x_cc(i) - dx(i)) < x_domain%beg)
then
1570 ghost_points_in(count)%DB(1) = -1
1571 else if ((x_cc(i) + dx(i)) > x_domain%end)
then
1572 ghost_points_in(count)%DB(1) = 1
1574 ghost_points_in(count)%DB(1) = 0
1577 if ((y_cc(
j) - dy(
j)) < y_domain%beg)
then
1578 ghost_points_in(count)%DB(2) = -1
1579 else if ((y_cc(
j) + dy(
j)) > y_domain%end)
then
1580 ghost_points_in(count)%DB(2) = 1
1582 ghost_points_in(count)%DB(2) = 0
1585 if ((z_cc(
k) - dz(
k)) < z_domain%beg)
then
1586 ghost_points_in(count)%DB(3) = -1
1587 else if ((z_cc(
k) + dz(
k)) > z_domain%end)
then
1588 ghost_points_in(count)%DB(3) = 1
1590 ghost_points_in(count)%DB(3) = 0
1595 inner_points_in(count_i)%loc = [i,
j,
k]
1597 inner_points_in(count_i)%ib_patch_id = &
1599 inner_points_in(count_i)%slip = patch_ib(patch_id)%slip
1601 count_i = count_i + 1
1614 type(ghost_point),
dimension(num_gps),
intent(INOUT) :: ghost_points_in
1616 real(wp),
dimension(2, 2, 2) :: dist
1617 real(wp),
dimension(2, 2, 2) :: alpha
1618 real(wp),
dimension(2, 2, 2) :: interp_coeffs
1620 real(wp),
dimension(2, 2, 2) :: eta
1621 type(ghost_point) :: gp
1623 integer :: i1, i2, j1, j2, k1, k2
1629 gp = ghost_points_in(i)
1631 i1 = gp%ip_grid(1); i2 = i1 + 1
1632 j1 = gp%ip_grid(2); j2 = j1 + 1
1636 dist(1, 1, 1) = sqrt( &
1637 (x_cc(i1) - gp%ip_loc(1))**2 + &
1638 (y_cc(j1) - gp%ip_loc(2))**2)
1639 dist(2, 1, 1) = sqrt( &
1640 (x_cc(i2) - gp%ip_loc(1))**2 + &
1641 (y_cc(j1) - gp%ip_loc(2))**2)
1642 dist(1, 2, 1) = sqrt( &
1643 (x_cc(i1) - gp%ip_loc(1))**2 + &
1644 (y_cc(j2) - gp%ip_loc(2))**2)
1645 dist(2, 2, 1) = sqrt( &
1646 (x_cc(i2) - gp%ip_loc(1))**2 + &
1647 (y_cc(j2) - gp%ip_loc(2))**2)
1649 interp_coeffs = 0._wp
1651 if (dist(1, 1, 1) <= 1.e-16_wp)
then
1652 interp_coeffs(1, 1, 1) = 1._wp
1653 else if (dist(2, 1, 1) <= 1.e-16_wp)
then
1654 interp_coeffs(2, 1, 1) = 1._wp
1655 else if (dist(1, 2, 1) <= 1.e-16_wp)
then
1656 interp_coeffs(1, 2, 1) = 1._wp
1657 else if (dist(2, 2, 1) <= 1.e-16_wp)
then
1658 interp_coeffs(2, 2, 1) = 1._wp
1660 eta(:, :, 1) = 1._wp/dist(:, :, 1)**2
1662 patch_id = gp%ib_patch_id
1663 if (
ib_markers%sf(i1, j1, 0) /= 0) alpha(1, 1, 1) = 0._wp
1664 if (
ib_markers%sf(i2, j1, 0) /= 0) alpha(2, 1, 1) = 0._wp
1665 if (
ib_markers%sf(i1, j2, 0) /= 0) alpha(1, 2, 1) = 0._wp
1666 if (
ib_markers%sf(i2, j2, 0) /= 0) alpha(2, 2, 1) = 0._wp
1667 buf = sum(alpha(:, :, 1)*eta(:, :, 1))
1668 if (buf > 0._wp)
then
1669 interp_coeffs(:, :, 1) = alpha(:, :, 1)*eta(:, :, 1)/buf
1671 buf = sum(eta(:, :, 1))
1672 interp_coeffs(:, :, 1) = eta(:, :, 1)/buf
1676 ghost_points_in(i)%interp_coeffs = interp_coeffs
1681 gp = ghost_points_in(i)
1683 i1 = gp%ip_grid(1); i2 = i1 + 1
1684 j1 = gp%ip_grid(2); j2 = j1 + 1
1685 k1 = gp%ip_grid(3); k2 = k1 + 1
1688 dist(1, 1, 1) = sqrt( &
1689 (x_cc(i1) - gp%ip_loc(1))**2 + &
1690 (y_cc(j1) - gp%ip_loc(2))**2 + &
1691 (z_cc(k1) - gp%ip_loc(3))**2)
1692 dist(2, 1, 1) = sqrt( &
1693 (x_cc(i2) - gp%ip_loc(1))**2 + &
1694 (y_cc(j1) - gp%ip_loc(2))**2 + &
1695 (z_cc(k1) - gp%ip_loc(3))**2)
1696 dist(1, 2, 1) = sqrt( &
1697 (x_cc(i1) - gp%ip_loc(1))**2 + &
1698 (y_cc(j2) - gp%ip_loc(2))**2 + &
1699 (z_cc(k1) - gp%ip_loc(3))**2)
1700 dist(2, 2, 1) = sqrt( &
1701 (x_cc(i2) - gp%ip_loc(1))**2 + &
1702 (y_cc(j2) - gp%ip_loc(2))**2 + &
1703 (z_cc(k1) - gp%ip_loc(3))**2)
1704 dist(1, 1, 2) = sqrt( &
1705 (x_cc(i1) - gp%ip_loc(1))**2 + &
1706 (y_cc(j1) - gp%ip_loc(2))**2 + &
1707 (z_cc(k2) - gp%ip_loc(3))**2)
1708 dist(2, 1, 2) = sqrt( &
1709 (x_cc(i2) - gp%ip_loc(1))**2 + &
1710 (y_cc(j1) - gp%ip_loc(2))**2 + &
1711 (z_cc(k2) - gp%ip_loc(3))**2)
1712 dist(1, 2, 2) = sqrt( &
1713 (x_cc(i1) - gp%ip_loc(1))**2 + &
1714 (y_cc(j2) - gp%ip_loc(2))**2 + &
1715 (z_cc(k2) - gp%ip_loc(3))**2)
1716 dist(2, 2, 2) = sqrt( &
1717 (x_cc(i2) - gp%ip_loc(1))**2 + &
1718 (y_cc(j2) - gp%ip_loc(2))**2 + &
1719 (z_cc(k2) - gp%ip_loc(3))**2)
1720 interp_coeffs = 0._wp
1722 if (dist(1, 1, 1) <= 1.e-16_wp)
then
1723 interp_coeffs(1, 1, 1) = 1._wp
1724 else if (dist(2, 1, 1) <= 1.e-16_wp)
then
1725 interp_coeffs(2, 1, 1) = 1._wp
1726 else if (dist(1, 2, 1) <= 1.e-16_wp)
then
1727 interp_coeffs(1, 2, 1) = 1._wp
1728 else if (dist(2, 2, 1) <= 1.e-16_wp)
then
1729 interp_coeffs(2, 2, 1) = 1._wp
1730 else if (dist(1, 1, 2) <= 1.e-16_wp)
then
1731 interp_coeffs(1, 1, 2) = 1._wp
1732 else if (dist(2, 1, 2) <= 1.e-16_wp)
then
1733 interp_coeffs(2, 1, 2) = 1._wp
1734 else if (dist(1, 2, 2) <= 1.e-16_wp)
then
1735 interp_coeffs(1, 2, 2) = 1._wp
1736 else if (dist(2, 2, 2) <= 1.e-16_wp)
then
1737 interp_coeffs(2, 2, 2) = 1._wp
1741 if (
ib_markers%sf(i1, j1, k1) /= 0) alpha(1, 1, 1) = 0._wp
1742 if (
ib_markers%sf(i2, j1, k1) /= 0) alpha(2, 1, 1) = 0._wp
1743 if (
ib_markers%sf(i1, j2, k1) /= 0) alpha(1, 2, 1) = 0._wp
1744 if (
ib_markers%sf(i2, j2, k1) /= 0) alpha(2, 2, 1) = 0._wp
1745 if (
ib_markers%sf(i1, j1, k2) /= 0) alpha(1, 1, 2) = 0._wp
1746 if (
ib_markers%sf(i2, j1, k2) /= 0) alpha(2, 1, 2) = 0._wp
1747 if (
ib_markers%sf(i1, j2, k2) /= 0) alpha(1, 2, 2) = 0._wp
1748 if (
ib_markers%sf(i2, j2, k2) /= 0) alpha(2, 2, 2) = 0._wp
1749 buf = sum(alpha*eta)
1750 if (buf > 0._wp)
then
1751 interp_coeffs = alpha*eta/buf
1754 interp_coeffs = eta/buf
1758 ghost_points_in(i)%interp_coeffs = interp_coeffs
1783 pres_IP, vel_IP, c_IP, r_IP, v_IP, pb_IP, &
1784 mv_IP, nmom_IP, pb_in, mv_in, presb_IP, massv_IP)
1786# 873 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1788# 873 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1790# 873 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1792# 873 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1794# 873 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1796# 873 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1798# 873 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1800 type(scalar_field), &
1801 dimension(sys_size), &
1802 intent(IN) :: q_prim_vf
1804 real(stp),
optional,
dimension(idwbuff(1)%beg:, idwbuff(2)%beg:, idwbuff(3)%beg:, 1:, 1:),
intent(IN) :: pb_in, mv_in
1806 type(ghost_point),
intent(IN) :: gp
1807 real(wp),
intent(INOUT) :: pres_ip
1808 real(wp),
dimension(3),
intent(INOUT) :: vel_ip
1809 real(wp),
intent(INOUT) :: c_ip
1810# 887 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1811 real(wp),
dimension(num_fluids),
intent(INOUT) :: alpha_ip, alpha_rho_ip
1812# 889 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1813 real(wp),
optional,
dimension(:),
intent(INOUT) :: r_ip, v_ip, pb_ip, mv_ip
1814 real(wp),
optional,
dimension(:),
intent(INOUT) :: nmom_ip
1815 real(wp),
optional,
dimension(:),
intent(INOUT) :: presb_ip, massv_ip
1817 integer :: i,
j,
k,
l, q
1818 integer :: i1, i2, j1, j2, k1, k2
1821 i1 = gp%ip_grid(1); i2 = i1 + 1
1822 j1 = gp%ip_grid(2); j2 = j1 + 1
1823 k1 = gp%ip_grid(3); k2 = k1 + 1
1830 alpha_rho_ip = 0._wp
1835 if (surface_tension) c_ip = 0._wp
1837 if (bubbles_euler)
then
1840 if (.not. polytropic)
then
1848 if (.not. polytropic)
then
1855# 930 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1856#if defined(MFC_OpenACC)
1857# 930 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1859# 930 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1860#elif defined(MFC_OpenMP)
1861# 930 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1863# 930 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1867# 932 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1868#if defined(MFC_OpenACC)
1869# 932 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1871# 932 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1872#elif defined(MFC_OpenMP)
1873# 932 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1875# 932 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1879# 934 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1880#if defined(MFC_OpenACC)
1881# 934 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1883# 934 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1884#elif defined(MFC_OpenMP)
1885# 934 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1887# 934 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1891 coeff = gp%interp_coeffs(i - i1 + 1,
j - j1 + 1,
k - k1 + 1)
1893 pres_ip = pres_ip + coeff* &
1894 q_prim_vf(e_idx)%sf(i,
j,
k)
1897# 942 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1898#if defined(MFC_OpenACC)
1899# 942 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1901# 942 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1902#elif defined(MFC_OpenMP)
1903# 942 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1905# 942 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1908 vel_ip(q + 1 - momxb) = vel_ip(q + 1 - momxb) + coeff* &
1909 q_prim_vf(q)%sf(i,
j,
k)
1913# 948 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1914#if defined(MFC_OpenACC)
1915# 948 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1917# 948 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1918#elif defined(MFC_OpenMP)
1919# 948 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1921# 948 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1923 do l = contxb, contxe
1924 alpha_rho_ip(
l) = alpha_rho_ip(
l) + coeff* &
1925 q_prim_vf(
l)%sf(i,
j,
k)
1926 alpha_ip(
l) = alpha_ip(
l) + coeff* &
1927 q_prim_vf(advxb +
l - 1)%sf(i,
j,
k)
1930 if (surface_tension)
then
1931 c_ip = c_ip + coeff*q_prim_vf(c_idx)%sf(i,
j,
k)
1934 if (bubbles_euler .and. .not. qbmm)
then
1936# 961 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1937#if defined(MFC_OpenACC)
1938# 961 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1940# 961 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1941#elif defined(MFC_OpenMP)
1942# 961 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1944# 961 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1947 if (polytropic)
then
1948 r_ip(
l) = r_ip(
l) + coeff*q_prim_vf(bubxb + (
l - 1)*2)%sf(i,
j,
k)
1949 v_ip(
l) = v_ip(
l) + coeff*q_prim_vf(bubxb + 1 + (
l - 1)*2)%sf(i,
j,
k)
1951 r_ip(
l) = r_ip(
l) + coeff*q_prim_vf(bubxb + (
l - 1)*4)%sf(i,
j,
k)
1952 v_ip(
l) = v_ip(
l) + coeff*q_prim_vf(bubxb + 1 + (
l - 1)*4)%sf(i,
j,
k)
1953 pb_ip(
l) = pb_ip(
l) + coeff*q_prim_vf(bubxb + 2 + (
l - 1)*4)%sf(i,
j,
k)
1954 mv_ip(
l) = mv_ip(
l) + coeff*q_prim_vf(bubxb + 3 + (
l - 1)*4)%sf(i,
j,
k)
1961 nmom_ip(
l) = nmom_ip(
l) + coeff*q_prim_vf(bubxb - 1 +
l)%sf(i,
j,
k)
1963 if (.not. polytropic)
then
1966 presb_ip((q - 1)*nnode +
l) = presb_ip((q - 1)*nnode +
l) + &
1967 coeff*real(pb_in(i,
j,
k,
l, q), kind=wp)
1968 massv_ip((q - 1)*nnode +
l) = massv_ip((q - 1)*nnode +
l) + &
1969 coeff*real(mv_in(i,
j,
k,
l, q), kind=wp)
2112 type(scalar_field),
dimension(1:sys_size),
intent(in) :: q_prim_vf
2113 type(physical_parameters),
dimension(1:num_fluids),
intent(in) :: fluid_pp
2115 integer :: gp_id, i, j, k, l, q, ib_idx, fluid_idx
2116 real(wp),
dimension(num_ibs, 3) :: forces, torques
2117 real(wp),
dimension(1:3, 1:3) :: viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2, viscous_cross_1, viscous_cross_2
2118 real(wp),
dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution, vel
2119 real(wp) :: cell_volume, dx, dy, dz, dynamic_viscosity
2120# 1059 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2121 real(wp),
dimension(num_fluids) :: dynamic_viscosities
2122# 1061 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2127 do fluid_idx = 1, num_fluids
2128 if (fluid_pp(fluid_idx)%Re(1) /= 0._wp)
then
2129 dynamic_viscosities(fluid_idx) = 1._wp/fluid_pp(fluid_idx)%Re(1)
2131 dynamic_viscosities(fluid_idx) = 0._wp
2137# 1074 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2139# 1074 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2140#if defined(MFC_OpenACC)
2141# 1074 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2143# 1074 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2144#elif defined(MFC_OpenMP)
2145# 1074 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2147# 1074 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2149# 1074 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2151# 1074 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2153# 1074 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2155# 1074 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2161 if (ib_idx /= 0)
then
2163 if (num_dims == 3)
then
2164 radial_vector = [x_cc(i), y_cc(j), z_cc(k)] - [patch_ib(ib_idx)%x_centroid, patch_ib(ib_idx)%y_centroid, patch_ib(ib_idx)%z_centroid]
2166 radial_vector = [x_cc(i), y_cc(j), 0._wp] - [patch_ib(ib_idx)%x_centroid, patch_ib(ib_idx)%y_centroid, 0._wp]
2168 dx = x_cc(i + 1) - x_cc(i)
2169 dy = y_cc(j + 1) - y_cc(j)
2171 local_force_contribution(:) = 0._wp
2172 do fluid_idx = 0, num_fluids - 1
2174 local_force_contribution(1) = local_force_contribution(1) - (q_prim_vf(e_idx + fluid_idx)%sf(i + 1, j, k) - q_prim_vf(e_idx + fluid_idx)%sf(i - 1, j, k))/(2._wp*dx)
2175 local_force_contribution(2) = local_force_contribution(2) - (q_prim_vf(e_idx + fluid_idx)%sf(i, j + 1, k) - q_prim_vf(e_idx + fluid_idx)%sf(i, j - 1, k))/(2._wp*dy)
2176 cell_volume = abs(dx*dy)
2178 if (num_dims == 3)
then
2179 dz = z_cc(k + 1) - z_cc(k)
2180 local_force_contribution(3) = local_force_contribution(3) - (q_prim_vf(e_idx + fluid_idx)%sf(i, j, k + 1) - q_prim_vf(e_idx + fluid_idx)%sf(i, j, k - 1))/(2._wp*dz)
2181 cell_volume = abs(cell_volume*dz)
2186 call s_cross_product(radial_vector, local_force_contribution, local_torque_contribution)
2192 dynamic_viscosity = 0._wp
2193 do fluid_idx = 1, num_fluids
2195 dynamic_viscosity = dynamic_viscosity + (q_prim_vf(fluid_idx + advxb - 1)%sf(i, j, k)*dynamic_viscosities(fluid_idx))
2199 call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i - 1, j, k)
2200 call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i + 1, j, k)
2201 viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1)/(2._wp*dx)
2202 local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(1, 1:3)
2205 call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_cross_1(l, 1:3))
2206 call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_cross_2(l, 1:3))
2209 viscous_stress_div = (viscous_cross_2 - viscous_cross_1)/(2._wp*dx)
2210 local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3)
2212 call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j - 1, k)
2213 call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j + 1, k)
2214 viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1)/(2._wp*dy)
2215 local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(2, 1:3)
2217 call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_cross_1(l, 1:3))
2218 call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_cross_2(l, 1:3))
2221 viscous_stress_div = (viscous_cross_2 - viscous_cross_1)/(2._wp*dy)
2222 local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(2, 1:3)
2224 if (num_dims == 3)
then
2225 call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j, k - 1)
2226 call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j, k + 1)
2227 viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1)/(2._wp*dz)
2228 local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(3, 1:3)
2230 call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_cross_1(l, 1:3))
2231 call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_cross_2(l, 1:3))
2233 viscous_stress_div = (viscous_cross_2 - viscous_cross_1)/(2._wp*dz)
2234 local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(3, 1:3)
2240# 1157 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2241#if defined(MFC_OpenACC)
2242# 1157 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2244# 1157 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2245#elif defined(MFC_OpenMP)
2246# 1157 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2248# 1157 "/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# 1159 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2253#if defined(MFC_OpenACC)
2254# 1159 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2256# 1159 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2257#elif defined(MFC_OpenMP)
2258# 1159 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2260# 1159 "/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
2269# 1166 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2271# 1166 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2272#if defined(MFC_OpenACC)
2273# 1166 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2275# 1166 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2276#elif defined(MFC_OpenMP)
2277# 1166 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2279# 1166 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2281# 1166 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2283# 1166 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2285# 1166 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2289 call s_mpi_allreduce_vectors_sum(forces, forces, num_ibs, 3)
2290 call s_mpi_allreduce_vectors_sum(torques, torques, num_ibs, 3)
2295 forces(i, 1) = forces(i, 1) + accel_bf(1)*patch_ib(i)%mass
2298 forces(i, 2) = forces(i, 2) + accel_bf(2)*patch_ib(i)%mass
2301 forces(i, 3) = forces(i, 3) + accel_bf(3)*patch_ib(i)%mass
2307 patch_ib(i)%force(:) = forces(i, :)
2308 patch_ib(i)%torque(:) = matmul(patch_ib(i)%rotation_matrix_inverse, torques(i, :))
2418 integer,
intent(in) :: ib_marker
2420 integer :: i, j, k, num_cells, num_cells_local
2421 real(wp),
dimension(1:3) :: center_of_mass, center_of_mass_local
2424 if (patch_ib(ib_marker)%geometry == 4 .or. &
2425 patch_ib(ib_marker)%geometry == 5 .or. &
2426 patch_ib(ib_marker)%geometry == 11 .or. &
2427 patch_ib(ib_marker)%geometry == 12)
then
2429 center_of_mass_local = [0._wp, 0._wp, 0._wp]
2436 if (
ib_markers%sf(i, j, k) == ib_marker)
then
2437 num_cells_local = num_cells_local + 1
2438 center_of_mass_local = center_of_mass_local + [x_cc(i), y_cc(j), 0._wp]
2439 if (num_dims == 3) center_of_mass_local(3) = center_of_mass_local(3) + z_cc(k)
2446 call s_mpi_allreduce_integer_sum(num_cells_local, num_cells)
2447 if (num_cells /= 0)
then
2448 call s_mpi_allreduce_sum(center_of_mass_local(1), center_of_mass(1))
2449 call s_mpi_allreduce_sum(center_of_mass_local(2), center_of_mass(2))
2450 call s_mpi_allreduce_sum(center_of_mass_local(3), center_of_mass(3))
2451 center_of_mass = center_of_mass/real(num_cells, wp)
2453 patch_ib(ib_marker)%centroid_offset = [0._wp, 0._wp, 0._wp]
2458 patch_ib(ib_marker)%centroid_offset = [patch_ib(ib_marker)%x_centroid, patch_ib(ib_marker)%y_centroid, patch_ib(ib_marker)%z_centroid] &
2460 patch_ib(ib_marker)%x_centroid = center_of_mass(1)
2461 patch_ib(ib_marker)%y_centroid = center_of_mass(2)
2462 patch_ib(ib_marker)%z_centroid = center_of_mass(3)
2465 patch_ib(ib_marker)%centroid_offset = matmul(patch_ib(ib_marker)%rotation_matrix_inverse, patch_ib(ib_marker)%centroid_offset)
2467 patch_ib(ib_marker)%centroid_offset(:) = [0._wp, 0._wp, 0._wp]
2476 real(wp),
dimension(3),
intent(in) :: axis
2477 integer,
intent(in) :: ib_marker
2479 real(wp) :: moment, distance_to_axis, cell_volume
2480 real(wp),
dimension(3) :: position, closest_point_along_axis, vector_to_axis, normal_axis
2481 integer :: i, j, k, count
2484 normal_axis = [0, 0, 1]
2485 else if (sqrt(sum(axis**2)) == 0)
then
2487 patch_ib(ib_marker)%moment = 1._wp
2490 normal_axis = axis/sqrt(sum(axis))
2494 if (patch_ib(ib_marker)%geometry == 2)
then
2495 patch_ib(ib_marker)%moment = 0.5_wp*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%radius)**2
2496 elseif (patch_ib(ib_marker)%geometry == 3)
then
2497 patch_ib(ib_marker)%moment = patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%length_x**2 + patch_ib(ib_marker)%length_y**2)/6._wp
2498 elseif (patch_ib(ib_marker)%geometry == 6)
then
2499 patch_ib(ib_marker)%moment = 0.0625_wp*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%length_x**2 + patch_ib(ib_marker)%length_y**2)
2500 elseif (patch_ib(ib_marker)%geometry == 8)
then
2501 patch_ib(ib_marker)%moment = 0.4*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%radius)**2
2506 cell_volume = (x_cc(1) - x_cc(0))*(y_cc(1) - y_cc(0))
2508 cell_volume = cell_volume*(z_cc(1) - z_cc(0))
2512# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2514# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2515#if defined(MFC_OpenACC)
2516# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2518# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2519#elif defined(MFC_OpenMP)
2520# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2522# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2524# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2526# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2528# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2530# 1301 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2535 if (
ib_markers%sf(i, j, k) == ib_marker)
then
2537# 1306 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2538#if defined(MFC_OpenACC)
2539# 1306 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2541# 1306 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2542#elif defined(MFC_OpenMP)
2543# 1306 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2545# 1306 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2551 position = [x_cc(i), y_cc(j), 0._wp] - [patch_ib(ib_marker)%x_centroid, patch_ib(ib_marker)%y_centroid, 0._wp]
2553 position = [x_cc(i), y_cc(j), z_cc(k)] - [patch_ib(ib_marker)%x_centroid, patch_ib(ib_marker)%y_centroid, patch_ib(ib_marker)%z_centroid]
2557 closest_point_along_axis = normal_axis*dot_product(normal_axis, position)
2558 vector_to_axis = position - closest_point_along_axis
2559 distance_to_axis = dot_product(vector_to_axis, vector_to_axis)
2563# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2564#if defined(MFC_OpenACC)
2565# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2567# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2568#elif defined(MFC_OpenMP)
2569# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2571# 1322 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2573 moment = moment + distance_to_axis
2579# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2581# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2582#if defined(MFC_OpenACC)
2583# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2585# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2586#elif defined(MFC_OpenMP)
2587# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2589# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2591# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2593# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2595# 1328 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2599 patch_ib(ib_marker)%moment = moment*patch_ib(ib_marker)%mass/(count*cell_volume)
2601# 1332 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2602#if defined(MFC_OpenACC)
2603# 1332 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2605# 1332 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2606#elif defined(MFC_OpenMP)
2607# 1332 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2609# 1332 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"