Fix task assignment with multiruns
[alexxy/gromacs.git] / src / gromacs / mdrun / simulationcontext.h
index 6833d8d231c1c84a11bc4f9d3cbf57bbd2bf06f6..717b4f30a9f943488c153184fe6bdcdcee7549d2 100644 (file)
@@ -108,10 +108,26 @@ public:
     /*!
      * \brief Construct
      *
-     * \param communicator            MPI communicator for this (set of) simulations
+     * \param worldCommunicator       MPI communicator for this simulation context
      * \param multiSimDirectoryNames  Names of any directories used with -multidir
      */
-    explicit SimulationContext(MPI_Comm communicator, ArrayRef<const std::string> multiSimDirectoryNames);
+    explicit SimulationContext(MPI_Comm                    worldCommunicator,
+                               ArrayRef<const std::string> multiSimDirectoryNames);
+
+    /*!
+     * \brief MPI communicator object for this GROMACS instance.
+     *
+     * With real MPI,
+     *   the gmx wrapper binary has called MPI_Init, thus
+     *     MPI_COMM_WORLD is now valid to use, and
+     *   (in future) the gmxapi runner will handle such details
+     *     (e.g. via mpi4py) before creating its SimulationContext.
+     *
+     * With thread-MPI in both cases, the communicator is set up later
+     * during the process of spawning the threads that will be the MPI
+     * ranks. (Multi-simulation is not supported with thread-MPI.)
+     */
+    MPI_Comm worldCommunicator_ = MPI_COMM_NULL;
 
     /*!
      * \brief MPI communicator object for this simulation object.
@@ -121,18 +137,12 @@ public:
      *     MPI_COMM_WORLD is now valid to use, and
      *   (in future) the gmxapi runner will handle such details
      *     (e.g. via mpi4py) before creating its SimulationContext.
-     * In both cases, if a multi-simulation is in use, then its
-     * communicator(s) are found in multiSimulation_. This
-     * communicator is that of all ranks from all simulations, and
-     * will later be split into one for each simulation.
-     * TODO Perhaps (for simplicity) that communicator splitting
-     * task can be undertaken during multi-sim setup.
      *
      * With thread-MPI in both cases, the communicator is set up later
      * during the process of spawning the threads that will be the MPI
      * ranks. (Multi-simulation is not supported with thread-MPI.)
      */
-    MPI_Comm communicator_ = MPI_COMM_NULL;
+    MPI_Comm simulationCommunicator_ = MPI_COMM_NULL;
 
     /*!
      * \brief Multi-sim handler (if required by e.g. gmx mdrun