| 253 |
|
void ForceMatrixDecomposition::createGtypeCutoffMap() { |
| 254 |
|
|
| 255 |
|
RealType tol = 1e-6; |
| 256 |
+ |
largestRcut_ = 0.0; |
| 257 |
|
RealType rc; |
| 258 |
|
int atid; |
| 259 |
|
set<AtomType*> atypes = info_->getSimulatedAtomTypes(); |
| 260 |
+ |
|
| 261 |
|
map<int, RealType> atypeCutoff; |
| 262 |
|
|
| 263 |
|
for (set<AtomType*>::iterator at = atypes.begin(); |
| 265 |
|
atid = (*at)->getIdent(); |
| 266 |
|
if (userChoseCutoff_) |
| 267 |
|
atypeCutoff[atid] = userCutoff_; |
| 268 |
< |
else |
| 268 |
> |
else |
| 269 |
|
atypeCutoff[atid] = interactionMan_->getSuggestedCutoffRadius(*at); |
| 270 |
|
} |
| 271 |
< |
|
| 271 |
> |
|
| 272 |
|
vector<RealType> gTypeCutoffs; |
| 273 |
|
// first we do a single loop over the cutoff groups to find the |
| 274 |
|
// largest cutoff for any atypes present in this group. |
| 328 |
|
vector<RealType> groupCutoff(nGroups_, 0.0); |
| 329 |
|
groupToGtype.resize(nGroups_); |
| 330 |
|
for (int cg1 = 0; cg1 < nGroups_; cg1++) { |
| 329 |
– |
|
| 331 |
|
groupCutoff[cg1] = 0.0; |
| 332 |
|
vector<int> atomList = getAtomsInGroupRow(cg1); |
| 332 |
– |
|
| 333 |
|
for (vector<int>::iterator ia = atomList.begin(); |
| 334 |
|
ia != atomList.end(); ++ia) { |
| 335 |
|
int atom1 = (*ia); |
| 336 |
|
atid = idents[atom1]; |
| 337 |
< |
if (atypeCutoff[atid] > groupCutoff[cg1]) { |
| 338 |
< |
groupCutoff[cg1] = atypeCutoff[atid]; |
| 339 |
< |
} |
| 337 |
> |
if (atypeCutoff[atid] > groupCutoff[cg1]) |
| 338 |
> |
groupCutoff[cg1] = atypeCutoff[atid]; |
| 339 |
|
} |
| 340 |
< |
|
| 340 |
> |
|
| 341 |
|
bool gTypeFound = false; |
| 342 |
|
for (int gt = 0; gt < gTypeCutoffs.size(); gt++) { |
| 343 |
|
if (abs(groupCutoff[cg1] - gTypeCutoffs[gt]) < tol) { |
| 345 |
|
gTypeFound = true; |
| 346 |
|
} |
| 347 |
|
} |
| 348 |
< |
if (!gTypeFound) { |
| 348 |
> |
if (!gTypeFound) { |
| 349 |
|
gTypeCutoffs.push_back( groupCutoff[cg1] ); |
| 350 |
|
groupToGtype[cg1] = gTypeCutoffs.size() - 1; |
| 351 |
|
} |
| 389 |
|
|
| 390 |
|
pair<int,int> key = make_pair(i,j); |
| 391 |
|
gTypeCutoffMap[key].first = thisRcut; |
| 393 |
– |
|
| 392 |
|
if (thisRcut > largestRcut_) largestRcut_ = thisRcut; |
| 395 |
– |
|
| 393 |
|
gTypeCutoffMap[key].second = thisRcut*thisRcut; |
| 397 |
– |
|
| 394 |
|
gTypeCutoffMap[key].third = pow(thisRcut + skinThickness_, 2); |
| 399 |
– |
|
| 395 |
|
// sanity check |
| 396 |
|
|
| 397 |
|
if (userChoseCutoff_) { |