Skip to content

Example 1: Perfect Hydrogen Supercell

Perfect \(2 \times 1 \times 1\) Hydrogen box

In this example, we will unfold the band structure of a \(2\times 1 \times 1\) Hydrogen supercell (SC) back to the primitive cell (PC) along the PC k-path \(\Gamma (0, 0, 0) - X (0.5 ,0,0)\). Besides the basic input files geometry.in and control.in as other calculations in FHI-aims, two additional files named transformation_matrix.dat and unfolding_map.dat are needed.

Geometry

An example geometry.in of a \(2 \times 1 \times 1\) Hydrogen supercell shows below, which can be visualized on GIMS.

lattice_vector 3.0000000000000000 0.0000000000000000 0.0000000000000000 
lattice_vector 0.0000000000000000 1.5000000000000000 0.0000000000000000 
lattice_vector 0.0000000000000000 0.0000000000000000 1.5000000000000000 
atom           0.0000000000000000 0.0000000000000000  0.0000000000000000 H
atom           1.5000000000000000 0.0000000000000000  0.0000000000000000 H
In comparsion, the primitive cell we want to unfold back to is:

lattice_vector 1.5000000000000000 0.0000000000000000 0.0000000000000000 
lattice_vector 0.0000000000000000 1.5000000000000000 0.0000000000000000 
lattice_vector 0.0000000000000000 0.0000000000000000 1.5000000000000000
atom           0.0000000000000000 0.0000000000000000  0.0000000000000000 H

Before performing the band unfolding calculation, we can anticipate the result by comparing the band structures of SC and PC:

The PC bands along \(\Gamma (0, 0, 0) - X (0.5 ,0,0)\) are folded into the smaller Brillouin zone (BZ) of SC, resulting in double bands at each SC K-point. Since the above SC structure consists of identical PC replicas without any displacement, both systems share the same physical properties and translational symmetry. Consequently, band unfolding will reproduce exactly the PC band structure exactly.

Control tags

In FHI-aims, the band unfolding calculation in FHI-aims is invoked by the keyword bs unfolding, used alongside the band structure calculation keyword output band.

output band -0.5 0.0 0.0   0.5 0.0 0.0     65 
bs_unfolding  .true.
In this example, we aim to unfold the SC bands into PC k-path \(\Gamma (0, 0, 0) - X (0.5 ,0,0)\). To achieve this, we need to specify the corresponding SC K-path in the control.in, which will fold back onto the desired PC k-path. Generally, the PC k-point \({\bf k} = (k_x, k_y, k_z)\) fold to which SC K-point \({\bf K} = (K_x, K_y, K_z)\) is determined by the transformation matrix \(\bf M\):

\[{\bf K} = {\bf k} \cdot {\bf M}\]

where \(\bf k\) and \(\bf K\) are fractional coordinates with regard to the PC and SC reciprocal lattice vectors, respectively. In this case:

\[ {\bf M} = \begin{pmatrix} 2 & 0 & 0 \\\ 0 & 1 & 0 \\\ 0 & 0 & 1 \end{pmatrix} \]

Thus PC k-path \(\Gamma (0, 0, 0) - X (0.5 ,0,0)\) will fold into SC K-path \({\bf \Gamma} (0, 0, 0) - {\bf 2X}(1.0 ,0,0)\), send it back to the 1st BZ of SC is \({\bf -X} (-0.5, 0, 0) - {\bf X} (0.5 ,0,0)\). This is the SC \(\bf K\)-path we need to write in the control.in.

Warning

In this case, the transformation matrix \(\bf M\) is diagonal, thus the SC K-path and PC k-path are collinear. Generally, if \(\bf M\) is non-diagonal, PC k-path and the corresponding SC K-path are non-collinear, which will be discussed latter.

Other input files

The file transformation_matrix.dat stores the transformation matrix \(\bf M\):

2 0 0
0 1 0
0 0 1

The file unfolding_map.dat stores the mapping relation of the SC atoms and the corresponding PC atom. In this example, this file is very simple:

1
1
Here the 1st line is 1 because the 1st atom in the SC geometry.in corresponding to PC atom 1. And the 2nd line is also 1 because the 2nd atom in the SC geometry.in corresponding to the same PC atom with the 1st SC atom. More complicated cases will be discussed in the following examples.

Run the calculation

A parallel simulation with N processes can be launced by typing

mpirun -n N your_aims.x > aims.out
The binary name your_aims.x should be replaced by your FHI-aims binary file.

Checking the result

After the FHI-aims calculation, there will be number of SC K-points in output band (in this case 65) output files named unfold_k_###.out. The format is similar to the band structure output files, an example looks like:

  -0.18750000   0.00000000   0.00000000  -0.09375000   0.00000000   0.00000000   1  21   1   1    1.000000        -20.76718092    0.000000        -11.37337163    0.000000          7.68307962    1.000000         39.95724319    1.000000         59.98046970    1.000000         61.94071090    1.000000         61.94078983    0.000000         63.10160187    0.000000         71.51346149    0.000000         71.51382452
  -0.18750000   0.00000000   0.00000000   0.40625000   0.00000000   0.00000000   1  21   2   1    0.000000        -20.76718092    1.000000        -11.37337163    1.000000          7.68307962    0.000000         39.95724319    0.000000         59.98046970    0.000000         61.94071090    0.000000         61.94078983    1.000000         63.10160187    1.000000         71.51346149    1.000000         71.51382452
  • Each line stores the unfolded band of one PC k-point. In this case, there are 2 lines because one SC K-point unfold back to 2 PC k-points.
  • The first 3 Columns -0.18750000 0.00000000 0.00000000 is the fractional coordinate of the SC K-point.
  • The next 3 Columns 0.40625000 0.00000000 0.00000000 is the fractional coordinate of the corresponding PC k-point after unfolding, which are different for each line.
  • The following 4 integers 1 21 2 1 are the SC K-path index, SC K-point index, PC k-point index unfolded from this SC K-point (i.e. line index of this file) and the spin channel, respectively.
  • All the following numbers are the unfolding weight and the corresponding energy in eV without shift by Fermi level.

In the repository, we prepared a bash script called append_kp.sh to collect all output files. Run:

./append_kp.sh
will collect all unfold_k_###.out into one file unfold_k.out.

Then a Jupyter Notebook is also provided for post-processing and visualize the unfolded band. The unfolded band along \(\Gamma (0, 0, 0) - X (0.5 ,0,0)\) looks like:

Here the color transparency indicates the unfolding weight. In this example we use SC consist with perfect duplicates of PC, the unfolding weights are either 0 or 1, thus the unfolded points have the same color. You can compare the unfolded band with the SC and PC band structure above ( the difference in y-axis is because of different energy zeros. )

Warning

For degenerate states, only the summation of all unfolding weights is reasonable. For example, in the file `unfold_k_001.out of this example we have: 0.500017 -17.37164011 0.499983 -17.37164011, the unfolding weight of -17.37164011eV is \(0.500017+0.499983 = 1\).

Solutions

You find all the solution to all the above exercises by clicking on the button below.

Show solutions to Part 1