--- trunk/src/io/RestWriter.cpp 2010/01/20 16:04:40 1407 +++ trunk/src/io/RestWriter.cpp 2014/02/26 14:14:50 1969 @@ -35,10 +35,14 @@ * * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005). * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006). - * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008). - * [4] Vardeman & Gezelter, in progress (2009). + * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008). + * [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010). + * [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011). */ +#ifdef IS_MPI +#include +#endif #include #include @@ -47,9 +51,6 @@ #include "io/RestWriter.hpp" #include "utils/simError.h" #include "brains/SnapshotManager.hpp" -#ifdef IS_MPI -#include -#endif namespace OpenMD { RestWriter::RestWriter(SimInfo* info, const std::string& filename, @@ -77,7 +78,7 @@ namespace OpenMD { #ifdef IS_MPI - MPI_Status istatus; + MPI_Status* istatus; #endif #ifndef IS_MPI @@ -148,19 +149,20 @@ namespace OpenMD { (*output_) << buffer; int nProc; - MPI_Comm_size(MPI_COMM_WORLD, &nProc); + MPI_Comm_size( MPI_COMM_WORLD, &nProc); + for (int i = 1; i < nProc; ++i) { // receive the length of the string buffer that was // prepared by processor i int recvLength; - MPI_Recv(&recvLength, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &istatus); + MPI_Recv(&recvLength, 1, MPI_INT, i, 0, MPI_COMM_WORLD, istatus); char* recvBuffer = new char[recvLength]; if (recvBuffer == NULL) { } else { - MPI_Recv(recvBuffer, recvLength, MPI_CHAR, i, 0, MPI_COMM_WORLD, - &istatus); + MPI_Recv(recvBuffer, recvLength, MPI_CHAR, i, 0, MPI_COMM_WORLD, + istatus); (*output_) << recvBuffer; delete [] recvBuffer; } @@ -169,8 +171,8 @@ namespace OpenMD { } else { int sendBufferLength = buffer.size() + 1; MPI_Send(&sendBufferLength, 1, MPI_INT, masterNode, 0, MPI_COMM_WORLD); - MPI_Send((void *)buffer.c_str(), sendBufferLength, MPI_CHAR, masterNode, - 0, MPI_COMM_WORLD); + MPI_Send((void *)buffer.c_str(), sendBufferLength, MPI_CHAR, + masterNode, 0, MPI_COMM_WORLD); } #endif // is_mpi @@ -180,7 +182,7 @@ namespace OpenMD { void RestWriter::writeRest(std::vector > restInfo) { #ifdef IS_MPI - MPI_Status istatus; + MPI_Status* istatus; #endif #ifndef IS_MPI @@ -224,19 +226,19 @@ namespace OpenMD { (*output_) << buffer; int nProc; - MPI_Comm_size(MPI_COMM_WORLD, &nProc); + MPI_Comm_size( MPI_COMM_WORLD, &nProc); for (int i = 1; i < nProc; ++i) { // receive the length of the string buffer that was // prepared by processor i int recvLength; - MPI_Recv(&recvLength, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &istatus); + MPI_Recv(&recvLength, 1, MPI_INT, i, 0, MPI_COMM_WORLD, istatus); char* recvBuffer = new char[recvLength]; if (recvBuffer == NULL) { } else { - MPI_Recv(recvBuffer, recvLength, MPI_CHAR, i, 0, MPI_COMM_WORLD, - &istatus); + MPI_Recv(recvBuffer, recvLength, MPI_CHAR, i, 0, MPI_COMM_WORLD, + istatus); (*output_) << recvBuffer; delete [] recvBuffer; @@ -246,8 +248,8 @@ namespace OpenMD { } else { int sendBufferLength = buffer.size() + 1; MPI_Send(&sendBufferLength, 1, MPI_INT, masterNode, 0, MPI_COMM_WORLD); - MPI_Send((void *)buffer.c_str(), sendBufferLength, MPI_CHAR, masterNode, - 0, MPI_COMM_WORLD); + MPI_Send((void *)buffer.c_str(), sendBufferLength, + MPI_CHAR, masterNode, 0, MPI_COMM_WORLD); } #endif // is_mpi }