# | Line 36 | Line 36 | |
---|---|---|
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). | |
39 | < | * [4] Vardeman & Gezelter, in progress (2009). |
39 | > | * [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010). |
40 | > | * [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011). |
41 | */ | |
42 | #include <algorithm> | |
43 | #include "brains/BlockSnapshotManager.hpp" | |
44 | < | #include "utils/residentMem.h" |
45 | < | #include "utils/physmem.h" |
44 | > | //#include "utils/residentMem.h" |
45 | > | //#include "utils/physmem.h" |
46 | #include "utils/Algorithm.hpp" | |
47 | #include "brains/SimInfo.hpp" | |
48 | #include "io/DumpReader.hpp" | |
49 | ||
50 | namespace OpenMD { | |
51 | < | BlockSnapshotManager::BlockSnapshotManager(SimInfo* info, const std::string& filename, |
52 | < | int storageLayout, int blockCapacity) |
53 | < | : SnapshotManager(storageLayout), info_(info), blockCapacity_(blockCapacity), |
54 | < | activeBlocks_(blockCapacity_, -1), activeRefCount_(blockCapacity_, 0) { |
51 | > | BlockSnapshotManager::BlockSnapshotManager(SimInfo* info, |
52 | > | const std::string& filename, |
53 | > | int storageLayout, |
54 | > | long long int memSize, |
55 | > | int blockCapacity) |
56 | > | : SnapshotManager(storageLayout), info_(info), memSize_(memSize), |
57 | > | blockCapacity_(blockCapacity), activeBlocks_(blockCapacity_, -1), |
58 | > | activeRefCount_(blockCapacity_, 0) { |
59 | ||
60 | nAtoms_ = info->getNGlobalAtoms(); | |
61 | nRigidBodies_ = info->getNGlobalRigidBodies(); | |
62 | + | nCutoffGroups_ = info->getNCutoffGroups(); |
63 | ||
64 | < | RealType physMem = physmem_total(); |
65 | < | RealType rssMem = residentMem(); |
66 | < | RealType avaliablePhysMem = physMem - rssMem; |
67 | < | |
64 | > | // eliminate suspect calls to figure out free memory: |
65 | > | // RealType physMem = physmem_total(); |
66 | > | // RealType rssMem = residentMem(); |
67 | > | // RealType avaliablePhysMem = physMem - rssMem; |
68 | ||
69 | int bytesPerStuntDouble = DataStorage::getBytesPerStuntDouble(storageLayout); | |
64 | – | |
70 | int bytesPerFrame = (nRigidBodies_ + nAtoms_) * bytesPerStuntDouble; | |
71 | ||
72 | // total number of frames that can fit in memory | |
73 | < | RealType frameCapacity = avaliablePhysMem / bytesPerFrame; |
73 | > | //RealType frameCapacity = avaliablePhysMem / bytesPerFrame; |
74 | > | RealType frameCapacity = (RealType) memSize_ / (RealType) bytesPerFrame; |
75 | ||
76 | // number of frames in each block given the need to hold multiple blocks | |
77 | // in memory at the same time: | |
# | Line 88 | Line 94 | namespace OpenMD { | |
94 | std::cout << "-----------------------------------------------------"<<std::endl; | |
95 | std::cout << "BlockSnapshotManager memory report:" << std::endl; | |
96 | std::cout << "\n"; | |
97 | < | std::cout << " Physical Memory available:\t" << (unsigned long)physMem << " bytes" <<std::endl; |
98 | < | std::cout << " Resident Memory in use:\t" << (unsigned long)rssMem << " bytes" <<std::endl; |
99 | < | std::cout << "Memory available for OpenMD:\t" << (unsigned long)avaliablePhysMem << " bytes" <<std::endl; |
97 | > | // std::cout << " Physical Memory available:\t" << (unsigned long)physMem << " bytes" <<std::endl; |
98 | > | //std::cout << " Resident Memory in use:\t" << (unsigned long)rssMem << " bytes" <<std::endl; |
99 | > | //std::cout << "Memory available for OpenMD:\t" << (unsigned long)avaliablePhysMem << " bytes" <<std::endl; |
100 | > | std::cout << "Memory requested for OpenMD:\t" << (unsigned long)memSize_ << " bytes" <<std::endl; |
101 | std::cout << " Bytes per StuntDouble:\t" << (unsigned long)bytesPerStuntDouble <<std::endl; | |
102 | std::cout << " Bytes per Frame:\t" << (unsigned long)bytesPerFrame <<std::endl; | |
103 | std::cout << " Frame Capacity:\t" << (unsigned long)frameCapacity <<std::endl; | |
# | Line 144 | Line 151 | namespace OpenMD { | |
151 | //if number of active blocks is less than the block capacity, just load it | |
152 | internalLoad(block); | |
153 | loadSuccess = true; | |
154 | < | } else if (hasZeroRefBlock() > 0) { |
154 | > | } else if ( hasZeroRefBlock() ) { |
155 | //if already reach the block capacity, need to unload a block with 0 reference | |
156 | int zeroRefBlock = getFirstZeroRefBlock(); | |
157 | assert(zeroRefBlock != -1); | |
# | Line 218 | Line 225 | namespace OpenMD { | |
225 | } | |
226 | ||
227 | Snapshot* BlockSnapshotManager::loadFrame(int frame){ | |
228 | < | Snapshot* snapshot = new Snapshot(nAtoms_, nRigidBodies_, getStorageLayout()); |
228 | > | Snapshot* snapshot = new Snapshot(nAtoms_, nRigidBodies_, nCutoffGroups_, getStorageLayout()); |
229 | snapshot->setID(frame); | |
230 | + | snapshot->clearDerivedProperties(); |
231 | ||
232 | /** @todo fixed me */ | |
233 | Snapshot* oldSnapshot = currentSnapshot_; |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |