ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Integrator.cpp
(Generate patch)

Comparing trunk/OOPSE/libmdtools/Integrator.cpp (file contents):
Revision 929 by tim, Tue Jan 13 15:46:49 2004 UTC vs.
Revision 1113 by tim, Thu Apr 15 16:18:26 2004 UTC

# Line 31 | Line 31 | template<typename T> Integrator<T>::Integrator(SimInfo
31    }
32  
33    nAtoms = info->n_atoms;
34 +  integrableObjects = info->integrableObjects;
35  
36    // check for constraints
37  
# Line 68 | Line 69 | template<typename T> void Integrator<T>::checkConstrai
69  
70    SRI** theArray;
71    for (int i = 0; i < nMols; i++){
72 <    theArray = (SRI * *) molecules[i].getMyBonds();
72 >
73 >          theArray = (SRI * *) molecules[i].getMyBonds();
74      for (int j = 0; j < molecules[i].getNBonds(); j++){
75        constrained = theArray[j]->is_constrained();
76  
# Line 114 | Line 116 | template<typename T> void Integrator<T>::checkConstrai
116      }
117    }
118  
119 +
120    if (nConstrained > 0){
121      isConstrained = 1;
122  
# Line 135 | Line 138 | template<typename T> void Integrator<T>::checkConstrai
138      }
139  
140  
141 <    // save oldAtoms to check for lode balanceing later on.
141 >    // save oldAtoms to check for lode balancing later on.
142  
143      oldAtoms = nAtoms;
144  
# Line 179 | Line 182 | template<typename T> void Integrator<T>::integrate(voi
182    // initialize the forces before the first step
183  
184    calcForce(1, 1);
185 <
185 >  
186    if (nConstrained){
187      preMove();
188      constrainA();
# Line 207 | Line 210 | template<typename T> void Integrator<T>::integrate(voi
210    MPIcheckPoint();
211   #endif // is_mpi
212  
213 <  while (info->getTime() < runTime){
213 >  while (info->getTime() < runTime && !stopIntegrator()){
214      if ((info->getTime() + dt) >= currStatus){
215        calcPot = 1;
216        calcStress = 1;
# Line 329 | Line 332 | template<typename T> void Integrator<T>::moveA(void){
332  
333  
334   template<typename T> void Integrator<T>::moveA(void){
335 <  int i, j;
335 >  size_t i, j;
336    DirectionalAtom* dAtom;
337    double Tb[3], ji[3];
338    double vel[3], pos[3], frc[3];
339    double mass;
340 <
341 <  for (i = 0; i < nAtoms; i++){
342 <    atoms[i]->getVel(vel);
343 <    atoms[i]->getPos(pos);
344 <    atoms[i]->getFrc(frc);
345 <
346 <    mass = atoms[i]->getMass();
340 >
341 >  for (i = 0; i < integrableObjects.size() ; i++){
342 >    integrableObjects[i]->getVel(vel);
343 >    integrableObjects[i]->getPos(pos);
344 >    integrableObjects[i]->getFrc(frc);
345 >    
346 >    mass = integrableObjects[i]->getMass();
347  
348      for (j = 0; j < 3; j++){
349        // velocity half step
# Line 349 | Line 352 | template<typename T> void Integrator<T>::moveA(void){
352        pos[j] += dt * vel[j];
353      }
354  
355 <    atoms[i]->setVel(vel);
356 <    atoms[i]->setPos(pos);
355 >    integrableObjects[i]->setVel(vel);
356 >    integrableObjects[i]->setPos(pos);
357  
358 <    if (atoms[i]->isDirectional()){
356 <      dAtom = (DirectionalAtom *) atoms[i];
358 >    if (integrableObjects[i]->isDirectional()){
359  
360        // get and convert the torque to body frame
361  
362 <      dAtom->getTrq(Tb);
363 <      dAtom->lab2Body(Tb);
362 >      integrableObjects[i]->getTrq(Tb);
363 >      integrableObjects[i]->lab2Body(Tb);
364  
365        // get the angular momentum, and propagate a half step
366  
367 <      dAtom->getJ(ji);
367 >      integrableObjects[i]->getJ(ji);
368  
369        for (j = 0; j < 3; j++)
370          ji[j] += (dt2 * Tb[j]) * eConvert;
371  
372 <      this->rotationPropagation( dAtom, ji );
372 >      this->rotationPropagation( integrableObjects[i], ji );
373  
374 <      dAtom->setJ(ji);
374 >      integrableObjects[i]->setJ(ji);
375      }
376    }
377  
# Line 381 | Line 383 | template<typename T> void Integrator<T>::moveB(void){
383  
384   template<typename T> void Integrator<T>::moveB(void){
385    int i, j;
384  DirectionalAtom* dAtom;
386    double Tb[3], ji[3];
387    double vel[3], frc[3];
388    double mass;
389  
390 <  for (i = 0; i < nAtoms; i++){
391 <    atoms[i]->getVel(vel);
392 <    atoms[i]->getFrc(frc);
390 >  for (i = 0; i < integrableObjects.size(); i++){
391 >    integrableObjects[i]->getVel(vel);
392 >    integrableObjects[i]->getFrc(frc);
393  
394 <    mass = atoms[i]->getMass();
394 >    mass = integrableObjects[i]->getMass();
395  
396      // velocity half step
397      for (j = 0; j < 3; j++)
398        vel[j] += (dt2 * frc[j] / mass) * eConvert;
399  
400 <    atoms[i]->setVel(vel);
400 >    integrableObjects[i]->setVel(vel);
401  
402 <    if (atoms[i]->isDirectional()){
402 <      dAtom = (DirectionalAtom *) atoms[i];
402 >    if (integrableObjects[i]->isDirectional()){
403  
404        // get and convert the torque to body frame
405  
406 <      dAtom->getTrq(Tb);
407 <      dAtom->lab2Body(Tb);
406 >      integrableObjects[i]->getTrq(Tb);
407 >      integrableObjects[i]->lab2Body(Tb);
408  
409        // get the angular momentum, and propagate a half step
410  
411 <      dAtom->getJ(ji);
411 >      integrableObjects[i]->getJ(ji);
412  
413        for (j = 0; j < 3; j++)
414          ji[j] += (dt2 * Tb[j]) * eConvert;
415  
416  
417 <      dAtom->setJ(ji);
417 >      integrableObjects[i]->setJ(ji);
418      }
419    }
420  
# Line 683 | Line 683 | template<typename T> void Integrator<T>::rotationPropa
683   }
684  
685   template<typename T> void Integrator<T>::rotationPropagation
686 < ( DirectionalAtom* dAtom, double ji[3] ){
686 > ( StuntDouble* sd, double ji[3] ){
687  
688    double angle;
689    double A[3][3], I[3][3];
# Line 691 | Line 691 | template<typename T> void Integrator<T>::rotationPropa
691    // use the angular velocities to propagate the rotation matrix a
692    // full time step
693  
694 <  dAtom->getA(A);
695 <  dAtom->getI(I);
694 >  sd->getA(A);
695 >  sd->getI(I);
696  
697    // rotate about the x-axis
698    angle = dt2 * ji[0] / I[0][0];
# Line 714 | Line 714 | template<typename T> void Integrator<T>::rotationPropa
714    angle = dt2 * ji[0] / I[0][0];
715    this->rotate( 1, 2, angle, ji, A );
716  
717 <  dAtom->setA( A  );
717 >  sd->setA( A  );
718   }
719  
720   template<typename T> void Integrator<T>::rotate(int axes1, int axes2,

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines