diff --git a/src/BiasMovingRestraint.cpp b/src/BiasMovingRestraint.cpp index 84349cdb5b4c36fdd28bc103aae17aaf4a840aad..cc0b600ed0de75270b5cdce2cc5ea323f30e1a57 100644 --- a/src/BiasMovingRestraint.cpp +++ b/src/BiasMovingRestraint.cpp @@ -125,9 +125,9 @@ PLUMED_BIAS_INIT(ao) log.printf("\n"); }; - addValue("Energy"); - addValue("Force2"); - addValue("Work"); + addValue("bias"); + addValue("force2"); + addValue("work"); } @@ -163,9 +163,9 @@ void BiasMovingRestraint::calculate(){ totf2+=f*f; }; Value* value; - value=getValue("Energy"); + value=getValue("bias"); setValue(value,ene); - value=getValue("Force2"); + value=getValue("force2"); setValue(value,totf2); } diff --git a/src/BiasRestraint.cpp b/src/BiasRestraint.cpp index cefda6fb76bddc99897f8a3b288fb3ccd4a5dea6..a51e3155a151ca9082217f92e566ae37d32d5fa8 100644 --- a/src/BiasRestraint.cpp +++ b/src/BiasRestraint.cpp @@ -30,7 +30,7 @@ values, and it is printing the energy of the restraint DISTANCE ATOMS=3,5 LABEL=d1 DISTANCE ATOMS=2,4 LABEL=d2 RESTRAINT ARG=d1,d2 AT=1.0,1.5 KAPPA=150.0,150.0 LABEL=restraint -PRINT ARG=restraint.Energy +PRINT ARG=restraint.bias \endverbatim (See also \ref DISTANCE and \ref PRINT). @@ -65,8 +65,8 @@ kappa(getNumberOfArguments(),0.0) for(unsigned i=0;i<kappa.size();i++) log.printf(" %f",kappa[i]); log.printf("\n"); - addValue("Energy"); - addValue("Force2"); + addValue("bias"); + addValue("force2"); } @@ -82,8 +82,8 @@ void BiasRestraint::calculate(){ totf2+=f*f; }; Value* value; - value=getValue("Energy"); setValue(value,ene); - value=getValue("Force2"); setValue(value,totf2); + value=getValue("bias"); setValue(value,ene); + value=getValue("force2"); setValue(value,totf2); } } diff --git a/src/PlumedMain.cpp b/src/PlumedMain.cpp index 1bf1ac2c90578b73b0342a4418eaf8a0adddda56..af23e340ce5b178db52358be4680a0d58704694a 100644 --- a/src/PlumedMain.cpp +++ b/src/PlumedMain.cpp @@ -79,6 +79,7 @@ PlumedMain::PlumedMain(): active(false), atoms(*this), actionSet((*this)), + bias(0.0), novirial(false) {} @@ -426,21 +427,26 @@ void PlumedMain::waitData(){ void PlumedMain::justCalculate(){ + bias=0.0; + // calculate the active actions in order (assuming *backward* dependence) for(ActionSet::iterator p=actionSet.begin();p!=actionSet.end();++p){ + ActionWithValue*av=dynamic_cast<ActionWithValue*>(*p); + ActionAtomistic*aa=dynamic_cast<ActionAtomistic*>(*p); { - ActionWithValue*a=dynamic_cast<ActionWithValue*>(*p); - if(a) a->clearInputForces(); - if(a) a->clearDerivatives(); + if(av) av->clearInputForces(); + if(av) av->clearDerivatives(); } { - ActionAtomistic*a=dynamic_cast<ActionAtomistic*>(*p); - if(a) a->clearOutputForces(); - if(a) if(a->isActive()) a->retrieveAtoms(); + if(aa) aa->clearOutputForces(); + if(aa) if(aa->isActive()) aa->retrieveAtoms(); } if((*p)->isActive()){ if((*p)->checkNumericalDerivatives()) (*p)->calculateNumericalDerivatives(); else (*p)->calculate(); + if(av)for(int i=0;i<av->getNumberOfValues();++i){ + if(av->getValue(i)->getName()=="bias") bias+=av->getValue(i)->get(); + } } } } @@ -490,6 +496,10 @@ void PlumedMain::load(std::vector<std::string> & words){ log<<"Here is the new list of available actions\n"; log<<actionRegister(); } + +double PlumedMain::getBias() const{ + return bias; +} ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/PlumedMain.h b/src/PlumedMain.h index d298b38b839ba70ae1b2566a357bff246ad2af61..1ab8c491908ed218dd7772c6ff3dccb2e592c685 100644 --- a/src/PlumedMain.h +++ b/src/PlumedMain.h @@ -80,6 +80,9 @@ private: /// Suffix string for file opening, useful for multiple simulations in the same directory std::string suffix; +/// The total bias (=total energy of the restraints) + double bias; + public: /// Flag to switch off virial calculation (for debug) bool novirial; @@ -131,6 +134,8 @@ public: const std::string & getSuffix()const; /// Set the suffix string void setSuffix(const std::string&); +/// get the value of the bias + double getBias()const; }; /////