Commit 68593ba6 authored by Lee-Ping Wang's avatar Lee-Ping Wang
Browse files

LPW attempted bugfixes: (1) Changed unit multipliers in...

LPW attempted bugfixes: (1) Changed unit multipliers in AmoebaVdwForce::getParticleParameters (2) Sorted vectors in exclusionLists so it agrees with atomExclusions

parent 97516d42
......@@ -38,6 +38,7 @@
#include <map>
#include <sstream>
#include <utility>
// #include <cstdio> // LPW Debug Printout
using namespace OpenMM;
using std::map;
......@@ -130,6 +131,8 @@ void CustomNonbondedForce::setParticleParameters(int index, const vector<double>
}
int CustomNonbondedForce::addExclusion(int particle1, int particle2) {
// LPW Debug Printout
// printf("Pushing Exclusion particle1 = %i particle2 = %i\n",particle1,particle2);
exclusions.push_back(ExclusionInfo(particle1, particle2));
return exclusions.size()-1;
}
......
......@@ -45,6 +45,7 @@
#include "lepton/ParsedExpression.h"
#include "../src/SimTKUtilities/SimTKOpenMMRealType.h"
#include "../src/SimTKUtilities/SimTKOpenMMUtilities.h"
#include <algorithm>
#include <cmath>
#include <set>
......@@ -1828,6 +1829,19 @@ void CudaCalcCustomNonbondedForceKernel::initialize(const System& system, const
exclusionList[particle1].push_back(particle2);
exclusionList[particle2].push_back(particle1);
}
// LPW Sort the exclusion list. In JDC's 2012-10 program,
// the exclusionList can be out of order while the atomExclusions are in order,
// causing OpenMM to throw an exception.
for (int i = 0; i < numParticles; i++) {
stable_sort(exclusionList[i].begin(), exclusionList[i].end());
/*
printf("Exclusion list for particle %i is: ",i);
for (int j = 0; j < (int) exclusionList[i].size() ; j++) {
printf(" %i",exclusionList[i][j]);
}
printf("\n");
*/
}
params->setParameterValues(paramVector);
// Record the tabulated functions.
......
......@@ -32,6 +32,7 @@
#include <map>
#include <set>
#include <utility>
// #include <cstdio> // LPW Debug Printout
using namespace OpenMM;
using namespace std;
......@@ -105,12 +106,36 @@ void CudaNonbondedUtilities::addArgument(const ParameterInfo& parameter) {
void CudaNonbondedUtilities::requestExclusions(const vector<vector<int> >& exclusionList) {
if (anyExclusions) {
bool sameExclusions = (exclusionList.size() == atomExclusions.size());
// LPW Debug Printout
// printf("LPW Debug Printout 1\n");
// printf("exclusionList.size() = %i, atomExclusions.size() = %i, sameExclusions = %i\n",(int)exclusionList.size(),(int)atomExclusions.size(),sameExclusions);
// LPW Debug Printout
//for (int i = 0; i < (int) exclusionList.size(); i++) {
for (int i = 0; i < (int) exclusionList.size() && sameExclusions; i++) {
if (exclusionList[i].size() != atomExclusions[i].size())
sameExclusions = false;
if (exclusionList[i].size() != atomExclusions[i].size()) {
// LPW Debug Printout
// printf("exclusionList[%i].size() != atomExclusions[%i].size() [%i != %i]\n",i,i,(int)exclusionList[i].size(),(int)atomExclusions[i].size());
sameExclusions = false;
}
/*
else {
// LPW Debug Printout
printf("exclusionList[%i].size() = atomExclusions[%i].size() [%i = %i]\n",i,i,(int)exclusionList[i].size(),(int)atomExclusions[i].size());
}
*/
for (int j = 0; j < (int) exclusionList[i].size(); j++)
if (exclusionList[i][j] != atomExclusions[i][j])
sameExclusions = false;
if (exclusionList[i][j] != atomExclusions[i][j]) {
// LPW Debug Printout
// printf("exclusionList[%i][%i] != atomExclusions[%i][%i] {%i != %i}\n",i,j,i,j,exclusionList[i][j],atomExclusions[i][j]);
sameExclusions = false;
}
/*
else {
// LPW Debug Printout
printf("exclusionList[%i][%i] = atomExclusions[%i][%i] {%i = %i}\n",i,j,i,j,exclusionList[i][j],atomExclusions[i][j]);
}
*/
}
if (!sameExclusions)
throw OpenMMException("All Forces must have identical exceptions");
......
......@@ -301,13 +301,16 @@ UNITS = {
("AmoebaTorsionTorsionForce", "getTorsionTorsionParameters") : ( None, ()),
("AmoebaTorsionTorsionForce", "getTorsionTorsionGrid") : ( None, ()),
("AmoebaVdwForce", "getParticleParameters") : ( None, (None, None, None, 'unit.nanometer', 'unit.kilojoule_per_mole', None)),
# LPW 2012-10 : Is this a duplicate entry?
#("AmoebaVdwForce", "getParticleParameters") : ( None, (None, None, None, 'unit.nanometer', 'unit.kilojoule_per_mole', None)),
("AmoebaVdwForce", "getSigmaCombiningRule") : ( None, ()),
("AmoebaVdwForce", "getEpsilonCombiningRule") : ( None, ()),
("AmoebaVdwForce", "getParticleExclusions") : ( None, ()),
("AmoebaVdwForce", "getCutoff") : ( 'unit.nanometer', ()),
("AmoebaVdwForce", "getNonbondedMethod") : ( None, ()),
("AmoebaVdwForce", "getParticleParameters") : ( None, (None, None, 'unit.nanometer', 'unit.kilojoule_per_mole', None)),
# LPW 2012-10 Modified because it no longer returns ivIndex and classIndex.
# ("AmoebaVdwForce", "getParticleParameters") : ( None, (None, None, 'unit.nanometer', 'unit.kilojoule_per_mole', None)),
("AmoebaVdwForce", "getParticleParameters") : ( None, (None, 'unit.nanometer', 'unit.kilojoule_per_mole', None)),
("AmoebaWcaDispersionForce", "getParticleParameters") : ( None, ('unit.nanometer', 'unit.kilojoule_per_mole')),
("AmoebaWcaDispersionForce", "getAwater") : ( '1/(unit.nanometer*unit.nanometer*unit.nanometer)',()),
......
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