749 type(scalar_field),
dimension(sys_size),
intent(inout) ::
q_cons_vf
750 type(scalar_field),
dimension(sys_size),
intent(inout) :: q_prim_vf
751 real(stp),
dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:),
optional,
intent(inout) :: pb_in, mv_in
752 integer :: i,
j,
k,
l, q, r
754 real(wp) :: rho, gamma, pi_inf, dyn_pres
755 real(wp),
dimension(2) :: re_k
759 real(wp),
dimension(3) :: vel_ip, vel_norm_ip
762# 148 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
763 real(wp),
dimension(num_fluids) :: gs
764 real(wp),
dimension(num_fluids) :: alpha_rho_ip, alpha_ip
765 real(wp),
dimension(nb) :: r_ip, v_ip, pb_ip, mv_ip
766 real(wp),
dimension(nb*nmom) :: nmom_ip
767 real(wp),
dimension(nb*nnode) :: presb_ip, massv_ip
768# 154 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
771 real(wp),
dimension(3) :: norm
772 real(wp),
dimension(3) :: physical_loc
773 real(wp),
dimension(3) :: vel_g
774 real(wp),
dimension(3) :: radial_vector
775 real(wp),
dimension(3) :: rotation_velocity
778 type(ghost_point) :: gp
779 type(ghost_point) :: innerp
784# 168 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
786# 168 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
787#if defined(MFC_OpenACC)
788# 168 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
790# 168 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
791#elif defined(MFC_OpenMP)
792# 168 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
794# 168 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
796# 168 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
798# 168 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
800# 168 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
806 if (patch_id /= 0)
then
807 q_prim_vf(e_idx)%sf(
j,
k,
l) = 1._wp
810 rho = rho + q_prim_vf(contxb + i - 1)%sf(
j,
k,
l)
815 q_cons_vf(momxb + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)*rho
816 q_prim_vf(momxb + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)
823# 189 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
824#if defined(MFC_OpenACC)
825# 189 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
827# 189 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
828#elif defined(MFC_OpenMP)
829# 189 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
831# 189 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
833# 189 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
838# 192 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
840# 192 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
841#if defined(MFC_OpenACC)
842# 192 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
844# 192 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
845#elif defined(MFC_OpenMP)
846# 192 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
848# 192 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
850# 192 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
852# 192 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
854# 192 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
856# 195 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
866 physical_loc = [x_cc(
j), y_cc(
k), z_cc(
l)]
868 physical_loc = [x_cc(
j), y_cc(
k), 0._wp]
872 if (bubbles_euler .and. .not. qbmm)
then
875 else if (qbmm .and. polytropic)
then
877 & pb_ip, mv_ip, nmom_ip)
878 else if (qbmm .and. .not. polytropic)
then
880 & pb_ip, mv_ip, nmom_ip, pb_in, mv_in, presb_ip, massv_ip)
889# 226 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
890#if defined(MFC_OpenACC)
891# 226 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
893# 226 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
894#elif defined(MFC_OpenMP)
895# 226 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
897# 226 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
900 q_prim_vf(q)%sf(
j,
k,
l) = alpha_rho_ip(q)
901 q_prim_vf(advxb + q - 1)%sf(
j,
k,
l) = alpha_ip(q)
904 if (surface_tension)
then
905 q_prim_vf(c_idx)%sf(
j,
k,
l) = c_ip
909 if (patch_ib(patch_id)%moving_ibm <= 1)
then
910 q_prim_vf(e_idx)%sf(
j,
k,
l) = pres_ip
912 q_prim_vf(e_idx)%sf(
j,
k,
l) = 0._wp
914# 241 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
915#if defined(MFC_OpenACC)
916# 241 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
918# 241 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
919#elif defined(MFC_OpenMP)
920# 241 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
922# 241 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
926 q_prim_vf(e_idx)%sf(
j,
k,
l) = q_prim_vf(e_idx)%sf(
j,
k, &
927 &
l) + pres_ip/(1._wp - 2._wp*abs(gp%levelset*alpha_rho_ip(q)/pres_ip) &
928 & *dot_product(patch_ib(patch_id) %force/patch_ib(patch_id)%mass, gp%levelset_norm))
932 if (model_eqns /= 4)
then
935 call s_convert_species_to_mixture_variables_acc(rho, gamma, pi_inf, qv_k, alpha_ip, alpha_rho_ip, re_k, &
938 call s_convert_species_to_mixture_variables_acc(rho, gamma, pi_inf, qv_k, alpha_ip, alpha_rho_ip, re_k)
944 norm(1:3) = gp%levelset_norm
945 buf = sqrt(sum(norm**2))
947 vel_norm_ip = sum(vel_ip*norm)*norm
948 vel_g = vel_ip - vel_norm_ip
949 if (patch_ib(patch_id)%moving_ibm /= 0)
then
951 radial_vector = physical_loc - [patch_ib(patch_id)%x_centroid, patch_ib(patch_id)%y_centroid, &
952 & patch_ib(patch_id)%z_centroid]
953 call s_cross_product(matmul(patch_ib(patch_id)%rotation_matrix, patch_ib(patch_id)%angular_vel), &
954 & radial_vector, rotation_velocity)
957 vel_g = vel_g + sum((patch_ib(patch_id)%vel + rotation_velocity)*norm)*norm
960 if (patch_ib(patch_id)%moving_ibm == 0)
then
965 radial_vector = physical_loc - [patch_ib(patch_id)%x_centroid, patch_ib(patch_id)%y_centroid, &
966 & patch_ib(patch_id)%z_centroid]
969 call s_cross_product(matmul(patch_ib(patch_id)%rotation_matrix, patch_ib(patch_id)%angular_vel), &
970 & radial_vector, rotation_velocity)
973 vel_g(q) = patch_ib(patch_id)%vel(q)
974 vel_g(q) = vel_g(q) + rotation_velocity(q)
981# 298 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
982#if defined(MFC_OpenACC)
983# 298 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
985# 298 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
986#elif defined(MFC_OpenMP)
987# 298 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
989# 298 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
993 dyn_pres = dyn_pres +
q_cons_vf(q)%sf(
j,
k,
l)*vel_g(q - momxb + 1)/2._wp
998# 305 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
999#if defined(MFC_OpenACC)
1000# 305 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1002# 305 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1003#elif defined(MFC_OpenMP)
1004# 305 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1006# 305 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1008 do q = 1, num_fluids
1014 if (surface_tension)
then
1019 if (bubbles_euler)
then
1020 q_cons_vf(e_idx)%sf(
j,
k,
l) = (1 - alpha_ip(1))*(gamma*pres_ip + pi_inf + dyn_pres)
1022 q_cons_vf(e_idx)%sf(
j,
k,
l) = gamma*pres_ip + pi_inf + dyn_pres
1025 if (bubbles_euler .and. .not. qbmm)
then
1026 call s_comp_n_from_prim(alpha_ip(1), r_ip, nbub, weight)
1028# 325 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1029#if defined(MFC_OpenACC)
1030# 325 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1032# 325 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1033#elif defined(MFC_OpenMP)
1034# 325 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1036# 325 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1039 q_cons_vf(bubxb + (q - 1)*2)%sf(
j,
k,
l) = nbub*r_ip(q)
1040 q_cons_vf(bubxb + (q - 1)*2 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1041 if (.not. polytropic)
then
1042 q_cons_vf(bubxb + (q - 1)*4)%sf(
j,
k,
l) = nbub*r_ip(q)
1043 q_cons_vf(bubxb + (q - 1)*4 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1044 q_cons_vf(bubxb + (q - 1)*4 + 2)%sf(
j,
k,
l) = nbub*pb_ip(q)
1045 q_cons_vf(bubxb + (q - 1)*4 + 3)%sf(
j,
k,
l) = nbub*mv_ip(q)
1053# 340 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1054#if defined(MFC_OpenACC)
1055# 340 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1057# 340 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1058#elif defined(MFC_OpenMP)
1059# 340 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1061# 340 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1068# 345 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1069#if defined(MFC_OpenACC)
1070# 345 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1072# 345 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1073#elif defined(MFC_OpenMP)
1074# 345 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1076# 345 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1082 if (.not. polytropic)
then
1084# 351 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1085#if defined(MFC_OpenACC)
1086# 351 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1088# 351 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1089#elif defined(MFC_OpenMP)
1090# 351 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1092# 351 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1096# 353 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1097#if defined(MFC_OpenACC)
1098# 353 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1100# 353 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1101#elif defined(MFC_OpenMP)
1102# 353 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1104# 353 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1107 pb_in(
j,
k,
l, r, q) = presb_ip((q - 1)*nnode + r)
1108 mv_in(
j,
k,
l, r, q) = massv_ip((q - 1)*nnode + r)
1114 if (model_eqns == 3)
then
1116# 363 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1117#if defined(MFC_OpenACC)
1118# 363 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1120# 363 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1121#elif defined(MFC_OpenMP)
1122# 363 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1124# 363 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1127 q_cons_vf(q)%sf(
j,
k,
l) = alpha_ip(q - intxb + 1)*(gammas(q - intxb + 1)*pres_ip + pi_infs(q - intxb + 1))
1132# 369 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1133#if defined(MFC_OpenACC)
1134# 369 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1136# 369 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1137#elif defined(MFC_OpenMP)
1138# 369 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1140# 369 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1142# 369 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1151 type(ghost_point),
dimension(num_gps),
intent(inout) :: ghost_points_in
1153 real(wp),
dimension(3) :: norm
1154 real(wp),
dimension(3) :: physical_loc
1155 real(wp) :: temp_loc
1156 real(wp),
pointer,
dimension(:) :: s_cc => null()
1158 type(ghost_point) :: gp
1160 integer :: i,
j,
k,
l
1164 logical :: bounds_error
1166 bounds_error = .false.
1169# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1171# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1172#if defined(MFC_OpenACC)
1173# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1175# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1176#elif defined(MFC_OpenMP)
1177# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1179# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1181# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1183# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1185# 394 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1187# 396 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1189 gp = ghost_points_in(q)
1196 physical_loc = [x_cc(i), y_cc(
j), z_cc(
k)]
1198 physical_loc = [x_cc(i), y_cc(
j), 0._wp]
1202 patch_id = gp%ib_patch_id
1203 dist = abs(real(gp%levelset, kind=wp))
1204 norm(:) = gp%levelset_norm
1205 ghost_points_in(q)%ip_loc(:) = physical_loc(:) + 2*dist*norm(:)
1208 do dim = 1, num_dims
1212 bound = m + buff_size - 1
1213 else if (dim == 2)
then
1215 bound = n + buff_size - 1
1218 bound = p + buff_size - 1
1221 if (f_approx_equal(norm(dim), 0._wp))
then
1223 ghost_points_in(q)%ip_grid(dim) = ghost_points_in(q)%loc(dim)
1225 if (norm(dim) > 0)
then
1231 index = ghost_points_in(q)%loc(dim)
1232 temp_loc = ghost_points_in(q)%ip_loc(dim)
1233 do while ((temp_loc < s_cc(index) .or. temp_loc > s_cc(index + 1)) .and. (.not. bounds_error))
1235 if (index < -buff_size .or. index > bound)
then
1236#if !defined(MFC_OpenACC) && !defined(MFC_OpenMP)
1237 print *,
"A required image point is not located in this computational domain."
1238 print *,
"Ghost Point is located at :"
1240 print *, [x_cc(i), y_cc(
j)]
1242 print *, [x_cc(i), y_cc(
j), z_cc(
k)]
1244 print *,
"We are searching in dimension ", dim,
" for image point at ", ghost_points_in(q)%ip_loc(:)
1245 print *,
"Domain size: ", [x_cc(-buff_size), y_cc(-buff_size), z_cc(-buff_size)]
1246 print *,
"x: ", x_cc(-buff_size),
" to: ", x_cc(m + buff_size - 1)
1247 print *,
"y: ", y_cc(-buff_size),
" to: ", y_cc(n + buff_size - 1)
1248 if (p /= 0) print *,
"z: ", z_cc(-buff_size),
" to: ", z_cc(p + buff_size - 1)
1249 print *,
"Image point is located approximately ", &
1250 & (ghost_points_in(q)%loc(dim) - ghost_points_in(q) %ip_loc(dim))/(s_cc(1) - s_cc(0)), &
1251 &
" grid cells away"
1252 print *,
"Levelset ", dist,
" and Norm: ", norm(:)
1254 &
"A short term fix may include increasing buff_size further in m_helper_basic (currently set to a minimum of 10)"
1256 bounds_error = .true.
1260 ghost_points_in(q)%ip_grid(dim) = index
1261 if (ghost_points_in(q)%DB(dim) == -1)
then
1262 ghost_points_in(q)%ip_grid(dim) = ghost_points_in(q)%loc(dim) + 1
1263 else if (ghost_points_in(q)%DB(dim) == 1)
then
1264 ghost_points_in(q)%ip_grid(dim) = ghost_points_in(q)%loc(dim) - 1
1270# 477 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1271#if defined(MFC_OpenACC)
1272# 477 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1274# 477 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1275#elif defined(MFC_OpenMP)
1276# 477 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1278# 477 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1280# 477 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1283 if (bounds_error) error stop
"Ghost Point and Image Point on Different Processors. Exiting"
1375 type(ghost_point),
dimension(num_gps),
intent(inout) :: ghost_points_in
1376 integer :: i,
j,
k, ii, jj, kk, gp_layers_z
1377 integer :: xp, yp, zp
1378 integer :: count, count_i, local_idx
1379 integer :: patch_id, encoded_patch_id
1384 gp_layers_z = gp_layers
1385 if (p == 0) gp_layers_z = 0
1388# 543 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1390# 543 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1391#if defined(MFC_OpenACC)
1392# 543 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1394# 543 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1395#elif defined(MFC_OpenMP)
1396# 543 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1398# 543 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1400# 543 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1402# 543 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1404# 543 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1406# 546 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1412 marker_search:
do ii = i - gp_layers, i + gp_layers
1413 do jj =
j - gp_layers,
j + gp_layers
1414 do kk =
k - gp_layers_z,
k + gp_layers_z
1422 end do marker_search
1426# 564 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1427#if defined(MFC_OpenACC)
1428# 564 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1430# 564 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1431#elif defined(MFC_OpenMP)
1432# 564 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1434# 564 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1438#if defined(MFC_OpenACC)
1439# 567 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1441# 567 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1442#elif defined(MFC_OpenMP)
1443# 567 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1445# 567 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1448 ghost_points_in(local_idx)%loc = [i,
j,
k]
1450 call s_decode_patch_periodicity(encoded_patch_id, patch_id, xp, yp, zp)
1451 ghost_points_in(local_idx)%ib_patch_id = patch_id
1453 ghost_points_in(local_idx)%x_periodicity = xp
1454 ghost_points_in(local_idx)%y_periodicity = yp
1455 ghost_points_in(local_idx)%z_periodicity = zp
1456 ghost_points_in(local_idx)%slip = patch_ib(patch_id)%slip
1458 if ((x_cc(i) - dx(i)) < x_domain%beg)
then
1459 ghost_points_in(local_idx)%DB(1) = -1
1460 else if ((x_cc(i) + dx(i)) > x_domain%end)
then
1461 ghost_points_in(local_idx)%DB(1) = 1
1463 ghost_points_in(local_idx)%DB(1) = 0
1466 if ((y_cc(
j) - dy(
j)) < y_domain%beg)
then
1467 ghost_points_in(local_idx)%DB(2) = -1
1468 else if ((y_cc(
j) + dy(
j)) > y_domain%end)
then
1469 ghost_points_in(local_idx)%DB(2) = 1
1471 ghost_points_in(local_idx)%DB(2) = 0
1475 if ((z_cc(
k) - dz(
k)) < z_domain%beg)
then
1476 ghost_points_in(local_idx)%DB(3) = -1
1477 else if ((z_cc(
k) + dz(
k)) > z_domain%end)
then
1478 ghost_points_in(local_idx)%DB(3) = 1
1480 ghost_points_in(local_idx)%DB(3) = 0
1489# 609 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1490#if defined(MFC_OpenACC)
1491# 609 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1493# 609 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1494#elif defined(MFC_OpenMP)
1495# 609 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1497# 609 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1499# 609 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1507 type(ghost_point),
dimension(num_gps),
intent(inout) :: ghost_points_in
1508 real(wp),
dimension(2, 2, 2) :: dist
1509 real(wp),
dimension(2, 2, 2) :: alpha
1510 real(wp),
dimension(2, 2, 2) :: interp_coeffs
1512 real(wp),
dimension(2, 2, 2) :: eta
1513 type(ghost_point) :: gp
1514 integer :: q, i,
j,
k, ii, jj, kk
1516 logical :: is_cell_center
1519# 627 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1521# 627 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1522#if defined(MFC_OpenACC)
1523# 627 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1525# 627 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1526#elif defined(MFC_OpenMP)
1527# 627 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1529# 627 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1531# 627 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1533# 627 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1535# 627 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1538 gp = ghost_points_in(q)
1554 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)
1557 dist(1 + ii, 1 + jj, &
1558 & 1 + kk) = sqrt((x_cc(i + ii) - gp%ip_loc(1))**2 + (y_cc(
j + jj) - gp%ip_loc(2))**2 + (z_cc(
k &
1559 & + kk) - gp%ip_loc(3))**2)
1566 interp_coeffs = 0._wp
1567 is_cell_center = .false.
1568 check_is_cell_center:
do ii = 0, 1
1570 if (dist(ii + 1, jj + 1, 1) <= 1.e-16_wp)
then
1571 interp_coeffs(ii + 1, jj + 1, 1) = 1._wp
1572 is_cell_center = .true.
1573 exit check_is_cell_center
1576 if (dist(ii + 1, jj + 1, 2) <= 1.e-16_wp)
then
1577 interp_coeffs(ii + 1, jj + 1, 2) = 1._wp
1578 is_cell_center = .true.
1579 exit check_is_cell_center
1584 end do check_is_cell_center
1586 if (.not. is_cell_center)
then
1589 patch_id = gp%ib_patch_id
1590 if (
ib_markers%sf(i,
j,
k) /= 0) alpha(1, 1, 1) = 0._wp
1591 if (
ib_markers%sf(i + 1,
j,
k) /= 0) alpha(2, 1, 1) = 0._wp
1592 if (
ib_markers%sf(i,
j + 1,
k) /= 0) alpha(1, 2, 1) = 0._wp
1593 if (
ib_markers%sf(i + 1,
j + 1,
k) /= 0) alpha(2, 2, 1) = 0._wp
1596 eta(:,:,1) = 1._wp/dist(:,:,1)**2
1597 buf = sum(alpha(:,:,1)*eta(:,:,1))
1598 if (buf > 0._wp)
then
1599 interp_coeffs(:,:,1) = alpha(:,:,1)*eta(:,:,1)/buf
1601 buf = sum(eta(:,:,1))
1602 interp_coeffs(:,:,1) = eta(:,:,1)/buf
1605 if (
ib_markers%sf(i,
j,
k + 1) /= 0) alpha(1, 1, 2) = 0._wp
1606 if (
ib_markers%sf(i + 1,
j,
k + 1) /= 0) alpha(2, 1, 2) = 0._wp
1607 if (
ib_markers%sf(i,
j + 1,
k + 1) /= 0) alpha(1, 2, 2) = 0._wp
1608 if (
ib_markers%sf(i + 1,
j + 1,
k + 1) /= 0) alpha(2, 2, 2) = 0._wp
1610 buf = sum(alpha*eta)
1612 if (buf > 0._wp)
then
1613 interp_coeffs = alpha*eta/buf
1616 interp_coeffs = eta/buf
1621 ghost_points_in(q)%interp_coeffs = interp_coeffs
1624# 714 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1625#if defined(MFC_OpenACC)
1626# 714 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1628# 714 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1629#elif defined(MFC_OpenMP)
1630# 714 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1632# 714 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1634# 714 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1640 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, &
1642 & nmom_IP, pb_in, mv_in, presb_IP, massv_IP)
1644# 722 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1646# 722 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1648# 722 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1650# 722 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1652# 722 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1654# 722 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1656# 722 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1658 type(scalar_field),
dimension(sys_size),
intent(in) :: q_prim_vf
1659 real(stp),
optional,
dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:),
intent(in) :: pb_in, mv_in
1660 type(ghost_point),
intent(in) :: gp
1661 real(wp),
intent(inout) :: pres_ip
1662 real(wp),
dimension(3),
intent(inout) :: vel_ip
1663 real(wp),
intent(inout) :: c_ip
1664# 732 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1665 real(wp),
dimension(num_fluids),
intent(inout) :: alpha_ip, alpha_rho_ip
1666# 734 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1667 real(wp),
optional,
dimension(:),
intent(inout) :: r_ip, v_ip, pb_ip, mv_ip
1668 real(wp),
optional,
dimension(:),
intent(inout) :: nmom_ip
1669 real(wp),
optional,
dimension(:),
intent(inout) :: presb_ip, massv_ip
1670 integer :: i,
j,
k,
l, q
1671 integer :: i1, i2, j1, j2, k1, k2
1674 i1 = gp%ip_grid(1); i2 = i1 + 1
1675 j1 = gp%ip_grid(2); j2 = j1 + 1
1676 k1 = gp%ip_grid(3); k2 = k1 + 1
1683 alpha_rho_ip = 0._wp
1688 if (surface_tension) c_ip = 0._wp
1690 if (bubbles_euler)
then
1693 if (.not. polytropic)
then
1701 if (.not. polytropic)
then
1708# 774 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1709#if defined(MFC_OpenACC)
1710# 774 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1712# 774 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1713#elif defined(MFC_OpenMP)
1714# 774 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1716# 774 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1720# 776 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1721#if defined(MFC_OpenACC)
1722# 776 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1724# 776 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1725#elif defined(MFC_OpenMP)
1726# 776 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1728# 776 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1732# 778 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1733#if defined(MFC_OpenACC)
1734# 778 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1736# 778 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1737#elif defined(MFC_OpenMP)
1738# 778 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1740# 778 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1743 coeff = gp%interp_coeffs(i - i1 + 1,
j - j1 + 1,
k - k1 + 1)
1745 pres_ip = pres_ip + coeff*q_prim_vf(e_idx)%sf(i,
j,
k)
1748# 784 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1749#if defined(MFC_OpenACC)
1750# 784 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1752# 784 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1753#elif defined(MFC_OpenMP)
1754# 784 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1756# 784 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1759 vel_ip(q + 1 - momxb) = vel_ip(q + 1 - momxb) + coeff*q_prim_vf(q)%sf(i,
j,
k)
1763# 789 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1764#if defined(MFC_OpenACC)
1765# 789 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1767# 789 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1768#elif defined(MFC_OpenMP)
1769# 789 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1771# 789 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1773 do l = contxb, contxe
1774 alpha_rho_ip(
l) = alpha_rho_ip(
l) + coeff*q_prim_vf(
l)%sf(i,
j,
k)
1775 alpha_ip(
l) = alpha_ip(
l) + coeff*q_prim_vf(advxb +
l - 1)%sf(i,
j,
k)
1778 if (surface_tension)
then
1779 c_ip = c_ip + coeff*q_prim_vf(c_idx)%sf(i,
j,
k)
1782 if (bubbles_euler .and. .not. qbmm)
then
1784# 800 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1785#if defined(MFC_OpenACC)
1786# 800 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1788# 800 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1789#elif defined(MFC_OpenMP)
1790# 800 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1792# 800 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1795 if (polytropic)
then
1796 r_ip(
l) = r_ip(
l) + coeff*q_prim_vf(bubxb + (
l - 1)*2)%sf(i,
j,
k)
1797 v_ip(
l) = v_ip(
l) + coeff*q_prim_vf(bubxb + 1 + (
l - 1)*2)%sf(i,
j,
k)
1799 r_ip(
l) = r_ip(
l) + coeff*q_prim_vf(bubxb + (
l - 1)*4)%sf(i,
j,
k)
1800 v_ip(
l) = v_ip(
l) + coeff*q_prim_vf(bubxb + 1 + (
l - 1)*4)%sf(i,
j,
k)
1801 pb_ip(
l) = pb_ip(
l) + coeff*q_prim_vf(bubxb + 2 + (
l - 1)*4)%sf(i,
j,
k)
1802 mv_ip(
l) = mv_ip(
l) + coeff*q_prim_vf(bubxb + 3 + (
l - 1)*4)%sf(i,
j,
k)
1809 nmom_ip(
l) = nmom_ip(
l) + coeff*q_prim_vf(bubxb - 1 +
l)%sf(i,
j,
k)
1811 if (.not. polytropic)
then
1814 presb_ip((q - 1)*nnode +
l) = presb_ip((q - 1)*nnode +
l) + coeff*real(pb_in(i,
j,
k,
l, q), &
1816 massv_ip((q - 1)*nnode +
l) = massv_ip((q - 1)*nnode +
l) + coeff*real(mv_in(i,
j,
k,
l, q), &
1918 type(scalar_field),
dimension(1:sys_size),
intent(in) :: q_prim_vf
1919 type(physical_parameters),
dimension(1:num_fluids),
intent(in) :: fluid_pp
1920 integer :: gp_id, i, j, k, l, q, ib_idx, fluid_idx
1921 real(wp),
dimension(num_ibs, 3) :: forces, torques
1922 real(wp),
dimension(1:3,1:3) :: viscous_stress_div, viscous_stress_div_1, &
1923 & viscous_stress_div_2
1924 real(wp),
dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution, vel
1925 real(wp) :: cell_volume, dx, dy, dz, dynamic_viscosity
1927# 897 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1928 real(wp),
dimension(num_fluids) :: dynamic_viscosities
1929# 899 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1931 call nvtxstartrange(
"COMPUTE-IB-FORCES")
1937 do fluid_idx = 1, num_fluids
1938 if (fluid_pp(fluid_idx)%Re(1) /= 0._wp)
then
1939 dynamic_viscosities(fluid_idx) = 1._wp/fluid_pp(fluid_idx)%Re(1)
1941 dynamic_viscosities(fluid_idx) = 0._wp
1947# 915 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1949# 915 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1950#if defined(MFC_OpenACC)
1951# 915 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1953# 915 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1954#elif defined(MFC_OpenMP)
1955# 915 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1957# 915 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1959# 915 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1961# 915 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1963# 915 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1965# 919 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1970 if (ib_idx /= 0)
then
1972 if (num_dims == 3)
then
1973 radial_vector = [x_cc(i), y_cc(j), z_cc(k)] - [patch_ib(ib_idx)%x_centroid, &
1974 & patch_ib(ib_idx)%y_centroid, patch_ib(ib_idx)%z_centroid]
1976 radial_vector = [x_cc(i), y_cc(j), 0._wp] - [patch_ib(ib_idx)%x_centroid, &
1977 & patch_ib(ib_idx)%y_centroid, 0._wp]
1979 dx = x_cc(i + 1) - x_cc(i)
1980 dy = y_cc(j + 1) - y_cc(j)
1982 local_force_contribution(:) = 0._wp
1983 do fluid_idx = 0, num_fluids - 1
1986 local_force_contribution(1) = local_force_contribution(1) - (q_prim_vf(e_idx + fluid_idx)%sf(i + 1, &
1987 & j, k) - q_prim_vf(e_idx + fluid_idx)%sf(i - 1, j, &
1989 local_force_contribution(2) = local_force_contribution(2) - (q_prim_vf(e_idx + fluid_idx)%sf(i, &
1990 & j + 1, k) - q_prim_vf(e_idx + fluid_idx)%sf(i, j - 1, k))/(2._wp*dy)
1991 cell_volume = abs(dx*dy)
1993 if (num_dims == 3)
then
1994 dz = z_cc(k + 1) - z_cc(k)
1995 local_force_contribution(3) = local_force_contribution(3) - (q_prim_vf(e_idx + fluid_idx)%sf(i, &
1996 & j, k + 1) - q_prim_vf(e_idx + fluid_idx)%sf(i, j, k - 1))/(2._wp*dz)
1997 cell_volume = abs(cell_volume*dz)
2004 dynamic_viscosity = 0._wp
2005 do fluid_idx = 1, num_fluids
2007 dynamic_viscosity = dynamic_viscosity + (q_prim_vf(fluid_idx + advxb - 1)%sf(i, j, &
2008 & k)*dynamic_viscosities(fluid_idx))
2012 call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i - 1, j, k)
2013 call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i + 1, j, k)
2014 viscous_stress_div(1,1:3) = (viscous_stress_div_2(1,1:3) - viscous_stress_div_1(1, &
2016 local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(1, &
2019 call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j - 1, k)
2020 call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j + 1, k)
2021 viscous_stress_div(2,1:3) = (viscous_stress_div_2(2,1:3) - viscous_stress_div_1(2, &
2023 local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(2, &
2026 if (num_dims == 3)
then
2027 call s_compute_viscous_stress_tensor(viscous_stress_div_1, q_prim_vf, dynamic_viscosity, i, j, &
2029 call s_compute_viscous_stress_tensor(viscous_stress_div_2, q_prim_vf, dynamic_viscosity, i, j, &
2031 viscous_stress_div(3,1:3) = (viscous_stress_div_2(3,1:3) - viscous_stress_div_1(3, &
2033 local_force_contribution(1:3) = local_force_contribution(1:3) + viscous_stress_div(3, &
2038 call s_cross_product(radial_vector, local_force_contribution, local_torque_contribution)
2043# 995 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2044#if defined(MFC_OpenACC)
2045# 995 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2047# 995 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2048#elif defined(MFC_OpenMP)
2049# 995 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2051# 995 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2053 forces(ib_idx, l) = forces(ib_idx, l) + (local_force_contribution(l)*cell_volume)
2055# 997 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2056#if defined(MFC_OpenACC)
2057# 997 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2059# 997 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2060#elif defined(MFC_OpenMP)
2061# 997 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2063# 997 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2065 torques(ib_idx, l) = torques(ib_idx, l) + local_torque_contribution(l)*cell_volume
2072# 1004 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2073#if defined(MFC_OpenACC)
2074# 1004 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2076# 1004 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2077#elif defined(MFC_OpenMP)
2078# 1004 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2080# 1004 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2082# 1004 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2086 call s_mpi_allreduce_vectors_sum(forces, forces, num_ibs, 3)
2087 call s_mpi_allreduce_vectors_sum(torques, torques, num_ibs, 3)
2092 forces(i, 1) = forces(i, 1) + accel_bf(1)*patch_ib(i)%mass
2095 forces(i, 2) = forces(i, 2) + accel_bf(2)*patch_ib(i)%mass
2098 forces(i, 3) = forces(i, 3) + accel_bf(3)*patch_ib(i)%mass
2104 patch_ib(i)%force(:) = forces(i,:)
2105 patch_ib(i)%torque(:) = matmul(patch_ib(i)%rotation_matrix_inverse, torques(i, &
2218 integer,
intent(in) :: ib_marker
2219 integer :: i, j, k, num_cells, num_cells_local
2220 real(wp),
dimension(1:3) :: center_of_mass, center_of_mass_local
2224 if (patch_ib(ib_marker)%geometry == 4 .or. patch_ib(ib_marker)%geometry == 5 .or. patch_ib(ib_marker) &
2225 & %geometry == 11 .or. patch_ib(ib_marker)%geometry == 12)
then
2226 center_of_mass_local = [0._wp, 0._wp, 0._wp]
2233 if (
ib_markers%sf(i, j, k) == ib_marker)
then
2234 num_cells_local = num_cells_local + 1
2235 center_of_mass_local = center_of_mass_local + [x_cc(i), y_cc(j), 0._wp]
2236 if (num_dims == 3) center_of_mass_local(3) = center_of_mass_local(3) + z_cc(k)
2243 call s_mpi_allreduce_integer_sum(num_cells_local, num_cells)
2244 if (num_cells /= 0)
then
2245 call s_mpi_allreduce_sum(center_of_mass_local(1), center_of_mass(1))
2246 call s_mpi_allreduce_sum(center_of_mass_local(2), center_of_mass(2))
2247 call s_mpi_allreduce_sum(center_of_mass_local(3), center_of_mass(3))
2248 center_of_mass = center_of_mass/real(num_cells, wp)
2250 patch_ib(ib_marker)%centroid_offset = [0._wp, 0._wp, 0._wp]
2256 patch_ib(ib_marker)%centroid_offset = [patch_ib(ib_marker)%x_centroid, patch_ib(ib_marker)%y_centroid, &
2257 & patch_ib(ib_marker)%z_centroid] - center_of_mass
2258 patch_ib(ib_marker)%x_centroid = center_of_mass(1)
2259 patch_ib(ib_marker)%y_centroid = center_of_mass(2)
2260 patch_ib(ib_marker)%z_centroid = center_of_mass(3)
2263 patch_ib(ib_marker)%centroid_offset = matmul(patch_ib(ib_marker)%rotation_matrix_inverse, &
2264 & patch_ib(ib_marker)%centroid_offset)
2266 patch_ib(ib_marker)%centroid_offset(:) = [0._wp, 0._wp, 0._wp]
2274 real(wp),
dimension(3),
intent(in) :: axis
2275 integer,
intent(in) :: ib_marker
2276 real(wp) :: moment, distance_to_axis, cell_volume
2277 real(wp),
dimension(3) :: position, closest_point_along_axis, vector_to_axis, normal_axis
2278 integer :: i, j, k, count
2281 normal_axis = [0, 0, 1]
2282 else if (sqrt(sum(axis**2)) == 0)
then
2284 patch_ib(ib_marker)%moment = 1._wp
2287 normal_axis = axis/sqrt(sum(axis))
2291 if (patch_ib(ib_marker)%geometry == 2)
then
2292 patch_ib(ib_marker)%moment = 0.5_wp*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%radius)**2
2293 else if (patch_ib(ib_marker)%geometry == 3)
then
2294 patch_ib(ib_marker)%moment = patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%length_x**2 + patch_ib(ib_marker) &
2295 & %length_y**2)/6._wp
2296 else if (patch_ib(ib_marker)%geometry == 6)
then
2297 patch_ib(ib_marker)%moment = 0.0625_wp*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%length_x**2 + patch_ib(ib_marker) &
2299 else if (patch_ib(ib_marker)%geometry == 8)
then
2300 patch_ib(ib_marker)%moment = 0.4*patch_ib(ib_marker)%mass*(patch_ib(ib_marker)%radius)**2
2304 cell_volume = (x_cc(1) - x_cc(0))*(y_cc(1) - y_cc(0))
2307 cell_volume = cell_volume*(z_cc(1) - z_cc(0))
2311# 1141 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2313# 1141 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2314#if defined(MFC_OpenACC)
2315# 1141 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2317# 1141 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2318#elif defined(MFC_OpenMP)
2319# 1141 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2321# 1141 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2323# 1141 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2325# 1141 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2327# 1141 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2329# 1143 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2333 if (
ib_markers%sf(i, j, k) == ib_marker)
then
2335# 1147 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2336#if defined(MFC_OpenACC)
2337# 1147 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2339# 1147 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2340#elif defined(MFC_OpenMP)
2341# 1147 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2343# 1147 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2349 position = [x_cc(i), y_cc(j), 0._wp] - [patch_ib(ib_marker)%x_centroid, &
2350 & patch_ib(ib_marker)%y_centroid, 0._wp]
2352 position = [x_cc(i), y_cc(j), z_cc(k)] - [patch_ib(ib_marker)%x_centroid, &
2353 & patch_ib(ib_marker)%y_centroid, patch_ib(ib_marker)%z_centroid]
2357 closest_point_along_axis = normal_axis*dot_product(normal_axis, position)
2358 vector_to_axis = position - closest_point_along_axis
2359 distance_to_axis = dot_product(vector_to_axis, vector_to_axis)
2363# 1165 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2364#if defined(MFC_OpenACC)
2365# 1165 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2367# 1165 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2368#elif defined(MFC_OpenMP)
2369# 1165 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2371# 1165 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2373 moment = moment + distance_to_axis
2379# 1171 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2380#if defined(MFC_OpenACC)
2381# 1171 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2383# 1171 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2384#elif defined(MFC_OpenMP)
2385# 1171 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2387# 1171 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2389# 1171 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2393 patch_ib(ib_marker)%moment = moment*patch_ib(ib_marker)%mass/(count*cell_volume)
2395# 1175 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2396#if defined(MFC_OpenACC)
2397# 1175 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2399# 1175 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2400#elif defined(MFC_OpenMP)
2401# 1175 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2403# 1175 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"