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

Comparing trunk/src/brains/BlockSnapshotManager.cpp (file contents):
Revision 1782 by gezelter, Wed Aug 22 02:28:28 2012 UTC vs.
Revision 1965 by gezelter, Fri Jan 24 13:53:41 2014 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 67 | Line 67 | namespace OpenMD {
67        // RealType avaliablePhysMem = physMem - rssMem;
68      
69        int bytesPerStuntDouble = DataStorage::getBytesPerStuntDouble(storageLayout);
70 <      int bytesPerFrame = (nRigidBodies_ + nAtoms_) * bytesPerStuntDouble;
70 >      int bytesPerCutoffGroup = DataStorage::getBytesPerStuntDouble(DataStorage::dslPosition);
71 >      int bytesPerFrame = (nRigidBodies_ + nAtoms_) * bytesPerStuntDouble
72 >        + nCutoffGroups_ * bytesPerCutoffGroup;
73  
74        // total number of frames that can fit in memory
75        //RealType frameCapacity = avaliablePhysMem / bytesPerFrame;
# Line 76 | Line 78 | namespace OpenMD {
78        // number of frames in each block given the need to hold multiple blocks
79        // in memory at the same time:
80        nSnapshotPerBlock_ = int(frameCapacity) / blockCapacity_;
81 +      if (nSnapshotPerBlock_ <= 0) {
82 +       std::cerr << "not enough memory to hold two configs!" << std::endl;
83 +      }
84        reader_ = new DumpReader(info, filename);
85        nframes_ = reader_->getNFrames();
86        int nblocks = nframes_ / nSnapshotPerBlock_;
# Line 99 | Line 104 | namespace OpenMD {
104        //std::cout << "Memory available for OpenMD:\t" << (unsigned long)avaliablePhysMem << " bytes" <<std::endl;
105        std::cout << "Memory requested for OpenMD:\t" << (unsigned long)memSize_ << " bytes" <<std::endl;
106        std::cout << "      Bytes per StuntDouble:\t" << (unsigned long)bytesPerStuntDouble <<std::endl;
107 +      std::cout << "     Bytes per Cutoff Group:\t" << (unsigned long)bytesPerCutoffGroup <<std::endl;
108        std::cout << "            Bytes per Frame:\t" << (unsigned long)bytesPerFrame <<std::endl;
109        std::cout << "             Frame Capacity:\t" << (unsigned long)frameCapacity <<std::endl;
110        std::cout << "       Frames in trajectory:\t" << (unsigned long)nframes_ <<std::endl;
# Line 175 | Line 181 | namespace OpenMD {
181          //in case, unloadBlock called multiple times
182          activeRefCount_[i - activeBlocks_.begin()]  = 0;
183        }
184 +
185 +      if (activeRefCount_[i-activeBlocks_.begin()] == 0) {
186 +        internalUnload(block);
187 +      }
188          
189        unloadSuccess = true;
190      } else {
# Line 198 | Line 208 | namespace OpenMD {
208    }
209  
210    void BlockSnapshotManager::internalUnload(int block) {
211 +    std::cerr << "called internal unload for block "<< block << "\n";
212      for (int i = blocks_[block].first; i < blocks_[block].second; ++i) {
213        delete snapshots_[i];
214        snapshots_[i] = NULL;
# Line 225 | Line 236 | namespace OpenMD {
236    }
237  
238    Snapshot* BlockSnapshotManager::loadFrame(int frame){
239 <    Snapshot* snapshot = new Snapshot(nAtoms_, nRigidBodies_, nCutoffGroups_, getStorageLayout());
239 >    Snapshot* snapshot = new Snapshot(nAtoms_, nRigidBodies_, nCutoffGroups_,
240 >                                      getStorageLayout());
241      snapshot->setID(frame);
242      snapshot->clearDerivedProperties();
243      
232    /** @todo fixed me */
233    Snapshot* oldSnapshot = currentSnapshot_;
244      currentSnapshot_ = snapshot;  
245      reader_->readFrame(frame);
246  
237    // What was this for?  It doesn't make sense!
238    //currentSnapshot_ = oldSnapshot;
239
247      return snapshot;
248    }
249  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines