--- trunk/src/nonbonded/InteractionManager.cpp 2013/08/07 15:24:16 1925 +++ trunk/src/nonbonded/InteractionManager.cpp 2014/06/11 18:37:56 2005 @@ -90,6 +90,7 @@ namespace OpenMD { ForceField::AtomTypeContainer* atomTypes = forceField_->getAtomTypes(); int nTypes = atomTypes->size(); + sHash_.resize(nTypes); iHash_.resize(nTypes); interactions_.resize(nTypes); ForceField::AtomTypeContainer::MapTypeIterator i1, i2; @@ -115,10 +116,7 @@ namespace OpenMD { set::iterator at; for (at = atypes.begin(); at != atypes.end(); ++at) { - - //for (atype1 = atomTypes->beginType(i1); atype1 != NULL; - // atype1 = atomTypes->nextType(i1)) { - + atype1 = *at; atid1 = atype1->getIdent(); iHash_[atid1].resize(nTypes); @@ -135,8 +133,29 @@ namespace OpenMD { painCave.isFatal = 0; simError(); } + + if (atype1->isLennardJones()) { + sHash_[atid1] |= LJ_INTERACTION; + } + if (atype1->isElectrostatic()) { + sHash_[atid1] |= ELECTROSTATIC_INTERACTION; + } + if (atype1->isSticky()) { + sHash_[atid1] |= STICKY_INTERACTION; + } + if (atype1->isStickyPower()) { + sHash_[atid1] |= STICKY_INTERACTION; + } + if (atype1->isEAM()) { + sHash_[atid1] |= EAM_INTERACTION; + } + if (atype1->isSC()) { + sHash_[atid1] |= SC_INTERACTION; + } + if (atype1->isGayBerne()) { + sHash_[atid1] |= GB_INTERACTION; + } } - // Now, iterate over all known types and add to the interaction map: map::iterator it1, it2; @@ -152,36 +171,36 @@ namespace OpenMD { if (atype1->isLennardJones() && atype2->isLennardJones()) { interactions_[atid1][atid2].insert(lj_); - iHash_[atid1][atid2] |= LJ_PAIR; + iHash_[atid1][atid2] |= LJ_INTERACTION; } if (atype1->isElectrostatic() && atype2->isElectrostatic() ) { interactions_[atid1][atid2].insert(electrostatic_); - iHash_[atid1][atid2] |= ELECTROSTATIC_PAIR; + iHash_[atid1][atid2] |= ELECTROSTATIC_INTERACTION; } if (atype1->isSticky() && atype2->isSticky() ) { interactions_[atid1][atid2].insert(sticky_); - iHash_[atid1][atid2] |= STICKY_PAIR; + iHash_[atid1][atid2] |= STICKY_INTERACTION; } if (atype1->isStickyPower() && atype2->isStickyPower() ) { interactions_[atid1][atid2].insert(sticky_); - iHash_[atid1][atid2] |= STICKY_PAIR; + iHash_[atid1][atid2] |= STICKY_INTERACTION; } if (atype1->isEAM() && atype2->isEAM() ) { interactions_[atid1][atid2].insert(eam_); - iHash_[atid1][atid2] |= EAM_PAIR; + iHash_[atid1][atid2] |= EAM_INTERACTION; } if (atype1->isSC() && atype2->isSC() ) { interactions_[atid1][atid2].insert(sc_); - iHash_[atid1][atid2] |= SC_PAIR; + iHash_[atid1][atid2] |= SC_INTERACTION; } if (atype1->isGayBerne() && atype2->isGayBerne() ) { interactions_[atid1][atid2].insert(gb_); - iHash_[atid1][atid2] |= GB_PAIR; + iHash_[atid1][atid2] |= GB_INTERACTION; } if ((atype1->isGayBerne() && atype2->isLennardJones()) || (atype1->isLennardJones() && atype2->isGayBerne())) { interactions_[atid1][atid2].insert(gb_); - iHash_[atid1][atid2] |= GB_PAIR; + iHash_[atid1][atid2] |= GB_INTERACTION; } // look for an explicitly-set non-bonded interaction type using the @@ -207,7 +226,7 @@ namespace OpenMD { } } interactions_[atid1][atid2].insert(lj_); - iHash_[atid1][atid2] |= LJ_PAIR; + iHash_[atid1][atid2] |= LJ_INTERACTION; vdwExplicit = true; } @@ -234,7 +253,7 @@ namespace OpenMD { } } interactions_[atid1][atid2].insert(morse_); - iHash_[atid1][atid2] |= MORSE_PAIR; + iHash_[atid1][atid2] |= MORSE_INTERACTION; vdwExplicit = true; } @@ -261,7 +280,7 @@ namespace OpenMD { } } interactions_[atid1][atid2].insert(repulsivePower_); - iHash_[atid1][atid2] |= REPULSIVEPOWER_PAIR; + iHash_[atid1][atid2] |= REPULSIVEPOWER_INTERACTION; vdwExplicit = true; } @@ -279,7 +298,7 @@ namespace OpenMD { } } interactions_[atid1][atid2].insert(eam_); - iHash_[atid1][atid2] |= EAM_PAIR; + iHash_[atid1][atid2] |= EAM_INTERACTION; metExplicit = true; } @@ -306,7 +325,7 @@ namespace OpenMD { } } interactions_[atid1][atid2].insert(sc_); - iHash_[atid1][atid2] |= SC_PAIR; + iHash_[atid1][atid2] |= SC_INTERACTION; metExplicit = true; } @@ -333,7 +352,7 @@ namespace OpenMD { } } interactions_[atid1][atid2].insert(maw_); - iHash_[atid1][atid2] |= MAW_PAIR; + iHash_[atid1][atid2] |= MAW_INTERACTION; vdwExplicit = true; } } @@ -352,7 +371,7 @@ namespace OpenMD { atid1 = atype1->getIdent(); for (jt = it; jt != simTypes.end(); ++jt) { atype2 = (*jt); - atid1 = atype1->getIdent(); + atid2 = atype2->getIdent(); if (interactions_[atid1][atid2].size() == 0) { sprintf( painCave.errMsg, @@ -385,8 +404,8 @@ namespace OpenMD { int& iHash = iHash_[idat.atid1][idat.atid2]; - if ((iHash & EAM_PAIR) != 0) eam_->calcDensity(idat); - if ((iHash & SC_PAIR) != 0) sc_->calcDensity(idat); + if ((iHash & EAM_INTERACTION) != 0) eam_->calcDensity(idat); + if ((iHash & SC_INTERACTION) != 0) sc_->calcDensity(idat); // set::iterator it; @@ -404,10 +423,10 @@ namespace OpenMD { if (!initialized_) initialize(); - int& iHash = iHash_[sdat.atid][sdat.atid]; + int& sHash = sHash_[sdat.atid]; - if ((iHash & EAM_PAIR) != 0) eam_->calcFunctional(sdat); - if ((iHash & SC_PAIR) != 0) sc_->calcFunctional(sdat); + if ((sHash & EAM_INTERACTION) != 0) eam_->calcFunctional(sdat); + if ((sHash & SC_INTERACTION) != 0) sc_->calcFunctional(sdat); // set::iterator it; @@ -426,21 +445,21 @@ namespace OpenMD { int& iHash = iHash_[idat.atid1][idat.atid2]; - if ((iHash & ELECTROSTATIC_PAIR) != 0) electrostatic_->calcForce(idat); + if ((iHash & ELECTROSTATIC_INTERACTION) != 0) electrostatic_->calcForce(idat); // electrostatics still has to worry about indirect // contributions from excluded pairs of atoms, but nothing else does: if (idat.excluded) return; - if ((iHash & LJ_PAIR) != 0) lj_->calcForce(idat); - if ((iHash & GB_PAIR) != 0) gb_->calcForce(idat); - if ((iHash & STICKY_PAIR) != 0) sticky_->calcForce(idat); - if ((iHash & MORSE_PAIR) != 0) morse_->calcForce(idat); - if ((iHash & REPULSIVEPOWER_PAIR) != 0) repulsivePower_->calcForce(idat); - if ((iHash & EAM_PAIR) != 0) eam_->calcForce(idat); - if ((iHash & SC_PAIR) != 0) sc_->calcForce(idat); - if ((iHash & MAW_PAIR) != 0) maw_->calcForce(idat); + if ((iHash & LJ_INTERACTION) != 0) lj_->calcForce(idat); + if ((iHash & GB_INTERACTION) != 0) gb_->calcForce(idat); + if ((iHash & STICKY_INTERACTION) != 0) sticky_->calcForce(idat); + if ((iHash & MORSE_INTERACTION) != 0) morse_->calcForce(idat); + if ((iHash & REPULSIVEPOWER_INTERACTION) != 0) repulsivePower_->calcForce(idat); + if ((iHash & EAM_INTERACTION) != 0) eam_->calcForce(idat); + if ((iHash & SC_INTERACTION) != 0) sc_->calcForce(idat); + if ((iHash & MAW_INTERACTION) != 0) maw_->calcForce(idat); // set::iterator it; @@ -462,9 +481,9 @@ namespace OpenMD { if (!initialized_) initialize(); - int& iHash = iHash_[sdat.atid][sdat.atid]; + int& sHash = sHash_[sdat.atid]; - if ((iHash & ELECTROSTATIC_PAIR) != 0) electrostatic_->calcSelfCorrection(sdat); + if ((sHash & ELECTROSTATIC_INTERACTION) != 0) electrostatic_->calcSelfCorrection(sdat); // set::iterator it;