! This file created from f77/attr/commattr4f.f with f77tof90
! -*- Mode: Fortran; -*-
!
! (C) 2015 by Argonne National Laboratory.
! See COPYRIGHT in top-level directory.
!
program main
!
use mpi
integer ierr
integer errs
logical found
integer comm2
integer key
integer (kind=MPI_ADDRESS_KIND) extrastate, valin, valout, val
errs = 0
!
! initialize the mpi environment
!
call mpi_init(ierr)
call mpi_comm_create_keyval(MPI_COMM_DUP_FN, &
& MPI_NULL_DELETE_FN, &
& key, &
& extrastate, &
& ierr)
!
! set a value for the attribute
!
valin = huge(valin)
!
! set attr in comm_world
!
call mpi_comm_set_attr(MPI_COMM_WORLD, &
& key, &
& valin, &
& ierr)
call mpi_comm_get_attr(MPI_COMM_WORLD, &
& key, &
& valout, &
& found, &
& ierr)
if (found .neqv. .true.) then
print *, "mpi_comm_set_attr reported key, but not found on ", &
& "mpi_comm_world"
errs = errs + 1
else if (valout .ne. valin) then
print *, "key found, but valin does not match valout"
print *, valout, " != ", valin
errs = errs + 1
end if
!
! dup the communicator, attribute should follow
!
call mpi_comm_dup(MPI_COMM_WORLD, &
& comm2, &
& ierr)
!
! get the value for the attribute
!
call mpi_comm_get_attr(comm2, &
& key, &
& valout, &
& found, &
& ierr)
if (found .neqv. .true.) then
print *, "mpi_comm_set_attr reported key, but not found on ", &
& "duped comm"
errs = errs + 1
else if (valout .ne. valin) then
print *, "key found, but value does not match that on ", &
& "mpi_comm_world"
print *, valout, " != ", valin
errs = errs + 1
end if
!
! free the duped communicator
!
call mpi_comm_free(comm2, ierr)
!
! free keyval
!
call mpi_comm_delete_attr(MPI_COMM_WORLD, &
& key, ierr)
call mpi_comm_free_keyval(key, &
& ierr)
call mtest_finalize( errs )
end