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; |