coords = db.minima()[0].coords #coords = db.transition_states()[0].coords energy = pot.getEnergy(coords) #coords = np.loadtxt("2.txt").flatten() print "global minimum energy" print energy match = ExactMatchAACluster(system.aasystem) get_pgorder = PointGroupOrderCluster(match) coords = db.minima()[0].coords hess = pot.NumericalHessian(coords, eps=1e-4) metric = system.aasystem.metric_tensor(coords) print get_pgorder(coords) frq = normalmode_frequencies(hess, metric) print "Frequencies" print frq fvib = logproduct_freq2(frq, 6)[1] print "Log product of positive frequencies" print fvib beta = 1./2.479 print "log products and temperature-weighted log products for other minima in the database" for m in db.minima(): hess = pot.NumericalHessian(m.coords, eps=1e-5) metric = system.aasystem.metric_tensor(m.coords) pgorder = get_pgorder(m.coords) frq = normalmode_frequencies(hess, metric, eps=1e-3) fvib = logproduct_freq2(frq, 6, eps=1e-3)[1]
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 = old_div(np.log(pgorder), beta) # get the hession e, g, hess = pot.getEnergyGradientHessian(min1.coords) # TODO: go to reduced coordinates here # get the eigenvalues freqs2 = normalmode_frequencies(hess) # analyze eigenvalues n, lnf = logproduct_freq2(freqs2, 6) Ffrq = (n * np.log(beta) + 0.5 * lnf / beta) # print a short summary E = pot.getEnergy(coords) print("point group order:", pgorder) print("number of zero eigenvalues:", (np.abs(freqs2) < 1e-4).sum()) print("number of negative eigenvalues:", (freqs2 < -1e-4).sum()) print("free energy at beta=%f:" % beta, E + Ffrq + Fpg) print("contributions from") print("potential energy", E) print("frequencies", Ffrq)
transform = TransformAngleAxisCluster(system.aasystem) coords = db.minima()[0].coords #coords = db.transition_states()[0].coords energy = pot.getEnergy(coords) #coords = np.loadtxt("2.txt").flatten() print energy match = ExactMatchAACluster(system.aasystem) get_pgorder = PointGroupOrderCluster(match) coords = db.minima()[0].coords hess = pot.NumericalHessian(coords, eps=1e-4) metric = system.aasystem.metric_tensor(coords) print get_pgorder(coords) frq = normalmode_frequencies(hess, metric) print frq fvib = logproduct_freq2(frq, 6)[1] print fvib beta = 1. / 2.479 for m in db.minima(): hess = pot.NumericalHessian(m.coords, eps=1e-5) metric = system.aasystem.metric_tensor(m.coords) pgorder = get_pgorder(m.coords) frq = normalmode_frequencies(hess, metric, eps=1e-3) fvib = logproduct_freq2(frq, 6, eps=1e-3)[1] print fvib, 0.5 * fvib / beta m.pgorder = pgorder m.fvib = fvib
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) # TODO: go to reduced coordinates here # get the eigenvalues freqs2 = normalmode_frequencies(hess) # analyze eigenvalues n, lnf = logproduct_freq2(freqs2, 6) Ffrq = (n*np.log(beta) + 0.5*lnf /beta) # print a short summary E = pot.getEnergy(coords) print "point group order:", pgorder print "number of zero eigenvalues:", (np.abs(freqs2) < 1e-4).sum() print "number of negative eigenvalues:", (freqs2 < -1e-4).sum() print "free energy at beta=%f:"%beta, E + Ffrq + Fpg print "contributions from" print "potential energy", E print "frequencies", Ffrq