--- branches/development/src/nonbonded/InteractionManager.cpp 2011/06/16 22:00:08 1583 +++ branches/development/src/nonbonded/InteractionManager.cpp 2011/07/08 20:25:32 1587 @@ -67,6 +67,7 @@ namespace OpenMD { eam_->setForceField(forceField_); sc_->setForceField(forceField_); morse_->setForceField(forceField_); + electrostatic_->setSimInfo(info_); electrostatic_->setForceField(forceField_); maw_->setForceField(forceField_); @@ -267,12 +268,25 @@ namespace OpenMD { } initialized_ = true; + } + + void InteractionManager::setCutoffRadius(RealType rcut) { + + electrostatic_->setCutoffRadius(rcut); + eam_->setCutoffRadius(rcut); + } + + void InteractionManager::setSwitchingRadius(RealType rswitch) { + electrostatic_->setSwitchingRadius(rswitch); } void InteractionManager::doPrePair(InteractionData idat){ if (!initialized_) initialize(); + // excluded interaction, so just return + if (idat.excluded) return; + set::iterator it; for (it = interactions_[ idat.atypes ].begin(); @@ -304,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); } }