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 567 by mmeineke, Wed Jun 25 21:12:14 2003 UTC vs.
Revision 572 by mmeineke, Wed Jul 2 21:26:55 2003 UTC

# Line 257 | Line 257 | void Integrator::integrate( void ){
257  
258    }
259  
260 <  dumpOut->writeFinal();
260 >  dumpOut->writeFinal(currTime);
261  
262    delete dumpOut;
263    delete statOut;
# Line 411 | Line 411 | void Integrator::constrainA(){
411  
412    int i,j,k;
413    int done;
414 <  double pxab, pyab, pzab;
415 <  double rxab, ryab, rzab;
414 >  double pab[3];
415 >  double rab[3];
416    int a, b, ax, ay, az, bx, by, bz;
417    double rma, rmb;
418    double dx, dy, dz;
# Line 450 | Line 450 | void Integrator::constrainA(){
450  
451        if( moved[a] || moved[b] ){
452          
453 <        pxab = pos[ax] - pos[bx];
454 <        pyab = pos[ay] - pos[by];
455 <        pzab = pos[az] - pos[bz];
453 >        pab[0] = pos[ax] - pos[bx];
454 >        pab[1] = pos[ay] - pos[by];
455 >        pab[2] = pos[az] - pos[bz];
456  
457          //periodic boundary condition
458        pxab = pxab - info->box_x * copysign(1, pxab)
459          * (int)( fabs(pxab / info->box_x) + 0.5);
460        pyab = pyab - info->box_y * copysign(1, pyab)
461          * (int)( fabs(pyab / info->box_y) + 0.5);
462        pzab = pzab - info->box_z * copysign(1, pzab)
463          * (int)( fabs(pzab / info->box_z) + 0.5);
458  
459 <        pabsq = pxab * pxab + pyab * pyab + pzab * pzab;
459 >        info->wrapVector( pab );
460  
461 +        pabsq = pab[0] * pab[0] + pab[1] * pab[1] + pab[2] * pab[2];
462 +
463          rabsq = constrainedDsqr[i];
464          diffsq = rabsq - pabsq;
465  
466          // the original rattle code from alan tidesley
467          if (fabs(diffsq) > (tol*rabsq*2)) {
468 <          rxab = oldPos[ax] - oldPos[bx];
469 <          ryab = oldPos[ay] - oldPos[by];
470 <          rzab = oldPos[az] - oldPos[bz];
468 >          rab[0] = oldPos[ax] - oldPos[bx];
469 >          rab[1] = oldPos[ay] - oldPos[by];
470 >          rab[2] = oldPos[az] - oldPos[bz];
471  
472 <          rxab = rxab - info->box_x * copysign(1, rxab)
477 <            * (int)( fabs(rxab / info->box_x) + 0.5);
478 <          ryab = ryab - info->box_y * copysign(1, ryab)
479 <            * (int)( fabs(ryab / info->box_y) + 0.5);
480 <          rzab = rzab - info->box_z * copysign(1, rzab)
481 <            * (int)( fabs(rzab / info->box_z) + 0.5);
472 >          info->wrapVector( rab );
473  
474 <          rpab = rxab * pxab + ryab * pyab + rzab * pzab;
474 >          rpab = rab[0] * pab[0] + rab[1] * pab[1] + rab[2] * pab[2];
475  
476            rpabsq = rpab * rpab;
477  
# Line 503 | Line 494 | void Integrator::constrainA(){
494  
495            gab = diffsq / ( 2.0 * ( rma + rmb ) * rpab );
496  
497 <          dx = rxab * gab;
498 <          dy = ryab * gab;
499 <          dz = rzab * gab;
497 >          dx = rab[0] * gab;
498 >          dy = rab[1] * gab;
499 >          dz = rab[2] * gab;
500  
501            pos[ax] += rma * dx;
502            pos[ay] += rma * dy;
# Line 559 | Line 550 | void Integrator::constrainB( void ){
550    int i,j,k;
551    int done;
552    double vxab, vyab, vzab;
553 <  double rxab, ryab, rzab;
553 >  double rab[3];
554    int a, b, ax, ay, az, bx, by, bz;
555    double rma, rmb;
556    double dx, dy, dz;
# Line 598 | Line 589 | void Integrator::constrainB( void ){
589          vyab = vel[ay] - vel[by];
590          vzab = vel[az] - vel[bz];
591  
592 <        rxab = pos[ax] - pos[bx];
593 <        ryab = pos[ay] - pos[by];
594 <        rzab = pos[az] - pos[bz];
592 >        rab[0] = pos[ax] - pos[bx];
593 >        rab[1] = pos[ay] - pos[by];
594 >        rab[2] = pos[az] - pos[bz];
595          
596 <
606 <        rxab = rxab - info->box_x * copysign(1, rxab)
607 <          * (int)( fabs(rxab / info->box_x) + 0.5);
608 <        ryab = ryab - info->box_y * copysign(1, ryab)
609 <          * (int)( fabs(ryab / info->box_y) + 0.5);
610 <        rzab = rzab - info->box_z * copysign(1, rzab)
611 <          * (int)( fabs(rzab / info->box_z) + 0.5);
596 >        info->wrapVector( rab );
597          
598          rma = 1.0 / atoms[a]->getMass();
599          rmb = 1.0 / atoms[b]->getMass();
600  
601 <        rvab = rxab * vxab + ryab * vyab + rzab * vzab;
601 >        rvab = rab[0] * vxab + rab[1] * vyab + rab[2] * vzab;
602            
603          gab = -rvab / ( ( rma + rmb ) * constrainedDsqr[i] );
604  
605          if (fabs(gab) > tol) {
606            
607 <          dx = rxab * gab;
608 <          dy = ryab * gab;
609 <          dz = rzab * gab;
607 >          dx = rab[0] * gab;
608 >          dy = rab[1] * gab;
609 >          dz = rab[2] * gab;
610            
611            vel[ax] += rma * dx;
612            vel[ay] += rma * dy;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines