1130 type(scalar_field),
dimension(sys_size),
intent(inout) ::
q_cons_vf
1131 type(scalar_field),
dimension(sys_size),
intent(inout) :: q_prim_vf
1132 real(stp),
dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:),
intent(inout) :: pb_in, mv_in
1133 integer :: i,
j,
k,
l, q, r
1134 integer :: jj, kk, ll
1135 integer :: rad, rad_z, num_nbrs
1136 integer :: patch_id, patch_id_temp
1137 real(wp) :: rho, gamma, pi_inf, dyn_pres
1138 real(wp) :: vel_sum_g, e_ghost
1139 real(wp),
dimension(2) :: re_k
1142 real(wp) :: pres_ip, pres_gp
1143 real(wp),
dimension(3) :: vel_ip
1146# 292 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1147 real(wp),
dimension(num_fluids) :: gs
1148 real(wp),
dimension(num_fluids) :: alpha_rho_ip, alpha_ip, alpha_rho_gp
1149 real(wp),
dimension(nb) :: r_ip, v_ip, pb_ip, mv_ip
1150 real(wp),
dimension(nb*nmom) :: nmom_ip
1151 real(wp),
dimension(nb*nnode) :: presb_ip, massv_ip
1152# 298 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1153 real(wp),
dimension(1) :: ys_ip, ys_g, ys_s, w_species
1154# 299 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1155 real(wp) :: alpha_q, alpha_rho_q, e_q
1156 real(wp) :: t_ip, mw_ip, e_ip
1157 real(wp) :: t_s, t_g, mw_s, mw_g, rho_s, rho_g, mdot_s, v_stefan, d
1158 logical :: surface_converged
1159 integer :: n_not_converged, n_ill_posed
1160 real(wp),
dimension(3) :: norm
1163 real(wp),
dimension(3) :: physical_loc
1164 real(wp),
dimension(3) :: vel_g
1165 real(wp),
dimension(3) :: radial_vector
1167 real(wp) :: buf, buf_prim
1168 type(ghost_point) :: gp
1172# 315 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1174# 315 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1175#if defined(MFC_OpenACC)
1176# 315 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1178# 315 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1179#elif defined(MFC_OpenMP)
1180# 315 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1182# 315 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1184# 315 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1186# 315 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1188# 315 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1190# 315 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1192# 316 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1197 if (patch_id /= 0)
then
1198 call s_decode_patch_periodicity(patch_id, patch_id_temp)
1199 call s_get_neighborhood_idx(patch_id_temp, patch_id)
1200 if (patch_id > 0)
then
1202 if (.not. chemistry) q_prim_vf(eqn_idx%E)%sf(
j,
k,
l) = 1._wp
1204 do i = 1, num_fluids
1205 rho = rho + q_prim_vf(eqn_idx%cont%beg + i - 1)%sf(
j,
k,
l)
1210 q_cons_vf(eqn_idx%mom%beg + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)*rho
1211 q_prim_vf(eqn_idx%mom%beg + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)
1219# 341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1220#if defined(MFC_OpenACC)
1221# 341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1223# 341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1224#elif defined(MFC_OpenMP)
1225# 341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1227# 341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1229# 341 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1231# 342 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1238# 347 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1240# 347 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1241#if defined(MFC_OpenACC)
1242# 347 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1244# 347 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1246# 347 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1248# 347 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1249#elif defined(MFC_OpenMP)
1250# 347 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1252# 347 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1254# 347 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1256# 347 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1258# 347 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1260# 347 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1262# 347 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1264# 347 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1266# 353 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1269 if (.not. gp%interp_valid) cycle
1276 physical_loc = [x_cc(
j), y_cc(
k), 0._wp]
1277 if (num_dims == 3) physical_loc(3) = z_cc(
l)
1280 if (bubbles_euler .and. .not. qbmm)
then
1283 else if (qbmm .and. polytropic)
then
1285 & pb_ip, mv_ip, nmom_ip)
1286 else if (qbmm .and. .not. polytropic)
then
1288 & pb_ip, mv_ip, nmom_ip, pb_in, mv_in, presb_ip, massv_ip)
1289 else if (chemistry)
then
1299 if (chemistry .and. patch_ib(patch_id)%inj_species > 0)
then
1300 call get_mixture_molecular_weight(ys_ip, mw_ip)
1301 t_ip = pres_ip*mw_ip/(alpha_rho_ip(1)*gas_constant)
1303 ys_ip(patch_ib(patch_id)%inj_species) = 1._wp
1304 call get_mixture_molecular_weight(ys_ip, mw_ip)
1305 alpha_rho_ip(1) = pres_ip*mw_ip/(t_ip*gas_constant)
1310 surface_converged = .false.
1312 if (chemistry .and. patch_ib(patch_id)%inj_species == 0)
then
1314 call get_mixture_molecular_weight(ys_ip, mw_ip)
1315 t_ip = pres_ip*mw_ip*alpha_ip(1)/(alpha_rho_ip(1)*gas_constant)
1317 if (patch_ib(patch_id)%surface_reaction == 1)
then
1319 d = abs(real(gp%levelset, kind=wp))
1321 w_species(1:num_species) = molecular_weights(:)
1330 call s_solve_surface(pres_ip, t_ip, patch_ib(patch_id)%Twall, d, ys_ip, w_species, &
1331 & patch_ib(patch_id)%thermal_bc, ys_s, t_s, mdot_s, surface_converged)
1332 if (.not. surface_converged) n_not_converged = n_not_converged + 1
1334 n_ill_posed = n_ill_posed + 1
1337 if (surface_converged)
then
1338 call get_mixture_molecular_weight(ys_s, mw_s)
1341 rho_s = pres_ip*mw_s/(gas_constant*t_s)
1342 if (rho_s > 0._wp) v_stefan = mdot_s/rho_s
1349 if (.not. surface_converged)
then
1350 ys_s(1:num_species) = ys_ip(1:num_species)
1352 if (patch_ib(patch_id)%thermal_bc == 1) t_s = patch_ib(patch_id)%Twall
1358 call get_mixture_molecular_weight(ys_g, mw_g)
1359 alpha_rho_ip(1) = alpha_ip(1)*pres_ip*mw_g/(gas_constant*t_g)
1363 if (.not. chemistry .and. patch_ib(patch_id)%thermal_bc == 1)
then
1364 call s_phase_temperature(alpha_rho_ip(1)/alpha_ip(1), pres_ip, 1, t_ip)
1366 call s_phase_density(pres_ip, t_g, 1, rho_g)
1367 alpha_rho_ip(1) = alpha_ip(1)*rho_g
1371 if (hypoelasticity)
then
1372 call s_convert_species_to_mixture_variables_kernel(rho, gamma, pi_inf, qv_k, alpha_ip, alpha_rho_ip, re_k, &
1375 call s_convert_species_to_mixture_variables_kernel(rho, gamma, pi_inf, qv_k, alpha_ip, alpha_rho_ip, re_k)
1378 if (surface_tension) q_prim_vf(eqn_idx%c)%sf(
j,
k,
l) = c_ip
1381 if (patch_ib(patch_id)%moving_ibm <= 1)
then
1383 alpha_rho_gp = alpha_rho_ip
1392# 477 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1393#if defined(MFC_OpenACC)
1394# 477 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1396# 477 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1397#elif defined(MFC_OpenMP)
1398# 477 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1400# 477 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1402# 478 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1403 do q = 1, num_fluids
1404 alpha_rho_gp(q) = alpha_rho_ip(q)*(pres_gp + isentrope_b(q))/(pres_ip + isentrope_b(q))
1406 call s_compute_mixture_coefficients(alpha_rho_gp, alpha_ip, rho, gamma, pi_inf, qv_k)
1408 q_prim_vf(eqn_idx%E)%sf(
j,
k,
l) = pres_gp
1412# 486 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1413#if defined(MFC_OpenACC)
1414# 486 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1416# 486 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1417#elif defined(MFC_OpenMP)
1418# 486 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1420# 486 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1422# 487 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1423 do q = 1, num_fluids
1424 q_prim_vf(q)%sf(
j,
k,
l) = alpha_rho_gp(q)
1425 q_prim_vf(eqn_idx%adv%beg + q - 1)%sf(
j,
k,
l) = alpha_ip(q)
1429 radial_vector(1) = physical_loc(1) - (patch_ib(patch_id)%x_centroid + real(
ghost_points(i)%x_periodicity, &
1430 & wp)*(glb_bounds(1)%end - glb_bounds(1)%beg))
1431 radial_vector(2) = physical_loc(2) - (patch_ib(patch_id)%y_centroid + real(
ghost_points(i)%y_periodicity, &
1432 & wp)*(glb_bounds(2)%end - glb_bounds(2)%beg))
1433 radial_vector(3) = 0._wp
1434 if (num_dims == 3) radial_vector(3) = physical_loc(3) - (patch_ib(patch_id)%z_centroid &
1435 & + real(
ghost_points(i)%z_periodicity, wp)*(glb_bounds(3)%end - glb_bounds(3)%beg))
1440 if (chemistry .and. patch_ib(patch_id)%inj_species == 0 .and. patch_ib(patch_id)%surface_reaction == 1 &
1441 & .and. surface_converged)
then
1442 norm(1:3) = gp%levelset_norm
1443 buf = sqrt(sum(norm**2))
1444 if (buf > 0._wp) vel_g = vel_g + v_stefan*norm/buf
1450# 513 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1451#if defined(MFC_OpenACC)
1452# 513 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1454# 513 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1455#elif defined(MFC_OpenMP)
1456# 513 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1458# 513 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1460# 514 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1461 do q = eqn_idx%mom%beg, eqn_idx%mom%end
1462 q_cons_vf(q)%sf(
j,
k,
l) = rho*vel_g(q - eqn_idx%mom%beg + 1)
1463 q_prim_vf(q)%sf(
j,
k,
l) = vel_g(q - eqn_idx%mom%beg + 1)
1464 vel_sum_g = vel_sum_g + vel_g(q - eqn_idx%mom%beg + 1)**2._wp
1466 dyn_pres = 5.e-1_wp*rho*vel_sum_g
1470# 522 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1471#if defined(MFC_OpenACC)
1472# 522 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1474# 522 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1475#elif defined(MFC_OpenMP)
1476# 522 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1478# 522 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1480# 523 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1481 do q = 1, num_fluids
1483 q_cons_vf(eqn_idx%adv%beg + q - 1)%sf(
j,
k,
l) = alpha_ip(q)
1487 if (surface_tension)
q_cons_vf(eqn_idx%c)%sf(
j,
k,
l) = c_ip
1493 if (patch_ib(patch_id)%inj_species == 0 .and. (patch_ib(patch_id)%surface_reaction == 0 &
1494 & .or. surface_converged))
then
1496 call get_mixture_energy_mass(t_g, ys_g, e_ip)
1498# 539 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1499#if defined(MFC_OpenACC)
1500# 539 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1502# 539 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1503#elif defined(MFC_OpenMP)
1504# 539 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1506# 539 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1508# 540 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1509 do q = 1, num_species
1510 q_cons_vf(eqn_idx%species%beg + q - 1)%sf(
j,
k,
l) = rho*ys_g(q)
1516 call get_mixture_molecular_weight(ys_ip, mw_ip)
1517 t_ip = pres_ip*mw_ip/(rho*gas_constant)
1518 call get_mixture_energy_mass(t_ip, ys_ip, e_ip)
1520# 550 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1521#if defined(MFC_OpenACC)
1522# 550 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1524# 550 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1525#elif defined(MFC_OpenMP)
1526# 550 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1528# 550 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1530# 551 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1531 do q = 1, num_species
1532 q_cons_vf(eqn_idx%species%beg + q - 1)%sf(
j,
k,
l) = rho*ys_ip(q)
1538 call s_compute_energy(pres_gp, alpha_rho_gp, alpha_ip, vel_sum_g, e_ghost)
1542 if (bubbles_euler .and. .not. qbmm)
then
1543 call s_comp_n_from_prim(alpha_ip(1), r_ip, nbub, weight)
1545# 564 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1546#if defined(MFC_OpenACC)
1547# 564 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1549# 564 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1550#elif defined(MFC_OpenMP)
1551# 564 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1553# 564 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1555# 565 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1557 q_cons_vf(eqn_idx%bub%beg + (q - 1)*2)%sf(
j,
k,
l) = nbub*r_ip(q)
1558 q_cons_vf(eqn_idx%bub%beg + (q - 1)*2 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1559 if (.not. polytropic)
then
1560 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4)%sf(
j,
k,
l) = nbub*r_ip(q)
1561 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1562 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 2)%sf(
j,
k,
l) = nbub*pb_ip(q)
1563 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 3)%sf(
j,
k,
l) = nbub*mv_ip(q)
1571# 579 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1572#if defined(MFC_OpenACC)
1573# 579 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1575# 579 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1576#elif defined(MFC_OpenMP)
1577# 579 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1579# 579 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1581# 580 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1583 q_cons_vf(eqn_idx%bub%beg + q - 1)%sf(
j,
k,
l) = nbub*nmom_ip(q)
1587# 584 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1588#if defined(MFC_OpenACC)
1589# 584 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1591# 584 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1592#elif defined(MFC_OpenMP)
1593# 584 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1595# 584 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1597# 585 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1599 q_cons_vf(eqn_idx%bub%beg + (q - 1)*nmom)%sf(
j,
k,
l) = nbub
1602 if (.not. polytropic)
then
1604# 590 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1605#if defined(MFC_OpenACC)
1606# 590 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1608# 590 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1609#elif defined(MFC_OpenMP)
1610# 590 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1612# 590 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1614# 591 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1617# 592 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1618#if defined(MFC_OpenACC)
1619# 592 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1621# 592 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1622#elif defined(MFC_OpenMP)
1623# 592 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1625# 592 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1627# 593 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1629 pb_in(
j,
k,
l, r, q) = presb_ip((q - 1)*nnode + r)
1630 mv_in(
j,
k,
l, r, q) = massv_ip((q - 1)*nnode + r)
1636 if (model_eqns == model_eqns_6eq)
then
1638# 602 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1639#if defined(MFC_OpenACC)
1640# 602 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1642# 602 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1643#elif defined(MFC_OpenMP)
1644# 602 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1646# 602 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1648# 603 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1649 do q = eqn_idx%int_en%beg, eqn_idx%int_en%end
1650 alpha_q = alpha_ip(q - eqn_idx%int_en%beg + 1)
1651 alpha_rho_q = alpha_rho_gp(q - eqn_idx%int_en%beg + 1)
1652 call s_phase_internal_energy(pres_gp, alpha_q, alpha_rho_q, q - eqn_idx%int_en%beg + 1, e_q)
1658# 611 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1659#if defined(MFC_OpenACC)
1660# 611 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1662# 611 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1663#elif defined(MFC_OpenMP)
1664# 611 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1666# 611 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1668# 611 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1670# 612 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1676# 616 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1678# 616 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1679#if defined(MFC_OpenACC)
1680# 616 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1682# 616 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1683#elif defined(MFC_OpenMP)
1684# 616 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1686# 616 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1688# 616 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1690# 616 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1692# 616 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1694# 616 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1696# 618 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1699 if (gp%interp_valid) cycle
1707 do while (num_nbrs == 0 .and. rad < gp_layers)
1709 if (p /= 0) rad_z = rad
1710 do jj =
j - rad,
j + rad
1711 do kk =
k - rad,
k + rad
1712 do ll =
l - rad_z,
l + rad_z
1720 if (num_nbrs == 0) cycle
1723# 643 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1724#if defined(MFC_OpenACC)
1725# 643 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1727# 643 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1728#elif defined(MFC_OpenMP)
1729# 643 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1731# 643 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1733# 644 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1737 do jj =
j - rad,
j + rad
1738 do kk =
k - rad,
k + rad
1739 do ll =
l - rad_z,
l + rad_z
1742 buf_prim = buf_prim + q_prim_vf(q)%sf(jj, kk, ll)
1748 q_prim_vf(q)%sf(
j,
k,
l) = buf_prim/real(num_nbrs, wp)
1751 if (qbmm .and. .not. polytropic)
then
1753# 662 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1754#if defined(MFC_OpenACC)
1755# 662 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1757# 662 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1758#elif defined(MFC_OpenMP)
1759# 662 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1761# 662 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1763# 663 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1766# 664 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1767#if defined(MFC_OpenACC)
1768# 664 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1770# 664 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1771#elif defined(MFC_OpenMP)
1772# 664 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1774# 664 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1776# 665 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1780 do jj =
j - rad,
j + rad
1781 do kk =
k - rad,
k + rad
1782 do ll =
l - rad_z,
l + rad_z
1784 buf = buf + pb_in(jj, kk, ll, r, q)
1785 buf_prim = buf_prim + mv_in(jj, kk, ll, r, q)
1790 pb_in(
j,
k,
l, r, q) = buf/real(num_nbrs, wp)
1791 mv_in(
j,
k,
l, r, q) = buf_prim/real(num_nbrs, wp)
1797# 684 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1798#if defined(MFC_OpenACC)
1799# 684 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1801# 684 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1802#elif defined(MFC_OpenMP)
1803# 684 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1805# 684 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1807# 684 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1809# 685 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2358# 1013 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2360# 1013 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2362# 1013 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2364# 1013 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2366# 1013 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2368# 1013 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2370# 1013 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2372# 1014 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2374 type(ghost_point),
intent(in) :: gp
2375 integer,
intent(in) :: i,
j,
k
2376 real(wp),
dimension(2, 2, 2),
intent(in) :: dist, fluid_mask
2377 real(wp),
dimension(2, 2, 2),
intent(out) :: interp_coeffs
2378 real(wp),
dimension(2, 2, 2) :: weights
2379 real(wp),
dimension(2, 3) :: axis_weight
2380 real(wp) :: weight_sum
2381 integer :: ii, jj, kk, num_z_layers
2383 num_z_layers = min(p, 1) + 1
2385 if (ib_second_order_vel)
then
2387 axis_weight(2, 1) = (gp%ip_loc(1) - x_cc(i))/(x_cc(i + 1) - x_cc(i))
2388 axis_weight(2, 2) = (gp%ip_loc(2) - y_cc(
j))/(y_cc(
j + 1) - y_cc(
j))
2389 axis_weight(2, 3) = 0._wp
2390 if (p /= 0) axis_weight(2, 3) = (gp%ip_loc(3) - z_cc(
k))/(z_cc(
k + 1) - z_cc(
k))
2391 axis_weight(2,:) = min(max(axis_weight(2,:), 0._wp), 1._wp)
2392 axis_weight(1,:) = 1._wp - axis_weight(2,:)
2393 do kk = 1, num_z_layers
2396 weights(ii, jj, kk) = axis_weight(ii, 1)*axis_weight(jj, 2)*axis_weight(kk, 3)
2402 if (minval(dist(:,:,1:num_z_layers)) <= 1.e-16_wp)
then
2403 weights(:,:,1:num_z_layers) = merge(1._wp, 0._wp, dist(:,:,1:num_z_layers) <= 1.e-16_wp)
2405 weights(:,:,1:num_z_layers) = 1._wp/dist(:,:,1:num_z_layers)**2
2409 interp_coeffs = 0._wp
2410 weights(:,:,1:num_z_layers) = fluid_mask(:,:,1:num_z_layers)*weights(:,:,1:num_z_layers)
2411 weight_sum = sum(weights(:,:,1:num_z_layers))
2412 if (weight_sum > 0._wp) interp_coeffs(:,:,1:num_z_layers) = weights(:,:,1:num_z_layers)/weight_sum
2417 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, &
2418 & nmom_IP, pb_in, mv_in, presb_IP, massv_IP, Ys_IP)
2420# 1060 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2422# 1060 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2424# 1060 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2426# 1060 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2428# 1060 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2430# 1060 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2432# 1060 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2434# 1061 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2436 type(scalar_field),
dimension(sys_size),
intent(in) :: q_prim_vf
2437 real(stp),
optional,
dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:),
intent(in) :: pb_in, mv_in
2438 type(ghost_point),
intent(in) :: gp
2439 real(wp),
intent(inout) :: pres_ip
2440 real(wp),
dimension(3),
intent(inout) :: vel_ip
2441 real(wp),
intent(inout) :: c_ip
2442# 1071 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2443 real(wp),
dimension(num_fluids),
intent(inout) :: alpha_ip, alpha_rho_ip
2444# 1073 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2445 real(wp),
optional,
dimension(:),
intent(inout) :: r_ip, v_ip, pb_ip, mv_ip
2446 real(wp),
optional,
dimension(:),
intent(inout) :: nmom_ip
2447 real(wp),
optional,
dimension(:),
intent(inout) :: presb_ip, massv_ip
2448 real(wp),
optional,
dimension(:),
intent(inout) :: ys_ip
2449 integer :: i,
j,
k,
l, q
2450 integer :: i1, i2, j1, j2, k1, k2
2453 i1 = gp%ip_grid(1); i2 = i1 + 1
2454 j1 = gp%ip_grid(2); j2 = j1 + 1
2455 k1 = gp%ip_grid(3); k2 = k1 + 1
2462 alpha_rho_ip = 0._wp
2467 if (chemistry) ys_ip = 0._wp
2469 if (surface_tension) c_ip = 0._wp
2471 if (bubbles_euler)
then
2474 if (.not. polytropic)
then
2482 if (.not. polytropic)
then
2489# 1116 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2490#if defined(MFC_OpenACC)
2491# 1116 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2493# 1116 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2494#elif defined(MFC_OpenMP)
2495# 1116 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2497# 1116 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2499# 1117 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2502# 1118 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2503#if defined(MFC_OpenACC)
2504# 1118 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2506# 1118 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2507#elif defined(MFC_OpenMP)
2508# 1118 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2510# 1118 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2512# 1119 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2515# 1120 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2516#if defined(MFC_OpenACC)
2517# 1120 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2519# 1120 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2520#elif defined(MFC_OpenMP)
2521# 1120 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2523# 1120 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2525# 1121 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2527 coeff = gp%interp_coeffs(i - i1 + 1,
j - j1 + 1,
k - k1 + 1)
2529 pres_ip = pres_ip + coeff*q_prim_vf(eqn_idx%E)%sf(i,
j,
k)
2532# 1126 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2533#if defined(MFC_OpenACC)
2534# 1126 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2536# 1126 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2537#elif defined(MFC_OpenMP)
2538# 1126 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2540# 1126 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2542# 1127 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2543 do q = eqn_idx%mom%beg, eqn_idx%mom%end
2544 vel_ip(q + 1 - eqn_idx%mom%beg) = vel_ip(q + 1 - eqn_idx%mom%beg) + coeff*q_prim_vf(q)%sf(i,
j,
k)
2548# 1131 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2549#if defined(MFC_OpenACC)
2550# 1131 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2552# 1131 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2553#elif defined(MFC_OpenMP)
2554# 1131 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2556# 1131 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2558# 1132 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2559 do l = eqn_idx%cont%beg, eqn_idx%cont%end
2560 alpha_rho_ip(
l) = alpha_rho_ip(
l) + coeff*q_prim_vf(
l)%sf(i,
j,
k)
2561 alpha_ip(
l) = alpha_ip(
l) + coeff*q_prim_vf(eqn_idx%adv%beg +
l - 1)%sf(i,
j,
k)
2564 if (surface_tension)
then
2565 c_ip = c_ip + coeff*q_prim_vf(eqn_idx%c)%sf(i,
j,
k)
2570# 1142 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2571#if defined(MFC_OpenACC)
2572# 1142 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2574# 1142 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2575#elif defined(MFC_OpenMP)
2576# 1142 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2578# 1142 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2580# 1143 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2581 do q = 1, num_species
2582 ys_ip(q) = ys_ip(q) + coeff*q_prim_vf(eqn_idx%species%beg + q - 1)%sf(i,
j,
k)
2586 if (bubbles_euler .and. .not. qbmm)
then
2588# 1149 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2589#if defined(MFC_OpenACC)
2590# 1149 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2592# 1149 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2593#elif defined(MFC_OpenMP)
2594# 1149 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2596# 1149 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2598# 1150 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2600 if (polytropic)
then
2601 r_ip(
l) = r_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + (
l - 1)*2)%sf(i,
j,
k)
2602 v_ip(
l) = v_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + 1 + (
l - 1)*2)%sf(i,
j,
k)
2604 r_ip(
l) = r_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + (
l - 1)*4)%sf(i,
j,
k)
2605 v_ip(
l) = v_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + 1 + (
l - 1)*4)%sf(i,
j,
k)
2606 pb_ip(
l) = pb_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + 2 + (
l - 1)*4)%sf(i,
j,
k)
2607 mv_ip(
l) = mv_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + 3 + (
l - 1)*4)%sf(i,
j,
k)
2614 nmom_ip(
l) = nmom_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg - 1 +
l)%sf(i,
j,
k)
2616 if (.not. polytropic)
then
2619 presb_ip((q - 1)*nnode +
l) = presb_ip((q - 1)*nnode +
l) + coeff*real(pb_in(i,
j,
k,
l, q), &
2621 massv_ip((q - 1)*nnode +
l) = massv_ip((q - 1)*nnode +
l) + coeff*real(mv_in(i,
j,
k,
l, q), &
2884 type(scalar_field),
dimension(1:sys_size),
intent(in) :: q_prim_vf
2885 type(physical_parameters),
dimension(1:num_fluids),
intent(in) :: fluid_pp
2886 integer :: i, j, k, l, encoded_ib_idx, xp, yp, zp, ib_idx, ib_idx_temp, fluid_idx
2887 real(wp),
dimension(num_ibs, 3) :: forces, torques
2889 real(wp),
dimension(1:3,1:3) :: viscous_stress
2890 real(wp),
dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution
2891 real(wp) :: cell_volume, dynamic_viscosity
2893# 1342 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2894 real(wp),
dimension(num_fluids) :: dynamic_viscosities
2895# 1344 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2897 call nvtxstartrange(
"COMPUTE-IB-FORCES")
2903 do fluid_idx = 1, num_fluids
2904 if (fluid_pp(fluid_idx)%Re(1) > 0._wp)
then
2905 dynamic_viscosities(fluid_idx) = 1._wp/fluid_pp(fluid_idx)%Re(1)
2907 dynamic_viscosities(fluid_idx) = 0._wp
2913 if (num_ibs > 0)
then
2915# 1362 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2917# 1362 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2918#if defined(MFC_OpenACC)
2919# 1362 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2921# 1362 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2923# 1362 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2925# 1362 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2926#elif defined(MFC_OpenMP)
2927# 1362 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2929# 1362 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2931# 1362 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2933# 1362 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2935# 1362 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2937# 1362 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2939# 1362 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2941# 1365 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2946 if (encoded_ib_idx /= 0)
then
2947 call s_decode_patch_periodicity(encoded_ib_idx, ib_idx_temp, xp, yp, zp)
2948 call s_get_neighborhood_idx(ib_idx_temp, ib_idx)
2949 if (ib_idx > 0)
then
2951 radial_vector(1) = x_cc(i) - (patch_ib(ib_idx)%x_centroid + real(xp, &
2952 & wp)*(glb_bounds(1)%end - glb_bounds(1)%beg))
2953 radial_vector(2) = y_cc(j) - (patch_ib(ib_idx)%y_centroid + real(yp, &
2954 & wp)*(glb_bounds(2)%end - glb_bounds(2)%beg))
2955 radial_vector(3) = 0._wp
2956 if (num_dims == 3) radial_vector(3) = z_cc(k) - (patch_ib(ib_idx)%z_centroid + real(zp, &
2957 & wp)*(glb_bounds(3)%end - glb_bounds(3)%beg))
2959 local_force_contribution(:) = 0._wp
2962 do l = -fd_number, fd_number
2963 local_force_contribution(1) = local_force_contribution(1) - (fd_coeff_x(l, &
2964 & i)*q_prim_vf(eqn_idx%E)%sf(i + l, j, k))
2965 local_force_contribution(2) = local_force_contribution(2) - (fd_coeff_y(l, &
2966 & j)*q_prim_vf(eqn_idx%E)%sf(i, j + l, k))
2967 if (num_dims == 3)
then
2968 local_force_contribution(3) = local_force_contribution(3) - (fd_coeff_z(l, &
2969 & k)*q_prim_vf(eqn_idx%E)%sf(i, j, k + l))
2976 dynamic_viscosity = 0._wp
2977 do fluid_idx = 1, num_fluids
2979 dynamic_viscosity = dynamic_viscosity + (q_prim_vf(fluid_idx + eqn_idx%adv%beg - 1)%sf(i, &
2980 & j, k)*dynamic_viscosities(fluid_idx))
2983 do l = -fd_number, fd_number
2984 call s_compute_viscous_stress_tensor(viscous_stress, q_prim_vf, dynamic_viscosity, i + l, &
2986 local_force_contribution(1:3) = local_force_contribution(1:3) + fd_coeff_x(l, &
2987 & i)*viscous_stress(1,1:3)
2989 call s_compute_viscous_stress_tensor(viscous_stress, q_prim_vf, dynamic_viscosity, i, &
2991 local_force_contribution(1:3) = local_force_contribution(1:3) + fd_coeff_y(l, &
2992 & j)*viscous_stress(2,1:3)
2994 if (num_dims == 3)
then
2995 call s_compute_viscous_stress_tensor(viscous_stress, q_prim_vf, dynamic_viscosity, i, &
2997 local_force_contribution(1:3) = local_force_contribution(1:3) + fd_coeff_z(l, &
2998 & k)*viscous_stress(3,1:3)
3003 call s_cross_product(radial_vector, local_force_contribution, local_torque_contribution)
3006 cell_volume = dx(i)*dy(j)
3007 if (num_dims == 3) cell_volume = cell_volume*dz(k)
3010# 1432 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3011#if defined(MFC_OpenACC)
3012# 1432 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3014# 1432 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3015#elif defined(MFC_OpenMP)
3016# 1432 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3018# 1432 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3020# 1433 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3021 forces(ib_idx, l) = forces(ib_idx, l) + (local_force_contribution(l)*cell_volume)
3023# 1434 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3024#if defined(MFC_OpenACC)
3025# 1434 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3027# 1434 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3028#elif defined(MFC_OpenMP)
3029# 1434 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3031# 1434 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3033# 1435 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3034 torques(ib_idx, l) = torques(ib_idx, l) + local_torque_contribution(l)*cell_volume
3042# 1442 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3043#if defined(MFC_OpenACC)
3044# 1442 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3046# 1442 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3047#elif defined(MFC_OpenMP)
3048# 1442 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3050# 1442 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3052# 1442 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3054# 1443 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3057 call nvtxstartrange(
"APPLY-COLLISION-FORCES")
3062 call nvtxstartrange(
"COMMUNICATE-IB-FORCES")
3069 forces(i, 1) = forces(i, 1) + accel_bf(1)*patch_ib(i)%mass
3072 forces(i, 2) = forces(i, 2) + accel_bf(2)*patch_ib(i)%mass
3075 forces(i, 3) = forces(i, 3) + accel_bf(3)*patch_ib(i)%mass
3080 if (num_ibs > 0)
then
3082# 1469 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3084# 1469 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3085#if defined(MFC_OpenACC)
3086# 1469 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3088# 1469 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3089#elif defined(MFC_OpenMP)
3090# 1469 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3092# 1469 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3094# 1469 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3096# 1469 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3098# 1469 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3100# 1469 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3102# 1470 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3105 patch_ib(i)%force(l) = forces(i, l)
3106 patch_ib(i)%torque(l) = torques(i, l)
3110# 1476 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3111#if defined(MFC_OpenACC)
3112# 1476 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3114# 1476 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3115#elif defined(MFC_OpenMP)
3116# 1476 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3118# 1476 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3120# 1476 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3122# 1477 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3135 integer,
intent(in) :: gid
3136 integer,
intent(in) :: ib_marker
3137 integer :: i, j, k, num_cells_local, decoded_gbl_id
3138 integer(kind=8) :: num_cells, needs_loc, needs_glb
3139 real(wp),
dimension(1:3) :: center_of_mass, center_of_mass_local
3142 if (ib_marker > 0)
then
3145 call s_mpi_allreduce_integer_sum(needs_loc, needs_glb)
3146 if (needs_glb == 0_8)
then
3147 if (ib_marker > 0) patch_ib(ib_marker)%centroid_offset(:) = 0._wp
3151 center_of_mass_local = [0._wp, 0._wp, 0._wp]
3153 if (ib_marker > 0)
then
3159 call s_decode_patch_periodicity(
ib_markers%sf(i, j, k), decoded_gbl_id)
3160 if (decoded_gbl_id == gid)
then
3161 num_cells_local = num_cells_local + 1
3162 center_of_mass_local = center_of_mass_local + [x_cc(i), y_cc(j), 0._wp]
3163 if (num_dims == 3) center_of_mass_local(3) = center_of_mass_local(3) + z_cc(k)
3172 call s_mpi_allreduce_integer_sum(int(num_cells_local, 8), num_cells)
3173 call s_mpi_allreduce_sum(center_of_mass_local(1), center_of_mass(1))
3174 call s_mpi_allreduce_sum(center_of_mass_local(2), center_of_mass(2))
3175 call s_mpi_allreduce_sum(center_of_mass_local(3), center_of_mass(3))
3176 if (ib_marker <= 0)
return
3177 if (num_cells == 0)
then
3178 patch_ib(ib_marker)%centroid_offset = [0._wp, 0._wp, 0._wp]
3181 center_of_mass = center_of_mass/real(num_cells, wp)
3185 patch_ib(ib_marker)%centroid_offset = [patch_ib(ib_marker)%x_centroid, patch_ib(ib_marker)%y_centroid, &
3186 & patch_ib(ib_marker)%z_centroid] - center_of_mass
3187 patch_ib(ib_marker)%x_centroid = center_of_mass(1)
3188 patch_ib(ib_marker)%y_centroid = center_of_mass(2)
3189 patch_ib(ib_marker)%z_centroid = center_of_mass(3)
3192 patch_ib(ib_marker)%centroid_offset = matmul(patch_ib(ib_marker)%rotation_matrix_inverse, &
3193 & patch_ib(ib_marker)%centroid_offset)
3609 integer :: i, j, k, output_idx, local_output_idx
3610 integer :: old_num_local_ibs, num_ibs_old, num_ibs_pre
3611 integer :: new_count, recv_count
3612 integer :: pack_pos, unpack_pos, buf_size, patch_bytes
3613 integer :: send_neighbor, recv_neighbor, ierr
3614 integer :: dx, dy, dz, tag, nbr_idx, nreqs
3615 real(wp),
dimension(3) :: centroid
3617 type(ib_patch_parameters) :: tmp_patch
3618 integer,
dimension(num_local_ibs_max) :: local_ib_idx_old
3619 integer,
dimension(num_ib_patches_max_namelist) :: old_to_new
3622 character(len=1),
allocatable :: send_buf(:), recv_bufs(:,:)
3623 integer,
allocatable :: requests(:), recv_neighbor_list(:)
3626 call nvtxstartrange(
"HANDOFF-IB-OWNERSHIP")
3628 if (num_procs > 1)
then
3630 local_ib_idx_old = 0
3631 old_num_local_ibs = num_local_ibs
3632 do i = 1, num_local_ibs
3633 local_ib_idx_old(i) = patch_ib(local_ib_patch_ids(i))%gbl_patch_id
3639# 1864 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3640#if defined(MFC_OpenACC)
3641# 1864 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3643# 1864 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3644#elif defined(MFC_OpenMP)
3645# 1864 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3647# 1864 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3649# 1865 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3652 num_ibs_old = num_ibs
3654 local_output_idx = 0
3657 centroid = [patch_ib(i)%x_centroid, patch_ib(i)%y_centroid, 0._wp]
3658 if (num_dims == 3) centroid(3) = patch_ib(i)%z_centroid
3661 if (f_neighborhood_ranks_own_location(centroid))
then
3662 output_idx = output_idx + 1
3663 old_to_new(i) = output_idx
3664 if (i /= output_idx)
then
3665 patch_ib(output_idx) = patch_ib(i)
3669 if (f_local_rank_owns_location(centroid, glb_bounds))
then
3670 local_output_idx = local_output_idx + 1
3671 if (local_output_idx > num_local_ibs_max)
then
3672# 1886 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3673 call s_prohibit_abort(
"local_output_idx > num_local_ibs_max",
"Too many IBs on a single processor rank. Modify case file or increase limit of num_local_ibs_max to resolve.")
3674# 1886 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3676# 1888 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3677 local_ib_patch_ids(local_output_idx) = output_idx
3678 patch_ib(output_idx)%owner_rank = proc_rank
3682 num_ibs = output_idx
3683 num_local_ibs = local_output_idx
3686# 1896 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3687#if defined(MFC_OpenACC)
3688# 1896 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3690# 1896 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3691#elif defined(MFC_OpenMP)
3692# 1896 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3694# 1896 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3696# 1897 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3697 call s_compact_ib_lookup(old_to_new, num_ibs_old)
3700 patch_bytes = storage_size(tmp_patch)/8
3702 buf_size = storage_size(0)/8 + patch_bytes*max(1, min(num_local_ibs_max, num_gbl_ibs))
3703 max_nbrs = (2*ib_neighborhood_radius + 1)**num_dims - 1
3704 allocate (send_buf(buf_size), recv_bufs(buf_size, max_nbrs), requests(2*max_nbrs), recv_neighbor_list(max_nbrs))
3708 call mpi_pack(0, 1, mpi_integer, send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3712 do i = 1, num_local_ibs
3713 k = local_ib_patch_ids(i)
3715 do j = 1, old_num_local_ibs
3716 if (patch_ib(k)%gbl_patch_id == local_ib_idx_old(j))
then
3722 call mpi_pack(patch_ib(k), patch_bytes, mpi_byte, send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3723 new_count = new_count + 1
3729 call mpi_pack(new_count, 1, mpi_integer, send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3730 pack_pos = storage_size(0)/8 + new_count*patch_bytes
3735 do dz = merge(-ib_neighborhood_radius, 0, num_dims == 3), merge(ib_neighborhood_radius, 0, num_dims == 3)
3736 do dy = -ib_neighborhood_radius, ib_neighborhood_radius
3737 do dx = -ib_neighborhood_radius, ib_neighborhood_radius
3738 if (dx == 0 .and. dy == 0 .and. dz == 0) cycle
3739 nbr_idx = nbr_idx + 1
3741 tag = 200 + ((dx + ib_neighborhood_radius)*(2*ib_neighborhood_radius + 1) + (dy + ib_neighborhood_radius)) &
3742 & *(2*ib_neighborhood_radius + 1) + (dz + ib_neighborhood_radius)
3743 recv_neighbor = ib_neighbor_ranks(-dx, -dy, -dz)
3744 recv_neighbor_list(nbr_idx) = mpi_proc_null
3745 if (recv_neighbor < 0) cycle
3746 recv_neighbor_list(nbr_idx) = recv_neighbor
3748 call mpi_irecv(recv_bufs(:,nbr_idx), buf_size, mpi_packed, recv_neighbor, tag, mpi_comm_world, &
3749 & requests(nreqs), ierr)
3754 do dz = merge(-ib_neighborhood_radius, 0, num_dims == 3), merge(ib_neighborhood_radius, 0, num_dims == 3)
3755 do dy = -ib_neighborhood_radius, ib_neighborhood_radius
3756 do dx = -ib_neighborhood_radius, ib_neighborhood_radius
3757 if (dx == 0 .and. dy == 0 .and. dz == 0) cycle
3759 tag = 200 + ((dx + ib_neighborhood_radius)*(2*ib_neighborhood_radius + 1) + (dy + ib_neighborhood_radius)) &
3760 & *(2*ib_neighborhood_radius + 1) + (dz + ib_neighborhood_radius)
3761 send_neighbor = ib_neighbor_ranks(dx, dy, dz)
3762 if (send_neighbor < 0) cycle
3764 call mpi_isend(send_buf, pack_pos, mpi_packed, send_neighbor, tag, mpi_comm_world, requests(nreqs), ierr)
3769 call mpi_waitall(nreqs, requests, mpi_statuses_ignore, ierr)
3772 num_ibs_pre = num_ibs
3773 do nbr_idx = 1, max_nbrs
3774 if (recv_neighbor_list(nbr_idx) == mpi_proc_null) cycle
3776 call mpi_unpack(recv_bufs(:,nbr_idx), buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
3777 do i = 1, recv_count
3778 call mpi_unpack(recv_bufs(:,nbr_idx), buf_size, unpack_pos, tmp_patch, patch_bytes, mpi_byte, mpi_comm_world, &
3780 call s_get_neighborhood_idx(tmp_patch%gbl_patch_id, j, num_ibs_pre)
3782 num_ibs = num_ibs + 1
3783 if (.not. (num_ibs <=
size(patch_ib)))
then
3784# 1983 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3785 call s_mpi_abort(
"m_ibm.fpp:1983: " //
"Assertion failed: num_ibs <= size(patch_ib). " &
3786# 1983 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3787 & //
'patch_ib overflow in neighborhood handoff')
3788# 1983 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3790# 1984 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3791 patch_ib(num_ibs) = tmp_patch
3794 patch_ib(j)%owner_rank = tmp_patch%owner_rank
3799 deallocate (send_buf, recv_bufs, requests, recv_neighbor_list)
3801# 1993 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3802#if defined(MFC_OpenACC)
3803# 1993 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3805# 1993 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3806#elif defined(MFC_OpenMP)
3807# 1993 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3809# 1993 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3811# 1994 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3812 call s_merge_ib_lookup(num_ibs_pre)
4344 subroutine s_solve_surface(pres, T_IP, T_wall, d, Ys_IP, W_species, thermal_bc, Ys_s, T_s, mdot_s, converged)
4347# 2250 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
4349# 2250 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
4351# 2250 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
4353# 2250 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
4355# 2250 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
4357# 2250 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
4359# 2250 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
4361# 2251 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
4363 real(wp),
intent(in) :: pres, T_IP, T_wall, d
4364 real(wp),
intent(in) :: Ys_IP(num_species), W_species(num_species)
4365 integer,
intent(in) :: thermal_bc
4366 real(wp),
intent(out) :: Ys_s(num_species), T_s, mdot_s
4367 logical,
intent(out) :: converged
4368 integer,
parameter :: max_iter = 30, max_backtrack = 20
4369 real(wp),
parameter :: fd_eps_Y = 1.e-7_wp, fd_eps_t = 1.e-6_wp
4374 real(wp),
parameter :: tol = 1.e-6_wp
4375 real(wp),
parameter :: Y_tol = 100._wp*epsilon(1._wp)
4376 real(wp) :: A(num_species + 1, num_species + 1), rhs(num_species + 1), delta(num_species + 1)
4377 real(wp) :: R(num_species + 1), R_pert(num_species + 1), R_trial(num_species + 1)
4378 real(wp) :: R_species(num_species), R_species_pert(num_species), R_species_trial(num_species)
4379 real(wp) :: omega_s(num_species), omega_pert(num_species), omega_trial(num_species)
4380 real(wp) :: Ys_pert(num_species), Ys_trial(num_species)
4381 real(wp) :: mdot_pert, mdot_trial, T_pert, T_trial
4382 real(wp) :: flux_scale, energy_scale, R_energy, dx, lambda, norm_R, norm_trial
4383 logical :: solve_temperature, linear_success, accepted
4384 integer :: nsolve, iter, j, iback, k_bath, k_bath_prev
4389 select case (thermal_bc)
4392 solve_temperature = .false.
4395 solve_temperature = .false.
4397 t_s = min(max(t_ip, t_surface_min), t_surface_max)
4398 solve_temperature = .true.
4406 nsolve = num_species + merge(1, 0, solve_temperature)
4411 flux_scale = max(maxval(abs(r_species)), 1.e-12_wp)
4412 energy_scale = 1._wp
4413 if (solve_temperature)
then
4415 energy_scale = max(abs(r_energy), 1._wp)
4418 call s_surface_residual(pres, t_ip, t_s, d, ys_ip, ys_s, w_species, k_bath, solve_temperature, flux_scale, energy_scale, &
4419 & r, r_species, omega_s, mdot_s)
4420 norm_r = maxval(abs(r(1:nsolve)))
4421 if (norm_r < tol)
then
4426 do iter = 1, max_iter
4427 do j = 1, num_species
4430 dx = fd_eps_y*max(abs(ys_s(j)), 1._wp)
4431 if (ys_s(j) + dx > 1._wp) dx = -dx
4432 ys_pert(j) = ys_pert(j) + dx
4434 call s_surface_residual(pres, t_ip, t_pert, d, ys_ip, ys_pert, w_species, k_bath, solve_temperature, flux_scale, &
4435 & energy_scale, r_pert, r_species_pert, omega_pert, mdot_pert)
4436 a(1:nsolve,j) = (r_pert(1:nsolve) - r(1:nsolve))/dx
4439 if (solve_temperature)
then
4441 dx = fd_eps_t*max(abs(t_s), 1._wp)
4443 if (t_pert > t_surface_max)
then
4448 call s_surface_residual(pres, t_ip, t_pert, d, ys_ip, ys_pert, w_species, k_bath, solve_temperature, flux_scale, &
4449 & energy_scale, r_pert, r_species_pert, omega_pert, mdot_pert)
4450 a(1:nsolve,nsolve) = (r_pert(1:nsolve) - r(1:nsolve))/dx
4453 rhs(1:nsolve) = -r(1:nsolve)
4455 if (.not. linear_success)
return
4459 do iback = 1, max_backtrack
4460 ys_trial = ys_s + lambda*delta(1:num_species)
4462 if (solve_temperature) t_trial = t_s + lambda*delta(nsolve)
4464 if (minval(ys_trial) < -y_tol .or. maxval(ys_trial) > 1._wp + y_tol .or. t_trial < t_surface_min &
4465 & .or. t_trial > t_surface_max)
then
4466 lambda = 0.5_wp*lambda
4470 where (ys_trial < 0._wp) ys_trial = 0._wp
4471 where (ys_trial > 1._wp) ys_trial = 1._wp
4473 call s_surface_residual(pres, t_ip, t_trial, d, ys_ip, ys_trial, w_species, k_bath, solve_temperature, &
4474 & flux_scale, energy_scale, r_trial, r_species_trial, omega_trial, mdot_trial)
4475 norm_trial = maxval(abs(r_trial(1:nsolve)))
4476 if (norm_trial < norm_r)
then
4480 lambda = 0.5_wp*lambda
4483 if (.not. accepted)
return
4488 r_species = r_species_trial
4489 omega_s = omega_trial
4495 k_bath_prev = k_bath
4497 if (k_bath /= k_bath_prev)
then
4498 call s_surface_residual(pres, t_ip, t_s, d, ys_ip, ys_s, w_species, k_bath, solve_temperature, flux_scale, &
4499 & energy_scale, r, r_species, omega_s, mdot_s)
4500 norm_r = maxval(abs(r(1:nsolve)))
4503 if (norm_r < tol)
then