示例#1
0
    def setUp(self):
        from pygmin.landscape import DoubleEndedConnect
        from pygmin.landscape._graph import create_random_database
        from pygmin.systems import LJCluster
        #        from pygmin.mindist import minPermDistStochastic, MinDistWrapper
        #        from pygmin.potentials import LJ

        nmin = 10
        natoms = 13

        sys = LJCluster(natoms)

        pot = sys.get_potential()
        mindist = sys.get_mindist()

        db = create_random_database(nmin=nmin, natoms=natoms, nts=nmin / 2)
        min1, min2 = list(db.minima())[:2]

        connect = DoubleEndedConnect(min1,
                                     min2,
                                     pot,
                                     mindist,
                                     db,
                                     use_all_min=True,
                                     merge_minima=True,
                                     max_dist_merge=1e100)

        self.connect = connect
        self.db = db
        self.natoms = natoms
示例#2
0
def test():
    from pygmin.systems import LJCluster
    natoms = 13
    system = LJCluster(natoms)

    db = system.create_database()

    # get some minima
    bh = system.get_basinhopping(database=db, outstream=None)
    bh.run(100)

    manager = ConnectManager(db, clust_min=2)

    for i in range(4):
        min1, min2 = manager.get_connect_job(strategy="random")
        print "connecting", min1._id, min2._id
        connect = system.get_double_ended_connect(min1, min2, db, verbosity=0)
        connect.connect()

    print "\n\ntesting untrap"
    for i in range(10):
        min1, min2 = manager.get_connect_job(strategy="untrap")
        print min1._id, min2._id

    print "\n\ntesting combine"
    for i in range(5):
        min1, min2 = manager.get_connect_job(strategy="combine")
        print min1._id, min2._id

    print "\n\ntesting gmin"
    for i in range(5):
        min1, min2 = manager.get_connect_job(strategy="gmin")
        print min1._id, min2._id
def guessts(coords1, coords2, pot):
    from pygmin.optimize import lbfgs_py as quench
    #    from pygmin.mindist.minpermdist_stochastic import minPermDistStochastic as mindist
    from pygmin.transition_states import NEB
    from pygmin.systems import LJCluster
    ret1 = quench(coords1, pot.getEnergyGradient)
    ret2 = quench(coords2, pot.getEnergyGradient)
    coords1 = ret1[0]
    coords2 = ret2[0]
    natoms = len(coords1) / 3
    system = LJCluster(natoms)
    mindist = system.get_mindist()
    dist, coords1, coords2 = mindist(coords1, coords2)
    print "dist", dist
    print "energy coords1", pot.getEnergy(coords1)
    print "energy coords2", pot.getEnergy(coords2)
    from pygmin.transition_states import InterpolatedPath
    neb = NEB(InterpolatedPath(coords1, coords2, 20), pot)
    #neb.optimize(quenchParams={"iprint" : 1})
    neb.optimize(iprint=-30, nsteps=100)
    neb.MakeAllMaximaClimbing()
    #neb.optimize(quenchParams={"iprint": 30, "nsteps":100})
    for i in xrange(len(neb.energies)):
        if (neb.isclimbing[i]):
            coords = neb.coords[i, :]
    return pot, coords, neb.coords[0, :], neb.coords[-1, :]
示例#4
0
def getPairLJ(natoms=38):
    from pygmin.systems import LJCluster
    system = LJCluster(natoms)
    ret1 = system.get_random_minimized_configuration()
    ret2 = system.get_random_minimized_configuration()
    coords1, coords2 = ret1[0], ret2[0]
    E1, E2 = ret1[1], ret2[1]

    mindist = system.get_mindist()
    mindist(coords1, coords2)

    return coords1, coords2, system.get_potential(), mindist, E1, E2
示例#5
0
def size_scaling_smallest_eig(natoms):
    from pygmin.systems import LJCluster
    import time, sys
    system = LJCluster(natoms)
    pot = system.get_potential()
    quencher = system.get_minimizer(tol=10.)

    time1 = 0.
    time2 = 0.
    time3 = 0.
    time4 = 0.
    for i in range(100):
        coords = system.get_random_configuration()
        #        print "len(coords)", len(coords)
        coords = quencher(coords)[0]
        e, g, h = pot.getEnergyGradientHessian(coords)

        t0 = time.time()
        w1, v1 = get_smallest_eig(h)
        t1 = time.time()
        w, v = get_smallest_eig_arpack(h)
        t2 = time.time()
        w2, v2 = get_smallest_eig_sparse(h)
        t3 = time.time()
        w3, v3 = get_smallest_eig_nohess(coords, system, tol=1e-3)
        t4 = time.time()

        time1 += t1 - t0
        time2 += t2 - t1
        time3 += t3 - t2
        time4 += t4 - t3

        wdiff = np.abs(w - w1) / np.max(np.abs([w, w1]))
        if wdiff > 5e-3:
            sys.stderr.write(
                "eigenvalues for dense  are different %g %g normalized diff %g\n"
                % (w1, w, wdiff))
        wdiff = np.abs(w - w2) / np.max(np.abs([w, w2]))
        if wdiff > 5e-2:
            sys.stderr.write(
                "eigenvalues for sparse are different %g %g normalized diff %g\n"
                % (w2, w, wdiff))
        wdiff = np.abs(w - w3) / np.max(np.abs([w, w3]))
        if wdiff > 5e-2:
            sys.stderr.write(
                "eigenvalues for nohess are different %g %g normalized diff %g\n"
                % (w3, w, wdiff))


