4.3. Complex energy band structure

For periodic solids, the wave function in the Schrodinger equation

\[H\Psi_{nk}=E_{nk}S\Psi_{nk},\]

where \(S\) is the overlap matrix, can be written as

\[\Psi_{nk}(r)=e^{-ik\cdot r}U_{nk}(r),\]

where \(U_{nk}(r)\) is a periodic function with the same periodicity as the crystal itself. In general in the band structure calculations, the wave vector \(k\) is a real number. By solving the above Schrodinger equation the eigenvectors corresponding to different \(k\) values (usually located on the high symmetry line of the first Brillouin zone) are obtained, thereby determining the eigenenergy \(E_{nk}\) ( i.e., the band structure).

When calculating the complex band structure, the energy \(E\) is fixed and the value of \(k\) that satisfies the Schrodinger equation is solved. This solution can obtain real and complex \(k\). The solution of real \(k\) is the usual Bloch state, while the solution with imaginary part is exponentially decreasing in one direction and increasing in the opposite direction. Such solutions are usually not stable in bulk materials and are therefore usually ignored in band structure calculations. However, they can exist at surfaces or interfaces.

The complex band structure calculations thus provide a deeper understanding of the electronic structure of materials, particularly in scenarios where non-standard electronic behavior plays a critical role, such as in devices that exploit quantum mechanical effects [PCH04].

In this tutorial, we will learn how to calculate the complex band structure in a silicon (Si) and magnesium oxide (MgO) crystal along (100) (Fig. 4.3.1) using NanoDCAL.

../../_images/Si-MgO-struc.png

Fig. 4.3.1 The silicon (Si) and magnesium oxide (MgO) conventional cells along (100).

The calculation steps are given as follows:

  1. Build the structures:

    • Generate the Si(100) conventional cell using ASE.

    • Generate the MgO(100) conventional cell using ASE.

  2. Self-consistent (SCF) calculations:

    • Perform the ground state calculation for Si and MgO to obtain the converged electronic density.

  3. Complex band structure calculation:

    • Calculate the complex band structure along the (100) direction.

  4. Analysis and visualization:

    • Plot the complex band structure results.

4.3.1. Build the structures

Generating the Si(100) conventional cell

The Si(100) conventional diamond cubic cell can be automatically generated using the provided Python script gen_Si100.py. To execute this script, the user must install the required Python packages:

  1. ase (Atomic Simulation Environment)

  2. numpy

These packages can be installed using the command below:

pip install ase numpy

Note

It is highly recommended to use an isolated environment, such as a Python virtual environment or a Conda environment, when installing additional Python modules on your system, in order to prevent potential conflicts with dependencies from other projects.

Generate the Si(100) conventional cell in XYZ (Si100.xyz) and HZW (Si100.hzw) formats by running:

python gen_Si100.py

The structure is constructed using the lattice parameter a = 5.4307 Å for the conventional diamond cubic cell (space group Fd-3m) with 8 atoms.

Generating the MgO(100) conventional cell

The MgO(100) conventional rock-salt cell can be generated using the provided Python script gen_MgO100.py.

Generate the MgO(100) conventional cell in XYZ (MgO100.xyz) and HZW (MgO100.hzw) formats by running:

python gen_MgO100.py

The structure is constructed using the lattice parameter a = 4.2112 Å for the conventional rock-salt cell (space group Fm-3m) with 8 atoms.

Tip

To make the calculations faster, we will not optimize the atom positions and cell vectors for the purposes of this tutorial. However, ensure that the equilibrium geometry is confirmed for other projects.

4.3.2. SCF for Si and MgO along (100)

Generating the NanoDCAL input files

Once the Si(100) and MgO(100) structures have been set up, the user can generate the NanoDCAL input files using the provided Python scripts.

Generate the Si SCF input file (Si.scf.input) by running:

python gen_scf_input_Si100.py

Generate the MgO SCF input file (MgO.scf.input) by running:

python gen_scf_input_MgO100.py

The Python scripts (gen_scf_input_Si100.py and gen_scf_input_MgO100.py) read the XYZ files and automatically construct the NanoDCAL input with the correct cell vectors and atomic positions.

Si(100) scf input file

%%What quantities should be calculated
calculation.name = scf
%Basic setting
calculation.occupationFunction.temperature = 300
calculation.realspacegrids.E_cutoff = 80 Hartree
calculation.xcFunctional.Type = LDA_PZ81
calculation.k_spacegrids.number = [ 4 4 4 ]'

