blob: 998687fd48e5a31eb296dffd9d54920f3cabff24 [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
include 'mpinpb.h'
include 'timing.h'
c---------------------------------------------------------------------
c input parameters
c---------------------------------------------------------------------
integer ldx, ldy, ldz
integer nx0, ny0, nz0
integer ist, iend
integer jst, jend
double precision v(5,-1:ldx+2,-1:ldy+2,*), sum(5)
c---------------------------------------------------------------------
c local variables
c---------------------------------------------------------------------
integer i, j, k, m
double precision dummy(5)
integer IERROR
do m = 1, 5
dummy(m) = 0.0d+00
end do
do k = 2, nz0-1
do j = jst, jend
do i = ist, iend
do m = 1, 5
dummy(m) = dummy(m) + v(m,i,j,k) * v(m,i,j,k)
end do
end do
end do
end do
c---------------------------------------------------------------------
c compute the global sum of individual contributions to dot product.
c---------------------------------------------------------------------
if (timeron) call timer_start(t_rcomm)
call MPI_ALLREDUCE( dummy,
> sum,
> 5,
> dp_type,
> MPI_SUM,
> MPI_COMM_WORLD,
> IERROR )
if (timeron) call timer_stop(t_rcomm)
do m = 1, 5
sum(m) = sqrt ( sum(m) / ( (nx0-2)*(ny0-2)*(nz0-2) ) )
end do
return
end