| 306 | 
  | 
    } | 
| 307 | 
  | 
     | 
| 308 | 
  | 
    const int masterNode = 0; | 
| 309 | 
< | 
 | 
| 309 | 
> | 
    int nProc; | 
| 310 | 
> | 
    MPI_Comm_size(MPI_COMM_WORLD, &nProc); | 
| 311 | 
  | 
    if (worldRank == masterNode) {       | 
| 312 | 
  | 
      os << "  <Snapshot>\n";    | 
| 313 | 
  | 
      writeFrameProperties(os, info_->getSnapshotManager()->getCurrentSnapshot()); | 
| 315 | 
  | 
         | 
| 316 | 
  | 
      os << buffer; | 
| 317 | 
  | 
 | 
| 318 | 
< | 
      int nProc; | 
| 318 | 
< | 
      MPI_Comm_size(MPI_COMM_WORLD, &nProc); | 
| 318 | 
> | 
      | 
| 319 | 
  | 
      for (int i = 1; i < nProc; ++i) { | 
| 320 | 
  | 
 | 
| 321 | 
  | 
        // receive the length of the string buffer that was | 
| 322 | 
  | 
        // prepared by processor i | 
| 323 | 
< | 
 | 
| 323 | 
> | 
        | 
| 324 | 
> | 
        MPI_Bcast(&i, 1, MPI_INT,masterNode,MPI_COMM_WORLD); | 
| 325 | 
  | 
        int recvLength; | 
| 326 | 
  | 
        MPI_Recv(&recvLength, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &istatus); | 
| 327 | 
  | 
        char* recvBuffer = new char[recvLength]; | 
| 338 | 
  | 
      os.flush(); | 
| 339 | 
  | 
    } else { | 
| 340 | 
  | 
      int sendBufferLength = buffer.size() + 1; | 
| 341 | 
< | 
      MPI_Send(&sendBufferLength, 1, MPI_INT, masterNode, 0, MPI_COMM_WORLD); | 
| 342 | 
< | 
      MPI_Send((void *)buffer.c_str(), sendBufferLength, MPI_CHAR, masterNode, 0, MPI_COMM_WORLD); | 
| 341 | 
> | 
      int myturn = 0; | 
| 342 | 
> | 
      for (int i = 1; i < nProc; ++i){ | 
| 343 | 
> | 
        MPI_Bcast(&myturn,1, MPI_INT,masterNode,MPI_COMM_WORLD); | 
| 344 | 
> | 
        if (myturn == worldRank){ | 
| 345 | 
> | 
          MPI_Send(&sendBufferLength, 1, MPI_INT, masterNode, 0, MPI_COMM_WORLD); | 
| 346 | 
> | 
          MPI_Send((void *)buffer.c_str(), sendBufferLength, MPI_CHAR, masterNode, 0, MPI_COMM_WORLD); | 
| 347 | 
> | 
        } | 
| 348 | 
> | 
      } | 
| 349 | 
  | 
    } | 
| 350 | 
  | 
 | 
| 351 | 
  | 
#endif // is_mpi |