MPI_Intercomm_Merge( intercomm, high, newintracomm, ier )

None of the books I have state the variable type of the second argument for MPI_Intercomm_Merge for Fortran. Class notes I have from David Cronk state it is a Logical.

In C it is an "int" with values of true and false.

Looking at OpenMPI 1.1a4r9780 (& openmpi-1.2a1r9780) I find the following:

./ompi/mpi/f77/intercomm_merge_f.c:

OMPI_GENERATE_F77_BINDINGS (PMPI_INTERCOMM_MERGE,
                           pmpi_intercomm_merge,
                           pmpi_intercomm_merge_,
                           pmpi_intercomm_merge__,
                           pmpi_intercomm_merge_f,
(MPI_Fint *intercomm, MPI_Flogical *high, MPI_Fint *newintercomm, MPI_Fint *ierr),
                           (intercomm, high, newintercomm, ierr) )

and

*ierr = MPI_Intercomm_merge (c_intercomm, OMPI_LOGICAL_2_INT (*high),
                                 &c_newcomm);

This implies to me that in Fortran the second argument should be a logical which makes sense.


But in ./ompi/mpi/f90/mpi-f90-interfaces.h, I find:
-------------
interface MPI_Intercomm_merge

subroutine MPI_Intercomm_merge(intercomm, high, newintercomm, ierr)
  include 'mpif.h'
  integer, intent(in) :: intercomm
  integer, intent(in) :: high
  integer, intent(out) :: newintercomm
  integer, intent(out) :: ierr
end subroutine MPI_Intercomm_merge

end interface MPI_Intercomm_merge
-------------
which I suspect is wrong or at least incomplete with regards to the second argument.

In which case the problem is also in ./ompi/mpi/f90/scripts/mpi-f90- interfaces.h.sh
----------
subroutine ${procedure}(intercomm, high, newintercomm, ierr)
  include 'mpif.h'
  integer, intent(in) :: intercomm
  integer, intent(in) :: high
  integer, intent(out) :: newintercomm
  integer, intent(out) :: ierr
end subroutine ${procedure}

EOF
}

start MPI_Intercomm_merge small
output_162 MPI_Intercomm_merge
end MPI_Intercomm_merge
-------------

Michael

ps. MPI_Comm_get_attr is fixed in both these versions.

Reply via email to