1 ! -*- Mode: Fortran; -*-
3 ! (C) 2011 by Argonne National Laboratory.
4 ! See COPYRIGHT in top-level directory.
6 ! This program tests that all of the integer kinds defined in MPI 2.2 are
11 integer (kind=MPI_ADDRESS_KIND) aint, taint
12 integer (kind=MPI_OFFSET_KIND) oint, toint
13 integer (kind=MPI_INTEGER_KIND) iint, tiint
14 integer s(MPI_STATUS_SIZE)
15 integer i, wsize, wrank, ierr, errs
20 call MPI_COMM_SIZE(MPI_COMM_WORLD,wsize,ierr)
21 call MPI_COMM_RANK(MPI_COMM_WORLD,wrank,ierr)
22 if (wsize .lt. 2) then
23 print *, "This test requires at least 2 processes"
24 call MPI_ABORT( MPI_COMM_WORLD, 1, ierr )
27 ! Some compilers (e.g., gfortran) will issue an error if, at compile time,
28 ! an assignment would cause overflow, even if appropriated guarded. To
29 ! avoid this problem, we must compute the value in the integer (the
30 ! code here is simple; there are faster fixes for this but this is easy
31 if (wrank .eq. 0) then
32 if (range(aint) .ge. 10) then
41 if (range(oint) .ge. 10) then
50 if (range(iint) .ge. 10) then
59 call MPI_SEND( aint, 1, MPI_AINT, 1, 0, MPI_COMM_WORLD, ierr )
60 call MPI_SEND( oint, 1, MPI_OFFSET, 1, 1, MPI_COMM_WORLD, ierr )
61 call MPI_SEND( iint, 1, MPI_INTEGER, 1, 2, MPI_COMM_WORLD, ierr )
63 else if (wrank .eq. 1) then
64 if (range(taint) .ge. 10) then
66 do i=1, range(taint)-1
73 if (range(toint) .ge. 10) then
75 do i=1, range(toint)-1
82 if (range(tiint) .ge. 10) then
84 do i=1, range(tiint)-1
91 call MPI_RECV( aint, 1, MPI_AINT, 0, 0, MPI_COMM_WORLD, s, ierr )
92 if (taint .ne. aint) then
93 print *, "Address-sized int not correctly transferred"
94 print *, "Value should be ", taint, " but is ", aint
97 call MPI_RECV( oint, 1, MPI_OFFSET, 0, 1, MPI_COMM_WORLD, s, ierr )
98 if (toint .ne. oint) then
99 print *, "Offset-sized int not correctly transferred"
100 print *, "Value should be ", toint, " but is ", oint
103 call MPI_RECV( iint, 1, MPI_INTEGER, 0, 2, MPI_COMM_WORLD, s, ierr )
104 if (tiint .ne. iint) then
105 print *, "Integer (by kind) not correctly transferred"
106 print *, "Value should be ", tiint, " but is ", iint
112 call MTEST_FINALIZE(errs)
113 call MPI_FINALIZE(ierr)