emin = mu else: emax = mu return mu def _get_number_of_electrons(energies, weights, chemical_potential, temperature): T = temperature g = 3 - len(energies) mu = chemical_potential n = 0 for energies_spin in energies: for E, w in zip(np.array(energies_spin), weights): n += np.sum(1.0 / (1 + np.exp((E - mu) / T))) * w return n * g if __name__ == '__main__': from cogue.interface.vasp_io import Vasprunxml import sys T = 0.4 print("Temperature %f K (%f eV)" % (T / Kb, T)) vasprun = Vasprunxml(sys.argv[1]) succeeded = vasprun.parse_eigenvalues() eigvals = vasprun.get_eigenvalues() kpoints, weights = vasprun.get_kpoints() mu = get_chemical_potential(eigvals, weights, T, 16) print("Chemical potential: %f" % mu) print("Entropy (T*S): %f" % get_entropy(eigvals, weights, mu, T) * T)
return mu def _get_number_of_electrons(energies, weights, chemical_potential, temperature): T = temperature g = 3 - len(energies) mu = chemical_potential n = 0 for energies_spin in energies: for E, w in zip(np.array(energies_spin), weights): n += np.sum(1.0 / (1 + np.exp((E - mu) / T))) * w return n * g if __name__ == '__main__': from cogue.interface.vasp_io import Vasprunxml import sys T = 0.4 print "Temperature %f K (%f eV)" % (T / Kb, T) vasprun = Vasprunxml(sys.argv[1]) succeeded = vasprun.parse_eigenvalues() eigvals = vasprun.get_eigenvalues() kpoints, weights = vasprun.get_kpoints() mu = get_chemical_potential(eigvals, weights, T, 16) print "Chemical potential:", mu print "Entropy (T*S):", get_entropy(eigvals, weights, mu, T) * T
def test_Vasprunxml(self): vxml = Vasprunxml("vasprun-energy.xml") vxml.parse_calculation() vxml.parse_eigenvalues() print "Forces:" print vxml.get_forces() print "Stress:" print vxml.get_stress() print "Lattice:" print vxml.get_lattice() print "Atomic points:" print vxml.get_points() print "Energy:" print vxml.get_energies() print "Eigenvalues:" print vxml.get_eigenvalues() print "Kpoints:" print vxml.get_kpoints() print "Occupancies:" print vxml.get_occupancies() print "Born charges" print vxml.get_born_charges() print "Epsilon" print vxml.get_epsilon()