Extracting Information from the Transmission Spectrum

Table of Contents

Calculating the temperature dependent conductance

In this section you will learn how the transmission spectrum can be used to calculate the conductance of the device as function of the left and right electrode temperatures,  T_{L}, T_{R} . At  T_{L}= T_{R} =0 the conductance is determined by the transmission coefficient at the Fermi Level, while for finite 
      T_{L}, T_{R} the conductance depends on the value of the transmission coefficient in an energy window around the Fermi level. For  T_{L}=T_{R} the zero bias conductance is given by

\displaystyle

      \sigma(T_L) =\frac{2 e^2}{h} \int T(E) f'(\frac{E-E_F^L}{k_b T_R})\frac{ dE}{k_b T_R}

where  f' is the derivative of the Fermi function [8].

In semiconductors the conductance is often determined by hot electrons or holes propagating within the conduction or valence band, so-called thermionic emission. The hot electrons are located in the energy range of the tails of the Fermi function. Thus, for an accurate determination of the conductance from thermionic emission, it is important that the energy range of the transmission spectrum is such that the tails of Fermi functions are properly sampled. Figure 2 of the previous chapter shows that both the valence and conduction band edges of the central region is within the energy range of the transmission spectrum, thus, from the calculated data you will be able to accurately determine the temperature dependent conductance.

In order to calculate the temperature dependent conductance use the following NanoLanguage script.

# Read first transmission spectrum from file z-a-z-6-6.nc 
transmission_spectrum = nlread("z-a-z-6-6.nc",TransmissionSpectrum)[0]

#make list of temperatures
temperature_list=numpy.linspace(0,2000,21)*Kelvin
#make list for holding conductance
conductance_list=numpy.zeros(len(temperature_list))
#calculate the conductance for each temperature in the temperature list
for i in range(len(temperature_list)):
    conductance_list[i]=transmission_spectrum.conductance(
         electrode_temperatures=(temperature_list[i],temperature_list[i]) )

#plot the conductance as function of temperature
import pylab
pylab.figure()
pylab.semilogy(temperature_list,conductance_list)
pylab.xlabel("Temperature (K)")
pylab.ylabel("Conductance (S)")
pylab.show()

conductance_t.py

The script reads the transmission spectrum from the NetCDF archive file calculated in the previous section. It then uses the conductance() method for calculating the conductance for a number of electrode temperatures. Save the script and drop the saved script onto the Job Manager or run the command

atkpython conductance_t.py

and you will obtain the figure below as a result of the calculation.

[Tip] Tip

You may also select the text of the script and drag and drop it onto the job manager.

The script will generate the following output

Conductance as function of the electron temperature of the electrodes.

Figure 3: Conductance as function of the electron temperature of the electrodes.


The temperature dependent conductance for this device is rather atypical for a field effect transistor. Usually the conductance will increase as function of temperature. The decreasing conductance as function of temperature is related to a large conductance at the Fermi level caused by electron tunneling. For a longer device, the tunneling will be suppressed, and in the next section you will compare the results with the conductance of a longer device.

The figure was produced with the pylab package which is part of atkpython

[Tip] Tip

For further information on all the options and methods available for the TransmissionSpectrum object, see the ATK Reference Manual.

Investigating a longer graphene device junction

You will now setup and calculate the transmission spectrum of a 20 unit long channel, and compare its temperature dependent conductance with the shorter system investigated earlier.

To setup the calculation follow the same steps as in the previous section. The first step is to build the structure with the Custom Builder. The length of the central unit is now specified as 20 repetitions. The new settings of the custom builder is illustrated below

The next step is to setup the calculation, and this part follows exactly the same steps as in the previous chapter for generating the calculation “z-a-z-6-6.py”. As an alternative to setting up the calculation with the VNL Script generation tool, you may save the new geometry into the file “z-a-z-20-6.py” and copy the lines specifying the calculation from “z-a-z-6-6.py” (remember to change the NetCDF filename from “z-a-z-6-6.nc” to “z-a-z-20-6.nc”). The part of the script specifying the calculation is found below the lines

###############################################################
# Calculator
###############################################################

You may now run the program with the command

atkpython z-a-z-20-6.py > z-a-z-20-6.out

