--- trunk/src/nonbonded/Electrostatic.cpp 2013/08/17 13:03:17 1928 +++ trunk/src/nonbonded/Electrostatic.cpp 2013/08/21 16:52:56 1932 @@ -765,7 +765,6 @@ namespace OpenMD { // Excluded potential that is still computed for fluctuating charges excluded_Pot= 0.0; - // some variables we'll need independent of electrostatic type: @@ -887,18 +886,19 @@ namespace OpenMD { Ea += pre14_ * (trQb * rhat * dv21 + 2.0 * Qbr * v22or + rdQbr * rhat * (dv22 - 2.0*v22or)); } - + + if ((a_is_Fluctuating || b_is_Fluctuating) && idat.excluded) { J = Jij[FQtids[idat.atid1]][FQtids[idat.atid2]]; } - + if (a_is_Charge) { if (b_is_Charge) { pref = pre11_ * *(idat.electroMult); U += C_a * C_b * pref * v01; F += C_a * C_b * pref * dv01 * rhat; - + // If this is an excluded pair, there are still indirect // interactions via the reaction field we must worry about: @@ -907,22 +907,21 @@ namespace OpenMD { indirect_Pot += rfContrib; indirect_F += rfContrib * 2.0 * ri * rhat; } - + // Fluctuating charge forces are handled via Coulomb integrals // for excluded pairs (i.e. those connected via bonds) and // with the standard charge-charge interaction otherwise. - if (idat.excluded) { + if (idat.excluded) { if (a_is_Fluctuating || b_is_Fluctuating) { coulInt = J->getValueAt( *(idat.rij) ); - if (a_is_Fluctuating) dUdCa += coulInt * C_b; - if (b_is_Fluctuating) dUdCb += coulInt * C_a; - excluded_Pot += C_a * C_b * coulInt; - } + if (a_is_Fluctuating) dUdCa += C_b * coulInt; + if (b_is_Fluctuating) dUdCb += C_a * coulInt; + } } else { if (a_is_Fluctuating) dUdCa += C_b * pref * v01; if (b_is_Fluctuating) dUdCb += C_a * pref * v01; - } + } } if (b_is_Dipole) { @@ -1142,8 +1141,7 @@ namespace OpenMD { if (i_is_Fluctuating) { C_a += *(sdat.flucQ); - // dVdFQ is really a force, so this is negative the derivative - *(sdat.dVdFQ) -= *(sdat.flucQ) * data.hardness + data.electronegativity; + *(sdat.flucQfrc) -= *(sdat.flucQ) * data.hardness + data.electronegativity; (*(sdat.excludedPot))[ELECTROSTATIC_FAMILY] += (*sdat.flucQ) * (*(sdat.flucQ) * data.hardness * 0.5 + data.electronegativity); } @@ -1441,11 +1439,10 @@ namespace OpenMD { dks[i] = dk * skr[i]; } if (data.is_Quadrupole) { - Q = atom->getQuadrupole(); - Q *= mPoleConverter; - Qk = Q * kVec; - qk = dot(kVec, Qk); - qxk[i] = cross(kVec, Qk); + Q = atom->getQuadrupole() * mPoleConverter; + Qk = Q * kVec; + qk = dot(Qk, kVec); + qxk[i] = cross(Qk, kVec); qkc[i] = qk * ckr[i]; qks[i] = qk * skr[i]; }