@@ -646,7 +646,7 @@ end subroutine s_compute_fd_gradient ! --------------------------------------
646646 ! ! @param q_cons_vf Cell-averaged conservative variables
647647 ! ! @param q_prim_vf Cell-averaged primitive variables
648648 ! ! @param rhs_vf Cell-averaged RHS variables
649- subroutine s_get_viscous () ! -------
649+ subroutine s_get_viscous ()
650650
651651 integer :: i, j, k, l, r ! < Generic loop iterators
652652
@@ -1185,4 +1185,105 @@ subroutine s_apply_scalar_divergence_theorem(vL_vf, vR_vf, & ! --------
11851185
11861186 end subroutine s_apply_scalar_divergence_theorem ! ---------------------
11871187
1188+ subroutine s_reconstruct_cell_boundary_values_visc (v_vf , vL_x_flat , vL_y_flat , vL_z_flat , vR_x_flat , vR_y_flat , vR_z_flat , & ! -
1189+ norm_dir , vL_prim_vf , vR_prim_vf )
1190+
1191+ type (scalar_field), dimension (iv% beg:iv% end), intent (IN ) :: v_vf
1192+ type (scalar_field), dimension (iv% beg:iv% end), intent (INOUT ) :: vL_prim_vf, vR_prim_vf
1193+
1194+ real (kind (0d0 )), dimension (startx:, starty:, startz:, 1 :), intent (INOUT ) :: vL_x_flat, vL_y_flat, vL_z_flat, vR_x_flat, vR_y_flat, vR_z_flat
1195+
1196+ integer , intent (IN ) :: norm_dir
1197+
1198+ integer :: weno_dir ! < Coordinate direction of the WENO reconstruction
1199+
1200+ integer :: i, j, k, l
1201+ ! Reconstruction in s1-direction ===================================
1202+
1203+ if (norm_dir == 1 ) then
1204+ is1 = ix; is2 = iy; is3 = iz
1205+ weno_dir = 1 ; is1% beg = is1% beg + weno_polyn
1206+ is1% end = is1% end - weno_polyn
1207+
1208+ elseif (norm_dir == 2 ) then
1209+ is1 = iy; is2 = ix; is3 = iz
1210+ weno_dir = 2 ; is1% beg = is1% beg + weno_polyn
1211+ is1% end = is1% end - weno_polyn
1212+
1213+ else
1214+ is1 = iz; is2 = iy; is3 = ix
1215+ weno_dir = 3 ; is1% beg = is1% beg + weno_polyn
1216+ is1% end = is1% end - weno_polyn
1217+
1218+ end if
1219+
1220+ ! $acc update device(is1, is2, is3, iv)
1221+
1222+ if (n > 0 ) then
1223+ if (p > 0 ) then
1224+
1225+ call s_weno_alt(v_vf(iv% beg:iv% end), &
1226+ vL_x_flat(:, :, :, iv% beg:iv% end), vL_y_flat(:, :, :, iv% beg:iv% end), vL_z_flat(:, :, :, iv% beg:iv% end), vR_x_flat(:, :, :, iv% beg:iv% end), vR_y_flat(:, :, :, iv% beg:iv% end), vR_z_flat(:, :, :, iv% beg:iv% end), &
1227+ norm_dir, weno_dir, &
1228+ is1, is2, is3)
1229+ else
1230+ call s_weno_alt(v_vf(iv% beg:iv% end), &
1231+ vL_x_flat(:, :, :, iv% beg:iv% end), vL_y_flat(:, :, :, iv% beg:iv% end), vL_z_flat(:, :, :, :), vR_x_flat(:, :, :, iv% beg:iv% end), vR_y_flat(:, :, :, iv% beg:iv% end), vR_z_flat(:, :, :, :), &
1232+ norm_dir, weno_dir, &
1233+ is1, is2, is3)
1234+ end if
1235+ else
1236+
1237+ call s_weno_alt(v_vf(iv% beg:iv% end), &
1238+ vL_x_flat(:, :, :, iv% beg:iv% end), vL_y_flat(:, :, :, :), vL_z_flat(:, :, :, :), vR_x_flat(:, :, :, iv% beg:iv% end), vR_y_flat(:, :, :, :), vR_z_flat(:, :, :, :), &
1239+ norm_dir, weno_dir, &
1240+ is1, is2, is3)
1241+ end if
1242+
1243+ if (any (Re_size > 0 )) then
1244+ if (weno_Re_flux) then
1245+ if (norm_dir == 2 ) then
1246+ ! $acc parallel loop collapse(4) gang vector default(present)
1247+ do i = iv% beg, iv% end
1248+ do l = is3% beg, is3% end
1249+ do j = is1% beg, is1% end
1250+ do k = is2% beg, is2% end
1251+ vL_prim_vf(i)% sf(k, j, l) = vL_y_flat(j, k, l, i)
1252+ vR_prim_vf(i)% sf(k, j, l) = vR_y_flat(j, k, l, i)
1253+ end do
1254+ end do
1255+ end do
1256+ end do
1257+ elseif (norm_dir == 3 ) then
1258+ ! $acc parallel loop collapse(4) gang vector default(present)
1259+ do i = iv% beg, iv% end
1260+ do j = is1% beg, is1% end
1261+ do k = is2% beg, is2% end
1262+ do l = is3% beg, is3% end
1263+ vL_prim_vf(i)% sf(l, k, j) = vL_z_flat(j, k, l, i)
1264+ vR_prim_vf(i)% sf(l, k, j) = vR_z_flat(j, k, l, i)
1265+ end do
1266+ end do
1267+ end do
1268+ end do
1269+ elseif (norm_dir == 1 ) then
1270+ ! $acc parallel loop collapse(4) gang vector default(present)
1271+ do i = iv% beg, iv% end
1272+ do l = is3% beg, is3% end
1273+ do k = is2% beg, is2% end
1274+ do j = is1% beg, is1% end
1275+ vL_prim_vf(i)% sf(j, k, l) = vL_x_flat(j, k, l, i)
1276+ vR_prim_vf(i)% sf(j, k, l) = vR_x_flat(j, k, l, i)
1277+ end do
1278+ end do
1279+ end do
1280+ end do
1281+ end if
1282+ end if
1283+ end if
1284+
1285+ ! ==================================================================
1286+
1287+ end subroutine s_reconstruct_cell_boundary_values_visc ! --------------------
1288+
11881289end module m_viscous
0 commit comments