780 type(scalar_field), &
781 dimension(sys_size), &
784 type(scalar_field), &
785 dimension(sys_size), &
786 intent(INOUT) :: q_prim_vf
788 real(stp),
dimension(idwbuff(1)%beg:, idwbuff(2)%beg:, idwbuff(3)%beg:, 1:, 1:),
optional,
intent(INOUT) :: pb_in, mv_in
790 integer :: i,
j,
k,
l, q, r
792 real(wp) :: rho, gamma, pi_inf, dyn_pres
793 real(wp),
dimension(2) :: re_k
798 real(wp),
dimension(3) :: vel_ip, vel_norm_ip
800# 175 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
801 real(wp),
dimension(num_fluids) :: gs
802 real(wp),
dimension(num_fluids) :: alpha_rho_ip, alpha_ip
803 real(wp),
dimension(nb) :: r_ip, v_ip, pb_ip, mv_ip
804 real(wp),
dimension(nb*nmom) :: nmom_ip
805 real(wp),
dimension(nb*nnode) :: presb_ip, massv_ip
806# 181 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
810 real(wp),
dimension(3) :: norm
811 real(wp),
dimension(3) :: physical_loc
812 real(wp),
dimension(3) :: vel_g
813 real(wp),
dimension(3) :: radial_vector
814 real(wp),
dimension(3) :: rotation_velocity
818 type(ghost_point) :: gp
819 type(ghost_point) :: innerp
823# 196 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
825# 196 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
826#if defined(MFC_OpenACC)
827# 196 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
829# 196 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
830#elif defined(MFC_OpenMP)
831# 196 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
833# 196 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
835# 196 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
837# 196 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
839# 196 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
841# 196 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
847 if (patch_id /= 0)
then
848 q_prim_vf(e_idx)%sf(
j,
k,
l) = 1._wp
849 if (patch_ib(patch_id)%moving_ibm > 0)
then
852 rho = rho + q_prim_vf(contxb + i - 1)%sf(
j,
k,
l)
857 q_cons_vf(momxb + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)*rho
858 q_prim_vf(momxb + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)
866# 219 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
868# 219 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
869#if defined(MFC_OpenACC)
870# 219 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
872# 219 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
873#elif defined(MFC_OpenMP)
874# 219 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
876# 219 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
878# 219 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
880# 219 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
882# 219 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
887# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
889# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
890#if defined(MFC_OpenACC)
891# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
893# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
894#elif defined(MFC_OpenMP)
895# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
897# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
899# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
901# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
903# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
905# 222 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
917 physical_loc = [x_cc(
j), y_cc(
k), z_cc(
l)]
919 physical_loc = [x_cc(
j), y_cc(
k), 0._wp]
923 if (bubbles_euler .and. .not. qbmm)
then
925 alpha_rho_ip, alpha_ip, pres_ip, vel_ip, c_ip, &
926 r_ip, v_ip, pb_ip, mv_ip)
927 else if (qbmm .and. polytropic)
then
929 alpha_rho_ip, alpha_ip, pres_ip, vel_ip, c_ip, &
930 r_ip, v_ip, pb_ip, mv_ip, nmom_ip)
931 else if (qbmm .and. .not. polytropic)
then
933 alpha_rho_ip, alpha_ip, pres_ip, vel_ip, c_ip, &
934 r_ip, v_ip, pb_ip, mv_ip, nmom_ip, pb_in, mv_in, presb_ip, massv_ip)
937 alpha_rho_ip, alpha_ip, pres_ip, vel_ip, c_ip)
944# 259 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
945#if defined(MFC_OpenACC)
946# 259 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
948# 259 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
949#elif defined(MFC_OpenMP)
950# 259 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
952# 259 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
955 q_prim_vf(q)%sf(
j,
k,
l) = alpha_rho_ip(q)
956 q_prim_vf(advxb + q - 1)%sf(
j,
k,
l) = alpha_ip(q)
959 if (surface_tension)
then
960 q_prim_vf(c_idx)%sf(
j,
k,
l) = c_ip
964 if (patch_ib(patch_id)%moving_ibm <= 1)
then
965 q_prim_vf(e_idx)%sf(
j,
k,
l) = pres_ip
967 q_prim_vf(e_idx)%sf(
j,
k,
l) = 0._wp
969# 274 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
970#if defined(MFC_OpenACC)
971# 274 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
973# 274 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
974#elif defined(MFC_OpenMP)
975# 274 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
977# 274 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
981 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))
985 if (model_eqns /= 4)
then
988 call s_convert_species_to_mixture_variables_acc(rho, gamma, pi_inf, qv_k, alpha_ip, &
989 alpha_rho_ip, re_k, g_k, gs)
991 call s_convert_species_to_mixture_variables_acc(rho, gamma, pi_inf, qv_k, alpha_ip, &
998 norm(1:3) = gp%levelset_norm
999 buf = sqrt(sum(norm**2))
1001 vel_norm_ip = sum(vel_ip*norm)*norm
1002 vel_g = vel_ip - vel_norm_ip
1003 if (patch_ib(patch_id)%moving_ibm /= 0)
then
1005 radial_vector = physical_loc - [patch_ib(patch_id)%x_centroid, &
1006 patch_ib(patch_id)%y_centroid, patch_ib(patch_id)%z_centroid]
1007 call s_cross_product(matmul(patch_ib(patch_id)%rotation_matrix, patch_ib(patch_id)%angular_vel), radial_vector, rotation_velocity)
1010 vel_g = vel_g + sum((patch_ib(patch_id)%vel + rotation_velocity)*norm)*norm
1013 if (patch_ib(patch_id)%moving_ibm == 0)
then
1018 radial_vector = physical_loc - [patch_ib(patch_id)%x_centroid, &
1019 patch_ib(patch_id)%y_centroid, patch_ib(patch_id)%z_centroid]
1021 call s_cross_product(matmul(patch_ib(patch_id)%rotation_matrix, patch_ib(patch_id)%angular_vel), radial_vector, rotation_velocity)
1024 vel_g(q) = patch_ib(patch_id)%vel(q)
1025 vel_g(q) = vel_g(q) + rotation_velocity(q)
1032# 327 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1033#if defined(MFC_OpenACC)
1034# 327 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1036# 327 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1037#elif defined(MFC_OpenMP)
1038# 327 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1040# 327 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1045 vel_g(q - momxb + 1)/2._wp
1050# 335 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1051#if defined(MFC_OpenACC)
1052# 335 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1054# 335 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1055#elif defined(MFC_OpenMP)
1056# 335 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1058# 335 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1060 do q = 1, num_fluids
1066 if (surface_tension)
then
1071 if (bubbles_euler)
then
1072 q_cons_vf(e_idx)%sf(
j,
k,
l) = (1 - alpha_ip(1))*(gamma*pres_ip + pi_inf + dyn_pres)
1074 q_cons_vf(e_idx)%sf(
j,
k,
l) = gamma*pres_ip + pi_inf + dyn_pres
1077 if (bubbles_euler .and. .not. qbmm)
then
1078 call s_comp_n_from_prim(alpha_ip(1), r_ip, nbub, weight)
1080# 355 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1081#if defined(MFC_OpenACC)
1082# 355 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1084# 355 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1085#elif defined(MFC_OpenMP)
1086# 355 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1088# 355 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1091 q_cons_vf(bubxb + (q - 1)*2)%sf(
j,
k,
l) = nbub*r_ip(q)
1092 q_cons_vf(bubxb + (q - 1)*2 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1093 if (.not. polytropic)
then
1094 q_cons_vf(bubxb + (q - 1)*4)%sf(
j,
k,
l) = nbub*r_ip(q)
1095 q_cons_vf(bubxb + (q - 1)*4 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1096 q_cons_vf(bubxb + (q - 1)*4 + 2)%sf(
j,
k,
l) = nbub*pb_ip(q)
1097 q_cons_vf(bubxb + (q - 1)*4 + 3)%sf(
j,
k,
l) = nbub*mv_ip(q)
1106# 371 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1107#if defined(MFC_OpenACC)
1108# 371 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1110# 371 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1111#elif defined(MFC_OpenMP)
1112# 371 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1114# 371 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1121# 376 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1122#if defined(MFC_OpenACC)
1123# 376 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1125# 376 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1126#elif defined(MFC_OpenMP)
1127# 376 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1129# 376 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1135 if (.not. polytropic)
then
1137# 382 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1138#if defined(MFC_OpenACC)
1139# 382 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1141# 382 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1142#elif defined(MFC_OpenMP)
1143# 382 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1145# 382 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1149# 384 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1150#if defined(MFC_OpenACC)
1151# 384 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1153# 384 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1154#elif defined(MFC_OpenMP)
1155# 384 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1157# 384 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1160 pb_in(
j,
k,
l, r, q) = presb_ip((q - 1)*nnode + r)
1161 mv_in(
j,
k,
l, r, q) = massv_ip((q - 1)*nnode + r)
1167 if (model_eqns == 3)
then
1169# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1170#if defined(MFC_OpenACC)
1171# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1173# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1174#elif defined(MFC_OpenMP)
1175# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1177# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1180 q_cons_vf(q)%sf(
j,
k,
l) = alpha_ip(q - intxb + 1)*(gammas(q - intxb + 1)*pres_ip &
1181 + pi_infs(q - intxb + 1))
1186# 401 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1188# 401 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1189#if defined(MFC_OpenACC)
1190# 401 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1192# 401 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1193#elif defined(MFC_OpenMP)
1194# 401 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1196# 401 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1198# 401 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1200# 401 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1202# 401 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1209# 406 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1211# 406 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1212#if defined(MFC_OpenACC)
1213# 406 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1215# 406 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1216#elif defined(MFC_OpenMP)
1217# 406 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1219# 406 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1221# 406 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1223# 406 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1225# 406 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1227# 406 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1237# 414 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1238#if defined(MFC_OpenACC)
1239# 414 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1241# 414 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1242#elif defined(MFC_OpenMP)
1243# 414 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1245# 414 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1252# 419 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1254# 419 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1255#if defined(MFC_OpenACC)
1256# 419 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1258# 419 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1259#elif defined(MFC_OpenMP)
1260# 419 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1262# 419 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1264# 419 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1266# 419 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1268# 419 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1278 type(ghost_point),
dimension(num_gps),
intent(INOUT) :: ghost_points_in
1281 real(wp),
dimension(3) :: norm
1282 real(wp),
dimension(3) :: physical_loc
1283 real(wp) :: temp_loc
1284 real(wp),
pointer,
dimension(:) :: s_cc => null()
1286 type(ghost_point) :: gp
1289 integer :: i,
j,
k,
l
1293 logical :: bounds_error
1295 bounds_error = .false.
1298# 447 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1300# 447 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1301#if defined(MFC_OpenACC)
1302# 447 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1304# 447 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1305#elif defined(MFC_OpenMP)
1306# 447 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1308# 447 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1310# 447 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1312# 447 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1314# 447 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1316# 447 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1319 gp = ghost_points_in(q)
1326 physical_loc = [x_cc(i), y_cc(
j), z_cc(
k)]
1328 physical_loc = [x_cc(i), y_cc(
j), 0._wp]
1332 patch_id = gp%ib_patch_id
1333 dist = abs(real(gp%levelset, kind=wp))
1334 norm(:) = gp%levelset_norm
1335 ghost_points_in(q)%ip_loc(:) = physical_loc(:) + 2*dist*norm(:)
1338 do dim = 1, num_dims
1343 bound = m + buff_size - 1
1344 elseif (dim == 2)
then
1346 bound = n + buff_size - 1
1349 bound = p + buff_size - 1
1352 if (f_approx_equal(norm(dim), 0._wp))
then
1354 ghost_points_in(q)%ip_grid(dim) = ghost_points_in(q)%loc(dim)
1356 if (norm(dim) > 0)
then
1362 index = ghost_points_in(q)%loc(dim)
1363 temp_loc = ghost_points_in(q)%ip_loc(dim)
1364 do while ((temp_loc < s_cc(index) &
1365 .or. temp_loc > s_cc(index + 1)) .and. (.not. bounds_error))
1367 if (index < -buff_size .or. index > bound)
then
1368#if !defined(MFC_OpenACC) && !defined(MFC_OpenMP)
1369 print *,
"A required image point is not located in this computational domain."
1370 print *,
"Ghost Point is located at :"
1372 print *, [x_cc(i), y_cc(
j)]
1374 print *, [x_cc(i), y_cc(
j), z_cc(
k)]
1376 print *,
"We are searching in dimension ", dim,
" for image point at ", ghost_points_in(q)%ip_loc(:)
1377 print *,
"Domain size: ", [x_cc(-buff_size), y_cc(-buff_size), z_cc(-buff_size)]
1378 print *,
"x: ", x_cc(-buff_size),
" to: ", x_cc(m + buff_size - 1)
1379 print *,
"y: ", y_cc(-buff_size),
" to: ", y_cc(n + buff_size - 1)
1380 if (p /= 0) print *,
"z: ", z_cc(-buff_size),
" to: ", z_cc(p + buff_size - 1)
1381 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"
1382 print *,
"Levelset ", dist,
" and Norm: ", norm(:)
1383 print *,
"A short term fix may include increasing buff_size further in m_helper_basic (currently set to a minimum of 10)"
1385 bounds_error = .true.
1389 ghost_points_in(q)%ip_grid(dim) = index
1390 if (ghost_points_in(q)%DB(dim) == -1)
then
1391 ghost_points_in(q)%ip_grid(dim) = ghost_points_in(q)%loc(dim) + 1
1392 else if (ghost_points_in(q)%DB(dim) == 1)
then
1393 ghost_points_in(q)%ip_grid(dim) = ghost_points_in(q)%loc(dim) - 1
1399# 528 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1401# 528 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1402#if defined(MFC_OpenACC)
1403# 528 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1405# 528 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1406#elif defined(MFC_OpenMP)
1407# 528 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1409# 528 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1411# 528 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1413# 528 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1415# 528 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1418 if (bounds_error) error stop
"Ghost Point and Image Point on Different Processors. Exiting"
1535 type(ghost_point),
dimension(num_gps),
intent(INOUT) :: ghost_points_in
1536 type(ghost_point),
dimension(num_inner_gps),
intent(INOUT) :: inner_points_in
1537 integer :: i,
j,
k, ii, jj, kk, gp_layers_z
1538 integer :: xp, yp, zp
1539 integer :: count, count_i, local_idx
1540 integer :: patch_id, encoded_patch_id
1545 gp_layers_z = gp_layers
1546 if (p == 0) gp_layers_z = 0
1549# 602 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1551# 602 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1552#if defined(MFC_OpenACC)
1553# 602 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1555# 602 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1556#elif defined(MFC_OpenMP)
1557# 602 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1559# 602 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1561# 602 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1563# 602 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1565# 602 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1567# 602 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1574 marker_search:
do ii = i - gp_layers, i + gp_layers
1575 do jj =
j - gp_layers,
j + gp_layers
1576 do kk =
k - gp_layers_z,
k + gp_layers_z
1584 end do marker_search
1588# 621 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1589#if defined(MFC_OpenACC)
1590# 621 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1592# 621 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1593#elif defined(MFC_OpenMP)
1594# 621 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1596# 621 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1600#if defined(MFC_OpenACC)
1601# 624 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1603# 624 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1604#elif defined(MFC_OpenMP)
1605# 624 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1607# 624 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1610 ghost_points_in(local_idx)%loc = [i,
j,
k]
1612 call s_decode_patch_periodicity(encoded_patch_id, patch_id, xp, yp, zp)
1613 ghost_points_in(local_idx)%ib_patch_id = patch_id
1615 ghost_points_in(local_idx)%x_periodicity = xp
1616 ghost_points_in(local_idx)%y_periodicity = yp
1617 ghost_points_in(local_idx)%z_periodicity = zp
1618 ghost_points_in(local_idx)%slip = patch_ib(patch_id)%slip
1620 if ((x_cc(i) - dx(i)) < x_domain%beg)
then
1621 ghost_points_in(local_idx)%DB(1) = -1
1622 else if ((x_cc(i) + dx(i)) > x_domain%end)
then
1623 ghost_points_in(local_idx)%DB(1) = 1
1625 ghost_points_in(local_idx)%DB(1) = 0
1628 if ((y_cc(
j) - dy(
j)) < y_domain%beg)
then
1629 ghost_points_in(local_idx)%DB(2) = -1
1630 else if ((y_cc(
j) + dy(
j)) > y_domain%end)
then
1631 ghost_points_in(local_idx)%DB(2) = 1
1633 ghost_points_in(local_idx)%DB(2) = 0
1637 if ((z_cc(
k) - dz(
k)) < z_domain%beg)
then
1638 ghost_points_in(local_idx)%DB(3) = -1
1639 else if ((z_cc(
k) + dz(
k)) > z_domain%end)
then
1640 ghost_points_in(local_idx)%DB(3) = 1
1642 ghost_points_in(local_idx)%DB(3) = 0
1648# 663 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1649#if defined(MFC_OpenACC)
1650# 663 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1652# 663 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1653#elif defined(MFC_OpenMP)
1654# 663 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1656# 663 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1658 count_i = count_i + 1
1660#if defined(MFC_OpenACC)
1661# 666 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1663# 666 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1664#elif defined(MFC_OpenMP)
1665# 666 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1667# 666 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1670 inner_points_in(local_idx)%loc = [i,
j,
k]
1672 call s_decode_patch_periodicity(encoded_patch_id, patch_id, xp, yp, zp)
1673 inner_points_in(local_idx)%ib_patch_id = patch_id
1675 inner_points_in(local_idx)%slip = patch_ib(patch_id)%slip
1683# 680 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1685# 680 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1686#if defined(MFC_OpenACC)
1687# 680 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1689# 680 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1690#elif defined(MFC_OpenMP)
1691# 680 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1693# 680 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1695# 680 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1697# 680 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1699# 680 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1707 type(ghost_point),
dimension(num_gps),
intent(INOUT) :: ghost_points_in
1709 real(wp),
dimension(2, 2, 2) :: dist
1710 real(wp),
dimension(2, 2, 2) :: alpha
1711 real(wp),
dimension(2, 2, 2) :: interp_coeffs
1713 real(wp),
dimension(2, 2, 2) :: eta
1714 type(ghost_point) :: gp
1715 integer :: q, i,
j,
k, ii, jj, kk
1717 logical is_cell_center
1720# 699 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1722# 699 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1723#if defined(MFC_OpenACC)
1724# 699 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1726# 699 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1727#elif defined(MFC_OpenMP)
1728# 699 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1730# 699 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1732# 699 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1734# 699 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1736# 699 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1738# 699 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1741 gp = ghost_points_in(q)
1757 dist(1 + ii, 1 + jj, 1) = sqrt( &
1758 (x_cc(i + ii) - gp%ip_loc(1))**2 + &
1759 (y_cc(
j + jj) - gp%ip_loc(2))**2)
1762 dist(1 + ii, 1 + jj, 1 + kk) = sqrt( &
1763 (x_cc(i + ii) - gp%ip_loc(1))**2 + &
1764 (y_cc(
j + jj) - gp%ip_loc(2))**2 + &
1765 (z_cc(
k + kk) - gp%ip_loc(3))**2)
1772 interp_coeffs = 0._wp
1773 is_cell_center = .false.
1774 check_is_cell_center:
do ii = 0, 1
1776 if (dist(ii + 1, jj + 1, 1) <= 1.e-16_wp)
then
1777 interp_coeffs(ii + 1, jj + 1, 1) = 1._wp
1778 is_cell_center = .true.
1779 exit check_is_cell_center
1782 if (dist(ii + 1, jj + 1, 2) <= 1.e-16_wp)
then
1783 interp_coeffs(ii + 1, jj + 1, 2) = 1._wp
1784 is_cell_center = .true.
1785 exit check_is_cell_center
1790 end do check_is_cell_center
1792 if (.not. is_cell_center)
then
1795 patch_id = gp%ib_patch_id
1796 if (
ib_markers%sf(i,
j,
k) /= 0) alpha(1, 1, 1) = 0._wp
1797 if (
ib_markers%sf(i + 1,
j,
k) /= 0) alpha(2, 1, 1) = 0._wp
1798 if (
ib_markers%sf(i,
j + 1,
k) /= 0) alpha(1, 2, 1) = 0._wp
1799 if (
ib_markers%sf(i + 1,
j + 1,
k) /= 0) alpha(2, 2, 1) = 0._wp
1802 eta(:, :, 1) = 1._wp/dist(:, :, 1)**2
1803 buf = sum(alpha(:, :, 1)*eta(:, :, 1))
1804 if (buf > 0._wp)
then
1805 interp_coeffs(:, :, 1) = alpha(:, :, 1)*eta(:, :, 1)/buf
1807 buf = sum(eta(:, :, 1))
1808 interp_coeffs(:, :, 1) = eta(:, :, 1)/buf
1812 if (
ib_markers%sf(i,
j,
k + 1) /= 0) alpha(1, 1, 2) = 0._wp
1813 if (
ib_markers%sf(i + 1,
j,
k + 1) /= 0) alpha(2, 1, 2) = 0._wp
1814 if (
ib_markers%sf(i,
j + 1,
k + 1) /= 0) alpha(1, 2, 2) = 0._wp
1815 if (
ib_markers%sf(i + 1,
j + 1,
k + 1) /= 0) alpha(2, 2, 2) = 0._wp
1817 buf = sum(alpha*eta)
1819 if (buf > 0._wp)
then
1820 interp_coeffs = alpha*eta/buf
1823 interp_coeffs = eta/buf
1829 ghost_points_in(q)%interp_coeffs = interp_coeffs
1832# 791 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1834# 791 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1835#if defined(MFC_OpenACC)
1836# 791 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1838# 791 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1839#elif defined(MFC_OpenMP)
1840# 791 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1842# 791 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1844# 791 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1846# 791 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1848# 791 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1872 pres_IP, vel_IP, c_IP, r_IP, v_IP, pb_IP, &
1873 mv_IP, nmom_IP, pb_in, mv_in, presb_IP, massv_IP)
1875# 816 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1877# 816 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1879# 816 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1881# 816 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1883# 816 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1885# 816 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1887# 816 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1889 type(scalar_field), &
1890 dimension(sys_size), &
1891 intent(IN) :: q_prim_vf
1893 real(stp),
optional,
dimension(idwbuff(1)%beg:, idwbuff(2)%beg:, idwbuff(3)%beg:, 1:, 1:),
intent(IN) :: pb_in, mv_in
1895 type(ghost_point),
intent(IN) :: gp
1896 real(wp),
intent(INOUT) :: pres_ip
1897 real(wp),
dimension(3),
intent(INOUT) :: vel_ip
1898 real(wp),
intent(INOUT) :: c_ip
1899# 830 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1900 real(wp),
dimension(num_fluids),
intent(INOUT) :: alpha_ip, alpha_rho_ip
1901# 832 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1902 real(wp),
optional,
dimension(:),
intent(INOUT) :: r_ip, v_ip, pb_ip, mv_ip
1903 real(wp),
optional,
dimension(:),
intent(INOUT) :: nmom_ip
1904 real(wp),
optional,
dimension(:),
intent(INOUT) :: presb_ip, massv_ip
1906 integer :: i,
j,
k,
l, q
1907 integer :: i1, i2, j1, j2, k1, k2
1910 i1 = gp%ip_grid(1); i2 = i1 + 1
1911 j1 = gp%ip_grid(2); j2 = j1 + 1
1912 k1 = gp%ip_grid(3); k2 = k1 + 1
1919 alpha_rho_ip = 0._wp
1924 if (surface_tension) c_ip = 0._wp
1926 if (bubbles_euler)
then
1929 if (.not. polytropic)
then
1937 if (.not. polytropic)
then
1944# 873 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1945#if defined(MFC_OpenACC)
1946# 873 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1948# 873 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1949#elif defined(MFC_OpenMP)
1950# 873 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1952# 873 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1956# 875 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1957#if defined(MFC_OpenACC)
1958# 875 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1960# 875 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1961#elif defined(MFC_OpenMP)
1962# 875 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1964# 875 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1968# 877 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1969#if defined(MFC_OpenACC)
1970# 877 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1972# 877 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1973#elif defined(MFC_OpenMP)
1974# 877 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1976# 877 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1980 coeff = gp%interp_coeffs(i - i1 + 1,
j - j1 + 1,
k - k1 + 1)
1982 pres_ip = pres_ip + coeff* &
1983 q_prim_vf(e_idx)%sf(i,
j,
k)
1986# 885 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1987#if defined(MFC_OpenACC)
1988# 885 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1990# 885 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1991#elif defined(MFC_OpenMP)
1992# 885 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1994# 885 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1997 vel_ip(q + 1 - momxb) = vel_ip(q + 1 - momxb) + coeff* &
1998 q_prim_vf(q)%sf(i,
j,
k)
2002# 891 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2003#if defined(MFC_OpenACC)
2004# 891 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2006# 891 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2007#elif defined(MFC_OpenMP)
2008# 891 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2010# 891 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2012 do l = contxb, contxe
2013 alpha_rho_ip(
l) = alpha_rho_ip(
l) + coeff* &
2014 q_prim_vf(
l)%sf(i,
j,
k)
2015 alpha_ip(
l) = alpha_ip(
l) + coeff* &
2016 q_prim_vf(advxb +
l - 1)%sf(i,
j,
k)
2019 if (surface_tension)
then
2020 c_ip = c_ip + coeff*q_prim_vf(c_idx)%sf(i,
j,
k)
2023 if (bubbles_euler .and. .not. qbmm)
then
2025# 904 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2026#if defined(MFC_OpenACC)
2027# 904 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2029# 904 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2030#elif defined(MFC_OpenMP)
2031# 904 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2033# 904 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2036 if (polytropic)
then
2037 r_ip(
l) = r_ip(
l) + coeff*q_prim_vf(bubxb + (
l - 1)*2)%sf(i,
j,
k)
2038 v_ip(
l) = v_ip(
l) + coeff*q_prim_vf(bubxb + 1 + (
l - 1)*2)%sf(i,
j,
k)
2040 r_ip(
l) = r_ip(
l) + coeff*q_prim_vf(bubxb + (
l - 1)*4)%sf(i,
j,
k)
2041 v_ip(
l) = v_ip(
l) + coeff*q_prim_vf(bubxb + 1 + (
l - 1)*4)%sf(i,
j,
k)
2042 pb_ip(
l) = pb_ip(
l) + coeff*q_prim_vf(bubxb + 2 + (
l - 1)*4)%sf(i,
j,
k)
2043 mv_ip(
l) = mv_ip(
l) + coeff*q_prim_vf(bubxb + 3 + (
l - 1)*4)%sf(i,
j,
k)
2050 nmom_ip(
l) = nmom_ip(
l) + coeff*q_prim_vf(bubxb - 1 +
l)%sf(i,
j,
k)
2052 if (.not. polytropic)
then
2055 presb_ip((q - 1)*nnode +
l) = presb_ip((q - 1)*nnode +
l) + &
2056 coeff*real(pb_in(i,
j,
k,
l, q), kind=wp)
2057 massv_ip((q - 1)*nnode +
l) = massv_ip((q - 1)*nnode +
l) + &
2058 coeff*real(mv_in(i,
j,
k,
l, q), kind=wp)
2173 type(scalar_field),
dimension(1:sys_size),
intent(in) :: q_prim_vf
2174 type(physical_parameters),
dimension(1:num_fluids),
intent(in) :: fluid_pp
2176 integer :: gp_id, i, j, k, l, q, ib_idx, fluid_idx
2177 real(wp),
dimension(num_ibs, 3) :: forces, torques
2178 real(wp),
dimension(1:3, 1:3) :: viscous_stress_div, viscous_stress_div_1, viscous_stress_div_2, viscous_cross_1, viscous_cross_2
2179 real(wp),
dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution, vel
2180 real(wp) :: cell_volume, dx, dy, dz, dynamic_viscosity
2181# 1006 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2182 real(wp),
dimension(num_fluids) :: dynamic_viscosities
2183# 1008 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2185 call nvtxstartrange(
"COMPUTE-IB-FORCES")
2191 do fluid_idx = 1, num_fluids
2192 if (fluid_pp(fluid_idx)%Re(1) /= 0._wp)
then
2193 dynamic_viscosities(fluid_idx) = 1._wp/fluid_pp(fluid_idx)%Re(1)
2195 dynamic_viscosities(fluid_idx) = 0._wp
2201# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2203# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2204#if defined(MFC_OpenACC)
2205# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2207# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2208#elif defined(MFC_OpenMP)
2209# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2211# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2213# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2215# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2217# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2219# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2225 if (ib_idx /= 0)
then
2227 if (num_dims == 3)
then
2228 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]
2230 radial_vector = [x_cc(i), y_cc(j), 0._wp] - [patch_ib(ib_idx)%x_centroid, patch_ib(ib_idx)%y_centroid, 0._wp]
2232 dx = x_cc(i + 1) - x_cc(i)
2233 dy = y_cc(j + 1) - y_cc(j)
2235 local_force_contribution(:) = 0._wp
2236 do fluid_idx = 0, num_fluids - 1
2238 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)
2239 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)
2240 cell_volume = abs(dx*dy)
2242 if (num_dims == 3)
then
2243 dz = z_cc(k + 1) - z_cc(k)
2244 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)
2245 cell_volume = abs(cell_volume*dz)
2250 call s_cross_product(radial_vector, local_force_contribution, local_torque_contribution)
2256 dynamic_viscosity = 0._wp
2257 do fluid_idx = 1, num_fluids
2259 dynamic_viscosity = dynamic_viscosity + (q_prim_vf(fluid_idx + advxb - 1)%sf(i, j, k)*dynamic_viscosities(fluid_idx))
2263 call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i - 1, j, k)
2264 call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i + 1, j, k)
2265 viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1)/(2._wp*dx)
2266 local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(1, 1:3)
2269 call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_cross_1(l, 1:3))
2270 call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_cross_2(l, 1:3))
2273 viscous_stress_div = (viscous_cross_2 - viscous_cross_1)/(2._wp*dx)
2274 local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(1, 1:3)
2276 call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j - 1, k)
2277 call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j + 1, k)
2278 viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1)/(2._wp*dy)
2279 local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(2, 1:3)
2281 call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_cross_1(l, 1:3))
2282 call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_cross_2(l, 1:3))
2285 viscous_stress_div = (viscous_cross_2 - viscous_cross_1)/(2._wp*dy)
2286 local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(2, 1:3)
2288 if (num_dims == 3)
then
2289 call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j, k - 1)
2290 call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j, k + 1)
2291 viscous_stress_div = (viscous_stress_div_2 - viscous_stress_div_1)/(2._wp*dz)
2292 local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(3, 1:3)
2294 call s_cross_product(radial_vector, viscous_stress_div_1(l, 1:3), viscous_cross_1(l, 1:3))
2295 call s_cross_product(radial_vector, viscous_stress_div_2(l, 1:3), viscous_cross_2(l, 1:3))
2297 viscous_stress_div = (viscous_cross_2 - viscous_cross_1)/(2._wp*dz)
2298 local_torque_contribution(1:3) = local_torque_contribution(1:3) + viscous_stress_div(3, 1:3)
2304# 1107 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2305#if defined(MFC_OpenACC)
2306# 1107 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2308# 1107 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2309#elif defined(MFC_OpenMP)
2310# 1107 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2312# 1107 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2314 forces(ib_idx, l) = forces(ib_idx, l) + (local_force_contribution(l)*cell_volume)
2316# 1109 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2317#if defined(MFC_OpenACC)
2318# 1109 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2320# 1109 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2321#elif defined(MFC_OpenMP)
2322# 1109 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2324# 1109 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2326 torques(ib_idx, l) = torques(ib_idx, l) + local_torque_contribution(l)*cell_volume
2333# 1116 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2335# 1116 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2336#if defined(MFC_OpenACC)
2337# 1116 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2339# 1116 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2340#elif defined(MFC_OpenMP)
2341# 1116 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2343# 1116 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2345# 1116 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2347# 1116 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2349# 1116 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2353 call s_mpi_allreduce_vectors_sum(forces, forces, num_ibs, 3)
2354 call s_mpi_allreduce_vectors_sum(torques, torques, num_ibs, 3)
2359 forces(i, 1) = forces(i, 1) + accel_bf(1)*patch_ib(i)%mass
2362 forces(i, 2) = forces(i, 2) + accel_bf(2)*patch_ib(i)%mass
2365 forces(i, 3) = forces(i, 3) + accel_bf(3)*patch_ib(i)%mass
2371 patch_ib(i)%force(:) = forces(i, :)
2372 patch_ib(i)%torque(:) = matmul(patch_ib(i)%rotation_matrix_inverse, torques(i, :))
2484 integer,
intent(in) :: ib_marker
2486 integer :: i, j, k, num_cells, num_cells_local
2487 real(wp),
dimension(1:3) :: center_of_mass, center_of_mass_local
2490 if (patch_ib(ib_marker)%geometry == 4 .or. &
2491 patch_ib(ib_marker)%geometry == 5 .or. &
2492 patch_ib(ib_marker)%geometry == 11 .or. &
2493 patch_ib(ib_marker)%geometry == 12)
then
2495 center_of_mass_local = [0._wp, 0._wp, 0._wp]
2502 if (
ib_markers%sf(i, j, k) == ib_marker)
then
2503 num_cells_local = num_cells_local + 1
2504 center_of_mass_local = center_of_mass_local + [x_cc(i), y_cc(j), 0._wp]
2505 if (num_dims == 3) center_of_mass_local(3) = center_of_mass_local(3) + z_cc(k)
2512 call s_mpi_allreduce_integer_sum(num_cells_local, num_cells)
2513 if (num_cells /= 0)
then
2514 call s_mpi_allreduce_sum(center_of_mass_local(1), center_of_mass(1))
2515 call s_mpi_allreduce_sum(center_of_mass_local(2), center_of_mass(2))
2516 call s_mpi_allreduce_sum(center_of_mass_local(3), center_of_mass(3))
2517 center_of_mass = center_of_mass/real(num_cells, wp)
2519 patch_ib(ib_marker)%centroid_offset = [0._wp, 0._wp, 0._wp]
2524 patch_ib(ib_marker)%centroid_offset = [patch_ib(ib_marker)%x_centroid, patch_ib(ib_marker)%y_centroid, patch_ib(ib_marker)%z_centroid] &
2526 patch_ib(ib_marker)%x_centroid = center_of_mass(1)
2527 patch_ib(ib_marker)%y_centroid = center_of_mass(2)
2528 patch_ib(ib_marker)%z_centroid = center_of_mass(3)
2531 patch_ib(ib_marker)%centroid_offset = matmul(patch_ib(ib_marker)%rotation_matrix_inverse, patch_ib(ib_marker)%centroid_offset)
2533 patch_ib(ib_marker)%centroid_offset(:) = [0._wp, 0._wp, 0._wp]
2542 real(wp),
dimension(3),
intent(in) :: axis
2543 integer,
intent(in) :: ib_marker
2545 real(wp) :: moment, distance_to_axis, cell_volume
2546 real(wp),
dimension(3) :: position, closest_point_along_axis, vector_to_axis, normal_axis
2547 integer :: i, j, k, count
2550 normal_axis = [0, 0, 1]
2551 else if (sqrt(sum(axis**2)) == 0)
then
2553 patch_ib(ib_marker)%moment = 1._wp
2556 normal_axis = axis/sqrt(sum(axis))
2560 if (patch_ib(ib_marker)%geometry == 2)
then
2561 patch_ib(ib_marker)%moment = 0.5_wp*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%radius)**2
2562 elseif (patch_ib(ib_marker)%geometry == 3)
then
2563 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
2564 elseif (patch_ib(ib_marker)%geometry == 6)
then
2565 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)
2566 elseif (patch_ib(ib_marker)%geometry == 8)
then
2567 patch_ib(ib_marker)%moment = 0.4*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%radius)**2
2572 cell_volume = (x_cc(1) - x_cc(0))*(y_cc(1) - y_cc(0))
2574 cell_volume = cell_volume*(z_cc(1) - z_cc(0))
2578# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2580# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2581#if defined(MFC_OpenACC)
2582# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2584# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2585#elif defined(MFC_OpenMP)
2586# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2588# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2590# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2592# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2594# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2596# 1253 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2601 if (
ib_markers%sf(i, j, k) == ib_marker)
then
2603# 1258 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2604#if defined(MFC_OpenACC)
2605# 1258 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2607# 1258 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2608#elif defined(MFC_OpenMP)
2609# 1258 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2611# 1258 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2617 position = [x_cc(i), y_cc(j), 0._wp] - [patch_ib(ib_marker)%x_centroid, patch_ib(ib_marker)%y_centroid, 0._wp]
2619 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]
2623 closest_point_along_axis = normal_axis*dot_product(normal_axis, position)
2624 vector_to_axis = position - closest_point_along_axis
2625 distance_to_axis = dot_product(vector_to_axis, vector_to_axis)
2629# 1274 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2630#if defined(MFC_OpenACC)
2631# 1274 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2633# 1274 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2634#elif defined(MFC_OpenMP)
2635# 1274 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2637# 1274 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2639 moment = moment + distance_to_axis
2645# 1280 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2647# 1280 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2648#if defined(MFC_OpenACC)
2649# 1280 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2651# 1280 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2652#elif defined(MFC_OpenMP)
2653# 1280 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2655# 1280 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2657# 1280 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2659# 1280 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2661# 1280 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2665 patch_ib(ib_marker)%moment = moment*patch_ib(ib_marker)%mass/(count*cell_volume)
2667# 1284 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2668#if defined(MFC_OpenACC)
2669# 1284 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2671# 1284 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2672#elif defined(MFC_OpenMP)
2673# 1284 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2675# 1284 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"