where all output is redirected to the file “z-a-z-20-6.out”. The calculation will take approximately twice as much time as the previous calculation for the shorter junction.

The following script calculates the temperature dependent conductance of the two junctions

# Read first transmission spectrum from file z-a-z-6-6.nc and z-a-z-20-6.nc
transmission_spectrum6 = nlread("z-a-z-6-6.nc",TransmissionSpectrum)[0]
transmission_spectrum20 = nlread("z-a-z-20-6.nc",TransmissionSpectrum)[0]

#make list of temperatures
temperature_list=numpy.linspace(0,2000,21)*Kelvin
#make list for holding conductance
conductance_list6=numpy.zeros(len(temperature_list))
conductance_list20=numpy.zeros(len(temperature_list))
for i in range(len(temperature_list)):
    conductance_list6[i]=transmission_spectrum6.conductance(
        electrode_temperatures=(temperature_list[i],temperature_list[i]) )
    conductance_list20[i]=transmission_spectrum20.conductance(
        electrode_temperatures=(temperature_list[i],temperature_list[i]) )

#plot the conductance as function of temperature
import pylab
pylab.figure()
pylab.semilogy(temperature_list,conductance_list6,label="short junction")
pylab.semilogy(temperature_list,conductance_list20,label="long junction")
pylab.xlabel("Temperature (K)")
pylab.ylabel("Conductance (S)")
pylab.legend(loc="lower left")
pylab.grid(True)
pylab.show()

conductance_t20.py

Below is shown the result of the calculation. The green curve shows the result for the longer junction. Note that in this case the conductance increases strongly with temperature, indicating that the dominating transport mechanism is thermionic emission.

Conductance as function of the electron temperature for the short (blue) and 20 unit long (green) graphene junction.

Figure 4: Conductance as function of the electron temperature for the short (blue) and 20 unit long (green) graphene junction.


Electron thermal transport

In the previous section you calculated the conductance of the junction. To obtain an electrical current it is usually necessary to apply an external bias. This section shows how it is also possible to drive a current through the junction by having the two electrodes at different temperatures. The NanoLanguage script for the calculation is displayed below

# Read first transmission spectrum from file z-a-z-6-6.nc and z-a-z-20-6.nc
transmission_spectrum6 = nlread("z-a-z-6-6.nc",TransmissionSpectrum)[0]
transmission_spectrum20 = nlread("z-a-z-20-6.nc",TransmissionSpectrum)[0]
#make list of temperatures
temperature_list=numpy.linspace(0,2000,21)*Kelvin
#make list for holding current
current_list6=numpy.zeros(len(temperature_list))
current_list20=numpy.zeros(len(temperature_list))
#fix the temperature in the left electrode
temperature_left=300*Kelvin
for i in range(len(temperature_list)):
    current_list6[i]=transmission_spectrum6.current(
        electrode_temperatures=(temperature_left,temperature_list[i]) )
    current_list20[i]=transmission_spectrum20.current(
        electrode_temperatures=(temperature_left,temperature_list[i]) )

#plot the current as function of temperature in right electrode
import pylab
pylab.figure()
pylab.plot(temperature_list,current_list6,label="short junction")
pylab.plot(temperature_list,current_list20,label="long junction")
pylab.xlabel("Right Electrode Temperature (K)")
pylab.ylabel("Current (A)")
pylab.legend(loc="lower left")
pylab.grid(True)
pylab.show()

current_t20.py

The electron temperature of the left electrode is now fixed at 300 Kelvin, while the temperature of the right electrode is varied from 0 to 2000 Kelvin. The figure below shows the output of the calculation. The change in temperature has the strongest effect on the longer junction (the green curve). The positive direction of the current is from left to right, thus, the electrical current goes from the high temperature to the low temperature. Figure 2 shows that the valence band of the central region is closest to the Fermi Level, thus, the transport is dominated by hole transport. The electrode with the highest temperature will have most holes, which will propagate to the other electrode giving rise to a current in this direction.

Current as function of the electron temperature of the right electrode for the short (blue) and 20 unit long (green) graphene junction. The electron temperature of the left electrode is fixed at 300 Kelvin.

Figure 5: Current as function of the electron temperature of the right electrode for the short (blue) and 20 unit long (green) graphene junction. The electron temperature of the left electrode is fixed at 300 Kelvin.