[gpaw-users] TPSS band structure

Markus Meinert meinert at physik.uni-bielefeld.de
Wed Feb 15 13:39:42 CET 2012


Dear GPAW users and developers,

I am trying to compute the band structure of bcc Fe with TPSS. I can 
easily compute it with PBE, and I can obtain the ground state and DOS 
with TPSS. However, there seems to be a problem with the band structure, 
which I try to compute according to the Si tutorial. Is this the right 
way to do it? I am using gpaw 0.9.0.8711. Here's the full script, that 
computes the PBE ground state, restarts with TPSS, computes the PBE band 
structure and fails for the TPSS band structure:

################
################

import pickle
import numpy as np
from ase import *
from ase.dft.kpoints import ibz_points, get_bandpath
from ase.parallel import parprint
from gpaw import GPAW, FermiDirac, restart

def groundstate(a, k, xctype):
     atoms = Atoms(
                     'Fe',
                     [(0,0,0)],
                     cell=[(-0.5*a, 0.5*a, 0.5*a),(0.5*a, -0.5*a, 
0.5*a),(0.5*a, 0.5*a, -0.5*a)],
                     pbc=True,
                     magmoms=[2.2]
                   )

     atoms.calc = GPAW(
                         kpts=(k, k, k),
                         xc=xctype,
                         spinpol=True,
                         gpts=(16, 16, 16),
                         stencils=(5,3),
                         usesymm=True,
                         nbands=16,
                         occupations=FermiDirac(0.05),
                         parallel={'domain': 1},
                         convergence={'eigenstates': 1e-7},
                         txt='Fe-PBE.txt'
                       )
     atoms.get_potential_energy()
     return atoms

a = 2.861
k = 20

# run the PBE calculation
parprint('PBE ground state run')
system = groundstate(a, k, 'PBE')
system.calc.write('PBE.gpw', mode='all')

# run the TPSS calculation
parprint('TPSS ground state run')
system, calc = restart('PBE.gpw', txt='Fe-TPSS.txt', 
convergence={'eigenstates': 1e-7})
calc.set(xc='TPSS')
calc.get_potential_energy()
system.calc.write('TPSS.gpw', mode='all')

# calculate the band structure for PBE
parprint('band structure run for PBE')
points = ibz_points['bcc']
G = points['Gamma']
P = points['P']
H = points['H']

calc = GPAW('PBE.gpw',
             txt='PBE-bandstructure.txt',
             spinpol=True,
             parallel={'domain': 1},
             fixdensity=True,
             usesymm=None,
             convergence={'bands': 12},
             eigensolver='cg',
             occupations=FermiDirac(0.05)
            )

kpts, x, X = get_bandpath([G, H, P, G], calc.atoms.cell, npoints=100)
calc.set(kpts=kpts)
calc.get_potential_energy()

ef = calc.get_fermi_level()

e_kn_0 = np.array([calc.get_eigenvalues(k, spin=0)-ef for k in 
range(len(kpts))])
e_kn_1 = np.array([calc.get_eigenvalues(k, spin=1)-ef for k in 
range(len(kpts))])
pickle.dump((x, X, e_kn_0, e_kn_1), open('PBE.pckl', 'w'))

# calculate the band structure for TPSS
parprint('band structure run for TPSS')
calc = GPAW('TPSS.gpw',
             txt='TPSS-bandstructure.txt',
             spinpol=True,
             parallel={'domain': 1},
             fixdensity=True,
             usesymm=None,
             convergence={'bands': 12},
             eigensolver='cg',
             occupations=FermiDirac(0.05)
            )

kpts, x, X = get_bandpath([G, H, P, G], calc.atoms.cell, npoints=100)
calc.set(kpts=kpts)
calc.get_potential_energy()

ef = calc.get_fermi_level()

e_kn_0 = np.array([calc.get_eigenvalues(k, spin=0)-ef for k in 
range(len(kpts))])
e_kn_1 = np.array([calc.get_eigenvalues(k, spin=1)-ef for k in 
range(len(kpts))])
pickle.dump((x, X, e_kn_0, e_kn_1), open('TPSS.pckl', 'w'))

#######################
#######################

Traceback (most recent call last):
   File "b.py", line 28, in <module>
     calc.get_potential_energy()
   File "/home/meinert/gpaw/gpaw-0.9.0.8711/gpaw/aseinterface.py", line 
37, in get_potential_energy
     self.calculate(atoms, converge=True)
   File "/home/meinert/gpaw/gpaw-0.9.0.8711/gpaw/paw.py", line 245, in 
calculate
     self.set_positions(atoms)
   File "/home/meinert/gpaw/gpaw-0.9.0.8711/gpaw/paw.py", line 303, in 
set_positions
     self.wfs.initialize(self.density, self.hamiltonian, spos_ac)
   File "/home/meinert/gpaw/gpaw-0.9.0.8711/gpaw/wavefunctions/fdpw.py", 
line 70, in initialize
     hamiltonian.update(density)
   File "/home/meinert/gpaw/gpaw-0.9.0.8711/gpaw/hamiltonian.py", line 
202, in update
     self.update_pseudo_potential(density)
   File "/home/meinert/gpaw/gpaw-0.9.0.8711/gpaw/hamiltonian.py", line 
467, in update_pseudo_potential
     Exc = self.xc.calculate(self.finegd, density.nt_sg, self.vt_sg)
   File "/home/meinert/gpaw/gpaw-0.9.0.8711/gpaw/xc/lda.py", line 22, in 
calculate
     self.calculate_lda(e_g, n_sg, v_sg)
   File "/home/meinert/gpaw/gpaw-0.9.0.8711/gpaw/xc/gga.py", line 28, in 
calculate_lda
     self.calculate_gga(e_g, n_sg, v_sg, sigma_xg, dedsigma_xg)
   File "/home/meinert/gpaw/gpaw-0.9.0.8711/gpaw/xc/mgga.py", line 51, 
in calculate_gga
     taut_sG = self.wfs.calculate_kinetic_energy_density(self.taugrad_v)
   File "/home/meinert/gpaw/gpaw-0.9.0.8711/gpaw/wavefunctions/fd.py", 
line 95, in calculate_kinetic_energy_density
     for f, psit_G in zip(kpt.f_n, kpt.psit_nG):
TypeError: zip argument #1 must support iteration
GPAW CLEANUP for serial binary: <type 'exceptions.TypeError'> occured. 
Calling sys.exit()

############################
############################


Thanks a lot in advance,
Markus


-- 
Dipl.-Phys. Markus Meinert
---
Room D2-118
e-mail: meinert at physik.uni-bielefeld.de
Phone: +49 521 106 2661
---
Thin Films and Physics of Nanostructures
Department of Physics - D2
Bielefeld University
Universitätsstraße 25
33615 Bielefeld


More information about the gpaw-users mailing list