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
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.
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\):
where \(\bf k\) and \(\bf K\) are fractional coordinates with regard to the PC and SC reciprocal lattice vectors, respectively. In this case:
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
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
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
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.