示例#1
0
def test(natoms = 40, boxl=4.):
    import pygmin.potentials.ljpshiftfast as ljpshift
    import pygmin.defaults as defaults
    from pygmin.utils.neighbor_list import makeBLJNeighborListPot
    ntypeA = int(natoms*0.8)
    ntypeB = natoms - ntypeA
    rcut = 2.5
    freezelist = range(ntypeA/2) + range(ntypeA,ntypeA+ntypeB/2)
    nfrozen = len(freezelist)
    print "nfrozen", nfrozen
    coords = np.random.uniform(-1,1,natoms*3)*(natoms)**(1./3)/2
    
    
    NLblj = ljpshift.LJpshift(natoms, ntypeA, rcut=rcut, boxl=boxl)
    blj = FreezePot(NLblj, freezelist)

    pot = makeBLJNeighborListPotFreeze(natoms, freezelist, ntypeA=ntypeA, rcut=rcut, boxl=boxl)
    #pot = FreezePot(NLpot, freezelist)
    

    
    eblj = blj.getEnergy(coords)
    print "blj energy", eblj
    
    epot = pot.getEnergy(coords)
    print "mcpot energy", epot
    
    print "difference", (epot - eblj)/eblj
    
    ret1 = defaults.quenchRoutine(coords, blj.getEnergyGradient, iprint=-11)
    np.savetxt("out.coords", ret1[0])
    print "energy from quench1", ret1[1]
    ret2 = defaults.quenchRoutine(coords, pot.getEnergyGradient, iprint=-1)
    print "energy from quench2", ret2[1]
    
    print "ret1 evaluated in both potentials", pot.getEnergy(ret1[0]), blj.getEnergy(ret1[0])
    print "ret2 evaluated in both potentials", pot.getEnergy(ret2[0]), blj.getEnergy(ret2[0])
    
    coords = ret1[0]
    e1, g1 = blj.getEnergyGradient(coords)
    e2, g2 = pot.getEnergyGradient(coords)
    print "energy difference from getEnergyGradient", (e2 - e1)
    print "largest gradient difference", np.max(np.abs(g2-g1))
    print "rms gradients", np.linalg.norm(g1)/np.sqrt(len(g1)), np.linalg.norm(g2)/np.sqrt(len(g1))

    if True:
        for subpot in pot.pot.potentials:
            nl = subpot
            print "number of times neighbor list was remade:", nl.buildcount, "out of", nl.count
    
    if False:
        try: 
            import pygmin.utils.pymolwrapper as pym
            pym.start()
            pym.draw_spheres(np.reshape(coords,[-1,3]), "A", 1)
            pym.draw_spheres(np.reshape(ret1[0],[-1,3]), "A", 2)
            pym.draw_spheres(np.reshape(ret2[0],[-1,3]), "A", 3)
        except ImportError:
            print "Could not draw using pymol, skipping this step" 
    def testBLJ(self):
        import pygmin.defaults as defaults
        X1 = np.copy(self.X1)
        X2 = np.random.uniform(-1,1,[self.natoms*3])*(float(self.natoms))**(1./3)/2
        
        #run a quench so the structure is not crazy
        ret = defaults.quenchRoutine(X2, self.pot.getEnergyGradient)
        X2 = ret[0]

        self.runtest(X1, X2, findBestPermutation)
    def testLJ_hungarian(self):
        """test findBestPermutationListOPTIM"""
        import pygmin.defaults as defaults
        X1 = np.copy(self.X1)
        X2 = np.random.uniform(-1,1,[self.natoms*3])*(float(self.natoms))**(1./3)/2
        
        #run a quench so the structure is not crazy
        ret = defaults.quenchRoutine(X2, self.pot.getEnergyGradient)
        X2 = ret[0]

        self.runtest(X1, X2, findBestPermutationListHungarian, atomlist=self.permlist[0])
 def setUp(self):
     from pygmin.potentials.ljpshiftfast import LJpshift as BLJ
     from pygmin import defaults
     
     self.natoms = 15
     self.ntypeA = int(self.natoms * .8)
     self.pot = BLJ(self.natoms, self.ntypeA)
     self.permlist = [range(self.ntypeA), range(self.ntypeA, self.natoms)]
     
     self.X1 = np.random.uniform(-1,1,[self.natoms*3])*(float(self.natoms))**(1./3)/2
     ret = defaults.quenchRoutine(self.X1, self.pot.getEnergyGradient, tol=.1)
     self.X1 = ret[0]
 def setUp(self):
     from pygmin.potentials import LJ
     from pygmin import defaults
     from pygmin.mindist import CoMToOrigin
     
     self.natoms = 15
     self.pot = LJ(self.natoms)
     self.permlist = [range(self.natoms)]
     
     self.X1 = np.random.uniform(-1,1,[self.natoms*3])*(float(self.natoms))**(1./3)/2
     ret = defaults.quenchRoutine(self.X1, self.pot.getEnergyGradient, tol=.1)
     self.X1 = ret[0]
     self.X1 = CoMToOrigin(self.X1)
