vib = Vibrations(atoms, indices=vibrateatoms, delta=0.03) vib.run() vib.summary(method='standard') # Make trajectory files to visualize the modes. for mode in range(len(vibrateatoms) * 3): vib.write_mode(mode) # Calculate free energy vib_energies = vib.get_energies() thermo = IdealGasThermo(vib_energies=vib_energies, electronicenergy=energy, atoms=atoms, geometry='linear', symmetrynumber=2, spin=0) # At 300K and 101325 Pa # change for your operating conditions freeenergy = thermo.get_gibbs_energy(temperature=300, pressure=101325) f = open(name + '.energy', 'w') f.write('Potential energy: ' + str(energy) + '\n' + 'Free energy: ' + str(freeenergy) + '\n') f.close ens = BEEF_Ensemble(calc) ens_e = ens.get_ensemble_energies() ens.write('ensemble.bee') pickle.dump(ens_e, open('ensemble.pkl', 'w'))
# number of steps numsteps = 40 # for loop that changes the distance between the atoms, fixes it, and performs # a structural optimization. results writen out as i*.traj files for step, delta in enumerate(xrange(0,30,1)): if atoms.get_distance(atom1, atom2) < threshold: break if step < numsteps: atoms.set_distance(atom1, atom2, d, fix=0.5) qn = QuasiNewton(atoms, trajectory='i'+str(delta)+'.traj') qn.run(fmax=0.05) e = atoms.get_potential_energy() print d, e print >> f, d, e f.flush() d -= 0.1 f.close() # ensemble ens = BEEF_Ensemble(calc) ens.get_ensemble_energies() ens.write('fbl.bee') del sys, calc, ens
sigma=0.1, psppath='/home/vossj/suncat/psp/gbrv1.5pbe', #pseudopotential path convergence= {'energy':1e-5, #convergence parameters 'mixing':0.1, 'nmix':10, 'mix':4, 'maxsteps':500, 'diag':'david' }, dipole={'status':True}, #dipole correction to account for periodicity in z beefensemble = True, printensemble =True, outdir='calcdir') #output directory for Quantum Espresso files # attach the espresso calculator to the surface atoms.set_calculator(calc) # optimize the structure until the maximum force is # at most 0.05 eV/AA # output will be written to "qn.traj" with optimization log # written to "qn.log" qn = QuasiNewton(atoms, trajectory='qn.traj', logfile='qn.log') qn.run(fmax=0.05) #relevant commands for saving the BEEF error ensemble #useful if you choose to perform error analysis ens = BEEF_Ensemble(calc) ens_e = ens.get_ensemble_energies() ens.write('ensemble.bee') pickle.dump(ens_e,open('ensemble.pkl','w'))
import_str = 'from ase.optimize import ' + self.optimizer + ' as QN' exec(import_str) kwargs = dict(trajectory=self.name + '.traj', logfile=self.name + '_qn.log', restart=self.name + '_qn.pkl') kwargs.update(self.optimizer_kwargs) dyn = QN(self.atoms, **kwargs) dyn.run(**self.task_parameters) barrier() opt.converged_text = str(self.atoms.get_potential_energy()) opt.make_converged_file() ################################################################################ # End class definitions. Search EOCD to skip to here # ################################################################################ opt = GeometryOptimization('.') opt.calculator = calc opt.get_atoms() opt.prepare_atoms() opt.prepare_calculator() opt.prepare_directory() opt.run() # ensemble ens = BEEF_Ensemble(calc) ens.get_ensemble_energies() ens.write('qn.bee') del sys, calc, ens
# number of steps numsteps = 40 # for loop that changes the distance between the atoms, fixes it, and performs # a structural optimization. results writen out as i*.traj files for step, delta in enumerate(xrange(0, 30, 1)): if atoms.get_distance(atom1, atom2) < threshold: break if step < numsteps: atoms.set_distance(atom1, atom2, d, fix=0.5) qn = QuasiNewton(atoms, trajectory='i' + str(delta) + '.traj') qn.run(fmax=0.05) e = atoms.get_potential_energy() print d, e print >> f, d, e f.flush() d -= 0.1 f.close() # ensemble ens = BEEF_Ensemble(calc) ens.get_ensemble_energies() ens.write('fbl.bee') del sys, calc, ens