Commit f9540d88 authored by tic20's avatar tic20
Browse files

Also cache proper torsion search.

Has a much smaller effect compared to caching the improper search, but non-negligible and easy to do.
parent c3e361d2
...@@ -1968,12 +1968,15 @@ class PeriodicTorsionGenerator(object): ...@@ -1968,12 +1968,15 @@ class PeriodicTorsionGenerator(object):
else: else:
force = existing[0] force = existing[0]
wildcard = self.ff._atomClasses[''] wildcard = self.ff._atomClasses['']
proper_cache = {}
for torsion in data.propers: for torsion in data.propers:
type1 = data.atomType[data.atoms[torsion[0]]] type1, type2, type3, type4 = [data.atomType[data.atoms[torsion[i]]] for i in range(4)]
type2 = data.atomType[data.atoms[torsion[1]]] sig = (type1, type2, type3, type4)
type3 = data.atomType[data.atoms[torsion[2]]] sig = frozenset((sig, sig[:-1]))
type4 = data.atomType[data.atoms[torsion[3]]] match = proper_cache.get(sig, None)
match = None if match == -1:
continue
if match is None:
for index in self.propersForAtomType[type2]: for index in self.propersForAtomType[type2]:
tordef = self.proper[index] tordef = self.proper[index]
types1 = tordef.types1 types1 = tordef.types1
...@@ -1986,6 +1989,10 @@ class PeriodicTorsionGenerator(object): ...@@ -1986,6 +1989,10 @@ class PeriodicTorsionGenerator(object):
match = tordef match = tordef
if not hasWildcard: if not hasWildcard:
break break
if match is None:
proper_cache[sig] = -1
else:
proper_cache[sig] = match
if match is not None: if match is not None:
for i in range(len(match.phase)): for i in range(len(match.phase)):
if match.k[i] != 0: if match.k[i] != 0:
......
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