ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/io/DumpReader.cpp
(Generate patch)

Comparing trunk/src/io/DumpReader.cpp (file contents):
Revision 1796 by gezelter, Mon Sep 10 18:38:44 2012 UTC vs.
Revision 2069 by gezelter, Thu Mar 5 16:30:23 2015 UTC

# Line 35 | Line 35
35   *                                                                      
36   * [1]  Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).            
37   * [2]  Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).          
38 < * [3]  Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008).          
38 > * [3]  Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008).          
39   * [4]  Kuang & Gezelter,  J. Chem. Phys. 133, 164101 (2010).
40   * [5]  Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011).
41   */
# Line 43 | Line 43
43   #define _LARGEFILE_SOURCE64
44   #define _FILE_OFFSET_BITS 64
45  
46 + #ifdef IS_MPI
47 + #include <mpi.h>
48 + #endif
49 +
50   #include <sys/types.h>
51   #include <sys/stat.h>
52  
# Line 60 | Line 64
64   #include "utils/StringTokenizer.hpp"
65   #include "brains/Thermo.hpp"
66  
63 #ifdef IS_MPI
64 #include <mpi.h>
65 #endif
67  
67
68   namespace OpenMD {
69    
70    DumpReader::DumpReader(SimInfo* info, const std::string& filename)
# Line 103 | Line 103 | namespace OpenMD {
103   #ifdef IS_MPI
104      
105      if (worldRank == 0) {
106 < #endif
107 <      
106 > #endif
107 >
108        delete inFile_;
109        
110   #ifdef IS_MPI
# Line 128 | Line 128 | namespace OpenMD {
128    }
129    
130    void DumpReader::scanFile(void) {
131 <    int lineNo = 0;
131 >
132      std::streampos prevPos;
133      std::streampos  currPos;
134      
# Line 142 | Line 142 | namespace OpenMD {
142        bool foundOpenSnapshotTag = false;
143        bool foundClosedSnapshotTag = false;
144  
145 +      int lineNo = 0;
146        while(inFile_->getline(buffer, bufferSize)) {
147          ++lineNo;
148          
# Line 202 | Line 203 | namespace OpenMD {
203   #ifdef IS_MPI
204      }
205      
206 <    MPI::COMM_WORLD.Bcast(&nframes_, 1, MPI::INT, 0);
206 >    MPI_Bcast(&nframes_, 1, MPI_INT, 0, MPI_COMM_WORLD);
207      
208   #endif // is_mpi
209      
# Line 227 | Line 228 | namespace OpenMD {
228        needVel_ = false;
229      }
230      
231 <    if (storageLayout & DataStorage::dslAmat || storageLayout & DataStorage::dslElectroFrame) {
231 >    if (storageLayout & DataStorage::dslAmat ||
232 >        storageLayout & DataStorage::dslDipole ||
233 >        storageLayout & DataStorage::dslQuadrupole) {
234        needQuaternion_ = true;
235      } else {
236        needQuaternion_ = false;
# Line 242 | Line 245 | namespace OpenMD {
245      readSet(whichFrame);
246  
247      if (needCOMprops_) {
245      Snapshot* s = info_->getSnapshotManager()->getCurrentSnapshot();
248        Thermo thermo(info_);
249        Vector3d com;
250  
# Line 286 | Line 288 | namespace OpenMD {
288        }
289  
290        int sendBufferSize = sendBuffer.size();
291 <      MPI::COMM_WORLD.Bcast(&sendBufferSize, 1, MPI::INT, masterNode);    
292 <      MPI::COMM_WORLD.Bcast((void *)sendBuffer.c_str(), sendBufferSize,
293 <                            MPI::CHAR, masterNode);    
291 >      MPI_Bcast(&sendBufferSize, 1, MPI_INT, masterNode, MPI_COMM_WORLD);    
292 >      MPI_Bcast((void *)sendBuffer.c_str(), sendBufferSize,
293 >                MPI_CHAR, masterNode, MPI_COMM_WORLD);    
294        
295        sstream.str(sendBuffer);
296      } else {
297        int sendBufferSize;
298 <      MPI::COMM_WORLD.Bcast(&sendBufferSize, 1, MPI::INT, masterNode);
298 >      MPI_Bcast(&sendBufferSize, 1, MPI_INT, masterNode, MPI_COMM_WORLD);
299        char * recvBuffer = new char[sendBufferSize+1];
300        assert(recvBuffer);
301        recvBuffer[sendBufferSize] = '\0';
302 <      MPI::COMM_WORLD.Bcast(recvBuffer, sendBufferSize, MPI::CHAR, masterNode);
302 >      MPI_Bcast(recvBuffer, sendBufferSize, MPI_CHAR, masterNode, MPI_COMM_WORLD);
303        sstream.str(recvBuffer);
304        delete [] recvBuffer;
305      }      
# Line 505 | Line 507 | namespace OpenMD {
507             eField[1] = tokenizer.nextTokenAsDouble();
508             eField[2] = tokenizer.nextTokenAsDouble();          
509             sd->setElectricField(eField);          
510 +           break;
511 +        }
512 +        case 's' : {
513 +
514 +           RealType sPot;
515 +           sPot = tokenizer.nextTokenAsDouble();
516 +           sd->setSitePotential(sPot);          
517             break;
518          }
519          default: {
# Line 517 | Line 526 | namespace OpenMD {
526  
527        }
528      }
520    
529    }
530    
531  
# Line 525 | Line 533 | namespace OpenMD {
533  
534      StringTokenizer tokenizer(line);
535      int nTokens;
536 <    
536 >        
537      nTokens = tokenizer.countTokens();
538      
539      if (nTokens < 2) {  
# Line 557 | Line 565 | namespace OpenMD {
565      if (i >> siteIndex) {
566        // chew up this token and parse as an int:
567        siteIndex = tokenizer.nextTokenAsInt();
568 <      RigidBody* rb = static_cast<RigidBody*>(sd);
569 <      sd = rb->getAtoms()[siteIndex];
568 >
569 >      if (sd->isRigidBody()) {
570 >        RigidBody* rb = static_cast<RigidBody*>(sd);
571 >        sd = rb->getAtoms()[siteIndex];
572 >      }
573      }
574  
575      /**
# Line 607 | Line 618 | namespace OpenMD {
618          sd->setElectricField(eField);          
619          break;
620        }
621 +      case 's' : {
622 +        
623 +        RealType sPot;
624 +        sPot = tokenizer.nextTokenAsDouble();
625 +        sd->setSitePotential(sPot);          
626 +        break;
627 +      }
628        default: {
629          sprintf(painCave.errMsg,
630                  "DumpReader Error: %s is an unrecognized type\n", type.c_str());
# Line 619 | Line 637 | namespace OpenMD {
637    }
638    
639    
640 <  void  DumpReader::readStuntDoubles(std::istream& inputStream) {
640 >    void  DumpReader::readStuntDoubles(std::istream& inputStream) {
641      
642      inputStream.getline(buffer, bufferSize);
643      std::string line(buffer);
# Line 645 | Line 663 | namespace OpenMD {
663  
664    void  DumpReader::readSiteData(std::istream& inputStream) {
665  
648    inputStream.getline(buffer, bufferSize);
666      std::string line(buffer);
650    
651    if (line.find("<SiteData>") == std::string::npos) {
652      // site data isn't required for a simulation, so skip
653      return;
654    }
667  
668 +    // We already found the starting <SiteData> tag or we wouldn't be
669 +    // here, so just start parsing until we get to the ending
670 +    // </SiteData> tag:
671 +    
672      while(inputStream.getline(buffer, bufferSize)) {
673        line = buffer;
674        

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines