Blame test/mpi/f90/coll/alltoallwf90.f90

Packit 0848f5
! This file created from test/mpi/f77/coll/alltoallwf.f with f77tof90
Packit 0848f5
! -*- Mode: Fortran; -*- 
Packit 0848f5
!
Packit 0848f5
!  (C) 2003 by Argonne National Laboratory.
Packit 0848f5
!      See COPYRIGHT in top-level directory.
Packit 0848f5
!
Packit 0848f5
      program main
Packit 0848f5
      use mpi
Packit 0848f5
      integer ierr, errs
Packit 0848f5
      integer i, intsize, ans, size, rank, color, comm, newcomm
Packit 0848f5
      integer maxSize
Packit 0848f5
      parameter (maxSize=32)
Packit 0848f5
      integer scounts(maxSize), sdispls(maxSize), stypes(maxSize)
Packit 0848f5
      integer rcounts(maxSize), rdispls(maxSize), rtypes(maxSize)
Packit 0848f5
      integer sbuf(maxSize), rbuf(maxSize)
Packit 0848f5
      errs = 0
Packit 0848f5
      
Packit 0848f5
      call mtest_init( ierr )
Packit 0848f5
Packit 0848f5
      call mpi_type_size( MPI_INTEGER, intsize, ierr )
Packit 0848f5
Packit 0848f5
! Get a comm
Packit 0848f5
      call mpi_comm_dup( MPI_COMM_WORLD, comm, ierr )
Packit 0848f5
      call mpi_comm_size( comm, size, ierr )
Packit 0848f5
      if (size .gt. maxSize) then
Packit 0848f5
         call mpi_comm_rank( comm, rank, ierr )
Packit 0848f5
         color = 1
Packit 0848f5
         if (rank .lt. maxSize) color = 0
Packit 0848f5
         call mpi_comm_split( comm, color, rank, newcomm, ierr )
Packit 0848f5
         call mpi_comm_free( comm, ierr )
Packit 0848f5
         comm = newcomm
Packit 0848f5
         call mpi_comm_size( comm, size, ierr )
Packit 0848f5
      endif
Packit 0848f5
      call mpi_comm_rank( comm, rank, ierr )
Packit 0848f5
      
Packit 0848f5
      if (size .le. maxSize) then
Packit 0848f5
! Initialize the data.  Just use this as an all to all
Packit 0848f5
         do i=1, size
Packit 0848f5
            scounts(i) = 1
Packit 0848f5
            sdispls(i) = (i-1)*intsize
Packit 0848f5
            stypes(i)  = MPI_INTEGER
Packit 0848f5
            sbuf(i) = rank * size + i
Packit 0848f5
            rcounts(i) = 1
Packit 0848f5
            rdispls(i) = (i-1)*intsize
Packit 0848f5
            rtypes(i)  = MPI_INTEGER
Packit 0848f5
            rbuf(i) = -1
Packit 0848f5
         enddo
Packit 0848f5
         call mpi_alltoallw( sbuf, scounts, sdispls, stypes, &
Packit 0848f5
      &        rbuf, rcounts, rdispls, rtypes, comm, ierr )     
Packit 0848f5
!
Packit 0848f5
! check rbuf(i) = data from the ith location of the ith send buf, or
Packit 0848f5
!       rbuf(i) = (i-1) * size + i   
Packit 0848f5
         do i=1, size
Packit 0848f5
            ans = (i-1) * size + rank + 1
Packit 0848f5
            if (rbuf(i) .ne. ans) then
Packit 0848f5
               errs = errs + 1
Packit 0848f5
               print *, rank, ' rbuf(', i, ') = ', rbuf(i),  &
Packit 0848f5
      &               ' expected ', ans
Packit 0848f5
            endif
Packit 0848f5
         enddo
Packit 0848f5
      endif
Packit 0848f5
      call mpi_comm_free( comm, ierr )
Packit 0848f5
Packit 0848f5
      call mtest_finalize( errs )
Packit 0848f5
      call mpi_finalize( ierr )
Packit 0848f5
      end
Packit 0848f5