Quantum transport - Green's functions (NEGF)
The method of calculating the carrier transport is defined as "fully
self-consistent nonequilibrium Green's function (NEGF) approach for vertical
quantum transport in open quantum devices with contacts". This part of the
nextnano³ code is based on the original code of
Tillmann Kubis which
is described in this publication:
Self-consistent quantum transport theory: Applications and assessment of
approximate models
T. Kubis, P. Vogl
Journal of Computational Electronics (2006)
DOI: 10.1007/s10825-006-0078-6
There are several possibilities:
- to include several scattering mechanisms (e.g. inelastic scattering,
elastic scattering)
- no scattering at all ("ballistic transport")
The electrons are described within a one-band model with a variable effective
mass, i.e. a spatially dependent (= material dependent) effective electron mass
me(z). Alternatively, it is possible to use an energy dependent
effective mass (nonparabolicity). This nonparabolicity parameters are grid point
dependent. The static and optical dielectric constants
are also grid point dependent, i.e. material dependent.
This method is well suited to study resonant tunneling diodes and quantum
cascade lasers.
Restrictions for green:
- homogeneous grid
- not too much grid points (~50)
- for nextnano³: quantum cluster must extend over the whole device
- for nextnano³: two contacts at the boundaries having 2 grid points at the left and 2
grid points at the right contact,
material at the contacts should be the same as the semiconductor material
For an example of the Green's function functionality, have a look at the
RTD tutorial.
Global parameters for Green's function code
!----------------------------------------------------------!
$global-parameters-green
optional !
grid_points_in_z
integer
required !
grid_points_in_Ez
integer
optional !
grid_points_in_E
integer
optional !
device_length
double
optional ! [Angstrom]
non_diagonal_range
double
optional ! [Angstrom]
contact_points
integer
optional !
chemical_potential
double
optional ! [eV]
max_energy_factor
double
optional ! [eV]
Ez_grid_power
double
optional !
E_grid_power
double
optional !
grid_exponent
double
optional !
zero_drift
character
optional !
given_slope
character
optional !
poisson_slope
double
optional ! [V/Angstrom]
max_drift
character
optional !
drift_length
double
optional !
off_drift
double
optional !
grid_limit
double
optional !
long_conv_limit
double
optional !
!
gain
character optional
!
gain-output-every-nth-iteration
integer
optional !
gain-integrate-device-from-to
double_array
optional ! [nm]
min_photon
double
optional ! [eV]
max_photon
double
optional ! [eV]
photon_number
integer
optional !
!
transmission
character optional
!
!
no_poisson
character optional
!
built_in_potential
double
optional ! [V]
correlation
character optional
!
fermi
character optional
!
!
get-cb-from-nextnano
character optional
!
get-cb-masses-from-nextnano
character optional
!
get-nonparabolicity-from-nextnano character
optional !
get-dielectric-from-nextnano
character optional
!
get-doping-from-nextnano
character optional
!
!
directory-green
character optional
!
directory-contact
character optional
!
directory-scattering-rates
character optional
!
directory-test-debug
character optional !
directory-stop
character optional !
!
not really relevant (CHECK!):
dielectric_eps0
double
optional ! []
dielectric_epsinf
double
optional ! []
!
$end_global-parameters-green
optional !
!----------------------------------------------------------!
!----------------------------------------------------------!
$global-parameters-green
!
!temperature
= 300d0
! [K] , see $global-parameters
grid_points_in_z
= 40
! number of grid points in real space along z direction
! It must hold: nextnano³ grid points - 1 = grid_points_in_z
grid_points_in_E
= 110
! E = total energy
grid_points_in_Ez
= 110
! k|| resolution, Ez = E - hbar2 *
k||2 / [2m(1)], 1 = 1st grid point
device_length
= 400d0
! [Angstrom] length of device
!non_diagonal_range
= 10d0
! [Angstrom] for ballistic and to make calculation faster
non_diagonal_range
= 30d0
! [Angstrom] for ballistic and to make calculation faster
!non_diagonal_range
= 80d0 ! correct physics
! [Angstrom]
! has to be increased if the screening length is too large
! scattering range relevant for polar optical phonon scattering and
charged impurity scattering
! must be larger than device_length / number of grid points
contact_points
= !
chemical_potential
= 0d0
! [eV] (often called Fermi level)
! chemical potential at the right contact
! left contact = right contact + e * applied voltage
zero_drift
= yes
! yes = equilibrium contacts,
no = nonequilibrium contacts
given_slope =
character !
poisson_slope
=
double !
[V/Angstrom]
deleted: zero_slope
= no
! yes = constant electrostatic potential at
the boundary
! (derivate of electrostatic potential has zero slope, i.e. d phi
/ d z = 0)
! no = electrostatic potential is
calculated self-consistently
max_drift
= no
! if zero_drift = no , then
max_drift can be yes
! (useful for extreme high current densities)
off_drift
= 0d0
! should be zero
!Ez_grid_power
= 2d0
! exponent n , i.e. xn
- if present, static Ez grid
! if not present, a powerlaw grid for Ez is used (self-consistent
multigrid)
!E_grid_power
= 1d0
! same as Ez_grid_power , but here for E grid
grid_exponent
= -3d-1 !
default: -3d-1
max_energy_factor
= 12d0
! [] controls maximum of considered energy
!grid_limit
= 5d-2
! [] controls multigrid convergence
long_conv_limit
= 5d-5 !
[] limit for long convergency, default is
5d-5
!
!
gain
= yes
!
gain-output-every-nth-iteration = 10 ! output gain every 10 th
iteration (default: 10 )
gain-integrate-device-from-to =
5d0 65d0
! [nm] Integrate alpha(z,E) from zmin =
5 nm to zmax =
65 nm .
min_photon
= 1d-3
! [eV] minimum photon energy relevant for gain
max_photon
= 2d-2
! [eV] maximum photon energy relevant for gain
photon_number
= 20
! number of energy grid steps between min_photon and
max_photon
!
!
get-cb-from-nextnano
= yes
!
get-cb-masses-from-nextnano =
yes
!
get-nonparabolicity-from-nextnano = yes
!
get-dielectric-from-nextnano =
yes
!
get-doping-from-nextnano
= yes
!
!
!
directory-green
= NEGF_data/
!
directory-contact
= contact/
! ==> NEGF_data/contact/
directory-scattering-rates =
sc_rates
! ==> NEGF_data/sc_rates/
directory-test-debug
= test_debug/
!
directory-stop
= stop/
! ==> NEGF_data/stop/
!
!
dielectric_eps0
= 12.93d0
! [] static dielectric contstant (redundant, should be deleted)
dielectric_epsinf
= 10.89d0
! [] optical dielectric constant (redundant, should be deleted)
!
$end_global-parameters-green
!
!----------------------------------------------------------!
transmission = yes
! 'yes' / 'no'
(default: no )
Flag to switch on/off calculation of transmission function
T(E).
no_poisson
= yes
! 'yes' / 'no'
(default: no , i.e solve Poisson
equation)
Flag to switch off Poisson equation inside the NEGF algorithm.
built_in_potential
=
0.5d0 ! built-in potential in units of
[V] , default: 0 V
This optional flag introduces an additional built-in potential,
e.g. necessary for pn junctions.
First, the Poisson equation has to be solved in equilibrium
to determine the built-in potential.
This value is then taken and specified in the input file.
correlation
= yes
! 'yes' / 'no'
(default: no )
Flag to switch on/off plotting the correlation function(s).
fermi
= yes
! 'yes' / 'no'
(default: no )
Flag to switch on/off the call to the subroutine that determines
the quasi Fermi level by dividing greenL with the spectral
function.
(correspond to Fig. 1 in IWCE-11 paper)
gain
= yes ! 'yes' / 'no'
(default: no )
Flag to switch on/off the calculation of the gain.
gain-output-every-nth-iteration =
10 ! output gain every
10 th iteration (default: 10 )
When the whole calculation has converged, the gain will be printed
out in any case.
If one is interested in the gain, one also has to specify
gain-integrate-device-from-to =
5d0 65d0 ! [nm] Integrate alpha(z,E) from
zmin = 5 nm to zmax = 65 nm .
! This is important in order to exclude the absorption of the contacts.
! The affected output files are:
! gain_real_integrated_energy.dat alpha(E)
! gain_real_integrated_wavelength.dat alpha(lambda)
min_photon
= 1d-3 ! [eV] minimum photon energy relevant for gain
max_photon
= 2d-2 ! [eV] maximum photon energy relevant for gain
photon_number
= 20 ! number of energy grid steps between min_photon and
max_photon
get-cb-from-nextnano =
yes ! 'yes'
/ 'no'
Flag to read in conduction band edge profile (Gamma point) of nextnano³
calculation.
get-cb-masses-from-nextnano = yes !
'yes' / 'no'
Flag to read in conduction band effective masses profile (Gamma point) of
nextnano³ calculation.
get-nonparabolicity-from-nextnano = yes !
'yes' / 'no'
Flag to read in nonparabolicity parameter of conduction band
effective mass (Gamma point) of
nextnano³ calculation.
get-dielectric-from-nextnano = yes !
'yes' / 'no'
Flag to read in the static and optical dielectric constants of
nextnano³ calculation.
get-doping-from-nextnano = yes
! 'yes' / 'no'
Flag to read in n-type doping profile of nextnano³ calculation.
Note: All donors are assumed to be ionized.
Specify directories for output files. If these specifiers are not present,
the default values are taken.
Note that the directories must be present, as the nextnano³ code cannot
create them.
Be sure to include the "/" (slash). On Windows systems, also the
"\" (backslash) will work.
directory-green
= NEGF_data/
!
directory-contact
= contact/
! ==> NEGF_data/contact/
directory-scattering-rates =
sc_rates
! ==> NEGF_data/sc_rates/
directory-test-debug
= test_debug/
!
directory-stop
= stop/
! ==> NEGF_data/stop/
Damping parameters (used to influence the convergence of the equations)
!----------------------------------------------------------!
$damping-parameters
optional !
poisson_damping1
double
optional !
poisson_damping2
double
optional !
poisson_damping3
double
optional !
self_damping1
double
optional !
self_damping2
double
optional !
self_damping3
double
optional !
drift_damping1
double
optional !
drift_damping2
double
optional !
drift_damping3
double
optional !
slope_damping1
double
optional !
slope_damping2
double
optional !
slope_damping3
double
optional !
$end_damping-parameters
optional !
!----------------------------------------------------------!
All values for the damping parameter should be between zero and 1: 0 <=
x < 1
!----------------------------------------------------------!
$damping-parameters
!
poisson_damping1 = 0.8d0
! for Poisson equation
poisson_damping2 = 0.8d0
! for Poisson equation
poisson_damping3 = 0.8d0
! for Poisson equation
self_damping1 = 0d0
! for scattering selfenergies
self_damping2 = 0d0
! for scattering selfenergies
self_damping3 = 0d0
! for scattering selfenergies
drift_damping1 = 0d0
! for nonequilibrium contacts, not used if zero_drift =
yes
drift_damping2 = 0d0
! for nonequilibrium contacts, not used if zero_drift =
yes
drift_damping3 = 0d0
! for nonequilibrium contacts, not used if zero_drift =
yes
slope_damping1 =
!
slope_damping2 =
!
slope_damping3 =
!
$end_damping-parameters
!
!----------------------------------------------------------!
Scattering mechanisms
!----------------------------------------------------------!
$scattering-mechanisms
optional !
acoustic_phonons
character
optional !
inel_acoustic_phonons
character
optional !
artificial_acoustic
double
optional ! prefactor (for testing
purposes)
lattice_constant
double
optional !
sound_velocity
double
optional !
optical_phonons
character
optional !
LO_phonon_energy
double
optional !
charged_impurity
character
optional !
interface_roughness
character
optional !
roughness_width
double
optional !
correlation_length
double
optional !
!
ballistic
character
optional !
pauli_principle
double
optional !
!direct_contact
character
optional !
deleted
!laser_contact
character
optional ! deleted
contact_scat
integer
optional ! maximum number of
scattering events in the contacts
contact_sc_pot
double
optional !
scattering potential height in the contacts (only
for periodic contacts) in units of [eV]
scattering_boost
character
optional !
scattering_boost_factor
integer
optional !
scattering_boost_limit
double
optional !
$end_scattering-mechanisms
optional !
!----------------------------------------------------------!
!----------------------------------------------------------!
$scattering-mechanisms
!
acoustic_phonons = no
! elastic acoustic phonon scattering
! If yes , then inelastic (inel_acoustic_phonons )
should be no .
inel_acoustic_phonons = yes
! inelastic acoustic phonon scattering
! If yes , then elastic (acoustic_phonons )
should be no
! because elastic is already automatically included.
artificial_acoustic =
double ! not relevant ! prefactor (for testing
purposes)
lattice_constant =
5.6534d0 !
[Angstrom]
Note: [Angstrom] not [nm] , default
is GaAs lattice constant: 5.6534 [Angstrom]
sound_velocity
= 5.2d13 !
[Angstrom/s] , default is GaAs sound velocity:
5.2d13 [Angstrom/s]
optical_phonons =
yes
! longitudinal polar-optical phonon scattering (polar LO phonon
scattering)
LO_phonon_energy =
0.035d0
! [eV] LO phonon energy, default is GaAs LO phonon energy:
0.035 [eV]
charged_impurity = no
! charged impurity scattering
!
!
interface_roughness = no
! interface roughness scattering
roughness_width =
10d0
! roughness width in [Angstrom] in growth direction (z
direction)
correlation_length = 80d0
! correlation length for interface roughness in x and y directions in
[Angstrom]
! see also $roughness-profile
!
!pauli_principle =
0.5d0
! Pauli principle (should not be changed, default is
0.5 )
!
!ballistic
= no
! include scattering mechanisms
ballistic
= yes
! switch off scattering (ballistic calculation)
! to make calculation faster
contact_scat =
7
! contact scattering (number of scattering iterations in contact)
! maximum number of
scattering events in the contacts
direct_contact =
no
! direct contact (should not be changed, default is
no )
$end_scattering-mechanisms
!
!----------------------------------------------------------!
Note: For interface roughness scattering, the file BesselI.dat
must be present.
Note: lattice_constant (a) and sound_velocity (v)
determine the dispersion relation of acoustic phonons: ELA = hbar
v q
where q is from 0 to pi/a.
ballistic
= yes ! 'yes'
/ 'no'
Flag to switch between ballistic and nonballistic
calculation.
Ballistic does not include any scattering (and is thus a rather fast
calculation). Its results do not really correspond to physical reality but still
might give a reasonable insight into a physical problem as it represents an
extreme case where scattering is absent (i.e. it should yield an upper boundary
for the expected current).
Nonballistic includes scattering (and is thus a very time-consuming
calculation). Its results correspond (or are at least close) to physical
reality.
Contacts
!----------------------------------------------------------!
$contact-type
optional !
(for nextnano³)
$contact-type
required ! (for T. Kubis' version)
type
character
required !
contact_temperature
double
optional ! [K]
contact_sc_limit
double
optional !
start_left
integer
optional !
end_left
integer
optional !
start_right
integer
optional !
end_right
integer
optional !
contact_occupation
character
optional !
contact_poisson
character
optional !
left_drift
double
optional !
right_drift
double
optional !
contact_den_diff
double
optional !
slope_limit
double
optional !
$end_contact-type
required ! (for T. Kubis' version)
$end_contact-type
optional !
(for nextnano³)
!----------------------------------------------------------!
type = direct ! direct contacts
= indirect ! indirect contacts
= laser ! laser contacts
= periodic ! periodic contacts
= real_periodic
! real periodic contacts
contact_occupation = no
! A Fermi distribution in the contacts is used.
= yes
! using quasi periodic electron distribution in the contacts
= periodic ! using quasi periodic electron
distribution in the contacts
! Note: yes and periodic
is equivalent.
In all other cases, a Fermi distribution in the contacts is used.
contact_poisson =
no
! A flat conduction band in the contacts (except external potentials) is
used.
=
yes ! using
quasi periodic Poisson potential in the contacts
= periodic ! using quasi periodic Poisson
potential in the contacts
! Note: yes and periodic
is equivalent.
In all other cases, a flat conduction band in the contacts (except external
potentials) is used.
Instead of using bulk contacts, one can use quasi Stark ladder contacts.
!----------------------------------------------------------!
$left-contact-potential-profile
optional
!
left_potential_height
double optional
! [eV]
left_start_point
integer optional
!
left_end_point
integer optional
!
$end_left-contact-potential-profile
optional !
!----------------------------------------------------------!
!----------------------------------------------------------!
$right-contact-potential-profile
optional
!
right_potential_height
double optional
! [eV]
right_start_point
integer optional
!
right_end_point
integer optional
!
$end_right-contact-potential-profile
optional !
!----------------------------------------------------------!
Interface roughness
Here, the use can specify
- the position dependent roughness width in growth direction and
- the position dependent correlation length in growth direction.
!----------------------------------------------------------!
$roughness-profile
optional !
roughness_width
double required
! [Angstrom]
correlation_length
double
optional ! [Angstrom]
start_point
integer
optional !
end_point
integer
optional !
$end_roughness-profile
optional !
!----------------------------------------------------------!
Output
All output files will be written to the folder "data/ ".
General files
ex_potential.dat : external potential = conduction band edge (without
electrostatic potential) in units of [eV]
ex_potential_new.dat :
grid point in [nm] conduction band edge
in [eV] (without electrostatic potential)
pot.dat : conduction band edge (incl.
electrostatic potential) in units of [eV]
pot_new.dat :
grid point in [nm] conduction band edge
in [eV] (incl. electrostatic potential)
pot_avs.dat/*.coord/*.fld : AVS ooutput files
that can be used to plot the
conduction band edge (incl. electrostatic potential) in units of [eV]
with AVS/Express visualization software
dopingV_new.dat :
grid point in [nm] doping concentration
in [1018 e/cm-3]
massV_new.dat :
grid point in [nm] Gamma conduction band
effective mass in [m0]
nonparabolicity_new.dat : grid point in [nm] nonparabolicity parameter for Gamma conduction band effective mass in [1/eV]
eps_infinity_new.dat :
grid point in [nm] optical dielectric
constant epsiloninfinity in []
eps_static_new.dat :
grid point in [nm] static dielectric
constant epsilon0 in []
roughness_width_new.dat
grid point in [nm] roughness width
in [Angstrom]
correlation_length_new.dat grid point in [nm]
correlation length in [Angstrom]
Emapping.dat : energy resolution (energy grid) in units of
[eV]
Ezmapping.dat : energy resolution in growth direction (z) (energy grid)
in units of [eV]
poisson2.dat : electrostatic potential (will be updated for each Poisson
iteration) ==> The feature "solving the Poisson equation" can be switched
off:
no_poisson = yes
! 'yes' / 'no'
dissipated_power.dat
! in units of [Watts/cm2]
The dissipated power will be printed out for each grid point.
averaged_dissipated_power.dat ! in units of
[Watts/cm2]
The average dissipated power is the average of the dissipated power
at each grid point. This quantity is very interesting to study the heating of the device during
operation.
AVS files
EnergyResolvedDensity.dat : energy resolved density "density(z,E)": z, energy, density
in units of [eV-1 * 1024 cm-3] .
EnergyResolvedDensity_avs.fld, *.coord, *.dat
density(z,E):
corresponds to Fig. 4 in IWC-11 paper
Note: For AVS output, we scale the density from [eV-1 * 1024 cm-3]
to [eV-1 * 1018 cm-3] .
EnergyResolvedDensity_0.dat : energy resolved density: matrix z x E (contains density
for each matrix element density(z,E))
- spectral_real.dat: energy resolved local density of states (LDOS) (see Fig. in ICPS poster) (z,Ez,lDOS(z,Ez))
in units of [1 / (eVAngstrom)] .
spectral_real_avs.fld , *.coord, *.dat (spectral_aimag_avs.fld, *.coord, *.dat)
The imaginary part of the diagonal of the spectral function should be
zero.
spectrum_ana.dat : matrix representation of 'spectral_real.dat'
- Optical gain within linear response theory
These files contain the absorption alpha (and gain):
alpha(z,E) where z is the spatial
coordinate and E is the photon energy.
Note that positive values
correspond to absorption, negative values to gain.
- gain_real_avs.fld, *.coord, *.dat (gain_imag_avs.fld, *.coord, *.dat)
-
The x axis is the distance in units of [nm].
- The y axis is the photon energy in units of [eV].
The y axis is from
-
'min_photon ' (minimum
photon energy relevant for gain) to
-
'max_photon ' (maximum photon
energy relevant for gain) as specified in the input file.
-
'photon_number ' (e.g. =
20 , = 100 )
is the number of energy grid steps between 'min_photon ' and 'max_photon '.
- gain_real_integrated_energy.dat
contains the integrated absorption over spatial coordinate: alpha(E)
where E is in units of [eV]
- gain_real_integrated_wavelength.dat
contains the integrated absorption over spatial coordinate: alpha(lambda)
= alpha(lambda) where lambda is in units of [µm]
- sigma_real_avs.fld, *.coord, *.dat (sigma_imag_avs.fld, *.coord, *.dat)
-
The x axis is the distance in units of [nm].
- The y axis is the photon energy in units of [eV].
The y axis is from
-
'min_photon ' (minimum
photon energy relevant for gain) to
-
'max_photon ' (maximum photon
energy relevant for gain) as specified in the input file.
-
'photon_number ' (e.g. =
20 , = 100 )
is the number of energy grid steps between 'min_photon ' and 'max_photon '.
Current
U_I_curve.dat : current-voltage characteristics (current (averaged value over
all grid points (N-2)), achieved voltage, desired voltage)
U_I_curve.dat : current-voltage characteristics (current at each grid point
(should be the same if converged), achieved voltage, desired voltage)
Convergence files
convergency.dat : contains convergence parameter: relative change of density
to previous iteration (both Poisson (phi) self-consistency and scattering-self-consistency (sigma))
long_convergency.dat : contains convergence parameter: relative change of
density to previous iteration (only Poisson (phi) self-consistency)
see also specifier long_conv_limit
comp_current.dat : electron current density [A/Angstrom^2] - each line
corresponds to an iteration
comp_density.dat : electron density [Angstrom^3] - each line corresponds to an
iteration
density.dat : last line of comp_density.dat
For an example of the Green's function functionality, have a look at the
RTD tutorial.
|