--- trunk/src/constraints/Rattle.cpp 2014/04/14 18:32:51 1981 +++ trunk/src/constraints/Rattle.cpp 2014/09/26 22:22:28 2022 @@ -45,21 +45,26 @@ namespace OpenMD { #include "utils/simError.h" namespace OpenMD { - Rattle::Rattle(SimInfo* info) : info_(info), maxConsIteration_(10), consTolerance_(1.0e-6), doRattle_(false) { + Rattle::Rattle(SimInfo* info) : info_(info), maxConsIteration_(10), + consTolerance_(1.0e-6), doRattle_(false), + currConstraintTime_(0.0) { - if (info_->getNConstraints() > 0) + if (info_->getNGlobalConstraints() > 0) doRattle_ = true; + if (!doRattle_) return; + Globals* simParams = info_->getSimParams(); if (simParams->haveDt()) { dt_ = simParams->getDt(); } else { sprintf(painCave.errMsg, - "Integrator Error: dt is not set\n"); + "Rattle Error: dt is not set\n"); painCave.isFatal = 1; simError(); } + currentSnapshot_ = info_->getSnapshotManager()->getCurrentSnapshot(); if (simParams->haveConstraintTime()){ constraintTime_ = simParams->getConstraintTime(); @@ -67,10 +72,13 @@ namespace OpenMD { constraintTime_ = simParams->getStatusTime(); } - constraintOutputFile_ = getPrefix(info_->getFinalConfigFileName()) + ".constraintForces"; + constraintOutputFile_ = getPrefix(info_->getFinalConfigFileName()) + + ".constraintForces"; + // create ConstraintWriter - constraintWriter_ = new ConstraintWriter(info_, constraintOutputFile_.c_str()); + constraintWriter_ = new ConstraintWriter(info_, + constraintOutputFile_.c_str()); if (!constraintWriter_){ sprintf(painCave.errMsg, "Failed to create ConstraintWriter\n"); @@ -101,7 +109,6 @@ namespace OpenMD { constraints.push_back(consPair); } } - constraintWriter_->writeConstraintForces(constraints); currConstraintTime_ += constraintTime_; } @@ -216,13 +223,14 @@ namespace OpenMD { RealType rabsq = consPair->getConsDistSquare(); RealType diffsq = rabsq - pabsq; + // the original rattle code from alan tidesley if (fabs(diffsq) > (consTolerance_ * rabsq * 2)){ Vector3d oldPosA = consElem1->getPrevPos(); Vector3d oldPosB = consElem2->getPrevPos(); - Vector3d rab = oldPosA - oldPosB; + Vector3d rab = oldPosA - oldPosB; currentSnapshot_->wrapVector(rab);