TimeSeriesHDF5: The MPI_Info_create() function was called before MPI_INIT was invoked.

Issue #237 resolved
Nico Schlömer created an issue

When Dolfin is compiled with MPI, the code

from dolfin import *
comm = mpi_comm_self()
tst = TimeSeriesHDF5(comm, 'lossless_T')

together with the attached file generates the error message

*** The MPI_Info_create() function was called before MPI_INIT was invoked.
*** This is disallowed by the MPI standard.
*** Your MPI job will now abort.
[fuji:4901] Abort before MPI_INIT completed successfully; not able to guarantee that all other processes were killed!

My active packages are

-- The following optional packages were found:
-- -------------------------------------------
-- (OK) OPENMP
-- (OK) MPI
-- (OK) PETSC
-- (OK) SCOTCH
-- (OK) ZLIB
-- (OK) PYTHON
-- (OK) HDF5
-- (OK) VTK
-- (OK) QT
-- 
-- The following optional packages were not found:
-- -----------------------------------------------
-- (**) PETSC4PY
-- (**) SLEPC
-- (**) TAO
-- (**) TRILINOS
-- (**) UMFPACK
-- (**) CHOLMOD
-- (**) PASTIX
-- (**) PARMETIS
-- (**) CGAL
-- (**) SPHINX

Comments (11)

  1. Nico Schlömer reporter

    Adding

    UnitIntervalMesh(1)
    

    before the TimeSeriesHDF5(...) call works around the bug.

  2. Mikael Mortensen

    I cannot reproduce this on ubuntu 13.10. I have all packages except tao, sphinx and pastix.

  3. Nico Schlömer reporter

    This is still reproducible on latest master. FWIW, the error occurs in HDF5Interface::open_file at the MPI_Info_create() call. I don't see where MPI_Init is called. Maybe the error doesn't show for you because on your machine, either of use_mpi_io and HAS_MPI is false.

  4. Nico Schlömer reporter

    @chris_richardson You added the HAS_MPI guards; could you take a look at where MPI_Init was omitted?

  5. Chris Richardson

    It crashes for me too. I guess this refers back to the thorny issue (discussed on the mailing list) of where and when MPI_Init() should be called, in general. Of course, we can just add a call to SubsystemsManager::init_mpi() in the constructor of TimeSeriesHDF5. Mostly (e.g. if you make a Mesh etc.) it will already be initialised anyway.

  6. Log in to comment