! This file created from f77/pt2pt/utilsf.f with f77tof90
! -*- Mode: Fortran; -*-
!
! (C) 2012 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
!------------------------------------------------------------------------------
!
! Check for correct source, tag, count, and data in test message.
!
!------------------------------------------------------------------------------
subroutine msg_check( recv_buf, source, tag, count, status, n, &
& name, errs )
use mpi
integer n, errs
real recv_buf(n)
integer source, tag, count, rank, status(MPI_STATUS_SIZE)
character*(*) name
logical foundError
integer ierr, recv_src, recv_tag, recv_count
foundError = .false.
recv_src = status(MPI_SOURCE)
recv_tag = status(MPI_TAG)
call MPI_Comm_rank( MPI_COMM_WORLD, rank, ierr )
call MPI_Get_count(status, MPI_REAL, recv_count, ierr)
if (recv_src .ne. source) then
print *, '[', rank, '] Unexpected source:', recv_src, &
& ' in ', name
errs = errs + 1
foundError = .true.
end if
if (recv_tag .ne. tag) then
print *, '[', rank, '] Unexpected tag:', recv_tag, ' in ', name
errs = errs + 1
foundError = .true.
end if
if (recv_count .ne. count) then
print *, '[', rank, '] Unexpected count:', recv_count, &
& ' in ', name
errs = errs + 1
foundError = .true.
end if
call verify_test_data(recv_buf, count, n, name, errs )
end
!------------------------------------------------------------------------------
!
! Check that requests have been set to null
!
!------------------------------------------------------------------------------
subroutine rq_check( requests, n, msg )
use mpi
integer n, requests(n)
character*(*) msg
integer i
!
do 10 i=1, n
if (requests(i) .ne. MPI_REQUEST_NULL) then
print *, 'Nonnull request in ', msg
endif
10 continue
!
end
!------------------------------------------------------------------------------
!
! Initialize test data buffer with integral sequence.
!
!------------------------------------------------------------------------------
subroutine init_test_data(buf,n)
integer n
real buf(n)
integer i
do 10 i = 1, n
buf(i) = REAL(i)
10 continue
end
!------------------------------------------------------------------------------
!
! Clear test data buffer
!
!------------------------------------------------------------------------------
subroutine clear_test_data(buf, n)
integer n
real buf(n)
integer i
do 10 i = 1, n
buf(i) = 0.
10 continue
end
!------------------------------------------------------------------------------
!
! Verify test data buffer
!
!------------------------------------------------------------------------------
subroutine verify_test_data( buf, count, n, name, errs )
use mpi
integer n, errs
real buf(n)
character *(*) name
integer count, ierr, i
!
do 10 i = 1, count
if (buf(i) .ne. REAL(i)) then
print 100, buf(i), i, count, name
errs = errs + 1
endif
10 continue
!
do 20 i = count + 1, n
if (buf(i) .ne. 0.) then
print 100, buf(i), i, n, name
errs = errs + 1
endif
20 continue
!
100 format('Invalid data', f6.1, ' at ', i4, ' of ', i4, ' in ', a)
!
end
!
! This routine is used to prevent the compiler from deallocating the
! array "a", which may happen in some of the tests (see the text in
! the MPI standard about why this may be a problem in valid Fortran
! codes). Without this, for example, tests fail with the Cray ftn
! compiler.
!
subroutine dummyRef( a, n, ie )
integer n, ie
real a(n)
! This condition will never be true, but the compile won't know that
if (ie .eq. -1) then
print *, a(n)
endif
return
end