def valecneFunctionCreator(name, model, key2index, filter): result = ForceFieldEnergyProxy() result.name = name type = name.split('/')[0] rank = 0 if type == 'bond': rank = 2 fffunc = FunctionBond() elif type == 'angle': rank = 3 fffunc = FunctionAngle() elif type == 'torsion': rank = 4 fffunc = FunctionTorsion() elif type == 'improper_torsion': fffunc = FunctionFork2() else: assert False lists = [] start = 0 for mol, n in model.mols: data = fffunc.setup(mol, key2index) for atom, _, _ in data: for i in range(len(atom)): atom[i] = mol.index(atom[i]) natoms = len(mol.atoms) for _ in range(n): for atom, _, index in data: for j in atom: lists.append(j+start) lists.append(index) start += natoms if lists: result.lists = lists if rank != 0: screenPairList(filter, result, rank) return result else: return None
def pairCreator(name, model, key2index, filter): result = NonbondEnergyProxy() result.name = name type = name.split('/')[0] rank = 0 if type == 'pair-14': fffunc = FunctionPair14() rank = 2 elif type == 'pair-13': fffunc = FunctionPair13() rank = 2 else: assert False lists = [] start = 0 for mol, n in model.mols: data = fffunc.setup(mol, key2index) for atom, _, _ in data: for i in range(len(atom)): atom[i] = mol.index(atom[i]) natoms = len(mol.atoms) for _ in range(n): for atom, _, index in data: for j in atom: lists.append(j+start) lists.append(index) start += natoms if lists: result.lists = lists if ':columnb-constant:' in key2index and hasattr(model, 'charges'): result.columnb_constant = key2index[':columnb-constant:'] if rank != 0: screenPairList(filter, result, rank) return result else: return None