# | 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; |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |