1! { dg-do compile } 2! { dg-require-effective-target vect_double } 3 4MODULE UPML_mod 5 6IMPLICIT NONE 7 8!PUBLIC UPMLupdateE 9! 10!PRIVATE 11 12real(kind=8), dimension(:,:,:), allocatable :: Dx_ilow 13 14real(kind=8), dimension(:), allocatable :: aye, aze 15real(kind=8), dimension(:), allocatable :: bye, bze 16real(kind=8), dimension(:), allocatable :: fxh, cxh 17 18real(kind=8) :: epsinv 19real(kind=8) :: dxinv, dyinv, dzinv 20 21integer :: xstart, ystart, zstart, xstop, ystop, zstop 22 23CONTAINS 24 25SUBROUTINE UPMLupdateE(nx,ny,nz,Hx,Hy,Hz,Ex,Ey,Ez) 26 27integer, intent(in) :: nx, ny, nz 28real(kind=8), intent(inout), & 29 dimension(xstart:xstop+1,ystart:ystop+1,zstart:zstop+1) :: Ex, Ey, Ez 30real(kind=8), intent(inout), & 31 allocatable :: Hx(:,:,:), Hy(:,:,:), Hz(:,:,:) 32 33integer :: i, j, k 34real(kind=8) :: Dxold, Dyold, Dzold 35 36do k=zstart+1,zstop 37 do j=ystart+1,ystop 38 do i=xstart+1,0 39 40 Dxold = Dx_ilow(i,j,k) 41 42 Dx_ilow(i,j,k) = aye(j) * Dx_ilow(i,j,k) + & 43 bye(j) * ((Hz(i,j,k )-Hz(i,j-1,k))*dyinv + & 44 (Hy(i,j,k-1)-Hy(i,j,k ))*dzinv) 45 46 Ex(i,j,k) = aze(k) * Ex(i,j,k) + & 47 bze(k) * (cxh(i)*Dx_ilow(i,j,k) - fxh(i)*Dxold) * epsinv 48 end do 49 end do 50end do 51 52END SUBROUTINE UPMLupdateE 53 54END MODULE UPML_mod 55 56! { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } 57! { dg-final { cleanup-tree-dump "vect" } } 58