Scissors operator for LCAO mode


Work in progress

class gpaw.lcao.scissors.Scissors(shifts: Sequence[Tuple[float, float, int]])[source]

Scissors-operator eigensolver.

The shifts are given as a sequence of tuples:

[(<shift for occupied states>,
  <shift for unoccupied states>,
  <number of atoms>),

Here we open a gap for states on atoms with indices 3, 4 and 5:

>>> eigensolver = Scissors([(0.0, 0.0, 3),
...                         (-0.5, 0.5, 3)])

In LCAO Mode we solve the following generalized eigenvalue problem:

\[\sum_\nu (H + \Delta H)_{\mu\nu} C_{\nu n} = \sum_{\nu} S_{\mu\nu} C_{\nu n} \epsilon_n,\]

where \(\Delta H\) is a scissors operator.

Space is divided into regions \(\Omega_i\) and for each region we define desired shifts of the occupied and unoccupied bands: \(\Delta_{i,\text{occ}}\) and \(\Delta_{i,\text{unocc}}\). The scissors operator is given as:

\[\Delta H = \sum_i(\Delta H^{i,\text{occ}}+\Delta H^{i,\text{unocc}}),\]


\[\Delta H_{\mu\nu}^{i,\text{occ}} = \Delta_{i,\text{occ}} \sum_{n,n'}^{\text{occ}} \sum_{\mu',\nu'\in\Omega_i} C_{n\mu}^{-1} C_{\mu'n} S_{\mu'\nu'} C_{\nu'n'} C_{n'\nu}^{-1},\]
\[\Delta H_{\mu\nu}^{i,\text{unocc}} = \Delta_{i,\text{unocc}} \sum_{n,n'}^{\text{unocc}} \sum_{\mu',\nu'\in\Omega_i} C_{n\mu}^{-1} C_{\mu'n} S_{\mu'\nu'} C_{\nu'n'} C_{n'\nu}^{-1}.\]