--- trunk/src/io/DumpReader.cpp 2013/06/16 15:15:42 1879 +++ trunk/src/io/DumpReader.cpp 2014/05/31 22:35:05 2000 @@ -43,6 +43,10 @@ #define _LARGEFILE_SOURCE64 #define _FILE_OFFSET_BITS 64 +#ifdef IS_MPI +#include +#endif + #include #include @@ -60,11 +64,7 @@ #include "utils/StringTokenizer.hpp" #include "brains/Thermo.hpp" -#ifdef IS_MPI -#include -#endif - namespace OpenMD { DumpReader::DumpReader(SimInfo* info, const std::string& filename) @@ -103,9 +103,9 @@ namespace OpenMD { #ifdef IS_MPI if (worldRank == 0) { -#endif - - delete inFile_; +#endif + + inFile_->~istream(); #ifdef IS_MPI @@ -203,7 +203,7 @@ namespace OpenMD { #ifdef IS_MPI } - MPI::COMM_WORLD.Bcast(&nframes_, 1, MPI::INT, 0); + MPI_Bcast(&nframes_, 1, MPI_INT, 0, MPI_COMM_WORLD); #endif // is_mpi @@ -289,18 +289,18 @@ namespace OpenMD { } int sendBufferSize = sendBuffer.size(); - MPI::COMM_WORLD.Bcast(&sendBufferSize, 1, MPI::INT, masterNode); - MPI::COMM_WORLD.Bcast((void *)sendBuffer.c_str(), sendBufferSize, - MPI::CHAR, masterNode); + MPI_Bcast(&sendBufferSize, 1, MPI_INT, masterNode, MPI_COMM_WORLD); + MPI_Bcast((void *)sendBuffer.c_str(), sendBufferSize, + MPI_CHAR, masterNode, MPI_COMM_WORLD); sstream.str(sendBuffer); } else { int sendBufferSize; - MPI::COMM_WORLD.Bcast(&sendBufferSize, 1, MPI::INT, masterNode); + MPI_Bcast(&sendBufferSize, 1, MPI_INT, masterNode, MPI_COMM_WORLD); char * recvBuffer = new char[sendBufferSize+1]; assert(recvBuffer); recvBuffer[sendBufferSize] = '\0'; - MPI::COMM_WORLD.Bcast(recvBuffer, sendBufferSize, MPI::CHAR, masterNode); + MPI_Bcast(recvBuffer, sendBufferSize, MPI_CHAR, masterNode, MPI_COMM_WORLD); sstream.str(recvBuffer); delete [] recvBuffer; } @@ -508,6 +508,13 @@ namespace OpenMD { eField[1] = tokenizer.nextTokenAsDouble(); eField[2] = tokenizer.nextTokenAsDouble(); sd->setElectricField(eField); + break; + } + case 's' : { + + RealType sPot; + sPot = tokenizer.nextTokenAsDouble(); + sd->setSitePotential(sPot); break; } default: { @@ -520,7 +527,6 @@ namespace OpenMD { } } - } @@ -560,8 +566,11 @@ namespace OpenMD { if (i >> siteIndex) { // chew up this token and parse as an int: siteIndex = tokenizer.nextTokenAsInt(); - RigidBody* rb = static_cast(sd); - sd = rb->getAtoms()[siteIndex]; + + if (sd->isRigidBody()) { + RigidBody* rb = static_cast(sd); + sd = rb->getAtoms()[siteIndex]; + } } /** @@ -610,6 +619,13 @@ namespace OpenMD { sd->setElectricField(eField); break; } + case 's' : { + + RealType sPot; + sPot = tokenizer.nextTokenAsDouble(); + sd->setSitePotential(sPot); + break; + } default: { sprintf(painCave.errMsg, "DumpReader Error: %s is an unrecognized type\n", type.c_str()); @@ -622,7 +638,7 @@ namespace OpenMD { } - void DumpReader::readStuntDoubles(std::istream& inputStream) { + void DumpReader::readStuntDoubles(std::istream& inputStream) { inputStream.getline(buffer, bufferSize); std::string line(buffer);