Commit ff7f1035 authored by Peter Eastman's avatar Peter Eastman
Browse files

The test for identical exceptions between nonbonded forces is order insensitive

parent 1de2e2a0
...@@ -106,11 +106,13 @@ void CudaNonbondedUtilities::requestExclusions(const vector<vector<int> >& exclu ...@@ -106,11 +106,13 @@ void CudaNonbondedUtilities::requestExclusions(const vector<vector<int> >& exclu
if (anyExclusions) { if (anyExclusions) {
bool sameExclusions = (exclusionList.size() == atomExclusions.size()); bool sameExclusions = (exclusionList.size() == atomExclusions.size());
for (int i = 0; i < (int) exclusionList.size() && sameExclusions; i++) { for (int i = 0; i < (int) exclusionList.size() && sameExclusions; i++) {
if (exclusionList[i].size() != atomExclusions[i].size()) if (exclusionList[i].size() != atomExclusions[i].size())
sameExclusions = false; sameExclusions = false;
for (int j = 0; j < (int) exclusionList[i].size(); j++) set<int> expectedExclusions;
if (exclusionList[i][j] != atomExclusions[i][j]) expectedExclusions.insert(atomExclusions[i].begin(), atomExclusions[i].end());
sameExclusions = false; for (int j = 0; j < (int) exclusionList[i].size(); j++)
if (expectedExclusions.find(exclusionList[i][j]) == expectedExclusions.end())
sameExclusions = false;
} }
if (!sameExclusions) if (!sameExclusions)
throw OpenMMException("All Forces must have identical exceptions"); throw OpenMMException("All Forces must have identical exceptions");
......
...@@ -133,8 +133,10 @@ void OpenCLNonbondedUtilities::requestExclusions(const vector<vector<int> >& exc ...@@ -133,8 +133,10 @@ void OpenCLNonbondedUtilities::requestExclusions(const vector<vector<int> >& exc
for (int i = 0; i < (int) exclusionList.size() && sameExclusions; i++) { for (int i = 0; i < (int) exclusionList.size() && sameExclusions; i++) {
if (exclusionList[i].size() != atomExclusions[i].size()) if (exclusionList[i].size() != atomExclusions[i].size())
sameExclusions = false; sameExclusions = false;
set<int> expectedExclusions;
expectedExclusions.insert(atomExclusions[i].begin(), atomExclusions[i].end());
for (int j = 0; j < (int) exclusionList[i].size(); j++) for (int j = 0; j < (int) exclusionList[i].size(); j++)
if (exclusionList[i][j] != atomExclusions[i][j]) if (expectedExclusions.find(exclusionList[i][j]) == expectedExclusions.end())
sameExclusions = false; sameExclusions = false;
} }
if (!sameExclusions) if (!sameExclusions)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment