1115 type(scalar_field),
dimension(sys_size),
intent(inout) ::
q_cons_vf
1116 type(scalar_field),
dimension(sys_size),
intent(inout) :: q_prim_vf
1117 real(stp),
dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:),
intent(inout) :: pb_in, mv_in
1118 integer :: i,
j,
k,
l, q, r
1119 integer :: jj, kk, ll
1120 integer :: rad, rad_z, num_nbrs
1121 integer :: patch_id, patch_id_temp
1122 real(wp) :: rho, gamma, pi_inf, dyn_pres
1123 real(wp) :: vel_sum_g, e_ghost
1124 real(wp),
dimension(2) :: re_k
1127 real(wp) :: pres_ip, pres_gp
1128 real(wp),
dimension(3) :: vel_ip
1131# 288 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1132 real(wp),
dimension(num_fluids) :: gs
1133 real(wp),
dimension(num_fluids) :: alpha_rho_ip, alpha_ip, alpha_rho_gp
1134 real(wp),
dimension(nb) :: r_ip, v_ip, pb_ip, mv_ip
1135 real(wp),
dimension(nb*nmom) :: nmom_ip
1136 real(wp),
dimension(nb*nnode) :: presb_ip, massv_ip
1137# 294 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1138 real(wp),
dimension(1) :: ys_ip, ys_g, ys_s, w_species
1139# 295 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1140 real(wp) :: alpha_q, alpha_rho_q, e_q
1141 real(wp) :: t_ip, mw_ip, e_ip
1142 real(wp) :: t_s, t_g, mw_s, mw_g, rho_s, mdot_s, v_stefan, d
1143 logical :: surface_converged
1144 integer :: n_not_converged, n_ill_posed
1145 real(wp),
dimension(3) :: norm
1148 real(wp),
dimension(3) :: physical_loc
1149 real(wp),
dimension(3) :: vel_g
1150 real(wp),
dimension(3) :: radial_vector
1152 real(wp) :: buf, buf_prim
1153 type(ghost_point) :: gp
1157# 311 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1159# 311 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1160#if defined(MFC_OpenACC)
1161# 311 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1163# 311 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1164#elif defined(MFC_OpenMP)
1165# 311 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1167# 311 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1169# 311 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1171# 311 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1173# 311 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1175# 311 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1177# 312 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1182 if (patch_id /= 0)
then
1183 call s_decode_patch_periodicity(patch_id, patch_id_temp)
1184 call s_get_neighborhood_idx(patch_id_temp, patch_id)
1185 if (patch_id > 0)
then
1187 if (.not. chemistry) q_prim_vf(eqn_idx%E)%sf(
j,
k,
l) = 1._wp
1189 do i = 1, num_fluids
1190 rho = rho + q_prim_vf(eqn_idx%cont%beg + i - 1)%sf(
j,
k,
l)
1195 q_cons_vf(eqn_idx%mom%beg + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)*rho
1196 q_prim_vf(eqn_idx%mom%beg + i - 1)%sf(
j,
k,
l) = patch_ib(patch_id)%vel(i)
1204# 337 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1205#if defined(MFC_OpenACC)
1206# 337 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1208# 337 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1209#elif defined(MFC_OpenMP)
1210# 337 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1212# 337 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1214# 337 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1216# 338 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1223# 343 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1225# 343 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1226#if defined(MFC_OpenACC)
1227# 343 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1229# 343 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1231# 343 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1233# 343 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1234#elif defined(MFC_OpenMP)
1235# 343 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1237# 343 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1239# 343 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1241# 343 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1243# 343 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1245# 343 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1247# 343 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1249# 343 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1251# 349 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1254 if (.not. gp%interp_valid) cycle
1261 physical_loc = [x_cc(
j), y_cc(
k), 0._wp]
1262 if (num_dims == 3) physical_loc(3) = z_cc(
l)
1265 if (bubbles_euler .and. .not. qbmm)
then
1268 else if (qbmm .and. polytropic)
then
1270 & pb_ip, mv_ip, nmom_ip)
1271 else if (qbmm .and. .not. polytropic)
then
1273 & pb_ip, mv_ip, nmom_ip, pb_in, mv_in, presb_ip, massv_ip)
1274 else if (chemistry)
then
1284 if (chemistry .and. patch_ib(patch_id)%inj_species > 0)
then
1285 call get_mixture_molecular_weight(ys_ip, mw_ip)
1286 t_ip = pres_ip*mw_ip/(alpha_rho_ip(1)*gas_constant)
1288 ys_ip(patch_ib(patch_id)%inj_species) = 1._wp
1289 call get_mixture_molecular_weight(ys_ip, mw_ip)
1290 alpha_rho_ip(1) = pres_ip*mw_ip/(t_ip*gas_constant)
1295 surface_converged = .false.
1297 if (chemistry .and. patch_ib(patch_id)%inj_species == 0)
then
1299 call get_mixture_molecular_weight(ys_ip, mw_ip)
1300 t_ip = pres_ip*mw_ip*alpha_ip(1)/(alpha_rho_ip(1)*gas_constant)
1302 if (patch_ib(patch_id)%surface_reaction == 1)
then
1304 d = abs(real(gp%levelset, kind=wp))
1306 w_species(1:num_species) = molecular_weights(:)
1315 call s_solve_surface(pres_ip, t_ip, patch_ib(patch_id)%Twall, d, ys_ip, w_species, &
1316 & patch_ib(patch_id)%thermal_bc, ys_s, t_s, mdot_s, surface_converged)
1317 if (.not. surface_converged) n_not_converged = n_not_converged + 1
1319 n_ill_posed = n_ill_posed + 1
1322 if (surface_converged)
then
1323 call get_mixture_molecular_weight(ys_s, mw_s)
1326 rho_s = pres_ip*mw_s/(gas_constant*t_s)
1327 if (rho_s > 0._wp) v_stefan = mdot_s/rho_s
1334 if (.not. surface_converged)
then
1335 ys_s(1:num_species) = ys_ip(1:num_species)
1337 if (patch_ib(patch_id)%thermal_bc == 1) t_s = patch_ib(patch_id)%Twall
1342 call get_mixture_molecular_weight(ys_g, mw_g)
1343 alpha_rho_ip(1) = alpha_ip(1)*pres_ip*mw_g/(gas_constant*t_g)
1347 if (hypoelasticity)
then
1348 call s_convert_species_to_mixture_variables_kernel(rho, gamma, pi_inf, qv_k, alpha_ip, alpha_rho_ip, re_k, &
1351 call s_convert_species_to_mixture_variables_kernel(rho, gamma, pi_inf, qv_k, alpha_ip, alpha_rho_ip, re_k)
1354 if (surface_tension) q_prim_vf(eqn_idx%c)%sf(
j,
k,
l) = c_ip
1357 if (patch_ib(patch_id)%moving_ibm <= 1)
then
1359 alpha_rho_gp = alpha_rho_ip
1368# 464 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1369#if defined(MFC_OpenACC)
1370# 464 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1372# 464 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1373#elif defined(MFC_OpenMP)
1374# 464 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1376# 464 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1378# 465 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1379 do q = 1, num_fluids
1380 alpha_rho_gp(q) = alpha_rho_ip(q)*(pres_gp + isentrope_b(q))/(pres_ip + isentrope_b(q))
1382 call s_compute_mixture_coefficients(alpha_rho_gp, alpha_ip, rho, gamma, pi_inf, qv_k)
1384 q_prim_vf(eqn_idx%E)%sf(
j,
k,
l) = pres_gp
1388# 473 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1389#if defined(MFC_OpenACC)
1390# 473 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1392# 473 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1393#elif defined(MFC_OpenMP)
1394# 473 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1396# 473 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1398# 474 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1399 do q = 1, num_fluids
1400 q_prim_vf(q)%sf(
j,
k,
l) = alpha_rho_gp(q)
1401 q_prim_vf(eqn_idx%adv%beg + q - 1)%sf(
j,
k,
l) = alpha_ip(q)
1405 radial_vector(1) = physical_loc(1) - (patch_ib(patch_id)%x_centroid + real(
ghost_points(i)%x_periodicity, &
1406 & wp)*(glb_bounds(1)%end - glb_bounds(1)%beg))
1407 radial_vector(2) = physical_loc(2) - (patch_ib(patch_id)%y_centroid + real(
ghost_points(i)%y_periodicity, &
1408 & wp)*(glb_bounds(2)%end - glb_bounds(2)%beg))
1409 radial_vector(3) = 0._wp
1410 if (num_dims == 3) radial_vector(3) = physical_loc(3) - (patch_ib(patch_id)%z_centroid &
1411 & + real(
ghost_points(i)%z_periodicity, wp)*(glb_bounds(3)%end - glb_bounds(3)%beg))
1416 if (chemistry .and. patch_ib(patch_id)%inj_species == 0 .and. patch_ib(patch_id)%surface_reaction == 1 &
1417 & .and. surface_converged)
then
1418 norm(1:3) = gp%levelset_norm
1419 buf = sqrt(sum(norm**2))
1420 if (buf > 0._wp) vel_g = vel_g + v_stefan*norm/buf
1426# 500 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1427#if defined(MFC_OpenACC)
1428# 500 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1430# 500 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1431#elif defined(MFC_OpenMP)
1432# 500 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1434# 500 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1436# 501 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1437 do q = eqn_idx%mom%beg, eqn_idx%mom%end
1438 q_cons_vf(q)%sf(
j,
k,
l) = rho*vel_g(q - eqn_idx%mom%beg + 1)
1439 q_prim_vf(q)%sf(
j,
k,
l) = vel_g(q - eqn_idx%mom%beg + 1)
1440 vel_sum_g = vel_sum_g + vel_g(q - eqn_idx%mom%beg + 1)**2._wp
1442 dyn_pres = 5.e-1_wp*rho*vel_sum_g
1446# 509 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1447#if defined(MFC_OpenACC)
1448# 509 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1450# 509 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1451#elif defined(MFC_OpenMP)
1452# 509 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1454# 509 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1456# 510 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1457 do q = 1, num_fluids
1459 q_cons_vf(eqn_idx%adv%beg + q - 1)%sf(
j,
k,
l) = alpha_ip(q)
1463 if (surface_tension)
q_cons_vf(eqn_idx%c)%sf(
j,
k,
l) = c_ip
1469 if (patch_ib(patch_id)%inj_species == 0 .and. (patch_ib(patch_id)%surface_reaction == 0 &
1470 & .or. surface_converged))
then
1472 call get_mixture_energy_mass(t_g, ys_g, e_ip)
1474# 526 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1475#if defined(MFC_OpenACC)
1476# 526 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1478# 526 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1479#elif defined(MFC_OpenMP)
1480# 526 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1482# 526 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1484# 527 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1485 do q = 1, num_species
1486 q_cons_vf(eqn_idx%species%beg + q - 1)%sf(
j,
k,
l) = rho*ys_g(q)
1492 call get_mixture_molecular_weight(ys_ip, mw_ip)
1493 t_ip = pres_ip*mw_ip/(rho*gas_constant)
1494 call get_mixture_energy_mass(t_ip, ys_ip, e_ip)
1496# 537 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1497#if defined(MFC_OpenACC)
1498# 537 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1500# 537 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1501#elif defined(MFC_OpenMP)
1502# 537 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1504# 537 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1506# 538 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1507 do q = 1, num_species
1508 q_cons_vf(eqn_idx%species%beg + q - 1)%sf(
j,
k,
l) = rho*ys_ip(q)
1514 call s_compute_energy(pres_gp, alpha_rho_gp, alpha_ip, vel_sum_g, e_ghost)
1518 if (bubbles_euler .and. .not. qbmm)
then
1519 call s_comp_n_from_prim(alpha_ip(1), r_ip, nbub, weight)
1521# 551 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1522#if defined(MFC_OpenACC)
1523# 551 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1525# 551 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1526#elif defined(MFC_OpenMP)
1527# 551 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1529# 551 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1531# 552 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1533 q_cons_vf(eqn_idx%bub%beg + (q - 1)*2)%sf(
j,
k,
l) = nbub*r_ip(q)
1534 q_cons_vf(eqn_idx%bub%beg + (q - 1)*2 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1535 if (.not. polytropic)
then
1536 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4)%sf(
j,
k,
l) = nbub*r_ip(q)
1537 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 1)%sf(
j,
k,
l) = nbub*v_ip(q)
1538 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 2)%sf(
j,
k,
l) = nbub*pb_ip(q)
1539 q_cons_vf(eqn_idx%bub%beg + (q - 1)*4 + 3)%sf(
j,
k,
l) = nbub*mv_ip(q)
1547# 566 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1548#if defined(MFC_OpenACC)
1549# 566 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1551# 566 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1552#elif defined(MFC_OpenMP)
1553# 566 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1555# 566 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1557# 567 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1559 q_cons_vf(eqn_idx%bub%beg + q - 1)%sf(
j,
k,
l) = nbub*nmom_ip(q)
1563# 571 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1564#if defined(MFC_OpenACC)
1565# 571 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1567# 571 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1568#elif defined(MFC_OpenMP)
1569# 571 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1571# 571 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1573# 572 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1575 q_cons_vf(eqn_idx%bub%beg + (q - 1)*nmom)%sf(
j,
k,
l) = nbub
1578 if (.not. polytropic)
then
1580# 577 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1581#if defined(MFC_OpenACC)
1582# 577 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1584# 577 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1585#elif defined(MFC_OpenMP)
1586# 577 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1588# 577 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1590# 578 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1593# 579 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1594#if defined(MFC_OpenACC)
1595# 579 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1597# 579 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1598#elif defined(MFC_OpenMP)
1599# 579 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1601# 579 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1603# 580 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1605 pb_in(
j,
k,
l, r, q) = presb_ip((q - 1)*nnode + r)
1606 mv_in(
j,
k,
l, r, q) = massv_ip((q - 1)*nnode + r)
1612 if (model_eqns == model_eqns_6eq)
then
1614# 589 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1615#if defined(MFC_OpenACC)
1616# 589 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1618# 589 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1619#elif defined(MFC_OpenMP)
1620# 589 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1622# 589 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1624# 590 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1625 do q = eqn_idx%int_en%beg, eqn_idx%int_en%end
1626 alpha_q = alpha_ip(q - eqn_idx%int_en%beg + 1)
1627 alpha_rho_q = alpha_rho_gp(q - eqn_idx%int_en%beg + 1)
1628 call s_phase_internal_energy(pres_gp, alpha_q, alpha_rho_q, q - eqn_idx%int_en%beg + 1, e_q)
1634# 598 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1635#if defined(MFC_OpenACC)
1636# 598 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1638# 598 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1639#elif defined(MFC_OpenMP)
1640# 598 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1642# 598 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1644# 598 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1646# 599 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1652# 603 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1654# 603 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1655#if defined(MFC_OpenACC)
1656# 603 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1658# 603 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1659#elif defined(MFC_OpenMP)
1660# 603 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1662# 603 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1664# 603 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1666# 603 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1668# 603 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1670# 603 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1672# 605 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1675 if (gp%interp_valid) cycle
1683 do while (num_nbrs == 0 .and. rad < gp_layers)
1685 if (p /= 0) rad_z = rad
1686 do jj =
j - rad,
j + rad
1687 do kk =
k - rad,
k + rad
1688 do ll =
l - rad_z,
l + rad_z
1696 if (num_nbrs == 0) cycle
1699# 630 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1700#if defined(MFC_OpenACC)
1701# 630 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1703# 630 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1704#elif defined(MFC_OpenMP)
1705# 630 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1707# 630 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1709# 631 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1713 do jj =
j - rad,
j + rad
1714 do kk =
k - rad,
k + rad
1715 do ll =
l - rad_z,
l + rad_z
1718 buf_prim = buf_prim + q_prim_vf(q)%sf(jj, kk, ll)
1724 q_prim_vf(q)%sf(
j,
k,
l) = buf_prim/real(num_nbrs, wp)
1727 if (qbmm .and. .not. polytropic)
then
1729# 649 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1730#if defined(MFC_OpenACC)
1731# 649 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1733# 649 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1734#elif defined(MFC_OpenMP)
1735# 649 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1737# 649 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1739# 650 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1742# 651 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1743#if defined(MFC_OpenACC)
1744# 651 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1746# 651 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1747#elif defined(MFC_OpenMP)
1748# 651 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1750# 651 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1752# 652 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1756 do jj =
j - rad,
j + rad
1757 do kk =
k - rad,
k + rad
1758 do ll =
l - rad_z,
l + rad_z
1760 buf = buf + pb_in(jj, kk, ll, r, q)
1761 buf_prim = buf_prim + mv_in(jj, kk, ll, r, q)
1766 pb_in(
j,
k,
l, r, q) = buf/real(num_nbrs, wp)
1767 mv_in(
j,
k,
l, r, q) = buf_prim/real(num_nbrs, wp)
1773# 671 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1774#if defined(MFC_OpenACC)
1775# 671 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1777# 671 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1778#elif defined(MFC_OpenMP)
1779# 671 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1781# 671 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1783# 671 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
1785# 672 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2230 real(wp),
dimension(2, 2, 2) :: dist
2231 real(wp),
dimension(2, 2, 2) :: alpha
2232 real(wp),
dimension(2, 2, 2) :: interp_coeffs
2234 real(wp),
dimension(2, 2, 2) :: eta
2235 type(ghost_point) :: gp
2236 integer :: q, i,
j,
k, ii, jj, kk
2237 logical :: is_cell_center
2240# 942 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2242# 942 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2243#if defined(MFC_OpenACC)
2244# 942 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2246# 942 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2247#elif defined(MFC_OpenMP)
2248# 942 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2250# 942 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2252# 942 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2254# 942 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2256# 942 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2258# 942 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2260# 944 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2278 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)
2281 dist(1 + ii, 1 + jj, &
2282 & 1 + kk) = sqrt((x_cc(i + ii) - gp%ip_loc(1))**2 + (y_cc(
j + jj) - gp%ip_loc(2))**2 + (z_cc(
k &
2283 & + kk) - gp%ip_loc(3))**2)
2290 interp_coeffs = 0._wp
2291 is_cell_center = .false.
2292 check_is_cell_center:
do ii = 0, 1
2296 if (dist(ii + 1, jj + 1, 1) <= 1.e-16_wp)
then
2297 if (
ib_markers%sf(i + ii,
j + jj,
k) == 0) interp_coeffs(ii + 1, jj + 1, 1) = 1._wp
2298 is_cell_center = .true.
2299 exit check_is_cell_center
2302 if (dist(ii + 1, jj + 1, 2) <= 1.e-16_wp)
then
2303 if (
ib_markers%sf(i + ii,
j + jj,
k + 1) == 0) interp_coeffs(ii + 1, jj + 1, 2) = 1._wp
2304 is_cell_center = .true.
2305 exit check_is_cell_center
2310 end do check_is_cell_center
2312 if (.not. is_cell_center)
then
2315 if (
ib_markers%sf(i,
j,
k) /= 0) alpha(1, 1, 1) = 0._wp
2316 if (
ib_markers%sf(i + 1,
j,
k) /= 0) alpha(2, 1, 1) = 0._wp
2317 if (
ib_markers%sf(i,
j + 1,
k) /= 0) alpha(1, 2, 1) = 0._wp
2318 if (
ib_markers%sf(i + 1,
j + 1,
k) /= 0) alpha(2, 2, 1) = 0._wp
2321 eta(:,:,1) = 1._wp/dist(:,:,1)**2
2322 buf = sum(alpha(:,:,1)*eta(:,:,1))
2323 if (buf > 0._wp) interp_coeffs(:,:,1) = alpha(:,:,1)*eta(:,:,1)/buf
2325 if (
ib_markers%sf(i,
j,
k + 1) /= 0) alpha(1, 1, 2) = 0._wp
2326 if (
ib_markers%sf(i + 1,
j,
k + 1) /= 0) alpha(2, 1, 2) = 0._wp
2327 if (
ib_markers%sf(i,
j + 1,
k + 1) /= 0) alpha(1, 2, 2) = 0._wp
2328 if (
ib_markers%sf(i + 1,
j + 1,
k + 1) /= 0) alpha(2, 2, 2) = 0._wp
2330 buf = sum(alpha*eta)
2331 if (buf > 0._wp) interp_coeffs = alpha*eta/buf
2338 ghost_points(q)%interp_valid = any(interp_coeffs > 0._wp)
2342# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2343#if defined(MFC_OpenACC)
2344# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2346# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2347#elif defined(MFC_OpenMP)
2348# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2350# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2352# 1024 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2354# 1025 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2359 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, &
2360 & nmom_IP, pb_in, mv_in, presb_IP, massv_IP, Ys_IP)
2362# 1031 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2364# 1031 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2366# 1031 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2368# 1031 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2370# 1031 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2372# 1031 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2374# 1031 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2376# 1032 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2378 type(scalar_field),
dimension(sys_size),
intent(in) :: q_prim_vf
2379 real(stp),
optional,
dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:),
intent(in) :: pb_in, mv_in
2380 type(ghost_point),
intent(in) :: gp
2381 real(wp),
intent(inout) :: pres_ip
2382 real(wp),
dimension(3),
intent(inout) :: vel_ip
2383 real(wp),
intent(inout) :: c_ip
2384# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2385 real(wp),
dimension(num_fluids),
intent(inout) :: alpha_ip, alpha_rho_ip
2386# 1044 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2387 real(wp),
optional,
dimension(:),
intent(inout) :: r_ip, v_ip, pb_ip, mv_ip
2388 real(wp),
optional,
dimension(:),
intent(inout) :: nmom_ip
2389 real(wp),
optional,
dimension(:),
intent(inout) :: presb_ip, massv_ip
2390 real(wp),
optional,
dimension(:),
intent(inout) :: ys_ip
2391 integer :: i,
j,
k,
l, q
2392 integer :: i1, i2, j1, j2, k1, k2
2395 i1 = gp%ip_grid(1); i2 = i1 + 1
2396 j1 = gp%ip_grid(2); j2 = j1 + 1
2397 k1 = gp%ip_grid(3); k2 = k1 + 1
2404 alpha_rho_ip = 0._wp
2409 if (chemistry) ys_ip = 0._wp
2411 if (surface_tension) c_ip = 0._wp
2413 if (bubbles_euler)
then
2416 if (.not. polytropic)
then
2424 if (.not. polytropic)
then
2431# 1087 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2432#if defined(MFC_OpenACC)
2433# 1087 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2435# 1087 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2436#elif defined(MFC_OpenMP)
2437# 1087 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2439# 1087 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2441# 1088 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2444# 1089 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2445#if defined(MFC_OpenACC)
2446# 1089 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2448# 1089 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2449#elif defined(MFC_OpenMP)
2450# 1089 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2452# 1089 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2454# 1090 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2457# 1091 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2458#if defined(MFC_OpenACC)
2459# 1091 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2461# 1091 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2462#elif defined(MFC_OpenMP)
2463# 1091 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2465# 1091 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2467# 1092 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2469 coeff = gp%interp_coeffs(i - i1 + 1,
j - j1 + 1,
k - k1 + 1)
2471 pres_ip = pres_ip + coeff*q_prim_vf(eqn_idx%E)%sf(i,
j,
k)
2474# 1097 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2475#if defined(MFC_OpenACC)
2476# 1097 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2478# 1097 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2479#elif defined(MFC_OpenMP)
2480# 1097 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2482# 1097 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2484# 1098 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2485 do q = eqn_idx%mom%beg, eqn_idx%mom%end
2486 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)
2490# 1102 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2491#if defined(MFC_OpenACC)
2492# 1102 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2494# 1102 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2495#elif defined(MFC_OpenMP)
2496# 1102 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2498# 1102 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2500# 1103 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2501 do l = eqn_idx%cont%beg, eqn_idx%cont%end
2502 alpha_rho_ip(
l) = alpha_rho_ip(
l) + coeff*q_prim_vf(
l)%sf(i,
j,
k)
2503 alpha_ip(
l) = alpha_ip(
l) + coeff*q_prim_vf(eqn_idx%adv%beg +
l - 1)%sf(i,
j,
k)
2506 if (surface_tension)
then
2507 c_ip = c_ip + coeff*q_prim_vf(eqn_idx%c)%sf(i,
j,
k)
2512# 1113 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2513#if defined(MFC_OpenACC)
2514# 1113 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2516# 1113 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2517#elif defined(MFC_OpenMP)
2518# 1113 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2520# 1113 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2522# 1114 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2523 do q = 1, num_species
2524 ys_ip(q) = ys_ip(q) + coeff*q_prim_vf(eqn_idx%species%beg + q - 1)%sf(i,
j,
k)
2528 if (bubbles_euler .and. .not. qbmm)
then
2530# 1120 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2531#if defined(MFC_OpenACC)
2532# 1120 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2534# 1120 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2535#elif defined(MFC_OpenMP)
2536# 1120 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2538# 1120 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2540# 1121 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2542 if (polytropic)
then
2543 r_ip(
l) = r_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + (
l - 1)*2)%sf(i,
j,
k)
2544 v_ip(
l) = v_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + 1 + (
l - 1)*2)%sf(i,
j,
k)
2546 r_ip(
l) = r_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + (
l - 1)*4)%sf(i,
j,
k)
2547 v_ip(
l) = v_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + 1 + (
l - 1)*4)%sf(i,
j,
k)
2548 pb_ip(
l) = pb_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + 2 + (
l - 1)*4)%sf(i,
j,
k)
2549 mv_ip(
l) = mv_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg + 3 + (
l - 1)*4)%sf(i,
j,
k)
2556 nmom_ip(
l) = nmom_ip(
l) + coeff*q_prim_vf(eqn_idx%bub%beg - 1 +
l)%sf(i,
j,
k)
2558 if (.not. polytropic)
then
2561 presb_ip((q - 1)*nnode +
l) = presb_ip((q - 1)*nnode +
l) + coeff*real(pb_in(i,
j,
k,
l, q), &
2563 massv_ip((q - 1)*nnode +
l) = massv_ip((q - 1)*nnode +
l) + coeff*real(mv_in(i,
j,
k,
l, q), &
2742# 1231 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2744# 1231 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2746# 1231 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2748# 1231 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2750# 1231 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2752# 1231 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2754# 1231 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2756# 1232 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2758 integer,
intent(in) :: i
2759 real(wp),
intent(in) :: t
2760 real(wp) :: tau, amp, damp, omega, phi, theta, phid, thetad, arg_phi, arg_th, t_p, a_s
2761 real(wp),
dimension(3) :: r, c, w, v
2763 tau = t - patch_ib(i)%kin_t0
2764 omega = 2._wp*pi*patch_ib(i)%kin_freq
2767 if (tau >= 0._wp)
then
2769 if (patch_ib(i)%kin_ramp > 0._wp .and. tau < patch_ib(i)%kin_ramp)
then
2770 amp = 0.5_wp*(1._wp - cos(pi*tau/patch_ib(i)%kin_ramp))
2771 damp = 0.5_wp*pi/patch_ib(i)%kin_ramp*sin(pi*tau/patch_ib(i)%kin_ramp)
2775 arg_th = omega*tau + patch_ib(i)%kin_phase
2777 if (patch_ib(i)%kin_model == 2)
then
2783 t_p = patch_ib(i)%kin_theta0/patch_ib(i)%kin_pitch_rate
2784 a_s = patch_ib(i)%kin_smooth
2785 theta = patch_ib(i)%kin_theta_mean + 0.5_wp*patch_ib(i)%kin_theta0*(1._wp + (
f_log_cosh(a_s*tau) &
2787 thetad = 0.5_wp*patch_ib(i)%kin_pitch_rate*(tanh(a_s*tau) - tanh(a_s*(tau - t_p)))
2789 phi = amp*patch_ib(i)%kin_phi0*sin(arg_phi)
2790 phid = damp*patch_ib(i)%kin_phi0*sin(arg_phi) + amp*patch_ib(i)%kin_phi0*omega*cos(arg_phi)
2791 theta = patch_ib(i)%kin_theta_mean + amp*patch_ib(i)%kin_theta0*sin(arg_th)
2792 thetad = damp*patch_ib(i)%kin_theta0*sin(arg_th) + amp*patch_ib(i)%kin_theta0*omega*cos(arg_th)
2797 r = patch_ib(i)%kin_offset - patch_ib(i)%centroid_offset
2798 c(1) = cos(theta)*r(1) + sin(theta)*r(3)
2800 c(3) = -sin(theta)*r(1) + cos(theta)*r(3)
2802 v(2) = cos(phi)*c(2) - sin(phi)*c(3)
2803 v(3) = sin(phi)*c(2) + cos(phi)*c(3)
2808 w(2) = thetad*cos(phi)
2809 w(3) = thetad*sin(phi)
2810 call s_cross_product(w, c, v)
2812 patch_ib(i)%angles(1) = phi
2813 patch_ib(i)%angles(2) = theta
2814 patch_ib(i)%angles(3) = 0._wp
2815 patch_ib(i)%x_centroid = patch_ib(i)%kin_hinge(1) + c(1)
2816 patch_ib(i)%y_centroid = patch_ib(i)%kin_hinge(2) + c(2)
2817 patch_ib(i)%z_centroid = patch_ib(i)%kin_hinge(3) + c(3)
2819 patch_ib(i)%angular_vel = w
2826 type(scalar_field),
dimension(1:sys_size),
intent(in) :: q_prim_vf
2827 type(physical_parameters),
dimension(1:num_fluids),
intent(in) :: fluid_pp
2828 integer :: i, j, k, l, encoded_ib_idx, xp, yp, zp, ib_idx, ib_idx_temp, fluid_idx
2829 real(wp),
dimension(num_ibs, 3) :: forces, torques
2831 real(wp),
dimension(1:3,1:3) :: viscous_stress
2832 real(wp),
dimension(1:3) :: local_force_contribution, radial_vector, local_torque_contribution
2833 real(wp) :: cell_volume, dynamic_viscosity
2835# 1313 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2836 real(wp),
dimension(num_fluids) :: dynamic_viscosities
2837# 1315 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2839 call nvtxstartrange(
"COMPUTE-IB-FORCES")
2845 do fluid_idx = 1, num_fluids
2846 if (fluid_pp(fluid_idx)%Re(1) > 0._wp)
then
2847 dynamic_viscosities(fluid_idx) = 1._wp/fluid_pp(fluid_idx)%Re(1)
2849 dynamic_viscosities(fluid_idx) = 0._wp
2855 if (num_ibs > 0)
then
2857# 1333 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2859# 1333 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2860#if defined(MFC_OpenACC)
2861# 1333 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2863# 1333 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2865# 1333 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2867# 1333 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2868#elif defined(MFC_OpenMP)
2869# 1333 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2871# 1333 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2873# 1333 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2875# 1333 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2877# 1333 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2879# 1333 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2881# 1333 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2883# 1336 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2888 if (encoded_ib_idx /= 0)
then
2889 call s_decode_patch_periodicity(encoded_ib_idx, ib_idx_temp, xp, yp, zp)
2890 call s_get_neighborhood_idx(ib_idx_temp, ib_idx)
2891 if (ib_idx > 0)
then
2893 radial_vector(1) = x_cc(i) - (patch_ib(ib_idx)%x_centroid + real(xp, &
2894 & wp)*(glb_bounds(1)%end - glb_bounds(1)%beg))
2895 radial_vector(2) = y_cc(j) - (patch_ib(ib_idx)%y_centroid + real(yp, &
2896 & wp)*(glb_bounds(2)%end - glb_bounds(2)%beg))
2897 radial_vector(3) = 0._wp
2898 if (num_dims == 3) radial_vector(3) = z_cc(k) - (patch_ib(ib_idx)%z_centroid + real(zp, &
2899 & wp)*(glb_bounds(3)%end - glb_bounds(3)%beg))
2901 local_force_contribution(:) = 0._wp
2904 do l = -fd_number, fd_number
2905 local_force_contribution(1) = local_force_contribution(1) - (fd_coeff_x(l, &
2906 & i)*q_prim_vf(eqn_idx%E)%sf(i + l, j, k))
2907 local_force_contribution(2) = local_force_contribution(2) - (fd_coeff_y(l, &
2908 & j)*q_prim_vf(eqn_idx%E)%sf(i, j + l, k))
2909 if (num_dims == 3)
then
2910 local_force_contribution(3) = local_force_contribution(3) - (fd_coeff_z(l, &
2911 & k)*q_prim_vf(eqn_idx%E)%sf(i, j, k + l))
2918 dynamic_viscosity = 0._wp
2919 do fluid_idx = 1, num_fluids
2921 dynamic_viscosity = dynamic_viscosity + (q_prim_vf(fluid_idx + eqn_idx%adv%beg - 1)%sf(i, &
2922 & j, k)*dynamic_viscosities(fluid_idx))
2925 do l = -fd_number, fd_number
2926 call s_compute_viscous_stress_tensor(viscous_stress, q_prim_vf, dynamic_viscosity, i + l, &
2928 local_force_contribution(1:3) = local_force_contribution(1:3) + fd_coeff_x(l, &
2929 & i)*viscous_stress(1,1:3)
2931 call s_compute_viscous_stress_tensor(viscous_stress, q_prim_vf, dynamic_viscosity, i, &
2933 local_force_contribution(1:3) = local_force_contribution(1:3) + fd_coeff_y(l, &
2934 & j)*viscous_stress(2,1:3)
2936 if (num_dims == 3)
then
2937 call s_compute_viscous_stress_tensor(viscous_stress, q_prim_vf, dynamic_viscosity, i, &
2939 local_force_contribution(1:3) = local_force_contribution(1:3) + fd_coeff_z(l, &
2940 & k)*viscous_stress(3,1:3)
2945 call s_cross_product(radial_vector, local_force_contribution, local_torque_contribution)
2948 cell_volume = dx(i)*dy(j)
2949 if (num_dims == 3) cell_volume = cell_volume*dz(k)
2952# 1403 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2953#if defined(MFC_OpenACC)
2954# 1403 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2956# 1403 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2957#elif defined(MFC_OpenMP)
2958# 1403 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2960# 1403 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2962# 1404 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2963 forces(ib_idx, l) = forces(ib_idx, l) + (local_force_contribution(l)*cell_volume)
2965# 1405 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2966#if defined(MFC_OpenACC)
2967# 1405 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2969# 1405 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2970#elif defined(MFC_OpenMP)
2971# 1405 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2973# 1405 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2975# 1406 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2976 torques(ib_idx, l) = torques(ib_idx, l) + local_torque_contribution(l)*cell_volume
2984# 1413 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2985#if defined(MFC_OpenACC)
2986# 1413 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2988# 1413 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2989#elif defined(MFC_OpenMP)
2990# 1413 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2992# 1413 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2994# 1413 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2996# 1414 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
2999 call nvtxstartrange(
"APPLY-COLLISION-FORCES")
3004 call nvtxstartrange(
"COMMUNICATE-IB-FORCES")
3011 forces(i, 1) = forces(i, 1) + accel_bf(1)*patch_ib(i)%mass
3014 forces(i, 2) = forces(i, 2) + accel_bf(2)*patch_ib(i)%mass
3017 forces(i, 3) = forces(i, 3) + accel_bf(3)*patch_ib(i)%mass
3022 if (num_ibs > 0)
then
3024# 1440 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3026# 1440 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3027#if defined(MFC_OpenACC)
3028# 1440 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3030# 1440 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3031#elif defined(MFC_OpenMP)
3032# 1440 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3034# 1440 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3036# 1440 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3038# 1440 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3040# 1440 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3042# 1440 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3044# 1441 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3047 patch_ib(i)%force(l) = forces(i, l)
3048 patch_ib(i)%torque(l) = torques(i, l)
3052# 1447 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3053#if defined(MFC_OpenACC)
3054# 1447 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3056# 1447 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3057#elif defined(MFC_OpenMP)
3058# 1447 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3060# 1447 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3062# 1447 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3064# 1448 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3077 integer,
intent(in) :: gid
3078 integer,
intent(in) :: ib_marker
3079 integer :: i, j, k, num_cells_local, decoded_gbl_id
3080 integer(kind=8) :: num_cells, needs_loc, needs_glb
3081 real(wp),
dimension(1:3) :: center_of_mass, center_of_mass_local
3084 if (ib_marker > 0)
then
3087 call s_mpi_allreduce_integer_sum(needs_loc, needs_glb)
3088 if (needs_glb == 0_8)
then
3089 if (ib_marker > 0) patch_ib(ib_marker)%centroid_offset(:) = 0._wp
3093 center_of_mass_local = [0._wp, 0._wp, 0._wp]
3095 if (ib_marker > 0)
then
3101 call s_decode_patch_periodicity(
ib_markers%sf(i, j, k), decoded_gbl_id)
3102 if (decoded_gbl_id == gid)
then
3103 num_cells_local = num_cells_local + 1
3104 center_of_mass_local = center_of_mass_local + [x_cc(i), y_cc(j), 0._wp]
3105 if (num_dims == 3) center_of_mass_local(3) = center_of_mass_local(3) + z_cc(k)
3114 call s_mpi_allreduce_integer_sum(int(num_cells_local, 8), num_cells)
3115 call s_mpi_allreduce_sum(center_of_mass_local(1), center_of_mass(1))
3116 call s_mpi_allreduce_sum(center_of_mass_local(2), center_of_mass(2))
3117 call s_mpi_allreduce_sum(center_of_mass_local(3), center_of_mass(3))
3118 if (ib_marker <= 0)
return
3119 if (num_cells == 0)
then
3120 patch_ib(ib_marker)%centroid_offset = [0._wp, 0._wp, 0._wp]
3123 center_of_mass = center_of_mass/real(num_cells, wp)
3127 patch_ib(ib_marker)%centroid_offset = [patch_ib(ib_marker)%x_centroid, patch_ib(ib_marker)%y_centroid, &
3128 & patch_ib(ib_marker)%z_centroid] - center_of_mass
3129 patch_ib(ib_marker)%x_centroid = center_of_mass(1)
3130 patch_ib(ib_marker)%y_centroid = center_of_mass(2)
3131 patch_ib(ib_marker)%z_centroid = center_of_mass(3)
3134 patch_ib(ib_marker)%centroid_offset = matmul(patch_ib(ib_marker)%rotation_matrix_inverse, &
3135 & patch_ib(ib_marker)%centroid_offset)
3448 real(wp),
dimension(num_ibs, 3),
intent(inout) :: forces, torques
3451 integer :: i, j, s, r, slot, pos, nvals, ierr
3453 if (num_procs == 1 .or.
n_ib_nbrs == 0)
return
3462 if (patch_ib(i)%owner_rank == proc_rank) cycle
3463 if (all(forces(i,:) == 0._wp) .and. all(torques(i,:) == 0._wp)) cycle
3466 ib_send_bufs(pos + 1, slot) = real(patch_ib(i)%gbl_patch_id, wp)
3481 call mpi_get_count(
ib_stats(:,s), mpi_p, nvals, ierr)
3484 call s_get_neighborhood_idx(nint(
ib_recv_bufs(pos + 1, s)), j)
3485 if (.not. (j > 0))
then
3486# 1761 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3487 call s_mpi_abort(
"m_ibm.fpp:1761: " //
"Assertion failed: j > 0. " &
3488# 1761 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3489 & //
'IB force contribution for an IB this rank does not hold')
3490# 1761 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3492# 1762 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3493 if (.not. (patch_ib(j)%owner_rank == proc_rank))
then
3494# 1762 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3495 call s_mpi_abort(
"m_ibm.fpp:1762: " //
"Assertion failed: patch_ib(j)%owner_rank == proc_rank. " &
3496# 1762 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3497 & //
'IB force contribution for an IB this rank does not own')
3498# 1762 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3500# 1763 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3501 forces(j,1:3) = forces(j,1:3) +
ib_recv_bufs(pos + 2:pos + 4,s)
3502 torques(j,1:3) = torques(j,1:3) +
ib_recv_bufs(pos + 5:pos + 7,s)
3511 do i = 1, num_local_ibs
3512 j = local_ib_patch_ids(i)
3514 ib_send_bufs(pos + 1, 1) = real(patch_ib(j)%gbl_patch_id, wp)
3527 call mpi_get_count(
ib_stats(:,s), mpi_p, nvals, ierr)
3530 call s_get_neighborhood_idx(nint(
ib_recv_bufs(pos + 1, s)), j)
3532 if (.not. (patch_ib(j)%owner_rank ==
ib_nbrs(s)))
then
3533# 1794 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3534 call s_mpi_abort(
"m_ibm.fpp:1794: " //
"Assertion failed: patch_ib(j)%owner_rank == ib_nbrs(s). " &
3535# 1794 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3536 & //
'IB force total from a rank that does not own the IB')
3537# 1794 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3539# 1795 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3551 integer :: i, j, k, output_idx, local_output_idx
3552 integer :: old_num_local_ibs, num_ibs_old, num_ibs_pre
3553 integer :: new_count, recv_count
3554 integer :: pack_pos, unpack_pos, buf_size, patch_bytes
3555 integer :: send_neighbor, recv_neighbor, ierr
3556 integer :: dx, dy, dz, tag, nbr_idx, nreqs
3557 real(wp),
dimension(3) :: centroid
3559 type(ib_patch_parameters) :: tmp_patch
3560 integer,
dimension(num_local_ibs_max) :: local_ib_idx_old
3561 integer,
dimension(num_ib_patches_max_namelist) :: old_to_new
3564 character(len=1),
allocatable :: send_buf(:), recv_bufs(:,:)
3565 integer,
allocatable :: requests(:), recv_neighbor_list(:)
3568 call nvtxstartrange(
"HANDOFF-IB-OWNERSHIP")
3570 if (num_procs > 1)
then
3572 local_ib_idx_old = 0
3573 old_num_local_ibs = num_local_ibs
3574 do i = 1, num_local_ibs
3575 local_ib_idx_old(i) = patch_ib(local_ib_patch_ids(i))%gbl_patch_id
3581# 1835 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3582#if defined(MFC_OpenACC)
3583# 1835 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3585# 1835 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3586#elif defined(MFC_OpenMP)
3587# 1835 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3589# 1835 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3591# 1836 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3594 num_ibs_old = num_ibs
3596 local_output_idx = 0
3599 centroid = [patch_ib(i)%x_centroid, patch_ib(i)%y_centroid, 0._wp]
3600 if (num_dims == 3) centroid(3) = patch_ib(i)%z_centroid
3603 if (f_neighborhood_ranks_own_location(centroid))
then
3604 output_idx = output_idx + 1
3605 old_to_new(i) = output_idx
3606 if (i /= output_idx)
then
3607 patch_ib(output_idx) = patch_ib(i)
3611 if (f_local_rank_owns_location(centroid, glb_bounds))
then
3612 local_output_idx = local_output_idx + 1
3613 if (local_output_idx > num_local_ibs_max)
then
3614# 1857 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3615 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.")
3616# 1857 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3618# 1859 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3619 local_ib_patch_ids(local_output_idx) = output_idx
3620 patch_ib(output_idx)%owner_rank = proc_rank
3624 num_ibs = output_idx
3625 num_local_ibs = local_output_idx
3628# 1867 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3629#if defined(MFC_OpenACC)
3630# 1867 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3632# 1867 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3633#elif defined(MFC_OpenMP)
3634# 1867 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3636# 1867 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3638# 1868 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3639 call s_compact_ib_lookup(old_to_new, num_ibs_old)
3642 patch_bytes = storage_size(tmp_patch)/8
3644 buf_size = storage_size(0)/8 + patch_bytes*max(1, min(num_local_ibs_max, num_gbl_ibs))
3645 max_nbrs = (2*ib_neighborhood_radius + 1)**num_dims - 1
3646 allocate (send_buf(buf_size), recv_bufs(buf_size, max_nbrs), requests(2*max_nbrs), recv_neighbor_list(max_nbrs))
3650 call mpi_pack(0, 1, mpi_integer, send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3654 do i = 1, num_local_ibs
3655 k = local_ib_patch_ids(i)
3657 do j = 1, old_num_local_ibs
3658 if (patch_ib(k)%gbl_patch_id == local_ib_idx_old(j))
then
3664 call mpi_pack(patch_ib(k), patch_bytes, mpi_byte, send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3665 new_count = new_count + 1
3671 call mpi_pack(new_count, 1, mpi_integer, send_buf, buf_size, pack_pos, mpi_comm_world, ierr)
3672 pack_pos = storage_size(0)/8 + new_count*patch_bytes
3677 do dz = merge(-ib_neighborhood_radius, 0, num_dims == 3), merge(ib_neighborhood_radius, 0, num_dims == 3)
3678 do dy = -ib_neighborhood_radius, ib_neighborhood_radius
3679 do dx = -ib_neighborhood_radius, ib_neighborhood_radius
3680 if (dx == 0 .and. dy == 0 .and. dz == 0) cycle
3681 nbr_idx = nbr_idx + 1
3683 tag = 200 + ((dx + ib_neighborhood_radius)*(2*ib_neighborhood_radius + 1) + (dy + ib_neighborhood_radius)) &
3684 & *(2*ib_neighborhood_radius + 1) + (dz + ib_neighborhood_radius)
3685 recv_neighbor = ib_neighbor_ranks(-dx, -dy, -dz)
3686 recv_neighbor_list(nbr_idx) = mpi_proc_null
3687 if (recv_neighbor < 0) cycle
3688 recv_neighbor_list(nbr_idx) = recv_neighbor
3690 call mpi_irecv(recv_bufs(:,nbr_idx), buf_size, mpi_packed, recv_neighbor, tag, mpi_comm_world, &
3691 & requests(nreqs), ierr)
3696 do dz = merge(-ib_neighborhood_radius, 0, num_dims == 3), merge(ib_neighborhood_radius, 0, num_dims == 3)
3697 do dy = -ib_neighborhood_radius, ib_neighborhood_radius
3698 do dx = -ib_neighborhood_radius, ib_neighborhood_radius
3699 if (dx == 0 .and. dy == 0 .and. dz == 0) cycle
3701 tag = 200 + ((dx + ib_neighborhood_radius)*(2*ib_neighborhood_radius + 1) + (dy + ib_neighborhood_radius)) &
3702 & *(2*ib_neighborhood_radius + 1) + (dz + ib_neighborhood_radius)
3703 send_neighbor = ib_neighbor_ranks(dx, dy, dz)
3704 if (send_neighbor < 0) cycle
3706 call mpi_isend(send_buf, pack_pos, mpi_packed, send_neighbor, tag, mpi_comm_world, requests(nreqs), ierr)
3711 call mpi_waitall(nreqs, requests, mpi_statuses_ignore, ierr)
3714 num_ibs_pre = num_ibs
3715 do nbr_idx = 1, max_nbrs
3716 if (recv_neighbor_list(nbr_idx) == mpi_proc_null) cycle
3718 call mpi_unpack(recv_bufs(:,nbr_idx), buf_size, unpack_pos, recv_count, 1, mpi_integer, mpi_comm_world, ierr)
3719 do i = 1, recv_count
3720 call mpi_unpack(recv_bufs(:,nbr_idx), buf_size, unpack_pos, tmp_patch, patch_bytes, mpi_byte, mpi_comm_world, &
3722 call s_get_neighborhood_idx(tmp_patch%gbl_patch_id, j, num_ibs_pre)
3724 num_ibs = num_ibs + 1
3725 if (.not. (num_ibs <=
size(patch_ib)))
then
3726# 1954 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3727 call s_mpi_abort(
"m_ibm.fpp:1954: " //
"Assertion failed: num_ibs <= size(patch_ib). " &
3728# 1954 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3729 & //
'patch_ib overflow in neighborhood handoff')
3730# 1954 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3732# 1955 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3733 patch_ib(num_ibs) = tmp_patch
3736 patch_ib(j)%owner_rank = tmp_patch%owner_rank
3741 deallocate (send_buf, recv_bufs, requests, recv_neighbor_list)
3743# 1964 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3744#if defined(MFC_OpenACC)
3745# 1964 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3747# 1964 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3748#elif defined(MFC_OpenMP)
3749# 1964 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3751# 1964 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3753# 1965 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
3754 call s_merge_ib_lookup(num_ibs_pre)
4260 subroutine s_solve_surface(pres, T_IP, T_wall, d, Ys_IP, W_species, thermal_bc, Ys_s, T_s, mdot_s, converged)
4263# 2210 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
4265# 2210 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
4267# 2210 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
4269# 2210 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
4271# 2210 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
4273# 2210 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
4275# 2210 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
4277# 2211 "/home/runner/work/MFC/MFC/src/simulation/m_ibm.fpp"
4279 real(wp),
intent(in) :: pres, T_IP, T_wall, d
4280 real(wp),
intent(in) :: Ys_IP(num_species), W_species(num_species)
4281 integer,
intent(in) :: thermal_bc
4282 real(wp),
intent(out) :: Ys_s(num_species), T_s, mdot_s
4283 logical,
intent(out) :: converged
4284 integer,
parameter :: max_iter = 30, max_backtrack = 20
4285 real(wp),
parameter :: fd_eps_Y = 1.e-7_wp, fd_eps_t = 1.e-6_wp
4290 real(wp),
parameter :: tol = 1.e-6_wp
4291 real(wp),
parameter :: Y_tol = 100._wp*epsilon(1._wp)
4292 real(wp) :: A(num_species + 1, num_species + 1), rhs(num_species + 1), delta(num_species + 1)
4293 real(wp) :: R(num_species + 1), R_pert(num_species + 1), R_trial(num_species + 1)
4294 real(wp) :: R_species(num_species), R_species_pert(num_species), R_species_trial(num_species)
4295 real(wp) :: omega_s(num_species), omega_pert(num_species), omega_trial(num_species)
4296 real(wp) :: Ys_pert(num_species), Ys_trial(num_species)
4297 real(wp) :: mdot_pert, mdot_trial, T_pert, T_trial
4298 real(wp) :: flux_scale, energy_scale, R_energy, dx, lambda, norm_R, norm_trial
4299 logical :: solve_temperature, linear_success, accepted
4300 integer :: nsolve, iter, j, iback, k_bath, k_bath_prev
4305 select case (thermal_bc)
4308 solve_temperature = .false.
4311 solve_temperature = .false.
4313 t_s = min(max(t_ip, t_surface_min), t_surface_max)
4314 solve_temperature = .true.
4322 nsolve = num_species + merge(1, 0, solve_temperature)
4327 flux_scale = max(maxval(abs(r_species)), 1.e-12_wp)
4328 energy_scale = 1._wp
4329 if (solve_temperature)
then
4331 energy_scale = max(abs(r_energy), 1._wp)
4334 call s_surface_residual(pres, t_ip, t_s, d, ys_ip, ys_s, w_species, k_bath, solve_temperature, flux_scale, energy_scale, &
4335 & r, r_species, omega_s, mdot_s)
4336 norm_r = maxval(abs(r(1:nsolve)))
4337 if (norm_r < tol)
then
4342 do iter = 1, max_iter
4343 do j = 1, num_species
4346 dx = fd_eps_y*max(abs(ys_s(j)), 1._wp)
4347 if (ys_s(j) + dx > 1._wp) dx = -dx
4348 ys_pert(j) = ys_pert(j) + dx
4350 call s_surface_residual(pres, t_ip, t_pert, d, ys_ip, ys_pert, w_species, k_bath, solve_temperature, flux_scale, &
4351 & energy_scale, r_pert, r_species_pert, omega_pert, mdot_pert)
4352 a(1:nsolve,j) = (r_pert(1:nsolve) - r(1:nsolve))/dx
4355 if (solve_temperature)
then
4357 dx = fd_eps_t*max(abs(t_s), 1._wp)
4359 if (t_pert > t_surface_max)
then
4364 call s_surface_residual(pres, t_ip, t_pert, d, ys_ip, ys_pert, w_species, k_bath, solve_temperature, flux_scale, &
4365 & energy_scale, r_pert, r_species_pert, omega_pert, mdot_pert)
4366 a(1:nsolve,nsolve) = (r_pert(1:nsolve) - r(1:nsolve))/dx
4369 rhs(1:nsolve) = -r(1:nsolve)
4371 if (.not. linear_success)
return
4375 do iback = 1, max_backtrack
4376 ys_trial = ys_s + lambda*delta(1:num_species)
4378 if (solve_temperature) t_trial = t_s + lambda*delta(nsolve)
4380 if (minval(ys_trial) < -y_tol .or. maxval(ys_trial) > 1._wp + y_tol .or. t_trial < t_surface_min &
4381 & .or. t_trial > t_surface_max)
then
4382 lambda = 0.5_wp*lambda
4386 where (ys_trial < 0._wp) ys_trial = 0._wp
4387 where (ys_trial > 1._wp) ys_trial = 1._wp
4389 call s_surface_residual(pres, t_ip, t_trial, d, ys_ip, ys_trial, w_species, k_bath, solve_temperature, &
4390 & flux_scale, energy_scale, r_trial, r_species_trial, omega_trial, mdot_trial)
4391 norm_trial = maxval(abs(r_trial(1:nsolve)))
4392 if (norm_trial < norm_r)
then
4396 lambda = 0.5_wp*lambda
4399 if (.not. accepted)
return
4404 r_species = r_species_trial
4405 omega_s = omega_trial
4411 k_bath_prev = k_bath
4413 if (k_bath /= k_bath_prev)
then
4414 call s_surface_residual(pres, t_ip, t_s, d, ys_ip, ys_s, w_species, k_bath, solve_temperature, flux_scale, &
4415 & energy_scale, r, r_species, omega_s, mdot_s)
4416 norm_r = maxval(abs(r(1:nsolve)))
4419 if (norm_r < tol)
then