| 37 |
|
|
| 38 |
|
void NPTim::moveA() { |
| 39 |
|
|
| 40 |
< |
int i, j; |
| 40 |
> |
int i, j, k; |
| 41 |
|
DirectionalAtom* dAtom; |
| 42 |
|
double Tb[3], ji[3]; |
| 43 |
|
double A[3][3], I[3][3]; |
| 82 |
|
|
| 83 |
|
if(myAtoms[j] != NULL) { |
| 84 |
|
|
| 85 |
< |
myAtoms[i]->getVel( vel ); |
| 86 |
< |
myAtoms[i]->getPos( pos ); |
| 87 |
< |
myAtoms[i]->getFrc( frc ); |
| 85 |
> |
myAtoms[j]->getVel( vel ); |
| 86 |
> |
myAtoms[j]->getPos( pos ); |
| 87 |
> |
myAtoms[j]->getFrc( frc ); |
| 88 |
|
|
| 89 |
< |
mass = myAtoms[i]->getMass(); |
| 89 |
> |
mass = myAtoms[j]->getMass(); |
| 90 |
|
|
| 91 |
< |
for (j=0; j < 3; j++) |
| 92 |
< |
vel[j] += dt2 * ((frc[j] / mass ) * eConvert - vel[j]*(chi+eta)); |
| 93 |
< |
|
| 94 |
< |
myAtoms[i]->setVel( vel ); |
| 91 |
> |
for (k=0; k < 3; k++) |
| 92 |
> |
vel[k] += dt2 * ((frc[k] / mass ) * eConvert - vel[k]*(chi+eta)); |
| 93 |
|
|
| 94 |
< |
for (j = 0; j < 3; j++) |
| 97 |
< |
pos[j] += dt * (vel[j] + eta*rc[j]); |
| 94 |
> |
myAtoms[j]->setVel( vel ); |
| 95 |
|
|
| 96 |
< |
atoms[i]->setPos( pos ); |
| 96 |
> |
for (k = 0; k < 3; k++) |
| 97 |
> |
pos[k] += dt * (vel[k] + eta*rc[k]); |
| 98 |
|
|
| 99 |
+ |
myAtoms[j]->setPos( pos ); |
| 100 |
+ |
|
| 101 |
|
if( myAtoms[j]->isDirectional() ){ |
| 102 |
|
|
| 103 |
|
dAtom = (DirectionalAtom *)myAtoms[j]; |
| 111 |
|
|
| 112 |
|
dAtom->getJ( ji ); |
| 113 |
|
|
| 114 |
< |
for (j=0; j < 3; j++) |
| 115 |
< |
ji[j] += dt2 * (Tb[j] * eConvert - ji[j]*chi); |
| 114 |
> |
for (k=0; k < 3; k++) |
| 115 |
> |
ji[k] += dt2 * (Tb[k] * eConvert - ji[k]*chi); |
| 116 |
|
|
| 117 |
|
// use the angular velocities to propagate the rotation matrix a |
| 118 |
|
// full time step |