c ----------------------------------------------------------- c Scalar product: 1-D objects c n - local dimension c ----------------------------------------------------------- double precision function mpi_dot1(x,y,n) implicit none include 'mpif.h' integer n,i,ierr,comm double precision lsum,gsum,x(n),y(n) lsum=0.0d0 do i=1,n lsum=lsum + x(i)*y(i) enddo comm = MPI_COMM_WORLD call MPI_ALLREDUCE(lsum,gsum,1,MPI_DOUBLE_PRECISION, > MPI_SUM, comm, ierr) mpi_dot1 = gsum return end c ----------------------------------------------------------- c Scalar product: 2-D objects c nx,ny - local dimensions c ----------------------------------------------------------- double precision function mpi_dot2(x,y,nx,ny) implicit none include 'mpif.h' integer nx,ny,i,j,ierr,comm double precision lsum,gsum,x(nx,ny),y(nx,ny) lsum=0.0d0 do i=1,nx do j=1,ny lsum=lsum + x(i,j)*y(i,j) enddo enddo comm = MPI_COMM_WORLD call MPI_ALLREDUCE(lsum,gsum,1,MPI_DOUBLE_PRECISION, > MPI_SUM, comm, ierr) mpi_dot2 = gsum return end c ----------------------------------------------------------- c Scalar product: 3-D objects c nx,ny,nz - local dimensions c ----------------------------------------------------------- double precision function mpi_dot3(x,y,nx,ny,nz) implicit none include 'mpif.h' integer nx,ny,nz,i,j,k,ierr,comm double precision lsum,gsum,x(nx,ny,nz),y(nx,ny,nz) lsum=0.0d0 do i=1,nx do j=1,ny do k=1,nz lsum=lsum + x(i,j,k)*y(i,j,k) enddo enddo enddo comm = MPI_COMM_WORLD call MPI_ALLREDUCE(lsum,gsum,1,MPI_DOUBLE_PRECISION, > MPI_SUM, comm, ierr) mpi_dot3 = gsum return end