#    print "times", n, t1-t0, t2-t1, w1, w
    print "times", n, time1, time2, time3, time4
    sys.stdout.flush()
示例#6
0
def test(Connect=DoubleEndedConnect, natoms=16):
    #    from pygmin.landscape import TSGraph
    #    from pygmin.storage.database import Database
    from pygmin.systems import LJCluster
    #get min1
    system = LJCluster(natoms)
    pot, database = getSetOfMinLJ(system)
    #    from pygmin.potentials.lj import LJ
    #    pot = LJ()
    #    saveit = Database(db="test.db")
    minima = database.minima()
    min1 = minima[0]
    min2 = minima[1]
    print min1.energy, min2.energy

    mindist = system.get_mindist()

    if False:
        #test to see if min1 and min2 are already connected
        connected = graph.areConnected(min1, min2)
        print "at start are minima connected?", connected
        return

    connect = Connect(min1, min2, pot, mindist, database)
    connect.connect()

    graph = connect.graph
    if False:
        print graph
        for node in graph.graph.nodes():
            print node._id, node.energy
    for ts in graph.storage.transition_states():
        print ts.minimum1._id, ts.minimum2._id, "E", ts.minimum1.energy, ts.minimum2.energy, ts.energy

    ret = graph.getPath(min1, min2)
    if ret is None:
        print "no path found"
        return
    distances, path = ret
    with open("path.out", "w") as fout:
        for i in range(len(path) - 1):
            m1 = path[i]
            m2 = path[i + 1]
            n1 = m1._id
            m2 = m2._id
            #            ts = graph._getTS(n1, n2)
            #            print "path", n1, "->", n2, m1.E, "/->", ts.E, "\->", m2.E
            fout.write("%f\n" % m1.energy)
            fout.write("%f\n" % ts.energy)
        m2 = path[-1]
        n2 = m2._id
        fout.write("%f\n" % m2.energy)
示例#7
0
    def setUp(self):
        from pygmin.systems import LJCluster
        natoms = 10
        self.system = LJCluster(natoms)
        system = self.system
        self.pot = system.get_potential()
        quencher = system.get_minimizer(tol=2.)
        x = system.get_random_configuration()
        ret = quencher(x)
        self.x = ret[0]

        self.xmin = system.get_random_minimized_configuration()[0]

        e, g, self.h = self.pot.getEnergyGradientHessian(self.x)
        e, g, self.hmin = self.pot.getEnergyGradientHessian(self.xmin)
示例#8
0
    def setUp(self):
        from pygmin.systems import LJCluster
        natoms = 31
        self.system = LJCluster(natoms)
        self.pot = self.system.get_potential()

        # get a partially minimized structure
        x0 = self.system.get_random_configuration()
        ret = lbfgs_py(x0, self.pot.getEnergyGradient, tol=1.e-1)
        self.x0 = ret[0]
        self.E0 = ret[1]

        ret = lbfgs_py(self.x0, self.pot.getEnergyGradient, tol=1e-7)
        self.x = ret[0]
        self.E = ret[1]
示例#9
0
def spawnlj(**kwargs):
    from pygmin.systems import LJCluster
    from pygmin.config import config
    import os
    natoms = 13
    sys = LJCluster(natoms)
    db = sys.create_database()
    x1, E1 = sys.get_random_minimized_configuration()[:2]
    x2, E2 = sys.get_random_minimized_configuration()[:2]
    m1 = db.addMinimum(E1, x1)
    m2 = db.addMinimum(E2, x2)

    optim = "/home/js850/git/OPTIM/source/build/OPTIM"
    optim = config.get("exec", "OPTIM")
    optim = os.path.expandvars(os.path.expanduser(optim))
    spawner = SpawnOPTIM_LJ(x1, x2, sys, OPTIM=optim, **kwargs)
    spawner.run()
    spawner.load_results(db)
