--- trunk/src/applications/staticProps/GofRZ.cpp 2010/04/29 14:48:10 1441 +++ trunk/src/applications/staticProps/GofRZ.cpp 2012/08/30 17:18:22 1790 @@ -36,7 +36,8 @@ * [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). - * [4] Vardeman & Gezelter, in progress (2009). + * [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010). + * [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011). */ #include @@ -47,31 +48,31 @@ namespace OpenMD { namespace OpenMD { GofRZ::GofRZ(SimInfo* info, const std::string& filename, const std::string& sele1, - const std::string& sele2, RealType len, int nrbins, int nZBins) - : RadialDistrFunc(info, filename, sele1, sele2), len_(len), nRBins_(nrbins), nZBins_(nZBins){ + const std::string& sele2, RealType len, RealType zlen, int nrbins, int nZBins) + : RadialDistrFunc(info, filename, sele1, sele2), len_(len), zLen_(zlen), nRBins_(nrbins), nZBins_(nZBins){ - setOutputName(getPrefix(filename) + ".gofrz"); + setOutputName(getPrefix(filename) + ".gofrz"); - deltaR_ = len_ / (double) nRBins_; - deltaZ_ = len_ / (double)nZBins_; - histogram_.resize(nRBins_); - avgGofr_.resize(nRBins_); - for (int i = 0 ; i < nRBins_; ++i) { - histogram_[i].resize(nZBins_); - avgGofr_[i].resize(nZBins_); - } - } + deltaR_ = len_ / (double) nRBins_; + deltaZ_ = zLen_ / (double)nZBins_; // for solvated_NVT.md4 + histogram_.resize(nRBins_); + avgGofr_.resize(nRBins_); + for (int i = 0 ; i < nRBins_; ++i) { + histogram_[i].resize(nZBins_); + avgGofr_[i].resize(nZBins_); + } + } void GofRZ::preProcess() { - for (int i = 0; i < avgGofr_.size(); ++i) { + for (unsigned int i = 0; i < avgGofr_.size(); ++i) { std::fill(avgGofr_[i].begin(), avgGofr_[i].end(), 0); } } - void GofRZ::initalizeHistogram() { + void GofRZ::initializeHistogram() { npairs_ = 0; - for (int i = 0; i < histogram_.size(); ++i){ + for (unsigned int i = 0; i < histogram_.size(); ++i){ std::fill(histogram_[i].begin(), histogram_[i].end(), 0); } } @@ -79,17 +80,17 @@ namespace OpenMD { void GofRZ::processHistogram() { int nPairs = getNPairs(); RealType volume = info_->getSnapshotManager()->getCurrentSnapshot()->getVolume(); - RealType pairDensity = nPairs / volume; + RealType pairDensity = nPairs / volume * 2.0; - for(int i = 0 ; i < histogram_.size(); ++i){ + for(unsigned int i = 0 ; i < histogram_.size(); ++i){ RealType rLower = i * deltaR_; RealType rUpper = rLower + deltaR_; RealType volSlice = NumericConstant::PI * deltaZ_ * (( rUpper * rUpper ) - ( rLower * rLower )); RealType nIdeal = volSlice * pairDensity; - for (int j = 0; j < histogram_[i].size(); ++j){ - avgGofr_[i][j] += histogram_[i][j] / nIdeal; + for (unsigned int j = 0; j < histogram_[i].size(); ++j){ + avgGofr_[i][j] += histogram_[i][j] / nIdeal; } } @@ -108,14 +109,15 @@ namespace OpenMD { RealType distance = sqrt(pow(r12.x(), 2) + pow(r12.y(), 2)); - int whichRBin = distance / deltaR_; + int whichRBin = int(distance / deltaR_); if (distance <= len_) { - RealType Z = abs(r12.z()); + RealType Z = fabs(r12.z()); - if (Z <= len_) { - int whichZBin = Z / deltaZ_; + if (Z <= zLen_) { + int whichZBin = int(Z / deltaZ_); + ++histogram_[whichRBin][whichZBin]; ++npairs_; } @@ -129,16 +131,16 @@ namespace OpenMD { rdfStream << "#selection1: (" << selectionScript1_ << ")\t"; rdfStream << "selection2: (" << selectionScript2_ << ")\n"; rdfStream << "#nRBins = " << nRBins_ << "\t maxLen = " << len_ << "deltaR = " << deltaR_ <<"\n"; - rdfStream << "#nZBins =" << nZBins_ << "deltaZ = " << deltaZ_ << "\n"; - for (int i = 0; i < avgGofr_.size(); ++i) { - RealType r = deltaR_ * (i + 0.5); + rdfStream << "#nZBins =" << nZBins_ << "\t deltaZ = " << deltaZ_ << "\n"; + for (unsigned int i = 0; i < avgGofr_.size(); ++i) { + RealType r = deltaR_ * (i + 0.5); - for(int j = 0; j < avgGofr_[i].size(); ++j) { + for(unsigned int j = 0; j < avgGofr_[i].size(); ++j) { RealType z = deltaZ_ * (j + 0.5); - rdfStream << avgGofr_[i][j]/nProcessed_ << "\t"; - } + rdfStream << avgGofr_[i][j]/nProcessed_ << "\t"; + } - rdfStream << "\n"; + rdfStream << "\n"; } } else {