class Pairwise(ForceCategory): """Pairwise force category. It handles constructing a neighbor-list at each time-step. """ instance = None @staticmethod def get_instance(*args): if(len(args) == 0 or args[0] is None): #doesn't care about cutoff return Pairwise.instance if(Pairwise.instance is None): Pairwise.instance = Pairwise(args[0]) else: #check cutoff if(Pairwise.instance.cutoff - args[0] < 0): raise RuntimeError("Incompatible cutoffs: Already set to %g, not %g" % (Pairwise.instance.cutoff,args[0])) return Pairwise.instance def __init__(self, cutoff=12): super(Pairwise, self).__init__() self.cutoff = cutoff self.forces = [] self.nlist_obj = None def _build_nlist(self, u): if(self.nlist_obj is None): self.nlist_obj = NeighborList(u, self.cutoff) self.nlist, self.nlist_lengths = self.nlist_obj.build_nlist(u) self.nlist_ready = True def _setup(self, u): if(not self.nlist_ready): self._build_nlist(u) def _teardown(self): self.nlist_ready = False def pair_exists(self, u, type1, type2): return True def __reduce__(self): return Pairwise, (self.cutoff,)
def _build_nlist(self, u): if(self.nlist_obj is None): self.nlist_obj = NeighborList(u, self.cutoff) self.nlist, self.nlist_lengths = self.nlist_obj.build_nlist(u) self.nlist_ready = True