Unverified Commit 4ffc9e3f authored by peastman's avatar peastman Committed by GitHub
Browse files

Merge pull request #1935 from jchodera/fix-forcefield

Remove optimization to ForceField's LennardJonesGenerator that was causing issues with CHARMM conversion
parents 76d0252c 03f87950
...@@ -2391,7 +2391,7 @@ class LennardJonesGenerator(object): ...@@ -2391,7 +2391,7 @@ class LennardJonesGenerator(object):
paramsToMergedType[params] = len(mergedTypes) paramsToMergedType[params] = len(mergedTypes)
mergedTypes.append(t) mergedTypes.append(t)
mergedTypeParams.append(params) mergedTypeParams.append(params)
# Now everything is assigned. Create the A- and B-coefficient arrays # Now everything is assigned. Create the A- and B-coefficient arrays
numLjTypes = len(mergedTypes) numLjTypes = len(mergedTypes)
...@@ -2439,37 +2439,32 @@ class LennardJonesGenerator(object): ...@@ -2439,37 +2439,32 @@ class LennardJonesGenerator(object):
# Create the exceptions. # Create the exceptions.
bondIndices = _findBondsForExclusions(data, sys) bondIndices = _findBondsForExclusions(data, sys)
if self.lj14scale == 1: forceCopy = deepcopy(self.force)
# Just exclude the 1-2 and 1-3 interactions. forceCopy.createExclusionsFromBonds(bondIndices, 2)
self.force.createExclusionsFromBonds(bondIndices, 3)
self.force.createExclusionsFromBonds(bondIndices, 2) if self.force.getNumExclusions() > forceCopy.getNumExclusions() and self.lj14scale != 0:
else: # We need to create a CustomBondForce and use it to implement the scaled 1-4 interactions.
forceCopy = deepcopy(self.force)
forceCopy.createExclusionsFromBonds(bondIndices, 2) bonded = mm.CustomBondForce('%g*epsilon*((sigma/r)^12-(sigma/r)^6)' % (4*self.lj14scale))
self.force.createExclusionsFromBonds(bondIndices, 3) bonded.addPerBondParameter('sigma')
if self.force.getNumExclusions() > forceCopy.getNumExclusions() and self.lj14scale != 0: bonded.addPerBondParameter('epsilon')
# We need to create a CustomBondForce and use it to implement the scaled 1-4 interactions. sys.addForce(bonded)
skip = set(tuple(forceCopy.getExclusionParticles(i)) for i in range(forceCopy.getNumExclusions()))
bonded = mm.CustomBondForce('%g*epsilon*((sigma/r)^12-(sigma/r)^6)' % (4*self.lj14scale)) for i in range(self.force.getNumExclusions()):
bonded.addPerBondParameter('sigma') p1,p2 = self.force.getExclusionParticles(i)
bonded.addPerBondParameter('epsilon') a1 = data.atoms[p1]
sys.addForce(bonded) a2 = data.atoms[p2]
skip = set(tuple(forceCopy.getExclusionParticles(i)) for i in range(forceCopy.getNumExclusions())) if (p1,p2) not in skip and (p2,p1) not in skip:
for i in range(self.force.getNumExclusions()): type1 = data.atomType[a1]
p1,p2 = self.force.getExclusionParticles(i) type2 = data.atomType[a2]
a1 = data.atoms[p1] if (type1, type2) in self.nbfixTypes:
a2 = data.atoms[p2] sigma, epsilon = self.nbfixTypes[(type1, type2)]
if (p1,p2) not in skip and (p2,p1) not in skip: else:
type1 = data.atomType[a1] values1 = self.ljTypes.getAtomParameters(a1, data)
type2 = data.atomType[a2] values2 = self.ljTypes.getAtomParameters(a2, data)
if (type1, type2) in self.nbfixTypes: sigma = 0.5*(values1[0]+values2[0])
sigma, epsilon = self.nbfixTypes[(type1, type2)] epsilon = sqrt(values1[1]*values2[1])
else: bonded.addBond(p1, p2, (sigma, epsilon))
values1 = self.ljTypes.getAtomParameters(a1, data)
values2 = self.ljTypes.getAtomParameters(a2, data)
sigma = 0.5*(values1[0]+values2[0])
epsilon = sqrt(values1[1]*values2[1])
bonded.addBond(p1, p2, (sigma, epsilon))
parsers["LennardJonesForce"] = LennardJonesGenerator.parseElement parsers["LennardJonesForce"] = LennardJonesGenerator.parseElement
......
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