@@ -19,6 +19,7 @@ module m_ibm
1919 use m_ib_patches
2020 use m_viscous
2121 use m_hb_function
22+ use m_re_visc
2223 use m_model
2324 use m_collisions
2425
@@ -914,6 +915,7 @@ contains
914915 & viscous_stress_div_2 ! viscous stress tensor with temp vectors to hold divergence calculations
915916 real (wp), dimension (1 :3 ) :: local_force_contribution, radial_vector, local_torque_contribution
916917 real (wp) :: cell_volume, dx, dy, dz, dynamic_viscosity
918+ real (wp) :: D_xx, D_yy, D_zz, D_xy, D_xz, D_yz, shear_rate, local_mu
917919
918920 #:if not MFC_CASE_OPTIMIZATION and USING_AMD
919921 real (wp), dimension (3 ) :: dynamic_viscosities
@@ -929,10 +931,7 @@ contains
929931 if (viscous) then
930932 do fluid_idx = 1 , num_fluids
931933 if (fluid_pp(fluid_idx)%non_newtonian) then
932- ! Non- Newtonian: compute reference viscosity at gdot = 1
933- dynamic_viscosities(fluid_idx) = f_compute_hb_viscosity(fluid_pp(fluid_idx)%tau0, fluid_pp(fluid_idx)%K, &
934- & fluid_pp(fluid_idx)%nn, fluid_pp(fluid_idx)%mu_min, fluid_pp(fluid_idx)%mu_max, 1._wp , &
935- & fluid_pp(fluid_idx)%hb_m)
934+ dynamic_viscosities(fluid_idx) = 0._wp ! computed per- cell from local shear rate
936935 else if (fluid_pp(fluid_idx)%Re(1 ) > 0._wp ) then
937936 dynamic_viscosities(fluid_idx) = 1._wp / fluid_pp(fluid_idx)%Re(1 )
938937 else
@@ -943,8 +942,8 @@ contains
943942
944943 $:GPU_PARALLEL_LOOP(private= ' [ib_idx, encoded_ib_idx, fluid_idx, radial_vector, local_force_contribution, cell_volume, &
945944 & local_torque_contribution, dynamic_viscosity, viscous_stress_div, viscous_stress_div_1, &
946- & viscous_stress_div_2, dx, dy, dz] ' , copy = ' [forces, torques] ' , copyin = ' [patch_ib , &
947- & dynamic_viscosities]' , collapse= 3 )
945+ & 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 )
948947 do i = 0 , m
949948 do j = 0 , n
950949 do k = 0 , p
@@ -986,11 +985,23 @@ contains
986985 ! get the viscous stress and add its contribution if that is considered
987986 if (viscous) then
988987 ! compute the volume- weighted local dynamic viscosity
988+ if (any_non_newtonian) then
989+ call s_compute_velocity_gradients_at_cell(q_prim_vf, i, j, k, D_xx, D_yy, D_zz, D_xy, D_xz, D_yz)
990+ shear_rate = f_compute_shear_rate_from_components(D_xx, D_yy, D_zz, D_xy, D_xz, D_yz)
991+ end if
989992 dynamic_viscosity = 0._wp
990993 do fluid_idx = 1 , num_fluids
991- ! local dynamic viscosity is the dynamic viscosity of the fluid times alpha of the fluid
992- dynamic_viscosity = dynamic_viscosity + (q_prim_vf(fluid_idx + eqn_idx%adv%beg - 1 )%sf(i, j, &
993- & k)* dynamic_viscosities(fluid_idx))
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)
999+ dynamic_viscosity = dynamic_viscosity + q_prim_vf(fluid_idx + eqn_idx%adv%beg - 1 )%sf(i, j, &
1000+ & k)* local_mu
1001+ else
1002+ dynamic_viscosity = dynamic_viscosity + q_prim_vf(fluid_idx + eqn_idx%adv%beg - 1 )%sf(i, j, &
1003+ & k)* dynamic_viscosities(fluid_idx)
1004+ end if
9941005 end do
9951006
9961007 ! get the linear force components first
0 commit comments