dw = 5000., nbands = -10, kpts=(1, 1, 1), xc = 'BEEF', outdir='outdir', psppath = "/scratch/users/colinfd/psp/gbrv", sigma = 10e-4) atoms.set_calculator(calc) dyn = QuasiNewton(atoms,logfile='out.log',trajectory='out.traj') dyn.run(fmax=0.01) electronicenergy = atoms.get_potential_energy() vib = Vibrations(atoms) # run vibrations on all atoms vib.run() vib_energies = vib.get_energies() thermo = IdealGasThermo(vib_energies=vib_energies, electronicenergy=electronicenergy, atoms=atoms, geometry='linear', # linear/nonlinear symmetrynumber=2, spin=0) # symmetry numbers from point group G = thermo.get_free_energy(temperature=300, pressure=101325.) # vapor pressure of water at room temperature e = open('e_energy.out','w') g = open('g_energy.out','w') e.write(str(electronicenergy)) g.write(str(G))
outdir='calcdir', psppath="/scratch/users/colinfd/psp/gbrv", sigma=10e-4) atoms.set_calculator(calc) dyn = QuasiNewton(atoms, logfile='out.log', trajectory='out.traj') dyn.run(fmax=0.01) electronicenergy = atoms.get_potential_energy() vib = Vibrations(atoms) # run vibrations on all atoms vib.run() vib_energies = vib.get_energies() thermo = IdealGasThermo( vib_energies=vib_energies, electronicenergy=electronicenergy, atoms=atoms, geometry='linear', # linear/nonlinear symmetrynumber=2, spin=0) # symmetry numbers from point group G = thermo.get_free_energy( temperature=300, pressure=101325.) # vapor pressure of water at room temperature e = open('e_energy.out', 'w') g = open('g_energy.out', 'w') e.write(str(electronicenergy)) g.write(str(G))
from ase import Atoms from ase.calculators.emt import EMT from ase.optimize import QuasiNewton from ase.vibrations import Vibrations from ase.thermochemistry import IdealGasThermo n2 = Atoms('N2', positions=[(0, 0, 0), (0, 0, 1.1)], calculator=EMT()) QuasiNewton(n2).run(fmax=0.01) vib = Vibrations(n2) vib.run() print vib.get_frequencies() vib.summary() print vib.get_mode(-1) vib.write_mode(-1, nimages=20) vib_energies = vib.get_energies() thermo = IdealGasThermo(vib_energies=vib_energies, geometry='linear', atoms=n2, symmetrynumber=2, spin=0) thermo.get_free_energy(temperature=298.15, pressure=2*101325.)
CO2_t = IdealGasThermo(vib_energies=CO2_vib_energies[0:4], electronicenergy=E_CO2, atoms=CO2, geometry='linear', symmetrynumber=2, spin=0) H2_t = IdealGasThermo(vib_energies=H2_vib_energies[0:0], electronicenergy=E_H2, atoms=H2, geometry='linear', symmetrynumber=2, spin=0) H2O_t = IdealGasThermo(vib_energies=H2O_vib_energies[0:3], electronicenergy=E_H2O, atoms=H2O, geometry='nonlinear', symmetrynumber=2, spin=0) # now we can compute G_rxn for a range of temperatures from 298 to 1000 K Trange = np.linspace(298, 1000, 20) # K P = 101325. # Pa Grxn = np.array([(CO2_t.get_free_energy(temperature=T, pressure=P) + H2_t.get_free_energy(temperature=T, pressure=P) - H2O_t.get_free_energy(temperature=T, pressure=P) - CO_t.get_free_energy(temperature=T, pressure=P)) * 96.485 for T in Trange]) Hrxn = np.array([(CO2_t.get_enthalpy(temperature=T) + H2_t.get_enthalpy(temperature=T) - H2O_t.get_enthalpy(temperature=T) - CO_t.get_enthalpy(temperature=T)) * 96.485 for T in Trange]) plt.plot(Trange, Grxn, 'bo-', label='$\Delta G_{rxn}$') plt.plot(Trange, Hrxn, 'ro:', label='$\Delta H_{rxn}$') plt.xlabel('Temperature (K)') plt.ylabel(r'$\Delta G_{rxn}$ (kJ/mol)') plt.legend(loc='best') plt.savefig('images/wgs-dG-T.png') plt.figure()
ibrion=2, nsw=5, atoms=atoms) as calc: electronicenergy = atoms.get_potential_energy() # next, we get vibrational modes with jasp('molecules/n2-vib', xc='PBE', encut=300, ibrion=6, nfree=2, potim=0.15, nsw=1, atoms=atoms) as calc: calc.calculate() vib_freq = calc.get_vibrational_frequencies() # in cm^1 #convert wavenumbers to energy h = 4.1356675e-15 # eV*s c = 3.0e10 #cm/s vib_energies = [h*c*nu for nu in vib_freq] print('vibrational energies\n====================') for i,e in enumerate(vib_energies): print('{0:02d}: {1} eV'.format(i,e)) # # now we can get some properties. Note we only need one vibrational # energy since there is only one mode. This example does not work if # you give all the energies because one energy is zero. thermo = IdealGasThermo(vib_energies=vib_energies[0:0], electronicenergy=electronicenergy, atoms=atoms, geometry='linear', symmetrynumber=2, spin=0) # temperature in K, pressure in Pa, G in eV G = thermo.get_free_energy(temperature=298.15, pressure=101325.)
H2_t = IdealGasThermo(vib_energies=H2_vib_energies[0:0], electronicenergy=E_H2, atoms=H2, geometry='linear', symmetrynumber=2, spin=0) H2O_t = IdealGasThermo(vib_energies=H2O_vib_energies[0:3], electronicenergy=E_H2O, atoms=H2O, geometry='nonlinear', symmetrynumber=2, spin=0) # now we can compute G_rxn for a range of temperatures from 298 to 1000 K Trange = np.linspace(298, 1000, 20) # K P = 101325. # Pa Grxn = np.array([(CO2_t.get_free_energy(temperature=T, pressure=P) + H2_t.get_free_energy(temperature=T, pressure=P) - H2O_t.get_free_energy(temperature=T, pressure=P) - CO_t.get_free_energy(temperature=T, pressure=P)) * 96.485 for T in Trange]) Hrxn = np.array([ (CO2_t.get_enthalpy(temperature=T) + H2_t.get_enthalpy(temperature=T) - H2O_t.get_enthalpy(temperature=T) - CO_t.get_enthalpy(temperature=T)) * 96.485 for T in Trange ]) plt.plot(Trange, Grxn, 'bo-', label='$\Delta G_{rxn}$') plt.plot(Trange, Hrxn, 'ro:', label='$\Delta H_{rxn}$') plt.xlabel('Temperature (K)') plt.ylabel(r'$\Delta G_{rxn}$ (kJ/mol)') plt.legend(loc='best') plt.savefig('images/wgs-dG-T.png')