| 106 |
|
angstromToM_ = 1.0e-10; |
| 107 |
|
debyeToCm_ = 3.33564095198e-30; |
| 108 |
|
|
| 109 |
< |
// number of points for electrostatic splines |
| 110 |
< |
np_ = 1000; |
| 109 |
> |
// Default number of points for electrostatic splines |
| 110 |
> |
np_ = 140; |
| 111 |
|
|
| 112 |
|
// variables to handle different summation methods for long-range |
| 113 |
|
// electrostatics: |
| 246 |
|
b3c = (5.0 * b2c + pow(2.0*a2, 3) * expTerm * invArootPi) / r2; |
| 247 |
|
b4c = (7.0 * b3c + pow(2.0*a2, 4) * expTerm * invArootPi) / r2; |
| 248 |
|
b5c = (9.0 * b4c + pow(2.0*a2, 5) * expTerm * invArootPi) / r2; |
| 249 |
< |
selfMult_ = b0c + 2.0 * a2 * invArootPi; |
| 249 |
> |
selfMult_ = b0c + a2 * invArootPi; |
| 250 |
|
} else { |
| 251 |
|
a2 = 0.0; |
| 252 |
|
b0c = 1.0 / r; |
| 279 |
|
// working variables for Taylor expansion: |
| 280 |
|
RealType rmRc, rmRc2, rmRc3, rmRc4; |
| 281 |
|
|
| 282 |
+ |
// Approximate using splines using a maximum of 0.1 Angstroms |
| 283 |
+ |
// between points. |
| 284 |
+ |
int nptest = int((cutoffRadius_ + 2.0) / 0.1); |
| 285 |
+ |
np_ = (np_ > nptest) ? np_ : nptest; |
| 286 |
+ |
|
| 287 |
|
// Add a 2 angstrom safety window to deal with cutoffGroups that |
| 288 |
|
// have charged atoms longer than the cutoffRadius away from each |
| 289 |
|
// other. Splining is almost certainly the best choice here. |
| 690 |
|
Vector3d D_a, D_b; // Dipoles (space-fixed) |
| 691 |
|
Mat3x3d Q_a, Q_b; // Quadrupoles (space-fixed) |
| 692 |
|
|
| 693 |
< |
RealType ri, ri2, ri3, ri4; // Distance utility scalars |
| 693 |
> |
RealType ri; // Distance utility scalar |
| 694 |
|
RealType rdDa, rdDb; // Dipole utility scalars |
| 695 |
|
Vector3d rxDa, rxDb; // Dipole utility vectors |
| 696 |
|
RealType rdQar, rdQbr, trQa, trQb; // Quadrupole utility scalars |
| 735 |
|
|
| 736 |
|
ri = 1.0 / *(idat.rij); |
| 737 |
|
Vector3d rhat = *(idat.d) * ri; |
| 733 |
– |
ri2 = ri * ri; |
| 738 |
|
|
| 739 |
|
// logicals |
| 740 |
|
|
| 1092 |
|
*(idat.t2) += *(idat.sw) * indirect_Tb; |
| 1093 |
|
} |
| 1094 |
|
return; |
| 1095 |
< |
} |
| 1095 |
> |
} |
| 1096 |
|
|
| 1097 |
|
void Electrostatic::calcSelfCorrection(SelfData &sdat) { |
| 1098 |
|
|
| 1135 |
|
|
| 1136 |
|
case esm_SHIFTED_FORCE: |
| 1137 |
|
case esm_SHIFTED_POTENTIAL: |
| 1138 |
< |
if (i_is_Charge) { |
| 1139 |
< |
self = -0.5 * selfMult_ * C_a * (C_a + *(sdat.skippedCharge)) * pre11_; |
| 1138 |
> |
if (i_is_Charge) { |
| 1139 |
> |
self = - selfMult_ * C_a * (C_a + *(sdat.skippedCharge)) * pre11_; |
| 1140 |
|
(*(sdat.pot))[ELECTROSTATIC_FAMILY] += self; |
| 1141 |
|
} |
| 1142 |
|
break; |