system.centralCellVectors = [[5.4307 0 0]' [3.32534e-16 5.4307 0]' [3.32534e-16 3.32534e-16 5.4307]']
system.spinType = NoSpin

%Iteration control
calculation.SCF.monitoredVariableName = {'rhoMatrix','hMatrix','totalEnergy','bandEnergy','gridCharge','orbitalCharge'}
calculation.SCF.convergenceCriteria = {1e-04,1e-04,[],[],[],[]}
calculation.SCF.maximumSteps = 200
calculation.SCF.mixMethod = Pulay
calculation.SCF.mixRate = 0.1
calculation.SCF.mixingMode = H
calculation.SCF.startingMode = H
%calculation.SCF.donatorObject = NanodcalObject.mat

%Basic set
system.neutralAtomDataDirectory = './pseudos'
system.atomBlock = 8
AtomType OrbitalType X Y Z
Si  LDA-DZP 0.00000000      0.00000000      0.00000000
Si  LDA-DZP 2.71535000      0.00000000      2.71535000
Si  LDA-DZP 0.00000000      2.71535000      2.71535000
Si  LDA-DZP 2.71535000      2.71535000      0.00000000
Si  LDA-DZP 1.35767500      1.35767500      1.35767500
Si  LDA-DZP 4.07302500      1.35767500      4.07302500
Si  LDA-DZP 1.35767500      4.07302500      4.07302500
Si  LDA-DZP 4.07302500      4.07302500      1.35767500
end

MgO scf input file

%%What quantities should be calculated
calculation.name = scf

%Basic setting
calculation.occupationFunction.temperature = 300
calculation.realspacegrids.E_cutoff = 80 Hartree
calculation.xcFunctional.Type = LDA_PZ81
calculation.k_spacegrids.number = [ 4 4 4 ]'

system.centralCellVectors = [[4.2112 0 0]' [2.57862e-16 4.2112 0]' [2.57862e-16 2.57862e-16 4.2112]']
system.spinType = NoSpin

%Iteration control
calculation.SCF.monitoredVariableName = {'rhoMatrix','hMatrix','totalEnergy','bandEnergy','gridCharge','orbitalCharge'}
calculation.SCF.convergenceCriteria = {1e-04,1e-04,[],[],[],[]}
calculation.SCF.maximumSteps = 200
calculation.SCF.mixMethod = Pulay
calculation.SCF.mixRate = 0.1
calculation.SCF.mixingMode = H
calculation.SCF.startingMode = H
%calculation.SCF.donatorObject = NanodcalObject.mat

%Basic set
system.neutralAtomDataDirectory = './pseudos'
system.atomBlock = 8
AtomType OrbitalType X Y Z
Mg  LDA-DZP 0.00000000      0.00000000      0.00000000
Mg  LDA-DZP 2.10560000      0.00000000      2.10560000
Mg  LDA-DZP 0.00000000      2.10560000      2.10560000
Mg  LDA-DZP 2.10560000      2.10560000      0.00000000
O   LDA-DZP 0.00000000      0.00000000      2.10560000
O   LDA-DZP 2.10560000      0.00000000      0.00000000
O   LDA-DZP 0.00000000      2.10560000      0.00000000
O   LDA-DZP 2.10560000      2.10560000      2.10560000
end

The simulation parameters are defined by keywords. The most relevant keywords are:

  • calculation.name This input parameter specifies the type of the calculation.

  • calculation.realspacegrids.E_cutoff The energy cutoff for the real space grid in Hartree.

  • calculation.xcFunctional.Type The exchange-correlation functional. Here we use the LDA-PZ81 functional.

  • calculation.k_spacegrids.number The k-point grid for sampling the Brillouin zone.

  • system.centralCellVectors The lattice vectors defining the unit cell.

  • system.spinType The spin treatment in the calculation. NoSpin means spin-degenerate calculation.

  • calculation.SCF.convergenceCriteria Convergence criteria for density matrix and Hamiltonian matrix.

  • system.neutralAtomDataDirectory Path to the pseudopotential files.

  • system.atomBlock Number of atoms in the unit cell, followed by the atomic positions.

Warning

Before running the calculation, make sure to copy the pseudopotential files (Si_LDA-DZP.mat, Mg_LDA-DZP.mat, and O_LDA-DZP.mat) from the NanoDCAL database to the ./pseudos directory. To download the pseudopotentials access the Nanoacademic-portal.

Running the SCF calculations

Now we are ready to run the SCF calculations. Execute NanoDCAL with the following commands:

nanodcal Si.scf.input
nanodcal MgO.scf.input

After each calculation is finished, the following output files are generated:

  • NanodcalObject.mat: Contains the converged electronic structure data required for subsequent calculations.

  • log.txt: Contains the calculation log with SCF convergence information.

  • TotalEnergy.mat: Contains the total energy and its components.

Note

The NanodcalObject.mat files are required for the complex band structure calculations.

4.3.3. The complex band structure calculation

Generating the complex band structure input file

With the converged SCF solution in NanodcalObject.mat, we can now calculate the complex band structure. Use the provided Python script gen_cbs_input.py to generate the input file.

Generate the complex band structure input file (ComplexBandStructure.input) by running:

python gen_cbs_input.py

Complex band structure input file:

system.object = NanodcalObject.mat
calculation.name = complexBandStructure
calculation.complexBandStructure.kSpaceGridNumber = [ 0 0 0 ]'
calculation.complexBandStructure.energyRange = [-15,10]
calculation.complexBandStructure.numberOfEnergyPoints = 401
%calculation.complexBandStructure.plot = true
%calculation.complexBandStructure.fullplot = true
calculation.control.xml = true

The keywords specify the following:

  • calculation.complexBandStructure.kSpaceGridNumber The number of small \(k\)-space grids in each direction which, together with kSpaceGridShift, is used to produce the parameter kSpacePoints. The default value is [1 1 1]

  • calculation.complexBandStructure.energyRange This parameter and numberOfEnergyPoints are used to produce the parameter energyPoints. Note that its values are measured from the Fermi energy.

  • calculation.complexBandStructure.numberOfEnergyPoints The energy points at which the complex-band structure is to be calculated.

Important

When performing complex-band structure calculation, one and only one of the three fractional coordinates of wavevectors, \(k_{1}\), \(k_{2}\), and \(k_{3}\), is allowed to be a complex number, while the other two are real. whatDirection is used to indicate the complex one. e.g., whatDirection = 2 means that \(k_{2}\) can be a complex number while \(k_{1}\) and \(k_{3}\) are kept real.

Possible values: 1, 2, or 3.

default value: 3

To include this flag use:

calculation.complexBandStructure.whatDirection = 3

Run the complex band structure calculation for both systems:

nanodcal ComplexBandStructure.input

After the calculation is finished, the following output files are generated:

  • CalculatedResults.mat;

  • log.txt;

  • ComplexBandStructure.mat;

  • ComplexBandStructure.xml.

4.3.4. Complex band structure analysis

Plotting the complex band structure

The complex band structure results can be visualized using the provided Python script plot_cbs.py.

Plot the results by running:

python plot_cbs.py ComplexBandStructure.xml "Complex Band Structure of Si(100)"
python plot_cbs.py ComplexBandStructure.xml "Complex Band Structure of MgO(100)"

Si(100)

The complex band structure of silicon, shown in Fig. 4.3.2, is rich with physical phenomena that are critical for various applications in electronics, optoelectronics, and nanotechnology [HMST].

For the Si (100) eigenvalue problem produces Bloch states, which half of these states propagate or decay to the right while the other half propagate to the left. The physically significant bands appear in the energy interval [-5, 5] eV. Where the complex bands (blue curves) emanating from the valence band maximum join onto the second and third conduction bands. Besides the imaginary bands at the second valence bands which connect to conduction-band minimum.

../../_images/CBS-Si.svg

Fig. 4.3.2 Complex energy band diagram of Si(100)

MgO (100)

For the MgO(100) the imaginary band at the valence band maximum couple efficiently with the conduction band minimum [ZSW13].

../../_images/CBS-MgO.svg

Fig. 4.3.3 Complex energy band diagram of MgO(100)

Tip

The complex energy band is closely related to electron transmission. In molecular junctions, the dependence of the total transmission and the eigenvalues of the single-state transmission on the length can be found through the complex energy band, and the tunneling behavior of the electronic state can be intuitively given. This provides a favorable window for understanding the transport characteristics of molecular junctions.

4.3.5. References

[PCH04]

P. Pomorski, C. Roland, and H. Guo. Quantum transport through short semiconducting nanotubes: A complex band structure analysis. Phys. Rev. B 70 (2004), p. 115408.

[HMST]

H. Fitriawan, M. Ogawa, S. Souma, and T. Miyoshi. Non-equilibrium Green’s function method for modeling quantum electron transport in nano-scale devices with anisotropic multiband structure. J Mater Sci: Mater Electron 19 (2008), p. 107.

[ZSW13]

Z. Bai, L. Shen, Q. Wu, M. Zeng, J.-S. Wang, G. Han, and Y. P. Feng. Boron diffusion induced symmetry reduction and scattering in CoFeB/MgO/CoFeB magnetic tunnel junctions. Phys. Rev. B 87 (2013), p. 014114.