def setUp(self): nmin = 10 natoms = 13 sys = LJCluster(natoms) pot = sys.get_potential() mindist = sys.get_mindist() db = create_random_database(nmin=nmin, natoms=natoms, nts=old_div(nmin, 2)) min1, min2 = list(db.minima())[:2] self.db = db self.natoms = natoms self.connect = DoubleEndedConnect(min1, min2, pot, mindist, db, merge_minima=True, max_dist_merge=1e100) # for ts in db.transition_states(): # self.add_ts(ts.energy, ts.coords, # ts.minimum1.energy, ts.minimum1.coords, # ts.minimum2.energy, ts.minimum2.coords) for m in db.minima(): self.connect.dist_graph.addMinimum(m)
def get_double_ended_connect(self, min1, min2, database, **kwargs): """return a DoubleEndedConnect object See Also -------- pele.landscape """ kwargs = dict_copy_update(self.params["double_ended_connect"], kwargs) pot = self.get_potential() mindist = self.get_mindist() # attach the function which orthogonalizes to known zero eigenvectors. # This is amazingly ugly # vr: yea, we should polish this parameters stuff and give create policies instead! try: kwargs["local_connect_params"]["tsSearchParams"]["orthogZeroEigs"] except KeyError: if "local_connect_params" in kwargs: lcp = kwargs["local_connect_params"] else: lcp = kwargs["local_connect_params"] = BaseParameters() if "tsSearchParams" in lcp: tssp = lcp["tsSearchParams"] else: tssp = lcp["tsSearchParams"] = BaseParameters() if not "orthogZeroEigs" in tssp: tssp[ "orthogZeroEigs"] = self.get_orthogonalize_to_zero_eigenvectors( ) try: kwargs["local_connect_params"]["pushoff_params"]["quench"] except Exception: if not "pushoff_params" in kwargs["local_connect_params"]: kwargs["local_connect_params"][ "pushoff_params"] = BaseParameters() kwargs["local_connect_params"]["pushoff_params"][ "quench"] = self.get_minimizer() return DoubleEndedConnect(min1, min2, pot, mindist, database, **kwargs)
def test2(self): from pele.storage import Database from pele.systems import LJCluster np.random.seed(0) natoms = 13 system = LJCluster(natoms) pot = system.get_potential() mindist = system.get_mindist(niter=1) db = Database() db.addMinimum(pot.getEnergy(_x1), _x1) db.addMinimum(pot.getEnergy(_x2), _x2) m1, m2 = db.minima() connect = DoubleEndedConnect(m1, m2, pot, mindist, db, verbosity=10) connect.connect() self.assertTrue(connect.success()) path = connect.returnPath()
tsSearchParams["nfail_max"] = 200 NEBquenchParams = dict() NEBquenchParams["iprint"] = 100 NEBparams = dict() NEBparams["k"] = 5. NEBparams["image_density"] = 15 NEBparams["NEBquenchParams"] = NEBquenchParams local_connect_params = dict() local_connect_params["tsSearchParams"] = tsSearchParams local_connect_params["NEBparams"] = NEBparams myconnect = DoubleEndedConnect(min1, min2, pot, mindist, database, local_connect_params=local_connect_params, ) if (myconnect.graph.areConnected(min1, min2)): print "ALERT: The minima are already connected in the database file", dbfile print " Delete it for a fresh run." myconnect.connect() print "" print "found a path!" # the path is now saved in the database. Lets retrieve it and # print it in a more visual format # now retrieve the path for printing