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 |