Skip to content

Commit 08761e0

Browse files
committed
fix: pre-extract fluid_pp HB params before GPU_PARALLEL_LOOP in m_ibm.fpp
Cray ftn ftn-7032 rejects derived-type dummy argument arrays (assumed size) inside OpenMP target regions. Pre-extract all non-Newtonian HB parameters from fluid_pp into plain local arrays before the GPU_PARALLEL_LOOP and add them to the copyin clause, eliminating fluid_pp access inside the loop. Also adds case.fpp include to fix MFC_CASE_OPTIMIZATION-gated AMD sizing.
1 parent b2635e3 commit 08761e0

1 file changed

Lines changed: 18 additions & 6 deletions

File tree

src/simulation/m_ibm.fpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
!! @file
33
!! @brief Contains module m_ibm
44

5+
#:include 'case.fpp'
56
#:include 'macros.fpp'
67

78
!> @brief Ghost-node immersed boundary method: locates ghost/image points, computes interpolation coefficients, and corrects the
@@ -919,8 +920,12 @@ contains
919920

920921
#:if not MFC_CASE_OPTIMIZATION and USING_AMD
921922
real(wp), dimension(3) :: dynamic_viscosities
923+
logical, dimension(3) :: is_non_newtonian
924+
real(wp), dimension(3) :: hb_tau0, hb_K, hb_nn, hb_mu_min, hb_mu_max, hb_m_arr
922925
#:else
923926
real(wp), dimension(num_fluids) :: dynamic_viscosities
927+
logical, dimension(num_fluids) :: is_non_newtonian
928+
real(wp), dimension(num_fluids) :: hb_tau0, hb_K, hb_nn, hb_mu_min, hb_mu_max, hb_m_arr
924929
#:endif
925930

926931
call nvtxStartRange("COMPUTE-IB-FORCES")
@@ -937,13 +942,21 @@ contains
937942
else
938943
dynamic_viscosities(fluid_idx) = 0._wp
939944
end if
945+
is_non_newtonian(fluid_idx) = fluid_pp(fluid_idx)%non_newtonian
946+
hb_tau0(fluid_idx) = fluid_pp(fluid_idx)%tau0
947+
hb_K(fluid_idx) = fluid_pp(fluid_idx)%K
948+
hb_nn(fluid_idx) = fluid_pp(fluid_idx)%nn
949+
hb_mu_min(fluid_idx) = fluid_pp(fluid_idx)%mu_min
950+
hb_mu_max(fluid_idx) = fluid_pp(fluid_idx)%mu_max
951+
hb_m_arr(fluid_idx) = fluid_pp(fluid_idx)%hb_m
940952
end do
941953
end if
942954

943955
$:GPU_PARALLEL_LOOP(private='[ib_idx, encoded_ib_idx, fluid_idx, radial_vector, local_force_contribution, cell_volume, &
944956
& local_torque_contribution, dynamic_viscosity, viscous_stress_div, viscous_stress_div_1, &
945957
& viscous_stress_div_2, dx, dy, dz, D_xx, D_yy, D_zz, D_xy, D_xz, D_yz, shear_rate, local_mu]', &
946-
& copy='[forces, torques]', copyin='[patch_ib, dynamic_viscosities]', collapse=3)
958+
& copy='[forces, torques]', copyin='[patch_ib, dynamic_viscosities, is_non_newtonian, hb_tau0, hb_K, &
959+
& hb_nn, hb_mu_min, hb_mu_max, hb_m_arr]', collapse=3)
947960
do i = 0, m
948961
do j = 0, n
949962
do k = 0, p
@@ -991,11 +1004,10 @@ contains
9911004
end if
9921005
dynamic_viscosity = 0._wp
9931006
do fluid_idx = 1, num_fluids
994-
if (fluid_pp(fluid_idx)%non_newtonian) then
995-
local_mu = f_compute_hb_viscosity(fluid_pp(fluid_idx)%tau0, fluid_pp(fluid_idx)%K, &
996-
& fluid_pp(fluid_idx)%nn, fluid_pp(fluid_idx)%mu_min, &
997-
& fluid_pp(fluid_idx)%mu_max, shear_rate, &
998-
& fluid_pp(fluid_idx)%hb_m)
1007+
if (is_non_newtonian(fluid_idx)) then
1008+
local_mu = f_compute_hb_viscosity(hb_tau0(fluid_idx), hb_K(fluid_idx), hb_nn(fluid_idx), &
1009+
& hb_mu_min(fluid_idx), hb_mu_max(fluid_idx), shear_rate, &
1010+
& hb_m_arr(fluid_idx))
9991011
dynamic_viscosity = dynamic_viscosity + q_prim_vf(fluid_idx + eqn_idx%adv%beg - 1)%sf(i, j, &
10001012
& k)*local_mu
10011013
else

0 commit comments

Comments
 (0)