# Bandstructure (spectral-function) unfolding

- Author:
Gabriel Constantinescu, University of Cambridge

As described in the Supplementary Information in the work of
Constantinescu and Hine [Constantinescu2015],
spectral function unfolding is the means through which one can study
the bandstructure of the primitive cell from simulations involving
(often complicated) supercells. For details theoretical descriptions,
one should visit the aforementioned article
[Constantinescu2015].

In this documentation, I will give a short explanation of the
procedures required to unfold the bandstructure in a ONETEP
“Properties” calculation. We strongly suggest that one reads the
entire document carefully before attempting any calculations, as there
are some stringent requirements along the way. Essentially,
all one will need is the following group of keywords and blocks:

```
BSUNFLD_CALCULATE : T
BSUNFLD_TRANSFORMATION : t11 t12 t13 t21 t22 t23 t31 t32 t33
%block SPECIES_BSUNFLD_GROUPS
Species_name-1 Species_name-2 ... Species_name-N
%endblock SPECIES_BSUNFLD_GROUPS
BS_PERTURBATIVE_SOC : F
BSUNFLD_NUM_ATOMS_PRIM : nat_prim
BSUNFLD_RESTART : F
BSUNFLD_NUM_EIGENVALUES : num_eigvl
%block BSUNFLD_KPOINT_PATH
fraction_G1_kpt-1 fraction_G2_kpt-1 fraction_G3_kpt-1
fraction_G1_kpt-2 fraction_G2_kpt-2 fraction_G3_kpt-2
...
fraction_G1_kpt-N fraction_G2_kpt-N fraction_G3_kpt-N
%endblock BSUNFLD_KPOINT_PATH
BSUNFLD_NUM_KPTS_PATH : num_kpts_path
```

For each in turn:

`BSUNFLD_CALCULATE`

setting this to True will enable the calculation of the unfolded spectral function. Default: False`BSUNFLD_TRANSFORMATION`

is a list of 9 integers representing the flattened transformation matrix from the primitive cell to the supercell: \(\textbf{T}= \begin{bmatrix} t11 & t12 & t13 \\ t21 & t22 & t23 \\ t31 & t32 & t33 \end{bmatrix}\), where \(\textbf{T} \begin{bmatrix} \mathbf{a_1} \\ \mathbf{a_2} \\ \mathbf{a_3} \end{bmatrix} = \begin{bmatrix} \mathbf{A_1} \\ \mathbf{A_2} \\ \mathbf{A_3} \end{bmatrix}\), with \(\mathbf{a_i}\) (\(\mathbf{A_i}\)) being the lattice vectors of the primitive cell (supercell). For instance,`BSUNFLD_TRANSFORMATION`

: 4 0 0 0 4 0 0 0 1 would correspond to an implicit 4x4x1 supercell. Default: 1 0 0 0 1 0 0 0 1, corresponding to a 1x1x1 supercell.- The block
`SPECIES_BSUNFLD_GROUPS`

contains the atoms on which we are projecting; one needs to specify the of the atoms species (can be different from the chemical symbol) on which the spectral function is projected. Currently, only one group at a time is allowed. Example:%block SPECIES_BSUNFLD_GROUPS Mo Se1 %endblock SPECIES_BSUNFLD_GROUPS

this projects onto the MoSe\(_2\) monolayer in a MoSe\(_2\)/WSe\(_2\) heterostructure, where the Se atoms belonging to the MoSe\(_2\) monolayer have been denoted as

*Se1*. - The logical keyword
`BS_PERTURBATIVE_SOC`

controls the inclusion (True) or exclusion (False) of perturbative spin-orbit coupling in our calculation. Note that if set to True, the eigenvalues are no longer spin-degenerate and one will have twice the number of states. Since this option essentially quadruples the size of the Hamiltonian and overlap matrix, the calculation will be significantly slower. Default: False. - The integer keyword
`BSUNFLD_NUM_ATOMS_PRIM`

indicates the number of atoms in the primitive cell onto which you are unfolding. This brings us to a major requirement of the code: while the projected atoms can be split across the list of all input atoms,**the former must be grouped by primitive cells, always maintaining the same order of the atoms in the primitive cells!**Example: if atoms**At1**and**At2**form a primitive cell, the input ordering “At3**At1 At2**At4**At1 At2**A3” is correct, while “At3**At1 At2**At4**At2**At3**At1**” or “At3**At1 At2**At4**At2 At1**At3” are incorrect. - The logical keyword
`BSUNFLD_RESTART`

controls whether one wishes to reuse previously calculated values for the spectral function. The restart procedure works as follows: the code writes a restart file (“unfolded\(\_\)specfunc\(\_\)red.dat”) where it stores the calculated values for the unfolded spectral function at unique k-points of the monolayer - the values that have not been calculated yet are filled with zeros. If this file is present and the restart keyword is set to true, the code will read in the previously calculated values and skip them in the current computations. The final output file (“unfolded\(\_\)specfunc.dat”) will only be written once all the k-points have been dealt with.Each line in final output file or the restart file contains 8 numbers: the eigenvalue (in eV), the real part of the unfolded spectral function (at that k-point and eigenvalue), the imaginary part of the unfolded spectral function, the eigenvalue count (from 1 to \(2\cdot\) BSUNFLD\(\_\)NUM\(\_\)EIGENVALUES, the x, y, and z component of the current primitive-cell k-point (\(\AA^{-1}\)), and the index of the k-point (from 1 to the total number of considered k-points).After the final output file has been obtained, one can use a discretisation script (should be found on the ONETEP webside, in the utilities section), in order to obtain a file that is ready to plot with gnuplot. - The integer keyword
`BSUNFLD_NUM_EIGENVALUES`

controls the number of eigenvalues (above and below the Fermi level) for which the spectral function is calculated. If set to negative values,`BSUNFLD_NUM_EIGENVALUES`

will internally be set to the number of nondegenerate occupied eigenstates. Thus, in total, for each k-point, the spectral function will be calculated at \(2\cdot\)`BSUNFLD_NUM_EIGENVALUES`

. - The block
`BSUNFLD_KPOINT_PATH`

indicates the fractional coordinates of the different k-points that mark endpoints of desired paths through the**primitive-cell Brillouin zone. The fractional coordinates are with respect to the implied reciprocal lattice vectors of the primitive cell, not the simulation cell (supercell).** `BSUNFLD_NUM_KPTS_PATH`

represents the number of k-points calculated along each path from the`BSUNFLD_KPOINT_PATH`

block. This number includes the endpoints of each path. Default: 2 (the endpoints only)

[Constantinescu2015] Constantinescu, G. C.; Hine, N. D. M. *Phys. Rev. B* **2015**, *91*, 195416