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