Blame test/mpi/f90/rma/winscale2f90.f90

Packit 0848f5
! This file created from test/mpi/f77/rma/winscale2f.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 win, intsize
Packit 0848f5
      integer left, right, rank, size
Packit 0848f5
      integer nrows, ncols
Packit 0848f5
      parameter (nrows=25,ncols=10)
Packit 0848f5
      integer buf(1:nrows,0:ncols+1)
Packit 0848f5
      integer comm, group, group2, ans
Packit 0848f5
      integer nneighbors, nbrs(2), i, j
Packit 0848f5
      logical mtestGetIntraComm
Packit 0848f5
      logical flag
Packit 0848f5
! Include addsize defines asize as an address-sized integer
Packit 0848f5
      integer (kind=MPI_ADDRESS_KIND) asize
Packit 0848f5
Packit 0848f5
      
Packit 0848f5
      errs = 0
Packit 0848f5
      call mtest_init( ierr )
Packit 0848f5
Packit 0848f5
      call mpi_type_size( MPI_INTEGER, intsize, ierr )
Packit 0848f5
      do while( mtestGetIntraComm( comm, 2, .false. ) ) 
Packit 0848f5
         asize = nrows * (ncols + 2) * intsize
Packit 0848f5
         call mpi_win_create( buf, asize, intsize * nrows,  &
Packit 0848f5
      &                        MPI_INFO_NULL, comm, win, ierr )
Packit 0848f5
         
Packit 0848f5
! Create the group for the neighbors
Packit 0848f5
         call mpi_comm_size( comm, size, ierr )
Packit 0848f5
         call mpi_comm_rank( comm, rank, ierr )
Packit 0848f5
         nneighbors = 0
Packit 0848f5
         left = rank - 1
Packit 0848f5
         if (left .lt. 0) then
Packit 0848f5
            left = MPI_PROC_NULL
Packit 0848f5
         else
Packit 0848f5
            nneighbors = nneighbors + 1
Packit 0848f5
            nbrs(nneighbors) = left
Packit 0848f5
         endif
Packit 0848f5
         right = rank + 1
Packit 0848f5
         if (right .ge. size) then
Packit 0848f5
            right = MPI_PROC_NULL
Packit 0848f5
         else
Packit 0848f5
            nneighbors = nneighbors + 1
Packit 0848f5
            nbrs(nneighbors) = right
Packit 0848f5
         endif
Packit 0848f5
         call mpi_comm_group( comm, group, ierr )
Packit 0848f5
         call mpi_group_incl( group, nneighbors, nbrs, group2, ierr )
Packit 0848f5
         call mpi_group_free( group, ierr )
Packit 0848f5
!
Packit 0848f5
! Initialize the buffer 
Packit 0848f5
         do i=1,nrows
Packit 0848f5
            buf(i,0)       = -1
Packit 0848f5
            buf(i,ncols+1) = -1
Packit 0848f5
         enddo
Packit 0848f5
         do j=1,ncols
Packit 0848f5
            do i=1,nrows
Packit 0848f5
               buf(i,j) = rank * (ncols * nrows) + i + (j-1) * nrows
Packit 0848f5
            enddo
Packit 0848f5
         enddo
Packit 0848f5
         call mpi_win_post( group2, 0, win, ierr )
Packit 0848f5
         call mpi_win_start( group2, 0, win, ierr )
Packit 0848f5
!         
Packit 0848f5
         asize = ncols+1
Packit 0848f5
         call mpi_put( buf(1,1), nrows, MPI_INTEGER, left, asize, &
Packit 0848f5
      &                 nrows, MPI_INTEGER, win, ierr )
Packit 0848f5
         asize = 0
Packit 0848f5
         call mpi_put( buf(1,ncols), nrows, MPI_INTEGER, right, asize,  &
Packit 0848f5
      &                 nrows, MPI_INTEGER, win, ierr )
Packit 0848f5
!         
Packit 0848f5
         call mpi_win_complete( win, ierr )
Packit 0848f5
         flag = .false.
Packit 0848f5
         do while (.not. flag)
Packit 0848f5
            call mpi_win_test( win, flag, ierr )
Packit 0848f5
         enddo
Packit 0848f5
!
Packit 0848f5
! Check the results
Packit 0848f5
         if (left .ne. MPI_PROC_NULL) then
Packit 0848f5
            do i=1, nrows
Packit 0848f5
               ans = rank * (ncols * nrows) - nrows + i
Packit 0848f5
               if (buf(i,0) .ne. ans) then
Packit 0848f5
                  errs = errs + 1
Packit 0848f5
                  if (errs .le. 10) then
Packit 0848f5
                     print *, ' buf(',i,',0) = ', buf(i,0),  &
Packit 0848f5
      &    'expected ', ans
Packit 0848f5
                  endif
Packit 0848f5
               endif
Packit 0848f5
            enddo
Packit 0848f5
         endif
Packit 0848f5
         if (right .ne. MPI_PROC_NULL) then
Packit 0848f5
            do i=1, nrows
Packit 0848f5
               ans = (rank+1) * (ncols * nrows) + i
Packit 0848f5
               if (buf(i,ncols+1) .ne. ans) then
Packit 0848f5
                  errs = errs + 1
Packit 0848f5
                  if (errs .le. 10) then
Packit 0848f5
                     print *, ' buf(',i,',',ncols+1,') = ',  &
Packit 0848f5
      &                          buf(i,ncols+1), ' expected ', ans
Packit 0848f5
                  endif
Packit 0848f5
               endif
Packit 0848f5
            enddo
Packit 0848f5
         endif
Packit 0848f5
         call mpi_group_free( group2, ierr )
Packit 0848f5
         call mpi_win_free( win, ierr )
Packit 0848f5
         call mtestFreeComm( comm )
Packit 0848f5
      enddo
Packit 0848f5
Packit 0848f5
      call mtest_finalize( errs )
Packit 0848f5
      call mpi_finalize( ierr )
Packit 0848f5
      end