--- trunk/src/brains/DataStorage.cpp 2012/08/31 21:16:10 1793 +++ trunk/src/brains/DataStorage.cpp 2015/03/05 16:30:23 2069 @@ -35,7 +35,7 @@ * * [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). + * [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). */ @@ -44,7 +44,6 @@ * @file DataStorage.cpp * @author tlin * @date 10/26/2004 - * @time 11:56am * @version 1.0 */ @@ -56,12 +55,12 @@ namespace OpenMD { } - DataStorage::DataStorage(int size, int storageLayout) : size_(size){ + DataStorage::DataStorage(std::size_t size, int storageLayout) : size_(size){ setStorageLayout(storageLayout); resize(size); } - int DataStorage::getSize() { + std::size_t DataStorage::getSize() { if (storageLayout_ & dslPosition && position.size() != size_) { //error @@ -73,6 +72,11 @@ namespace OpenMD { cerr << "size does not match"<< endl; } + if (storageLayout_ & dslForce && force.size() != size_) { + //error + cerr << "size does not match"<< endl; + } + if (storageLayout_ & dslAmat && aMat.size() != size_) { //error cerr << "size does not match"<< endl; @@ -83,37 +87,37 @@ namespace OpenMD { cerr << "size does not match"<< endl; } - if (storageLayout_ & dslElectroFrame && electroFrame.size() != size_) { + if (storageLayout_ & dslTorque && torque.size() != size_) { //error cerr << "size does not match"<< endl; } - if (storageLayout_ & dslForce && force.size() != size_) { + if (storageLayout_ & dslParticlePot && particlePot.size() != size_) { //error cerr << "size does not match"<< endl; } - if (storageLayout_ & dslTorque && torque.size() != size_) { + if (storageLayout_ & dslDensity && density.size() != size_) { //error cerr << "size does not match"<< endl; } - if (storageLayout_ & dslParticlePot && particlePot.size() != size_) { + if (storageLayout_ & dslFunctional && functional.size() != size_) { //error cerr << "size does not match"<< endl; } - if (storageLayout_ & dslDensity && density.size() != size_) { + if (storageLayout_ & dslFunctionalDerivative && functionalDerivative.size() != size_) { //error cerr << "size does not match"<< endl; } - if (storageLayout_ & dslFunctional && functional.size() != size_) { + if (storageLayout_ & dslDipole && dipole.size() != size_) { //error cerr << "size does not match"<< endl; } - if (storageLayout_ & dslFunctionalDerivative && functionalDerivative.size() != size_) { + if (storageLayout_ & dslQuadrupole && quadrupole.size() != size_) { //error cerr << "size does not match"<< endl; } @@ -142,12 +146,17 @@ namespace OpenMD { //error cerr << "size does not match"<< endl; } + + if (storageLayout_ & dslSitePotential && sitePotential.size() != size_) { + //error + cerr << "size does not match"<< endl; + } return size_; } - void DataStorage::resize(int newSize) { + void DataStorage::resize(std::size_t newSize) { if (storageLayout_ & dslPosition) { internalResize(position, newSize); @@ -157,6 +166,10 @@ namespace OpenMD { internalResize(velocity, newSize); } + if (storageLayout_ & dslForce) { + internalResize(force, newSize); + } + if (storageLayout_ & dslAmat) { internalResize(aMat, newSize); } @@ -164,15 +177,7 @@ namespace OpenMD { if (storageLayout_ & dslAngularMomentum) { internalResize(angularMomentum, newSize); } - - if (storageLayout_ & dslElectroFrame) { - internalResize(electroFrame, newSize); - } - if (storageLayout_ & dslForce) { - internalResize(force, newSize); - } - if (storageLayout_ & dslTorque) { internalResize(torque, newSize); } @@ -193,6 +198,14 @@ namespace OpenMD { internalResize(functionalDerivative, newSize); } + if (storageLayout_ & dslDipole) { + internalResize(dipole, newSize); + } + + if (storageLayout_ & dslQuadrupole) { + internalResize(quadrupole, newSize); + } + if (storageLayout_ & dslElectricField) { internalResize(electricField, newSize); } @@ -213,10 +226,14 @@ namespace OpenMD { internalResize(flucQFrc, newSize); } + if (storageLayout_ & dslSitePotential) { + internalResize(sitePotential, newSize); + } + size_ = newSize; } - void DataStorage::reserve(int size) { + void DataStorage::reserve(std::size_t size) { if (storageLayout_ & dslPosition) { position.reserve(size); } @@ -225,6 +242,10 @@ namespace OpenMD { velocity.reserve(size); } + if (storageLayout_ & dslForce) { + force.reserve(size); + } + if (storageLayout_ & dslAmat) { aMat.reserve(size); } @@ -233,14 +254,6 @@ namespace OpenMD { angularMomentum.reserve(size); } - if (storageLayout_ & dslElectroFrame) { - electroFrame.reserve(size); - } - - if (storageLayout_ & dslForce) { - force.reserve(size); - } - if (storageLayout_ & dslTorque) { torque.reserve(size); } @@ -261,6 +274,14 @@ namespace OpenMD { functionalDerivative.reserve(size); } + if (storageLayout_ & dslDipole) { + dipole.reserve(size); + } + + if (storageLayout_ & dslQuadrupole) { + quadrupole.reserve(size); + } + if (storageLayout_ & dslElectricField) { electricField.reserve(size); } @@ -280,9 +301,13 @@ namespace OpenMD { if (storageLayout_ & dslFlucQForce) { flucQFrc.reserve(size); } + + if (storageLayout_ & dslSitePotential) { + sitePotential.reserve(size); + } } - void DataStorage::copy(int source, int num, int target) { + void DataStorage::copy(int source, std::size_t num, std::size_t target) { if (num + target > size_ ) { //error } @@ -295,6 +320,10 @@ namespace OpenMD { internalCopy(velocity, source, num, target); } + if (storageLayout_ & dslForce) { + internalCopy(force, source, num, target); + } + if (storageLayout_ & dslAmat) { internalCopy(aMat, source, num, target); } @@ -303,14 +332,6 @@ namespace OpenMD { internalCopy(angularMomentum, source, num, target); } - if (storageLayout_ & dslElectroFrame) { - internalCopy(electroFrame, source, num, target); - } - - if (storageLayout_ & dslForce) { - internalCopy(force, source, num, target); - } - if (storageLayout_ & dslTorque) { internalCopy(torque, source, num, target); } @@ -331,6 +352,14 @@ namespace OpenMD { internalCopy(functionalDerivative, source, num, target); } + if (storageLayout_ & dslDipole) { + internalCopy(dipole, source, num, target); + } + + if (storageLayout_ & dslQuadrupole) { + internalCopy(quadrupole, source, num, target); + } + if (storageLayout_ & dslElectricField) { internalCopy(electricField, source, num, target); } @@ -349,6 +378,10 @@ namespace OpenMD { if (storageLayout_ & dslFlucQForce) { internalCopy(flucQFrc, source, num, target); } + + if (storageLayout_ & dslSitePotential) { + internalCopy(sitePotential, source, num, target); + } } int DataStorage::getStorageLayout() { @@ -369,18 +402,15 @@ namespace OpenMD { case dslVelocity: return internalGetArrayPointer(velocity); + case dslForce: + return internalGetArrayPointer(force); + case dslAmat: return internalGetArrayPointer(aMat); case dslAngularMomentum: return internalGetArrayPointer(angularMomentum); - case dslElectroFrame: - return internalGetArrayPointer(electroFrame); - - case dslForce: - return internalGetArrayPointer(force); - case dslTorque: return internalGetArrayPointer(torque); @@ -395,6 +425,12 @@ namespace OpenMD { case dslFunctionalDerivative: return internalGetArrayPointer(functionalDerivative); + + case dslDipole: + return internalGetArrayPointer(dipole); + + case dslQuadrupole: + return internalGetArrayPointer(quadrupole); case dslElectricField: return internalGetArrayPointer(electricField); @@ -411,23 +447,25 @@ namespace OpenMD { case dslFlucQForce: return internalGetArrayPointer(flucQFrc); + case dslSitePotential: + return internalGetArrayPointer(sitePotential); + default: //error message return NULL; - } } RealType* DataStorage::internalGetArrayPointer(std::vector& v) { - if (v.size() == 0) { + if (v.empty()) { return NULL; } else { return v[0].getArrayPointer(); } } - RealType* DataStorage::internalGetArrayPointer(std::vector& v) { - if (v.size() == 0) { + RealType* DataStorage::internalGetArrayPointer(std::vector& v) { + if (v.empty()) { return NULL; } else { return v[0].getArrayPointer(); @@ -436,7 +474,7 @@ namespace OpenMD { } RealType* DataStorage::internalGetArrayPointer(std::vector& v) { - if (v.size() == 0) { + if (v.empty()) { return NULL; } else { return &(v[0]); @@ -445,8 +483,8 @@ namespace OpenMD { } template - void DataStorage::internalResize(std::vector& v, int newSize){ - int oldSize = v.size(); + void DataStorage::internalResize(std::vector& v, std::size_t newSize){ + std::size_t oldSize = v.size(); if (oldSize == newSize) { return; @@ -461,7 +499,8 @@ namespace OpenMD { } template - void DataStorage::internalCopy(std::vector& v, int source, int num, int target) { + void DataStorage::internalCopy(std::vector& v, int source, + std::size_t num, std::size_t target) { typename std::vector::iterator first; typename std::vector::iterator last; typename std::vector::iterator result; @@ -478,26 +517,23 @@ namespace OpenMD { std::copy(first, last, result); } - int DataStorage::getBytesPerStuntDouble(int layout) { - int bytes = 0; + std::size_t DataStorage::getBytesPerStuntDouble(int layout) { + std::size_t bytes = 0; if (layout & dslPosition) { bytes += sizeof(Vector3d); } if (layout & dslVelocity) { bytes += sizeof(Vector3d); } + if (layout & dslForce) { + bytes += sizeof(Vector3d); + } if (layout & dslAmat) { bytes += sizeof(RotMat3x3d); } if (layout & dslAngularMomentum) { bytes += sizeof(Vector3d); } - if (layout & dslElectroFrame) { - bytes += sizeof(Mat3x3d); - } - if (layout & dslForce) { - bytes += sizeof(Vector3d); - } if (layout & dslTorque) { bytes += sizeof(Vector3d); } @@ -513,6 +549,12 @@ namespace OpenMD { if (layout & dslFunctionalDerivative) { bytes += sizeof(RealType); } + if (layout & dslDipole) { + bytes += sizeof(Vector3d); + } + if (layout & dslQuadrupole) { + bytes += sizeof(Mat3x3d); + } if (layout & dslElectricField) { bytes += sizeof(Vector3d); } @@ -528,6 +570,9 @@ namespace OpenMD { if (layout & dslFlucQForce) { bytes += sizeof(RealType); } + if (layout & dslSitePotential) { + bytes += sizeof(RealType); + } return bytes; }