[ Home ] [ News ] [ Contact ] [ Search ] Green's function code

 About us
 Useful Links
 Publications
 Copyright notice
 nextnano³ documentation

 -> Download Software
 * password protected

 

 
Up
 

 

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 10th 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 10th 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.

   
Last modified: 28-Apr-2008   -   optimised for Microsoft Internet Explorer 6.0 ®