diff --git a/src/multicolvar/BridgedMultiColvarFunction.h b/src/multicolvar/BridgedMultiColvarFunction.h index 75751605a84c3aee35506962a9273b6330bb90ee..8f650a2947b738202aae2a68c8f9a05117ada417 100644 --- a/src/multicolvar/BridgedMultiColvarFunction.h +++ b/src/multicolvar/BridgedMultiColvarFunction.h @@ -88,6 +88,8 @@ public: void applyBridgeForces( const std::vector<double>& bb ); Vector getCentralAtomPos( const unsigned& curr ); CatomPack getCentralAtomPack( const unsigned& basn, const unsigned& curr ); + void normalizeVector( std::vector<double>& vals ) const ; + void normalizeVectorDerivatives( MultiValue& myvals ) const ; }; inline @@ -130,6 +132,16 @@ AtomNumber BridgedMultiColvarFunction::getAbsoluteIndexOfCentralAtom(const unsig return mycolv->getAbsoluteIndexOfCentralAtom(i); } +inline +void BridgedMultiColvarFunction::normalizeVector( std::vector<double>& vals ) const { + mycolv->normalizeVector( vals ); +} + +inline +void BridgedMultiColvarFunction::normalizeVectorDerivatives( MultiValue& myvals ) const { + mycolv->normalizeVectorDerivatives( myvals ); +} + } } #endif diff --git a/src/multicolvar/VolumeGradientBase.cpp b/src/multicolvar/VolumeGradientBase.cpp index e30592754c46ced41b434c6eefed318d7f23dc2d..964a6b167bb85a24bbd52ffdf643842f2fe7ed64 100644 --- a/src/multicolvar/VolumeGradientBase.cpp +++ b/src/multicolvar/VolumeGradientBase.cpp @@ -19,6 +19,8 @@ You should have received a copy of the GNU Lesser General Public License along with plumed. If not, see <http://www.gnu.org/licenses/>. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ +#include "core/PlumedMain.h" +#include "core/ActionSet.h" #include "VolumeGradientBase.h" #include "CatomPack.h" @@ -37,6 +39,15 @@ BridgedMultiColvarFunction(ao) void VolumeGradientBase::requestAtoms( const std::vector<AtomNumber>& atoms ){ ActionAtomistic::requestAtoms(atoms); bridgeVariable=3*atoms.size(); + std::map<std::string,bool> checklabs; Dependencies dd( getDependencies() ); + for(Dependencies::iterator p=dd.begin();p!=dd.end();++p) checklabs.insert(std::pair<std::string,bool>((*p)->getLabel(),false)); + for(ActionSet::const_iterator p=plumed.getActionSet().begin();p!=plumed.getActionSet().end();++p){ + if( (*p)->getLabel()==getPntrToMultiColvar()->getLabel() ) break; + if( checklabs.count((*p)->getLabel()) ) checklabs[(*p)->getLabel()]=true; + } + for(std::map<std::string,bool>::iterator p=checklabs.begin();p!=checklabs.end();++p){ + if( !p->second ) error("the input for the virtual atoms used in the input for this action must appear in the input file before the input multicolvar"); + } addDependency( getPntrToMultiColvar() ); tmpforces.resize( 3*atoms.size()+9 ); }