Raw shear strain sh_xy = dv/dx + du/dy at Bu corner (i,j),
mirroring Phase-2’s gradient form. !$acc routine seq for the
on-device cross-term loop.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | u_face(nx+1,ny,nz) | |||
| real(kind=wp), | intent(in) | :: | v_face(nx,ny+1,nz) | |||
| real(kind=wp), | intent(in) | :: | idxCu(nx+1,ny) | |||
| real(kind=wp), | intent(in) | :: | idyCv(nx,ny+1) | |||
| real(kind=wp), | intent(in) | :: | dy_dxBu(nx+1,ny+1) | |||
| real(kind=wp), | intent(in) | :: | dx_dyBu(nx+1,ny+1) | |||
| integer, | intent(in) | :: | i | |||
| integer, | intent(in) | :: | j | |||
| integer, | intent(in) | :: | k | |||
| integer, | intent(in) | :: | nx | |||
| integer, | intent(in) | :: | ny | |||
| integer, | intent(in) | :: | nz |
pure function raw_sh_xy(u_face, v_face, idxCu, idyCv, dy_dxBu, dx_dyBu, & i, j, k, nx, ny, nz) result(sh_xy) !! Raw shear strain `sh_xy = dv/dx + du/dy` at Bu corner (i,j), !! mirroring Phase-2's gradient form. `!$acc routine seq` for the !! on-device cross-term loop. !$acc routine seq integer, intent(in) :: i, j, k, nx, ny, nz real(wp), intent(in) :: u_face(nx + 1, ny, nz), v_face(nx, ny + 1, nz) real(wp), intent(in) :: idxCu(nx + 1, ny), idyCv(nx, ny + 1) real(wp), intent(in) :: dy_dxBu(nx + 1, ny + 1), dx_dyBu(nx + 1, ny + 1) real(wp) :: sh_xy sh_xy = dy_dxBu(i, j)*(idyCv(i, j)*v_face(i, j, k) - idyCv(i - 1, j)*v_face(i - 1, j, k)) & + dx_dyBu(i, j)*(idxCu(i, j)*u_face(i, j, k) - idxCu(i, j - 1)*u_face(i, j - 1, k)) end function raw_sh_xy