blob: f3bec2298d231d22a2581c0dea2dd6f8b1e35710 [file] [log] [blame]
c---------------------------------------------------------------------
c---------------------------------------------------------------------
subroutine l2norm ( ldx, ldy, ldz,
> nx0, ny0, nz0,
> ist, iend,
> jst, jend,
> v, sum )
c---------------------------------------------------------------------
c---------------------------------------------------------------------
c---------------------------------------------------------------------
c to compute the l2-norm of vector v.
c---------------------------------------------------------------------
implicit none
c---------------------------------------------------------------------
c input parameters
c---------------------------------------------------------------------
integer ldx, ldy, ldz
integer nx0, ny0, nz0
integer ist, iend
integer jst, jend
c---------------------------------------------------------------------
c To improve cache performance, second two dimensions padded by 1
c for even number sizes only. Only needed in v.
c---------------------------------------------------------------------
double precision v(5,ldx/2*2+1,ldy/2*2+1,*), sum(5)
c---------------------------------------------------------------------
c local variables
c---------------------------------------------------------------------
integer i, j, k, m
do m = 1, 5
sum(m) = 0.0d+00
end do
do k = 2, nz0-1
do j = jst, jend
do i = ist, iend
do m = 1, 5
sum(m) = sum(m) + v(m,i,j,k) * v(m,i,j,k)
end do
end do
end do
end do
do m = 1, 5
sum(m) = sqrt ( sum(m) / ( (nx0-2)*(ny0-2)*(nz0-2) ) )
end do
return
end