Blame test/mpi/f77/coll/uallreducef.f

Packit 0848f5
C -*- Mode: Fortran; -*- 
Packit 0848f5
C
Packit 0848f5
C  (C) 2003 by Argonne National Laboratory.
Packit 0848f5
C      See COPYRIGHT in top-level directory.
Packit 0848f5
C
Packit 0848f5
C
Packit 0848f5
C Test user-defined operations.  This tests a simple commutative operation
Packit 0848f5
C
Packit 0848f5
      subroutine uop( cin, cout, count, datatype )
Packit 0848f5
      implicit none
Packit 0848f5
      include 'mpif.h'
Packit 0848f5
      integer cin(*), cout(*)
Packit 0848f5
      integer count, datatype
Packit 0848f5
      integer i
Packit 0848f5
      
Packit 0848f5
      if (datatype .ne. MPI_INTEGER) then
Packit 0848f5
         print *, 'Invalid datatype (',datatype,') passed to user_op()'
Packit 0848f5
         return
Packit 0848f5
      endif
Packit 0848f5
Packit 0848f5
      do i=1, count
Packit 0848f5
         cout(i) = cin(i) + cout(i)
Packit 0848f5
      enddo
Packit 0848f5
      end
Packit 0848f5
Packit 0848f5
      program main
Packit 0848f5
      implicit none
Packit 0848f5
      include 'mpif.h'
Packit 0848f5
      external uop
Packit 0848f5
      integer ierr, errs
Packit 0848f5
      integer count, sumop, vin(65000), vout(65000), i, size
Packit 0848f5
      integer comm
Packit 0848f5
      
Packit 0848f5
      errs = 0
Packit 0848f5
Packit 0848f5
      call mtest_init(ierr)
Packit 0848f5
      call mpi_op_create( uop, .true., sumop, ierr )
Packit 0848f5
Packit 0848f5
      comm = MPI_COMM_WORLD
Packit 0848f5
      call mpi_comm_size( comm, size, ierr )
Packit 0848f5
      count = 1
Packit 0848f5
      do while (count .lt. 65000) 
Packit 0848f5
         do i=1, count
Packit 0848f5
            vin(i) = i
Packit 0848f5
            vout(i) = -1
Packit 0848f5
         enddo
Packit 0848f5
         call mpi_allreduce( vin, vout, count, MPI_INTEGER, sumop, 
Packit 0848f5
     *                       comm, ierr )
Packit 0848f5
C         Check that all results are correct
Packit 0848f5
         do i=1, count
Packit 0848f5
            if (vout(i) .ne. i * size) then
Packit 0848f5
               errs = errs + 1
Packit 0848f5
               if (errs .lt. 10) print *, "vout(",i,") = ", vout(i)
Packit 0848f5
            endif
Packit 0848f5
         enddo
Packit 0848f5
         count = count + count
Packit 0848f5
      enddo
Packit 0848f5
Packit 0848f5
      call mpi_op_free( sumop, ierr )
Packit 0848f5
Packit 0848f5
      call mtest_finalize(errs)
Packit 0848f5
      call mpi_finalize(ierr)
Packit 0848f5
      end