| 1292 |
|
eCos[l][i].z() = eCos[l-1][i].z()*eCos[2][i].z() - eSin[l-1][i].z()*eSin[2][i].z(); |
| 1293 |
|
|
| 1294 |
|
eSin[l][i].x() = eSin[l-1][i].x()*eCos[2][i].x() + eCos[l-1][i].x()*eSin[2][i].x(); |
| 1295 |
< |
eSin[l][i].y() = eSin[l-1][i].y()*eCos[2][i].y() + eCos[l-1][i].y()*eSin[2][i].z(); |
| 1296 |
< |
eSin[l][i].z() = eSin[l-1][i].z()*eCos[2][i].z() + eCos[l-1][i].z()*eSin[2][i].y(); |
| 1295 |
> |
eSin[l][i].y() = eSin[l-1][i].y()*eCos[2][i].y() + eCos[l-1][i].y()*eSin[2][i].y(); |
| 1296 |
> |
eSin[l][i].z() = eSin[l-1][i].z()*eCos[2][i].z() + eCos[l-1][i].z()*eSin[2][i].z(); |
| 1297 |
|
|
| 1298 |
|
|
| 1299 |
|
// a.Vmul(eCos[l-1][i], u); |
| 1421 |
|
|
| 1422 |
|
if (data.is_Dipole) { |
| 1423 |
|
Vector3d D = atom->getDipole() * mPoleConverter; |
| 1424 |
< |
RealType dk = dot(kVec, D); |
| 1425 |
< |
dxk[i] = cross(kVec, D); |
| 1424 |
> |
RealType dk = dot(D, kVec); |
| 1425 |
> |
dxk[i] = cross(D, kVec); |
| 1426 |
|
dkc[i] = dk * ckr[i]; |
| 1427 |
|
dks[i] = dk * skr[i]; |
| 1428 |
|
} |
| 1429 |
|
if (data.is_Quadrupole) { |
| 1430 |
|
Mat3x3d Q = atom->getQuadrupole(); |
| 1431 |
|
Q *= mPoleConverter; |
| 1432 |
< |
RealType qk = -( Q * k2 ).trace(); |
| 1432 |
> |
RealType qk = - doubleDot(Q, k2); |
| 1433 |
> |
// RealType qk = -( Q * k2 ).trace(); |
| 1434 |
|
qxk[i] = -2.0 * cross(k2, Q); |
| 1435 |
|
qkc[i] = qk * ckr[i]; |
| 1436 |
|
qks[i] = qk * skr[i]; |
| 1463 |
|
MPI::SUM); |
| 1464 |
|
#endif |
| 1465 |
|
|
| 1466 |
< |
// Accumulate potential energy and virial contribution: |
| 1466 |
> |
// Accumulate potential energy and virial contribution: |
| 1467 |
|
|
| 1468 |
|
kPot += 2.0 * rvol * AK[kk]*((ckss+dkcs-qkss)*(ckss+dkcs-qkss) |
| 1469 |
|
+ (ckcs-dkss-qkcs)*(ckcs-dkss-qkss)); |
| 1492 |
|
-ckr[i]*(ckss+dkcs-qkss)); |
| 1493 |
|
RealType qtrq2 = 2.0*AK[kk]*(ckr[i]*(ckcs-dkss-qkcs)+ |
| 1494 |
|
skr[i]*(ckss+dkcs-qkss)); |
| 1495 |
< |
|
| 1495 |
> |
|
| 1496 |
|
atom->addFrc( 4.0 * rvol * qfrc * kVec ); |
| 1497 |
|
|
| 1498 |
|
if (data.is_Dipole) { |