Atomic matrices not correctly redistributed in GLLBSC
Example script
from ase.build import molecule
from gpaw import GPAW
atoms = molecule('H2')
atoms.center(vacuum=4)
gs_calc = GPAW(mode='lcao', basis='sz(dzp)', h=0.4, xc='GLLBSC', txt='gs.out')
atoms.calc = gs_calc
atoms.get_potential_energy()
gs_calc.write('gs.gpw', mode='all')
bs_calc = gs_calc.fixed_density(txt='unocc.out')
bs_calc.write('unocc.gpw', mode='all')
The script fails in bs_calc.write()
:
$ mpirun -n 2 gpaw python test.py
...
rank=1 L15: File "test.py", line 13, in <module>
rank=1 L16: bs_calc.write('unocc.gpw', mode='all')
rank=1 L17: File ".../gpaw/calculator.py", line 232, in write
rank=1 L18: self._write(writer, mode)
rank=1 L19: File ".../gpaw/calculator.py", line 246, in _write
rank=1 L20: self.hamiltonian.write(writer.child('hamiltonian'))
rank=1 L21: File ".../gpaw/hamiltonian.py", line 507, in write
rank=1 L22: self.xc.write(writer.child('xc'))
rank=1 L23: File ".../gpaw/xc/gllb/nonlocalfunctional.py", line 137, in write
rank=1 L24: contribution.write(writer)
rank=1 L25: File ".../gpaw/xc/gllb/c_response.py", line 570, in write
rank=1 L26: writer.write(gllb_atomic_density_matrices=pack(self.D_asp))
rank=1 L27: File ".../gpaw/xc/gllb/c_response.py", line 567, in pack
rank=1 L28: X_asp[a][:] = X0_asp[a]
rank=1 L29: File ".../gpaw/arraydict.py", line 79, in __getitem__
rank=1 L30: value = self.data[a]
rank=1 L31: KeyError: 0
Another issue
The following assert fails:
from ase.build import molecule
from gpaw import GPAW
atoms = molecule('H2')
atoms.center(vacuum=4)
gs_calc = GPAW(mode='lcao', basis='sz(dzp)', h=0.4, xc='GLLBSC', txt='gs.out')
atoms.calc = gs_calc
atoms.get_potential_energy()
gs_calc.write('gs.gpw', mode='all')
bs_calc = gs_calc.fixed_density(txt='unocc.out')
assert bs_calc.hamiltonian.xc.response.D_asp.partition == bs_calc.wfs.atom_partition # Fails
bs_calc.write('unocc.gpw', mode='all')
Should this even work?
Edited by Tuomas Rossi