|
Packit |
0848f5 |
! This file created from test/mpi/f77/ext/c2f2cf.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 errs, toterrs, ierr
|
|
Packit |
0848f5 |
integer wrank, wsize
|
|
Packit |
0848f5 |
integer wgroup, info, req
|
|
Packit |
0848f5 |
integer fsize, frank
|
|
Packit |
0848f5 |
integer comm, group, type, op, errh, result
|
|
Packit |
0848f5 |
integer c2fcomm, c2fgroup, c2ftype, c2finfo, c2frequest, &
|
|
Packit |
0848f5 |
& c2ferrhandler, c2fop
|
|
Packit |
0848f5 |
character value*100
|
|
Packit |
0848f5 |
logical flag
|
|
Packit |
0848f5 |
errs = 0
|
|
Packit |
0848f5 |
|
|
Packit |
0848f5 |
call mpi_init( ierr )
|
|
Packit |
0848f5 |
|
|
Packit |
0848f5 |
!
|
|
Packit |
0848f5 |
! Test passing a Fortran MPI object to C
|
|
Packit |
0848f5 |
call mpi_comm_rank( MPI_COMM_WORLD, wrank, ierr )
|
|
Packit |
0848f5 |
errs = errs + c2fcomm( MPI_COMM_WORLD )
|
|
Packit |
0848f5 |
call mpi_comm_group( MPI_COMM_WORLD, wgroup, ierr )
|
|
Packit |
0848f5 |
errs = errs + c2fgroup( wgroup )
|
|
Packit |
0848f5 |
call mpi_group_free( wgroup, ierr )
|
|
Packit |
0848f5 |
|
|
Packit |
0848f5 |
call mpi_info_create( info, ierr )
|
|
Packit |
0848f5 |
call mpi_info_set( info, "host", "myname", ierr )
|
|
Packit |
0848f5 |
call mpi_info_set( info, "wdir", "/rdir/foo", ierr )
|
|
Packit |
0848f5 |
errs = errs + c2finfo( info )
|
|
Packit |
0848f5 |
call mpi_info_free( info, ierr )
|
|
Packit |
0848f5 |
|
|
Packit |
0848f5 |
errs = errs + c2ftype( MPI_INTEGER )
|
|
Packit |
0848f5 |
|
|
Packit |
0848f5 |
call mpi_irecv( 0, 0, MPI_INTEGER, MPI_ANY_SOURCE, MPI_ANY_TAG, &
|
|
Packit |
0848f5 |
& MPI_COMM_WORLD, req, ierr )
|
|
Packit |
0848f5 |
call mpi_cancel( req, ierr )
|
|
Packit |
0848f5 |
errs = errs + c2frequest( req )
|
|
Packit |
0848f5 |
call mpi_wait( req, MPI_STATUS_IGNORE, ierr )
|
|
Packit |
0848f5 |
|
|
Packit |
0848f5 |
errs = errs + c2ferrhandler( MPI_ERRORS_RETURN )
|
|
Packit |
0848f5 |
|
|
Packit |
0848f5 |
errs = errs + c2fop( MPI_SUM )
|
|
Packit |
0848f5 |
|
|
Packit |
0848f5 |
!
|
|
Packit |
0848f5 |
! Test using a C routine to provide the Fortran handle
|
|
Packit |
0848f5 |
call mpi_comm_size( MPI_COMM_WORLD, wsize, ierr )
|
|
Packit |
0848f5 |
call mpi_comm_rank( MPI_COMM_WORLD, wrank, ierr )
|
|
Packit |
0848f5 |
|
|
Packit |
0848f5 |
call f2ccomm( comm )
|
|
Packit |
0848f5 |
call mpi_comm_size( comm, fsize, ierr )
|
|
Packit |
0848f5 |
call mpi_comm_rank( comm, frank, ierr )
|
|
Packit |
0848f5 |
if (fsize.ne.wsize .or. frank.ne.wrank) then
|
|
Packit |
0848f5 |
errs = errs + 1
|
|
Packit |
0848f5 |
print *, "Comm(fortran) has wrong size or rank"
|
|
Packit |
0848f5 |
endif
|
|
Packit |
0848f5 |
|
|
Packit |
0848f5 |
call f2cgroup( group )
|
|
Packit |
0848f5 |
call mpi_group_size( group, fsize, ierr )
|
|
Packit |
0848f5 |
call mpi_group_rank( group, frank, ierr )
|
|
Packit |
0848f5 |
if (fsize.ne.wsize .or. frank.ne.wrank) then
|
|
Packit |
0848f5 |
errs = errs + 1
|
|
Packit |
0848f5 |
print *, "Group(fortran) has wrong size or rank"
|
|
Packit |
0848f5 |
endif
|
|
Packit |
0848f5 |
call mpi_group_free( group, ierr )
|
|
Packit |
0848f5 |
|
|
Packit |
0848f5 |
call f2ctype( type )
|
|
Packit |
0848f5 |
if (type .ne. MPI_INTEGER) then
|
|
Packit |
0848f5 |
errs = errs + 1
|
|
Packit |
0848f5 |
print *, "Datatype(fortran) is not MPI_INT"
|
|
Packit |
0848f5 |
endif
|
|
Packit |
0848f5 |
|
|
Packit |
0848f5 |
call f2cinfo( info )
|
|
Packit |
0848f5 |
call mpi_info_get( info, "host", 100, value, flag, ierr )
|
|
Packit |
0848f5 |
if (.not. flag) then
|
|
Packit |
0848f5 |
errs = errs + 1
|
|
Packit |
0848f5 |
print *, "Info test for host returned false"
|
|
Packit |
0848f5 |
else if (value .ne. "myname") then
|
|
Packit |
0848f5 |
errs = errs + 1
|
|
Packit |
0848f5 |
print *, "Info test for host returned ", value
|
|
Packit |
0848f5 |
endif
|
|
Packit |
0848f5 |
call mpi_info_get( info, "wdir", 100, value, flag, ierr )
|
|
Packit |
0848f5 |
if (.not. flag) then
|
|
Packit |
0848f5 |
errs = errs + 1
|
|
Packit |
0848f5 |
print *, "Info test for wdir returned false"
|
|
Packit |
0848f5 |
else if (value .ne. "/rdir/foo") then
|
|
Packit |
0848f5 |
errs = errs + 1
|
|
Packit |
0848f5 |
print *, "Info test for wdir returned ", value
|
|
Packit |
0848f5 |
endif
|
|
Packit |
0848f5 |
call mpi_info_free( info, ierr )
|
|
Packit |
0848f5 |
|
|
Packit |
0848f5 |
call f2cop( op )
|
|
Packit |
0848f5 |
if (op .ne. MPI_SUM) then
|
|
Packit |
0848f5 |
errs = errs + 1
|
|
Packit |
0848f5 |
print *, "Fortran MPI_SUM not MPI_SUM in C"
|
|
Packit |
0848f5 |
endif
|
|
Packit |
0848f5 |
|
|
Packit |
0848f5 |
call f2cerrhandler( errh )
|
|
Packit |
0848f5 |
if (errh .ne. MPI_ERRORS_RETURN) then
|
|
Packit |
0848f5 |
errs = errs + 1
|
|
Packit |
0848f5 |
print *,"Fortran MPI_ERRORS_RETURN not MPI_ERRORS_RETURN in C"
|
|
Packit |
0848f5 |
endif
|
|
Packit |
0848f5 |
!
|
|
Packit |
0848f5 |
! Summarize the errors
|
|
Packit |
0848f5 |
!
|
|
Packit |
0848f5 |
call mpi_allreduce( errs, toterrs, 1, MPI_INTEGER, MPI_SUM, &
|
|
Packit |
0848f5 |
& MPI_COMM_WORLD, ierr )
|
|
Packit |
0848f5 |
if (wrank .eq. 0) then
|
|
Packit |
0848f5 |
if (toterrs .eq. 0) then
|
|
Packit |
0848f5 |
print *, ' No Errors'
|
|
Packit |
0848f5 |
else
|
|
Packit |
0848f5 |
print *, ' Found ', toterrs, ' errors'
|
|
Packit |
0848f5 |
endif
|
|
Packit |
0848f5 |
endif
|
|
Packit |
0848f5 |
|
|
Packit |
0848f5 |
call mpi_finalize( ierr )
|
|
Packit |
0848f5 |
end
|
|
Packit |
0848f5 |
|