def setUp(self): from pele.optimize import mylbfgs self.natoms = 10 self.coords = np.random.uniform(-1, 1., 3 * self.natoms) * self.natoms ** (-1. / 3) self.pot = LJ() ret = mylbfgs(self.coords, self.pot, tol=2.) self.coords = ret.coords self.E = self.pot.getEnergy(self.coords) self.Egrad, self.grad = self.pot.getEnergyGradient(self.coords)
def test_LJ(natoms=12, **kwargs): # pragma: no cover from pele.potentials.lj import LJ from pele.optimize import mylbfgs import pele.utils.rotations as rot from pele.mindist.permutational_alignment import permuteArray import random quench = mylbfgs lj = LJ() X1 = np.random.uniform(-1, 1, [natoms * 3]) * (float(natoms))**(1. / 3) # quench X1 ret = quench(X1, lj) X1 = ret.coords X2 = np.random.uniform(-1, 1, [natoms * 3]) * (float(natoms))**(1. / 3) # make X2 a rotation of X1 print("testing with", natoms, "atoms, with X2 a rotated and permuted isomer of X1") aa = rot.random_aa() rot_mx = rot.aa2mx(aa) for j in range(natoms): i = 3 * j X2[i:i + 3] = np.dot(rot_mx, X1[i:i + 3]) perm = list(range(natoms)) random.shuffle(perm) print(perm) X2 = permuteArray(X2, perm) import copy X1i = copy.copy(X1) X2i = copy.copy(X2) print("******************************") print("testing normal LJ ISOMER") print("******************************") test(X1, X2, lj, **kwargs) print("******************************") print("testing normal LJ non isomer") print("******************************") X2 = np.random.uniform(-1, 1, [natoms * 3]) * (float(natoms))**(1. / 3) ret = quench(X2, lj) X2 = ret.coords Y = X1.reshape([-1, 3]) Y += np.random.random(3) X1[:] = Y.flatten() test(X1, X2, lj, **kwargs) distinit = np.linalg.norm(X1 - X2) print("distinit", distinit)
def setUp(self): self.natoms = 10 self.coords = np.random.uniform(-1, 1., 3 * self.natoms) * self.natoms ** (-1. / 3) self.pot = LJ() self.E = self.pot.getEnergy(self.coords) self.Egrad, self.grad = self.pot.getEnergyGradient(self.coords) self.ilist = [] # np.zeros([self.natoms*(self.natoms-1)/2, 2]) k = 0 for i in range(self.natoms): for j in range(i): k += 1 self.ilist.append([i, j]) self.ilist = np.array(self.ilist)
""" an example for finding the minimum distance and best alignment between two lennard jones clusters """ from __future__ import print_function from builtins import range import numpy as np from pele.potentials.lj import LJ from pele.optimize import lbfgs_py from pele.mindist import MinPermDistAtomicCluster pot = LJ() natoms = 40 # get two random quenched structures to compare coords1 = np.random.rand(natoms * 3) * natoms ** (1. / 3) * 1.5 coords2 = np.random.rand(natoms * 3) * natoms ** (1. / 3) * 1.5 ret1 = lbfgs_py(coords1, pot) ret2 = lbfgs_py(coords2, pot) coords1 = ret1.coords coords2 = ret2.coords # all the atoms are permutable permlist = [list(range(natoms))] mindist = MinPermDistAtomicCluster(niter=100, permlist=permlist, verbose=False) dist, newcoords1, newcoords2 = mindist(coords1, coords2) print("")