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, :]
def guesstsATLJ(): from pygmin.potentials.ATLJ import ATLJ pot = ATLJ(Z=2.) a = 1.12 #2.**(1./6.) theta = 60. / 360 * np.pi coords1 = np.array([ 0., 0., 0., \ -a, 0., 0., \ -a/2, -a*np.cos(theta), 0. ]) coords2 = np.array([ 0., 0., 0., \ -a, 0., 0., \ a, 0., 0. ]) from pygmin.optimize import lbfgs_py as quench from pygmin.transition_states import InterpolatedPath ret1 = quench(coords1, pot.getEnergyGradient) ret2 = quench(coords2, pot.getEnergyGradient) coords1 = ret1[0] coords2 = ret2[0] from pygmin.transition_states import NEB neb = NEB(InterpolatedPath(coords1, coords2, 30), pot) neb.optimize() neb.MakeAllMaximaClimbing() #neb.optimize() for i in xrange(len(neb.energies)): if (neb.isclimbing[i]): coords = neb.coords[i, :] return pot, coords