Skip to content

Parsing arbitray k-points for final Wannier interpolation  #232

Open
@Koulb

Description

@Koulb

I encountered a problem with providing a set of k-points near high-symmetry points (e.g.) to estimate effective mass using Koopmans eigenvalues with finite difference formula.

To reproduce the error, one could e.g. load the .json with any calculation on a high symmetry path and then provide a new k-points list:

from koopmans.io import read
from ase.dft.kpoints import bandpath
kpath_raw =[[0.0 , 0.0 , 0.0 ],
      [0.005 , 0.0 , 0.0 ],
       ...]

wf = read('gaas.json')
cell = wf.kpoints.path.cell
kpath = bandpath(kpath_raw, cell, npoints=1)
wf.kpoints.set_path(kpath)
wf.run()

The problem of parsing non-high symmetry points results in the error:

 Wannierization
   ==============
    Not running wannier/scf as it is already complete
    Not running wannier/nscf as it is already complete
Traceback (most recent call last):
  File "eff_mass_prepare.py", line 34, in <module>
    wf.run()
  File "/home/poliukhi/soft/koopmans/src/koopmans/workflows/_workflow.py", line 361, in run
    self._run()
  File "/home/poliukhi/soft/koopmans/src/koopmans/workflows/_singlepoint.py", line 162, in _run
    dscf_workflow.run()
  File "/home/poliukhi/soft/koopmans/src/koopmans/workflows/_workflow.py", line 359, in run
    self._run()
  File "/home/poliukhi/soft/koopmans/src/koopmans/workflows/_koopmans_dscf.py", line 238, in _run
    self.perform_initialization()
  File "/home/poliukhi/soft/koopmans/src/koopmans/workflows/_koopmans_dscf.py", line 340, in perform_initialization
    wannier_workflow.run(subdirectory='init')
  File "/home/poliukhi/soft/koopmans/src/koopmans/workflows/_workflow.py", line 359, in run
    self._run()
  File "/home/poliukhi/soft/koopmans/src/koopmans/workflows/_wannierize.py", line 164, in _run
    calc_w90 = self.new_calculator(calc_type, init_orbitals=init_orbs, directory=w90_dir,
  File "/home/poliukhi/soft/koopmans/src/koopmans/workflows/_wannierize.py", line 315, in new_calculator
    calc: CalcExtType = super().new_calculator(calc_type, *args, **kwargs)
  File "/home/poliukhi/soft/koopmans/src/koopmans/workflows/_workflow.py", line 664, in new_calculator
    calc = calc_class(atoms=copy.deepcopy(self.atoms), **all_kwargs)
  File "/home/poliukhi/soft/koopmans/src/koopmans/calculators/_wannier90.py", line 33, in __init__
    CalculatorExt.__init__(self, *args, **kwargs)
  File "/home/poliukhi/soft/koopmans/src/koopmans/calculators/_utils.py", line 81, in __init__
    self.parameters.update(**kwargs)
  File "/home/poliukhi/soft/koopmans/src/koopmans/settings/_wannier90.py", line 29, in update
    self.kpath = kpath
  File "/home/poliukhi/soft/koopmans/src/koopmans/settings/_utils.py", line 112, in __setattr__
    self.__setitem__(name, value)
  File "/home/poliukhi/soft/koopmans/src/koopmans/settings/_wannier90.py", line 70, in __setitem__
    self.kpoint_path = construct_kpoint_path(
  File "/home/poliukhi/soft/ase_koopmans/ase/io/wannier90.py", line 377, in construct_kpoint_path
    path_lengths = _path_lengths(path, cell, bands_point_num)
  File "/home/poliukhi/soft/ase_koopmans/ase/io/wannier90.py", line 328, in _path_lengths
    path_list = path_str_to_list(path, special_points)
  File "/home/poliukhi/soft/ase_koopmans/ase/io/wannier90.py", line 372, in path_str_to_list
    raise ValueError(f'Could not deconstruct {path} into individual high-symmetry points')
ValueError: Could not deconstruct GKpt0Kpt1Kpt2Kpt3Kpt4Kpt5Kpt6Kpt7Kpt8Kpt9Kpt10Kpt11Kpt12Kpt13Kpt14Kpt15Kpt16Kpt17 into individual high-symmetry points

Once the problem is solved, I think it will be very easy to implement a simple and useful calculator of effective mass for arbitrary k-points.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions