+ *
+ * Caller is responsible for keeping *communicator* valid for the life of SimulationContext,
+ * and then freeing the communicator, if appropriate.
+ *
+ * With an external MPI library (GMX_LIB_MPI==1), the client promises that
+ * gmx::init() has called MPI_Init and the provided communicator is valid to use.
+ * This communicator is "borrowed" (not duplicated) from the caller.
+ * Additional communicators may be split from the provided communicator
+ * during the life of the SimulationContext or its consumers.
+ *
+ * With thread-MPI, *communicator* must be MPI_COMM_NULL.
+ * 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.)
+ *
+ * \todo Refine distribution of environment management.
+ * There should be a context level at which only the current simulator directory matters,
+ * and a level above which encapsulates multisim details in a specialized type.