| 160 |
|
|
| 161 |
|
currentSnapshot_->wrapVector(pab); |
| 162 |
|
|
| 163 |
< |
double pabsq = pab.lengthSquare(); |
| 163 |
> |
RealType pabsq = pab.lengthSquare(); |
| 164 |
|
|
| 165 |
< |
double rabsq = consPair->getConsDistSquare(); |
| 166 |
< |
double diffsq = rabsq - pabsq; |
| 165 |
> |
RealType rabsq = consPair->getConsDistSquare(); |
| 166 |
> |
RealType diffsq = rabsq - pabsq; |
| 167 |
|
|
| 168 |
|
// the original rattle code from alan tidesley |
| 169 |
|
if (fabs(diffsq) > (consTolerance_ * rabsq * 2)){ |
| 175 |
|
|
| 176 |
|
currentSnapshot_->wrapVector(rab); |
| 177 |
|
|
| 178 |
< |
double rpab = dot(rab, pab); |
| 179 |
< |
double rpabsq = rpab * rpab; |
| 178 |
> |
RealType rpab = dot(rab, pab); |
| 179 |
> |
RealType rpabsq = rpab * rpab; |
| 180 |
|
|
| 181 |
|
if (rpabsq < (rabsq * -diffsq)){ |
| 182 |
|
return consFail; |
| 183 |
|
} |
| 184 |
|
|
| 185 |
< |
double rma = 1.0 / consElem1->getMass(); |
| 186 |
< |
double rmb = 1.0 / consElem2->getMass(); |
| 185 |
> |
RealType rma = 1.0 / consElem1->getMass(); |
| 186 |
> |
RealType rmb = 1.0 / consElem2->getMass(); |
| 187 |
|
|
| 188 |
< |
double gab = diffsq / (2.0 * (rma + rmb) * rpab); |
| 188 |
> |
RealType gab = diffsq / (2.0 * (rma + rmb) * rpab); |
| 189 |
|
|
| 190 |
|
Vector3d delta = rab * gab; |
| 191 |
|
|
| 234 |
|
|
| 235 |
|
currentSnapshot_->wrapVector(rab); |
| 236 |
|
|
| 237 |
< |
double rma = 1.0 / consElem1->getMass(); |
| 238 |
< |
double rmb = 1.0 / consElem2->getMass(); |
| 237 |
> |
RealType rma = 1.0 / consElem1->getMass(); |
| 238 |
> |
RealType rmb = 1.0 / consElem2->getMass(); |
| 239 |
|
|
| 240 |
< |
double rvab = dot(rab, dv); |
| 240 |
> |
RealType rvab = dot(rab, dv); |
| 241 |
|
|
| 242 |
< |
double gab = -rvab / ((rma + rmb) * consPair->getConsDistSquare()); |
| 242 |
> |
RealType gab = -rvab / ((rma + rmb) * consPair->getConsDistSquare()); |
| 243 |
|
|
| 244 |
|
if (fabs(gab) > consTolerance_){ |
| 245 |
|
Vector3d delta = rab * gab; |