示例#10
0
def get_database(natoms=13, nconn=5):
    """create a database for a lennard jones system
    
    fill it with minima from a basinhopping run, then connect
    some of those minima using DoubleEndedConnect
    """
    ljsys = LJCluster(natoms)
    db = ljsys.create_database()
    bh = ljsys.get_basinhopping(database=db, outstream=None)
    while (len(db.minima()) < nconn + 1):
        bh.run(100)

    minima = list(db.minima())
    m1 = minima[0]
    for m2 in minima[1:nconn + 1]:
        connect = ljsys.get_double_ended_connect(m1, m2, db)
        connect.connect()

    return db
示例#11
0
#    print "times", n, t1-t0, t2-t1, w1, w
    print "times", n, time1, time2, time3, time4
    sys.stdout.flush()


def plot_hist(hess):
    import pylab as pl
    pl.hist(np.log10(np.abs(hess.reshape(-1))))
    pl.show()


if __name__ == "__main__":
    from pygmin.systems import LJCluster
    natoms = 30
    system = LJCluster(natoms)
    pot = system.get_potential()
    coords = system.get_random_configuration()

    xmin = system.get_random_minimized_configuration()[0]
    e, g, h = pot.getEnergyGradientHessian(xmin)
    evals = get_eigvals(h)
    print evals

    quencher = system.get_minimizer(tol=10.)
    coords = quencher(coords)[0]
    e, g, h = pot.getEnergyGradientHessian(coords)
    w1, v1 = get_smallest_eig(h)
    print w1
    w, v = get_smallest_eig_arpack(h)
    print w
示例#12
0
        #########################################################################
        return self.acceptstep, self.trial_coords, self.trial_energy

    def printStep(self):
        if self.stepnum % self.printfrq == 0:
            if self.outstream != None:
                self.outstream.write("Qu   " + str(self.stepnum) + " E= " +
                                     str(self.trial_energy) +
                                     " quench_steps= " + str(self.funcalls) +
                                     " RMS= " + str(self.rms) + " Markov E= " +
                                     str(self.markovE_old) + " accepted= " +
                                     str(self.acceptstep) + "\n")

    def __getstate__(self):
        ddict = self.__dict__.copy()
        del ddict["outstream"]
        del ddict["potential"]
        return ddict  #.items()

    def __setstate__(self, dct):
        self.__dict__.update(dct)
        self.outstream = sys.stdout


if __name__ == "__main__":
    from pygmin.systems import LJCluster
    natoms = 13
    sys = LJCluster(natoms)
    bh = sys.get_basinhopping()
    bh.run(100)
示例#13
0
def create_system():
    natoms = 38
    system = LJCluster(natoms)
    return system
示例#14
0
import scipy
import numpy as np
from pygmin.systems import LJCluster
from pygmin.mindist import ExactMatchAtomicCluster
from pygmin.mindist import PointGroupOrderCluster
from pygmin.thermodynamics import normalmode_frequencies, logproduct_freq2

beta = 1.
system = LJCluster(13)

db = system.create_database()
pot = system.get_potential()

bh = system.get_basinhopping(database=db)
bh.run(50)

min1 = db.minima()[0]
coords = min1.coords
print
print "Done with basinghopping, performing frequency analysis"
print
#min1 = db.transition_states()[0]

# determine point group order of system
determine_pgorder = PointGroupOrderCluster(system.get_compare_exact())
pgorder = determine_pgorder(min1.coords)
# free energy from symmetry
Fpg = np.log(pgorder) / beta

# get the hession
e, g, hess = pot.getEnergyGradientHessian(min1.coords)
        else:
            faccept = float(ndiff_accept) / ndiff
        if faccept > self.target_new_min_accept_prob:
            driver.acceptTest.temperature *= self.Tfactor
        else:
            driver.acceptTest.temperature /= self.Tfactor
        if self.verbose:
            print "    temperature is now %.4g ratio %.4g target %.4g" % (driver.acceptTest.temperature,
                                                         faccept, self.target_new_min_accept_prob)

if __name__ == "__main__":
    import numpy as np
    from pygmin.takestep import displace
    from pygmin.systems import LJCluster
    #from pygmin.takestep import adaptive
    
    natoms = 38
    sys = LJCluster(natoms=38)
    
    
    # random initial coordinates
    coords = sys.get_random_configuration()
    
    takeStep = displace.RandomDisplacement( stepsize=0.4 )
    tsAdaptive = AdaptiveStepsizeTemperature(takeStep, interval=300, verbose=True)
    
    db = sys.create_database()
    opt = sys.get_basinhopping(database=db, takestep=tsAdaptive, coords=coords)
    opt.printfrq = 50
    opt.run(5000)
        
示例#16
0
 def setUp(self):
     natoms = 6
     self.system = LJCluster(natoms)
     self.e1 = -12.7120622568
     self.e2 = -12.302927529580728