Blame test/mpi/f90/ext/c2f2cf90.f90

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