--- branches/development/src/nonbonded/InteractionManager.cpp 2011/06/17 20:16:35 1584 +++ branches/development/src/nonbonded/InteractionManager.cpp 2011/07/08 20:25:32 1587 @@ -271,7 +271,9 @@ namespace OpenMD { } void InteractionManager::setCutoffRadius(RealType rcut) { + electrostatic_->setCutoffRadius(rcut); + eam_->setCutoffRadius(rcut); } void InteractionManager::setSwitchingRadius(RealType rswitch) { @@ -282,6 +284,9 @@ namespace OpenMD { if (!initialized_) initialize(); + // excluded interaction, so just return + if (idat.excluded) return; + set::iterator it; for (it = interactions_[ idat.atypes ].begin(); @@ -313,26 +318,17 @@ namespace OpenMD { void InteractionManager::doPair(InteractionData idat){ if (!initialized_) initialize(); - - set::iterator it; - - for (it = interactions_[ idat.atypes ].begin(); - it != interactions_[ idat.atypes ].end(); ++it) - (*it)->calcForce(idat); - - return; - } - - void InteractionManager::doSkipCorrection(InteractionData idat){ - if (!initialized_) initialize(); - set::iterator it; for (it = interactions_[ idat.atypes ].begin(); - it != interactions_[ idat.atypes ].end(); ++it){ - if ((*it)->getFamily() == ELECTROSTATIC_FAMILY) { - dynamic_cast(*it)->calcSkipCorrection(idat); + it != interactions_[ idat.atypes ].end(); ++it) { + + // electrostatics still has to worry about indirect + // contributions from excluded pairs of atoms: + + if (!idat.excluded || (*it)->getFamily() == ELECTROSTATIC_FAMILY) { + (*it)->calcForce(idat); } }