3.43 Electronic Transport

Electronic transport in FHI-aims can be computed either using the built-in routine described in this chapter or with the help of aitranss-package (see Chapter 5.1). The built-in routine computes the electronic transport through a nanostructure connected to two, three or four semi-infinite leads using the Landauer-Büttiker formalism. Only calculations within the zero-bias limit are supported. All transport related actions are initiated with the keyword transport that is followed by the action required.

A typical work-flow of a transport calculation is as follows

  1. 1.

    Information for the semi-infinite leads are created. To this end the action lead_calculation should be used. Separate periodic calculation is required for each lead and the third lattice vector must point away from the nanostructure, i.e., into the semi-infinite lead. The region used to model the semi-infinite lead should be large enough so that the basis functions from the nanostructure region do not extend beyond the lead region.

  2. 2.

    Once all the leads are calculated transport through the nanostructure is calculated using the action transport_calculation. This produces the tunneling information through the nanostructure for each pair of the leads. The nanostructure should be large enough so that the basis functions from different leads do not overlap. In this calculation the lead atoms need to be included in the file geometry.in and their positions must be exactly the same as in the calculation for the lead information. In particular, they should not be relaxed when the geometry of the nanostructure is optimized. This calculation should also be run as a periodic calculation using a sufficient amount of k-points. The transport part of the calculation is done using only one k-point but in order to ensure converged density and potential of the nanostructure region more k-points are usually needed.

Tags for general section of control.in:

 

Tag: transport(control.in)

Usage: transport action [further options]
Purpose: This is the keyword that is used to control the built-in transport routines.
action is a string that specifies the kind of requested action in the transport calculation; any further needed options depend on action.

Specific actions transport keyword:

 

transport sub-tag: lead_calculation(control.in)

Usage: transport lead_calculation
Purpose: Computes the lead information for the given lead. Only one lead can be calculated at at time and each lead needs to be calculated separately. The calculation is periodic and the third lattice vector must point into the lead.

 

transport sub-tag: transport_calculation(control.in)

Usage: transport transport_calculation
Purpose: Performs the transport calculation. Using this keyword requires that the information for all the semi-infinite leads is already calculated.

 

transport sub-tag: tunneling_file_name(control.in)

Usage: transport tunneling_file_name filename
Purpose: Specifies the name of the file where the tunneling information is written. Each pair of the leads is written to a separate column in plain text format.

 

transport sub-tag: energy_range(control.in)

Usage: transport energy_range Emin Emax nsteps
Purpose: Sets the energy range for which the tunneling information is calculated. The energy range EmaxEmin is divided into nsteps steps and the tunneling information is calculated for each step. The energy zero is referenced at the chemical potential of the nanostructure.

 

transport sub-tag: lead_i(control.in)

Usage: transport lead_i atom_index filename
Purpose: Tells the transport calculation where the information on the semi-infinite leads is stored. One line for each lead is required and the index i is substituted by the lead index (1, 2, 3, or 4). The option atom_index is set to the index of the first atom of the lead in question in the file geometry.in and the coordinates of the lead atoms must be the same used when calculating the lead information. The option filename provides the name of the file where the lead information is stored. Note that for a successful transport calculation information for at least two leads is needed. Hence, this keyword must be invoked at least twice. The maximum number of leads supported is currently four.

The Green’s function for the semi-infinite leads needs to be solved iteratively for each energy step. The iteration is regularized adding a small complex part to the energy of the step being computed. At each iteration the magnitude of the regularizing part is decreased until either convergence of lower bound of the parameter is reached. The iteration can be controlled by several keywords.

 

transport sub-tag: number_of_boundary_iterations(control.in)

Usage: transport number_of_boundary_iterations number
Purpose: Sets the maximum number of iterations to solve the Green’s function for each lead. Default: 10

 

transport sub-tag: boundary_treshold(control.in)

Usage: transport boundary_treshold number
Purpose: Sets the convergence criterion for the iteration of the Green’s functions. The metric used is the maximum absolute value change in the matrices for the Green’s functions of the leads. Default: 1.0

 

transport sub-tag: boundary_mix(control.in)

Usage: transport boundary_mix number
Purpose: Mixing value for the linear mixer in the iteration of the Green’s function. Values below one correspond to under-relaxation. Default: 0.7

 

transport sub-tag: epsilon_start(control.in)

Usage: transport epsilon_start number
Purpose: Starting value for the regularizing complex parameter in the iteration for the Green’s function for the semi-infinite lead. Only the magnitude of the parameter should be given with this keyword. Default: 0.02ı

 

transport sub-tag: epsilon_end(control.in)

Usage: transport epsilon_end number
Purpose: Ending value for the regularizing complex parameter in the iteration for the Green’s function for the semi-infinite lead. Only the magnitude of the parameter should be given with this keyword. Default: 0.0001ı

 

transport sub-tag: fermi_level_fix(control.in)

Usage: transport fermi_level_fix

Purpose: Set the potential reference of the leads to their Fermi level. Since in the transport calculations the leads are calculated first and only after that incorporated into the system there is a question of a potential reference. Currently two options are available. The default option is to use the average of the energy levels of the lowest orbitals of the lead atoms. The second option invoked by this keyword is to align the Fermi levels of the leads between the lead calculations and the transport calculation.

Note that since the calculation of the lead is separate from the transport calculation in general the distance from the energy of the lowest lying orbital to the Fermi level of the calculation is not necessarily the same. This means that the leads in the lead calculation are not in the same environment as in the transport calculation and bringing them together introduces an alignment problem for the potential. From the transport calculation point of view this implies that a gate voltage is introduced into the system. In the transport calculation the value of this gate voltage is printed. In the tunneling results the energy is always referenced to the Fermi level of the transport calculation. Default: .false.