Blame test/mpi/f90/coll/inplacef90.f90

Packit Service c5cf8c
! This file created from f77/coll/inplacef.f with f77tof90
Packit Service c5cf8c
! -*- Mode: Fortran; -*- 
Packit Service c5cf8c
!
Packit Service c5cf8c
! (C) 2005 by Argonne National Laboratory.
Packit Service c5cf8c
!     See COPYRIGHT in top-level directory.
Packit Service c5cf8c
!
Packit Service c5cf8c
! This is a simple test that Fortran support the MPI_IN_PLACE value
Packit Service c5cf8c
!
Packit Service c5cf8c
       program main
Packit Service c5cf8c
       use mpi
Packit Service c5cf8c
       integer ierr, errs
Packit Service c5cf8c
       integer comm, root
Packit Service c5cf8c
       integer rank, size
Packit Service c5cf8c
       integer i
Packit Service c5cf8c
       integer MAX_SIZE
Packit Service c5cf8c
       parameter (MAX_SIZE=1024)
Packit Service c5cf8c
       integer rbuf(MAX_SIZE), rdispls(MAX_SIZE), rcount(MAX_SIZE), &
Packit Service c5cf8c
      &      sbuf(MAX_SIZE) 
Packit Service c5cf8c
Packit Service c5cf8c
       errs = 0
Packit Service c5cf8c
       call mtest_init( ierr )
Packit Service c5cf8c
Packit Service c5cf8c
       comm = MPI_COMM_WORLD
Packit Service c5cf8c
       call mpi_comm_rank( comm, rank, ierr )
Packit Service c5cf8c
       call mpi_comm_size( comm, size, ierr )
Packit Service c5cf8c
Packit Service c5cf8c
       root = 0
Packit Service c5cf8c
! Gather with inplace
Packit Service c5cf8c
       do i=1,size
Packit Service c5cf8c
          rbuf(i) = - i
Packit Service c5cf8c
       enddo
Packit Service c5cf8c
       rbuf(1+root) = root
Packit Service c5cf8c
       if (rank .eq. root) then
Packit Service c5cf8c
          call mpi_gather( MPI_IN_PLACE, 1, MPI_INTEGER, rbuf, 1, &
Packit Service c5cf8c
      &         MPI_INTEGER, root, comm, ierr )
Packit Service c5cf8c
          do i=1,size
Packit Service c5cf8c
             if (rbuf(i) .ne. i-1) then
Packit Service c5cf8c
                errs = errs + 1
Packit Service c5cf8c
                print *, '[',rank,'] rbuf(', i, ') = ', rbuf(i),  &
Packit Service c5cf8c
      &                   ' in gather'  
Packit Service c5cf8c
             endif
Packit Service c5cf8c
          enddo
Packit Service c5cf8c
       else
Packit Service c5cf8c
          call mpi_gather( rank, 1, MPI_INTEGER, rbuf, 1, MPI_INTEGER, &
Packit Service c5cf8c
      &         root, comm, ierr )
Packit Service c5cf8c
       endif   
Packit Service c5cf8c
Packit Service c5cf8c
! Gatherv with inplace
Packit Service c5cf8c
       do i=1,size
Packit Service c5cf8c
          rbuf(i) = - i
Packit Service c5cf8c
          rcount(i) = 1
Packit Service c5cf8c
          rdispls(i) = i-1
Packit Service c5cf8c
       enddo
Packit Service c5cf8c
       rbuf(1+root) = root
Packit Service c5cf8c
       if (rank .eq. root) then
Packit Service c5cf8c
          call mpi_gatherv( MPI_IN_PLACE, 1, MPI_INTEGER, rbuf, rcount, &
Packit Service c5cf8c
      &         rdispls, MPI_INTEGER, root, comm, ierr )
Packit Service c5cf8c
          do i=1,size
Packit Service c5cf8c
             if (rbuf(i) .ne. i-1) then
Packit Service c5cf8c
                errs = errs + 1
Packit Service c5cf8c
                print *, '[', rank, '] rbuf(', i, ') = ', rbuf(i),  &
Packit Service c5cf8c
      &                ' in gatherv'
Packit Service c5cf8c
             endif
Packit Service c5cf8c
          enddo
Packit Service c5cf8c
       else
Packit Service c5cf8c
          call mpi_gatherv( rank, 1, MPI_INTEGER, rbuf, rcount, rdispls, &
Packit Service c5cf8c
      &         MPI_INTEGER, root, comm, ierr )
Packit Service c5cf8c
       endif   
Packit Service c5cf8c
Packit Service c5cf8c
! Scatter with inplace
Packit Service c5cf8c
       do i=1,size
Packit Service c5cf8c
          sbuf(i) = i
Packit Service c5cf8c
       enddo
Packit Service c5cf8c
       rbuf(1) = -1
Packit Service c5cf8c
       if (rank .eq. root) then
Packit Service c5cf8c
          call mpi_scatter( sbuf, 1, MPI_INTEGER, MPI_IN_PLACE, 1, &
Packit Service c5cf8c
      &         MPI_INTEGER, root, comm, ierr )
Packit Service c5cf8c
       else
Packit Service c5cf8c
          call mpi_scatter( sbuf, 1, MPI_INTEGER, rbuf, 1, &
Packit Service c5cf8c
      &         MPI_INTEGER, root, comm, ierr )
Packit Service c5cf8c
          if (rbuf(1) .ne. rank+1) then
Packit Service c5cf8c
             errs = errs + 1
Packit Service c5cf8c
             print *, '[', rank, '] rbuf  = ', rbuf(1), &
Packit Service c5cf8c
      &            ' in scatter' 
Packit Service c5cf8c
          endif
Packit Service c5cf8c
       endif   
Packit Service c5cf8c
Packit Service c5cf8c
       call mtest_finalize( errs )
Packit Service c5cf8c
Packit Service c5cf8c
       end