283 |
|
simError(); |
284 |
|
} |
285 |
|
|
286 |
+ |
// Quadrupoles in OpenMD are set as the diagonal elements |
287 |
+ |
// of the diagonalized traceless quadrupole moment tensor. |
288 |
+ |
// The column vectors of the unitary matrix that diagonalizes |
289 |
+ |
// the quadrupole moment tensor become the eFrame (or the |
290 |
+ |
// electrostatic version of the body-fixed frame. |
291 |
+ |
|
292 |
|
Vector3dGenericData* v3dData = dynamic_cast<Vector3dGenericData*>(data); |
293 |
|
if (v3dData == NULL) { |
294 |
|
sprintf( painCave.errMsg, |
889 |
|
|
890 |
|
if (i_is_Dipole) { |
891 |
|
mu_i = data1.dipole_moment; |
892 |
< |
uz_i = skdat.eFrame1->getColumn(2); |
892 |
> |
uz_i = skdat.eFrame1.getColumn(2); |
893 |
|
ct_i = dot(uz_i, rhat); |
894 |
|
duduz_i = V3Zero; |
895 |
|
} |
896 |
|
|
897 |
|
if (j_is_Dipole) { |
898 |
|
mu_j = data2.dipole_moment; |
899 |
< |
uz_j = skdat.eFrame2->getColumn(2); |
899 |
> |
uz_j = skdat.eFrame2.getColumn(2); |
900 |
|
ct_j = dot(uz_j, rhat); |
901 |
|
duduz_j = V3Zero; |
902 |
|
} |
938 |
|
skdat.f1 += dVdr; |
939 |
|
|
940 |
|
if (i_is_Dipole) |
941 |
< |
*(skdat.t1) -= cross(uz_i, duduz_i); |
941 |
> |
skdat.t1 -= cross(uz_i, duduz_i); |
942 |
|
if (j_is_Dipole) |
943 |
< |
*(skdat.t2) -= cross(uz_j, duduz_j); |
943 |
> |
skdat.t2 -= cross(uz_j, duduz_j); |
944 |
|
} |
945 |
|
} |
946 |
|
|
963 |
|
scdat.pot -= 0.5 * preVal; |
964 |
|
|
965 |
|
// The self-correction term adds into the reaction field vector |
966 |
< |
Vector3d uz_i = scdat.eFrame->getColumn(2); |
966 |
> |
Vector3d uz_i = scdat.eFrame.getColumn(2); |
967 |
|
Vector3d ei = preVal * uz_i; |
968 |
|
|
969 |
|
// This looks very wrong. A vector crossed with itself is zero. |
970 |
< |
*(scdat.t) -= cross(uz_i, ei); |
970 |
> |
scdat.t -= cross(uz_i, ei); |
971 |
|
} |
972 |
|
} else if (summationMethod_ == SHIFTED_FORCE || summationMethod_ == SHIFTED_POTENTIAL) { |
973 |
|
if (i_is_Charge) { |
981 |
|
} |
982 |
|
} |
983 |
|
} |
984 |
+ |
|
985 |
+ |
RealType Electrostatic::getSuggestedCutoffRadius(AtomType* at1, AtomType* at2) { |
986 |
+ |
// This seems to work moderately well as a default. There's no |
987 |
+ |
// inherent scale for 1/r interactions that we can standardize. |
988 |
+ |
// 12 angstroms seems to be a reasonably good guess for most |
989 |
+ |
// cases. |
990 |
+ |
return 12.0; |
991 |
+ |
} |
992 |
|
} |