--- branches/development/src/nonbonded/Electrostatic.cpp 2011/07/08 20:25:32 1587 +++ branches/development/src/nonbonded/Electrostatic.cpp 2011/08/04 20:04:35 1601 @@ -1003,108 +1003,7 @@ namespace OpenMD { return; } - - void Electrostatic::calcSkipCorrection(InteractionData &idat) { - - if (!initialized_) initialize(); - - ElectrostaticAtomData data1 = ElectrostaticMap[idat.atypes.first]; - ElectrostaticAtomData data2 = ElectrostaticMap[idat.atypes.second]; - - // logicals - - bool i_is_Charge = data1.is_Charge; - bool i_is_Dipole = data1.is_Dipole; - - bool j_is_Charge = data2.is_Charge; - bool j_is_Dipole = data2.is_Dipole; - - RealType q_i, q_j; - - // The skippedCharge computation is needed by the real-space - // cutoff methods (i.e. shifted force and shifted potential) - - if (i_is_Charge) { - q_i = data1.charge; - *(idat.skippedCharge2) += q_i; - } - if (j_is_Charge) { - q_j = data2.charge; - *(idat.skippedCharge1) += q_j; - } - - // the rest of this function should only be necessary for reaction field. - - if (summationMethod_ == esm_REACTION_FIELD) { - RealType riji, ri2, ri3; - RealType mu_i, ct_i; - RealType mu_j, ct_j; - RealType preVal, rfVal, vterm, dudr, pref, myPot(0.0); - Vector3d dVdr, uz_i, uz_j, duduz_i, duduz_j, rhat; - - // some variables we'll need independent of electrostatic type: - - riji = 1.0 / *(idat.rij) ; - rhat = *(idat.d) * riji; - - if (i_is_Dipole) { - mu_i = data1.dipole_moment; - uz_i = idat.eFrame1->getColumn(2); - ct_i = dot(uz_i, rhat); - duduz_i = V3Zero; - } - - if (j_is_Dipole) { - mu_j = data2.dipole_moment; - uz_j = idat.eFrame2->getColumn(2); - ct_j = dot(uz_j, rhat); - duduz_j = V3Zero; - } - - if (i_is_Charge) { - if (j_is_Charge) { - preVal = *(idat.electroMult) * pre11_ * q_i * q_j; - rfVal = preRF_ * *(idat.rij) * *(idat.rij) ; - vterm = preVal * rfVal; - myPot += *(idat.sw) * vterm; - dudr = *(idat.sw) * preVal * 2.0 * rfVal * riji; - dVdr += dudr * rhat; - } - - if (j_is_Dipole) { - ri2 = riji * riji; - ri3 = ri2 * riji; - pref = *(idat.electroMult) * pre12_ * q_i * mu_j; - vterm = - pref * ct_j * ( ri2 - preRF2_ * *(idat.rij) ); - myPot += *(idat.sw) * vterm; - dVdr += - *(idat.sw) * pref * ( ri3 * ( uz_j - 3.0 * ct_j * rhat) - preRF2_ * uz_j); - duduz_j += - *(idat.sw) * pref * rhat * (ri2 - preRF2_ * *(idat.rij) ); - } - } - if (i_is_Dipole) { - if (j_is_Charge) { - ri2 = riji * riji; - ri3 = ri2 * riji; - pref = *(idat.electroMult) * pre12_ * q_j * mu_i; - vterm = - pref * ct_i * ( ri2 - preRF2_ * *(idat.rij) ); - myPot += *(idat.sw) * vterm; - dVdr += *(idat.sw) * pref * ( ri3 * ( uz_i - 3.0 * ct_i * rhat) - preRF2_ * uz_i); - duduz_i += *(idat.sw) * pref * rhat * (ri2 - preRF2_ * *(idat.rij)); - } - } - - // accumulate the forces and torques resulting from the self term - (*(idat.pot))[ELECTROSTATIC_FAMILY] += myPot; - *(idat.f1) += dVdr; - - if (i_is_Dipole) - *(idat.t1) -= cross(uz_i, duduz_i); - if (j_is_Dipole) - *(idat.t2) -= cross(uz_j, duduz_j); - } - } - void Electrostatic::calcSelfCorrection(SelfData &sdat) { RealType mu1, preVal, chg1, self;