Blame test/mpi/f90/coll/uallreducef90.f90

Packit Service c5cf8c
! This file created from f77/coll/uallreducef.f with f77tof90
Packit Service c5cf8c
! -*- Mode: Fortran; -*- 
Packit Service c5cf8c
!
Packit Service c5cf8c
!  (C) 2003 by Argonne National Laboratory.
Packit Service c5cf8c
!      See COPYRIGHT in top-level directory.
Packit Service c5cf8c
!
Packit Service c5cf8c
!
Packit Service c5cf8c
! Test user-defined operations.  This tests a simple commutative operation
Packit Service c5cf8c
!
Packit Service c5cf8c
      subroutine uop( cin, cout, count, datatype )
Packit Service c5cf8c
      use mpi
Packit Service c5cf8c
      integer cin(*), cout(*)
Packit Service c5cf8c
      integer count, datatype
Packit Service c5cf8c
      integer i
Packit Service c5cf8c
      
Packit Service c5cf8c
      if (datatype .ne. MPI_INTEGER) then
Packit Service c5cf8c
         print *, 'Invalid datatype (',datatype,') passed to user_op()'
Packit Service c5cf8c
         return
Packit Service c5cf8c
      endif
Packit Service c5cf8c
Packit Service c5cf8c
      do i=1, count
Packit Service c5cf8c
         cout(i) = cin(i) + cout(i)
Packit Service c5cf8c
      enddo
Packit Service c5cf8c
      end
Packit Service c5cf8c
Packit Service c5cf8c
      program main
Packit Service c5cf8c
      use mpi
Packit Service c5cf8c
      external uop
Packit Service c5cf8c
      integer ierr, errs
Packit Service c5cf8c
      integer count, sumop, vin(65000), vout(65000), i, size
Packit Service c5cf8c
      integer comm
Packit Service c5cf8c
      
Packit Service c5cf8c
      errs = 0
Packit Service c5cf8c
Packit Service c5cf8c
      call mtest_init(ierr)
Packit Service c5cf8c
      call mpi_op_create( uop, .true., sumop, ierr )
Packit Service c5cf8c
Packit Service c5cf8c
      comm = MPI_COMM_WORLD
Packit Service c5cf8c
      call mpi_comm_size( comm, size, ierr )
Packit Service c5cf8c
      count = 1
Packit Service c5cf8c
      do while (count .lt. 65000) 
Packit Service c5cf8c
         do i=1, count
Packit Service c5cf8c
            vin(i) = i
Packit Service c5cf8c
            vout(i) = -1
Packit Service c5cf8c
         enddo
Packit Service c5cf8c
         call mpi_allreduce( vin, vout, count, MPI_INTEGER, sumop,  &
Packit Service c5cf8c
      &                       comm, ierr )
Packit Service c5cf8c
!         Check that all results are correct
Packit Service c5cf8c
         do i=1, count
Packit Service c5cf8c
            if (vout(i) .ne. i * size) then
Packit Service c5cf8c
               errs = errs + 1
Packit Service c5cf8c
               if (errs .lt. 10) print *, "vout(",i,") = ", vout(i)
Packit Service c5cf8c
            endif
Packit Service c5cf8c
         enddo
Packit Service c5cf8c
         count = count + count
Packit Service c5cf8c
      enddo
Packit Service c5cf8c
Packit Service c5cf8c
      call mpi_op_free( sumop, ierr )
Packit Service c5cf8c
Packit Service c5cf8c
      call mtest_finalize(errs)
Packit Service c5cf8c
      end