示例#6
0
 def setUp(self):
     from pygmin.potentials.ljpshiftfast import LJpshift as BLJ
     from pygmin import defaults
     
     self.natoms = 25
     self.ntypeA = int(self.natoms * .8)
     self.pot = BLJ(self.natoms, self.ntypeA)
     self.permlist = [range(self.ntypeA), range(self.ntypeA, self.natoms)]
     
     self.X1 = np.random.uniform(-1,1,[self.natoms*3])*(float(self.natoms))**(1./3)/2
     
     #run a quench so the structure is not crazy
     ret = defaults.quenchRoutine(self.X1, self.pot.getEnergyGradient, **defaults.quenchParams)
     self.X1 = ret[0]
示例#7
0
    def setUp(self):
        from pygmin.potentials.ljpshiftfast import LJpshift as BLJ
        from pygmin import defaults

        self.natoms = 25
        self.ntypeA = int(self.natoms * .8)
        self.pot = BLJ(self.natoms, self.ntypeA)
        self.permlist = [range(self.ntypeA), range(self.ntypeA, self.natoms)]

        self.X1 = np.random.uniform(-1, 1, [self.natoms * 3]) * (float(
            self.natoms))**(1. / 3) / 2

        #run a quench so the structure is not crazy
        ret = defaults.quenchRoutine(self.X1, self.pot.getEnergyGradient,
                                     **defaults.quenchParams)
        self.X1 = ret[0]
示例#8
0
def _optimizePermRot(X1, X2, niter, permlist, verbose=False, use_quench=True):
    if use_quench:
        pot = MinPermDistPotential(X1, X2.copy(), permlist=permlist)

    distbest = getDistxyz(X1, X2)
    mxbest = np.identity(3)
    X20 = X2.copy()
    for i in range(niter):
        #get and apply a random rotation
        aa = random_aa()
        if not use_quench:
            mx = aa2mx(aa)
            mxtot = mx
            #print "X2.shape", X2.shape
        else:
            #optimize the rotation using a permutationally invariand distance metric
            ret = defaults.quenchRoutine(aa, pot.getEnergyGradient, tol=0.01)
            aa1 = ret[0]
            mx1 = aa2mx(aa1)
            mxtot = mx1
        X2 = applyRotation(mxtot, X20)

        #optimize the permutations
        dist, X1, X2 = findBestPermutation(X1, X2, permlist)
        if verbose:
            print "dist", dist, "distbest", distbest
        #print "X2.shape", X2.shape

        #optimize the rotation
        dist, Q2 = getAlignRotation(X1, X2)
        #        print "dist", dist, "Q2", Q2
        mx2 = q2mx(Q2)
        mxtot = np.dot(mx2, mxtot)

        if dist < distbest:
            distbest = dist
            mxbest = mxtot
    return distbest, mxbest
示例#9
0
def _optimizePermRot(X1, X2, niter, permlist, verbose=False, use_quench=True):
    if use_quench:
        pot = MinPermDistPotential(X1, X2.copy(), permlist=permlist)

    distbest = getDistxyz(X1, X2)
    mxbest = np.identity(3)
    X20 = X2.copy()
    for i in range(niter):
        #get and apply a random rotation
        aa = random_aa()
        if not use_quench:
            mx = aa2mx(aa)
            mxtot = mx
            #print "X2.shape", X2.shape
        else:
            #optimize the rotation using a permutationally invariand distance metric
            ret = defaults.quenchRoutine(aa, pot.getEnergyGradient, tol=0.01)
            aa1 = ret[0]
            mx1 = aa2mx(aa1)
            mxtot = mx1
        X2 = applyRotation(mxtot, X20)
        
        #optimize the permutations
        dist, X1, X2 = findBestPermutation(X1, X2, permlist)
        if verbose:
            print "dist", dist, "distbest", distbest
        #print "X2.shape", X2.shape
        
        #optimize the rotation
        dist, Q2 = getAlignRotation(X1, X2)
#        print "dist", dist, "Q2", Q2
        mx2 = q2mx(Q2)
        mxtot = np.dot(mx2, mxtot)
        
        if dist < distbest:
            distbest = dist
            mxbest = mxtot
    return distbest, mxbest
示例#10
0
def getRandomCoords(pot, natoms):
    import numpy as np
    coords = np.random.uniform(-1,1,natoms*3)*natoms**(1./3)*1.5
    ret = defaults.quenchRoutine(coords, pot.getEnergyGradient)
    return ret
示例#11
0
        boxl = 4

    natoms = len(coords) /3
    ntypeA = int(natoms*0.8)
    rcut = 2.5
    print "natoms", natoms, "ntypea", ntypeA
    
    bljslow = ljpshift.LJpshift(natoms, ntypeA, rcut=rcut, boxl=boxl)
    blj =              LJpshift(natoms, ntypeA, rcut=rcut, boxl=boxl)
    
    ebljslow = bljslow.getEnergy(coords)
    print "blj energy slow", ebljslow
    eblj = blj.getEnergy(coords)
    print "blj energy     ", eblj
    
    print "quenching coords"
    ret1 = defaults.quenchRoutine(coords, blj.getEnergyGradient, iprint=-11)
    coords = ret1[0]
    
    ebljslow = bljslow.getEnergy(coords)
    print "blj energy slow", ebljslow
    eblj = blj.getEnergy(coords)
    print "blj energy     ", eblj