[ Home ] [ News ] [ Contact ] [ Search ]

 About us
 Useful Links
 Publications
 Copyright notice
 nextnano³ documentation

 -> Download Software
 * password protected

 

 
 

 

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 these publications:

 

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-100)
  • 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-NEGF                              optional  !
 grid_points_in_z                       integer      required  !
 grid_points_in_Ez                      integer      optional  !
 grid_points_in_E                       integer      optional  !
 non_diagonal_range                     double       optional  ! [Angstrom]
 contact_points                         integer      optional  !
 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]
                                                               !
 rescaling_green                        character    optional  !
test!
 max_drift                              character    optional  !
 drift_length                           double       optional  !
 off_drift                              double       optional  !
                                                               !
 grid_limit                             double       optional  !
 poisson_limit                          double       optional  !
 scatter_limit                          double       optional  !
 long_conv_limit                        double       optional  !
 grid_critical                          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  !
                                                               !
 first_Born                             character    optional  !
 transmission                           character    optional  !
                                                               !
 no_poisson                             character    optional  !
 Poisson-Newton-method                  character    optional  !
 Schroedinger-Poisson-Predictor         character    optional  !
 Schroedinger-Poisson-Predictor-lambda  double       optional  !
 built_in_potential                     double       optional  ! [V]
 correlation                            character    optional  !
 fermi                                  character    optional  !
 k_resolved                             character    optional  !
                                                               !
 read-inputfile-during-calculation      character    optional  !
 include-original-NEGF-output           character    optional  !
                                                               !
 get-cb-from-nextnano                   character    optional  !
 get-potential-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-NEGF                         character    optional  !
 directory-contact                      character    optional  !
 directory-scattering-rates             character    optional  !
 directory-test-debug                   character    optional  !
 directory-stop                         character    optional  !
 save-every-nth-iteration               integer      optional  !
 number_of_threads                      integer      optional  !
                                                               !
$end_global-parameters-NEGF                          optional  !
!--------------------------------------------------------------!

 

 

!----------------------------------------------------------!
$global-parameters-NEGF                                    !

 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,E)]
                                                           ! 1 =
1st grid point, the mass m could depend on energy E
                                                           !
The in-plane momentum k|| is represented as an energy Ez.
!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                    =                       !
 zero_drift                        = yes                   ! yes =
equilibrium contacts, no = nonequilibrium contacts
                                                           !
!-----------------------------------------------------------
!
Boundary condition for the electrostatic potential of the Poisson equation:
!-----------------------------------------------------------
 given_slope                       = yes                   !
finite slope of electrostatic Poisson potential at the contacts
                                                           !
derivate of electrostatic potential has given slope, i.e. d phi / d z = constant
                                   = no                    !
slope of electrostatic Poisson potential at the contacts is calculated self-consistently
 poisson_slope                     = 0d0                   ! [V/Angstrom]
(default: 0d0 = flat band, i.e. constant                                                            ! electrostatic potential at the boundary = electric field)
                                                           !
 max_drift                         = no                    !
if zero_drift = no, then max_drift can be yes
                                                           !
(useful for extreme high current densities)
 drift_length                      = 0.5d0                 !
the maximum value of drift vector in the contacts 
 off_drift                         = 0d0                   !
should be zero
!Ez_grid_power                     = 2d0                   !
exponent n, i.e. xn - if present, static Ez grid
                                                           !
Ez grid: (grid point no.)^n + offset
                                                           !
if not present, a self-consistent multigrid for Ez is used
!E_grid_power                      = 1d0                   !
same as Ez_grid_power, but here for E grid
 grid_exponent                     = -0.3d0 !
default: -0.3d0 ! (/=0, pref. negative), controls the dynamical Ez grid, if approximately=0, then linear grid
 max_energy_factor                 = 12d0                  ! []
controls maximum of considered energy
                                                           !
 grid_limit                        = 0.05d0                ! []
controls multigrid convergence
!
The limit of the convergence parameter at which the energy grids E and Ez will not be changed any more.
 poisson_limit                     = 1d0                   !
default: 1d0
 scatter_limit                     = 1d0                   !
default: 1d0
 long_conv_limit                   = 5d-5                  ! []
limit for long convergence, default is 5d-5
 grid_critical                     = 1d-10                 !
used for determining resonances in the total device (default: 1d-10)
      !
It is used within subroutine find_hot_spots that is used for the self-adapting energy grid Ez.
      !
It is the difference of the derivative at adjacent positions when we have a hot spot.
      !
The "hot spots" (peaks in the density of states DOS(Ez)) will get a higher resolution in the energy grid Ez.)
      !
(This parameter is not important and can be omitted.)
                                                           !
                                                           !
 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-potential-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-NEGF                    = 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/
 save-every-nth-iteration          = 3                     !
saves information in binary format that can be read in
                                                           ! later to restart a calculation (default: 20)
                                                           ! into the folder NEGF_data/stop/*.sav
                                                           !
(Note: These files are very large!)
 
number_of_threads                 = 8                     ! number of parallel threads (OpenMP, MKL)
$end_global-parameters-NEGF                                !
!----------------------------------------------------------!

 

 transmission                      = yes   ! 'yes' / 'no(default: no)
 Flag to switch on/off calculation of transmission function T(E).

 first_Born                        = no    ! 'yes' / 'nofirst order Born approximation (default: no)
 If 'yes', then greenLT4 will be calculated in lowest order Born approximation

 no_poisson                        = yes   ! 'yes' / 'no(default: no, i.e solve Poisson equation)
 
Flag to switch off Poisson equation inside the NEGF algorithm.

 Poisson-Newton-method             = Newton-2             ! nextnano³'s Newton iterator
                                   = Newton-3             ! nextnano³'s Newton iterator
                                   = Newton-4             ! T. Kubis'     Newton iterator
                                   = Newton-5             ! T. Kubis'     Newton iterator with automatically determined residual
                                                          ! which must be larger than a minimum of 10-16
                                   = Newton-6             !
T. Kubis'     Newton iterator with automatically determined residual
                                   = Newton-7             ! T. Kubis'     Newton iterator with automatically determined residual
                                                          !                  and original function/gradient
 Here one can chose several options for the Newton iterator that solves the Poisson equation.
 nonlinear-poisson-residual
can be used to vary the residual of Newton-2, Newton-3 and Newton-4 but not for Newton-5 and Newton-6. Additional adjustments can be made via nonlinear-poisson-iterations, newton-max-linesearch-steps, nonlinear-poisson-stepmax. (Check $numeric-control for more details.)

 Schroedinger-Poisson-Predictor        = Exp    ! (default)
                                       = Fermi  !
                                       = none   !
 Schroedinger-Poisson-Predictor-lambda = 0.8d0  ! (default)
 
lambda used in predictor-corrector approach for Schrödinger-Poisson [damping parameter (actually 'lambda = 1 - damping')]
 

 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.

 rescaling_green                   = yes                   ! switch for rescaling the lesser Green's function (greenL) (test!)
                                   = no                    !
similar to A. Wacker (default: no)

 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)

 k_resolved                        = yes   ! 'yes' / 'no(default: no)
 switch for k-resolved output (k distribution)

 

 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                        = 20d-3    ! [eV]
maximum photon energy relevant for gain
 photon_number                     = 20       !
number of energy grid steps between min_photon and  max_photon

 

 read-inputfile-during-calculation  = yes   ! 'yes' / 'no'
                                            !
default: yes
 
Flag for reading in the input file again and again during the calculation.
  This is useful in order to adjust e.g. the damping parameters during the calculation.

 include-original-NEGF-output       = no    ! 'yes' / 'no' (default: no)
 
includes original NEGF output which is meanwhile redundant

 

 get-cb-from-nextnano              = yes   ! 'yes' / 'no'
 
Flag to read in conduction band edge profile (Gamma point) of nextnano³ calculation.

 get-potential-from-nextnano       = yes   ! 'yes' / 'no' / 'no-Kubis'
 
Flag to read in electrostatic potential of nextnano³ calculation.
 If no, a simple initial guess is used taking into account a linear potential drop (if any), and the chemical potentials (Fermi levels) of the contacts.
 If no-Kubis, another simple initial guess is used taking into account a linear potential drop (if any),
  and the chemical potential (Fermi level) of the right contact is assumed to be zero.
  At the left contact it is assumed to be 'zero + voltage', i.e. 'voltage'.

 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-NEGF                    = 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                                        !

!-------------------------------------------------------
!
damping parameters for the electrostatic potential of the Poisson equation
!-------------------------------------------------------
 poisson_damping1 = 0.2d0                                  !
 poisson_damping2 = 0.2d0                                  !
 poisson_damping3 = 0.2d0                                  !

!-------------------------------------------------------
!
damping parameters for the scattering self energies
!-------------------------------------------------------
 self_damping1    = 0d0                                    !
 self_damping2    = 0d0                                    !
 self_damping3    = 0d0                                    !

!-------------------------------------------------------
!
damping parameters for the drift vector
!-------------------------------------------------------
 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

!-------------------------------------------------------
!
damping parameter for the Poisson slope at the boundary (only if entropicL)
!-------------------------------------------------------
 slope_damping1   = 0d0                                    !
 slope_damping2   = 0d0                                    !
 slope_damping3   = 0d0                                    !
$end_damping-parameters                                    !
!----------------------------------------------------------!

The damping of the electrostatic potential (i.e. solution of Poisson equation) works as follows:

 !-----------------------------------------------------------------------------------------------
 ! phiVi-1: potential of previous iteration
 ! phiVi:   potential of current  iteration
 ! phiVi+1: potential of next     iteration
 !-----------------------------------------------------------------------------------------------
phiVi+1 = poisson_damping * phiVi-1 + (1 - poisson_damping) phiVi

Note:
 - poisson_damping1/slope_damping1
are used if        conv_density > 0.1.
 - poisson_damping2/slope_damping2 are used if 0.1  > conv_density > 0.01.
 - poisson_damping3/slope_damping3 are used if 0.01 > conv_density
This means that one can use different dampings, e.g. a high damping if the solution is far away from the converged solution, and a small damping if the solution is close to convergence (or vice versa).
conv_density is the convergency parameter for the density.

 

 

Scattering mechanisms

!----------------------------------------------------------!
$scattering-mechanisms
                           optional  !
 acoustic_phonons              character         optional  !
 artificial_acoustic           double            optional  !
prefactor (for testing purposes)
 lattice_constant              double            optional  !
 sound_velocity                double            optional  !

 optical_phonons               character         optional  !
Note: The LO phonon energy has to be specified in the materials section.

 charged_impurity              character         optional  !
 exact_impurity                character         optional  !
(preliminary, for charged impurity scattering)

 interface_roughness           character         optional  !
 roughness_width               double            optional  !
 correlation_length            double            optional  !
 gaussian_correlationL         character         optional  !
                                                           !
 ballistic                     character         optional  !

 pauli_principle               double            optional  !

 electron_electron             character         optional  !
electron-electron scattering (Debye screening)

!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]

 max_cycle_counter             integer           optional  !
maximum number of inner iterations
 max_cycle_counter1            integer           optional  !
 max_cycle_counter2            integer           optional  !
 max_cycle_counter3            integer           optional  !
 scattering_boost              character         optional  !
 scattering_boost_factor       integer           optional  !
 scattering_boost_limit        double            optional  !

 wacker_approximation          character         optional  !
$end_scattering-mechanisms
                       optional  !
!----------------------------------------------------------!

 

!----------------------------------------------------------!
$scattering-mechanisms
                                     !
 acoustic_phonons      = no                                !    
no acoustic phonon scattering
                       = elastic                           !
  elastic acoustic phonon scattering
                       = inelastic                         !
inelastic acoustic phonon scattering (default)
                       = both                              !
both, elastic and inelastic acoustic phonon scattering (only for testing purposes!!!)
 artificial_acoustic   = 1d0           ! not relevant      !
artificial prefactor for inelastic acoustic phonon scattering (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) (inelastic and non-diagonal)
                                                           !
Note: The LO phonon energy has to be specified in the materials section.
                                                           !
Currently, an average value of all grid points is taken. In order to use
                                                           ! a constant LO phonon energy, each material should have the same value.
                                                           !
 charged_impurity      = no                                !
do not include charged impurity scattering
                       = yes                               !
include charged impurity scattering
 exact_impurity        = no            ! (default)         !
averaging over the charged impurity density (with respect to propagation coordinates)
                       = yes                               !
considering exact impurity scattering
                                                           !
 interface_roughness   = no                                !
interface roughness scattering
 roughness_width       = 6d0                               !
roughness width in [Angstrom] in growth direction (z direction)
 correlation_length    = 80d0                              !
correlation length for interface roughness in x and y directions in [Angstrom]
 gaussian_correlationL = yes           ! (default: yes)    !
assuming Gaussian    shaped in-plane roughness correlation
                       = no                                !
assuming exponential shaped in-plane roughness correlation
                                                           !
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)

                                                           !
using the approximation similar to A. Wacker
 wacker_approximation  = no            ! (default: no)     ! no:   including the momentum dependence - correct version
                       = yes                               ! yes: all momentum dependence of scattering potential is ignored (similar to A. Wacker)
                                                           !
                                                           !
maximum number of iterations of Green's functions and self-energies (manual version)
 max_cycle_counter       = 20                              !
maximum number of inner iterations (default: 20)
                                                           !
maximum number of iterations of Green's functions and self-energies (automated version)
 max_cycle_counter1      =                                 !
maximum number of inner iterations for by far not converged calculations (default: max_cycle_counter)
 max_cycle_counter2      =                                 !
maximum number of inner iterations for          not converged calculations (default: max_cycle_counter)
 max_cycle_counter3      =                                 ! maximum number of inner iterations for     almost converged calculations (default: max_cycle_counter)
                                                           !
 scattering_boost        = no                              !
accelerates the calculation of the scattering self energies (only far from convergence)
 scattering_boost_factor = 5                               !
amount of acceleration
 scattering_boost_limit  = 0.3d0                           !
boost, if convergency > scattering_boost_limit
                                                           !
$end_scattering-mechanisms                                 !
!----------------------------------------------------------!

 

Note: For interface roughness scattering, the files
  - BesselI.dat
  -     map.dat
must be present if gaussian_correlationL = yes.
If gaussian_correlationL = no, then the files
  -   elliptic_map.dat
  -  real_elliptic.dat
  - aimag_elliptic.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  !
 heated_part                   double            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.
                    = heated   ! heated electrons in the leads
In all other cases, a Fermi distribution in the contacts is used.
 

 heated_part        = ...d0    ! relative contribution of heated electrons
If contact_occupation = heated, this specifier is necessary.
If  heated_part is not specified, although contact_occupation = heated, then 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  !
!----------------------------------------------------------!

!----------------------------------------------------------!
$roughness-profile                                         !
 roughness_width                = 6d0                      ! [Angstrom]
 correlation_length             = 80d0                     ! [Angstrom]
 start_point                    = 1                        !
 end_point                      = 50                       !
$end_roughness-profile                                     !
!----------------------------------------------------------!

 

 

Output

All output files will be written to the folder "NEGF_data/".

 

Files describing input parameters

  • Conduction band edge
    ex_potential_new.dat
    :              grid point in [nm]       conduction band edge in [eV] (without electrostatic potential)
    external potential = conduction band edge (without electrostatic potential) in units of [eV]
     
  • Doping
    dopingV_new.dat
    :                        grid point in [nm]       doping concentration in [1018 e/cm-3]
     
  • Effective masses
    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]
     
  • Dielectric constants
    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 []
     
  • Interface roughness scattering
    roughness_width_new.dat
             grid point in [nm]       roughness width   in [Angstrom]
    correlation_length_new.dat   grid point in [nm]       correlation length in [Angstrom]
     
  • Nonparabolicity of effective masses
    nonparabolicity_new.dat
             grid point in [nm]       roughness width in [1/eV]

 

 

 

Calculated data

  • Conduction band edge (incl. electrostatic potential)
    pot_new.dat
    :                                grid point in [nm]       conduction band edge in [eV] (incl. electrostatic potential)
    pot_avs.dat/*.coord/*.fld:    AVS output files that can be used to plot the
                                                           conduction band edge (incl. electrostatic potential) in units of [eV]
                                                           with AVS/Express visualization software
     
  • Electron density
    density_new.dat -
    grid point in [nm]       electron density in units of [1018 cm-3]
     
  • Electrostatic potential
    poisson2_new.dat: electrostatic potential (will be updated for each Poisson iteration) including grid points in [nm]
    ==> The feature "solving the Poisson equation" can be switched off:
     no_poisson = yes   ! 'yes' / 'no'
  • Emapping.dat:     energy resolution (total energy grid) in units of [eV]
  • EzmappingV.dat: energy resolution in growth direction (z) (energy grid) in units of [eV]
  • 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.
  • poisson_slope.dat: [V/Angstrom]
    The new Poisson slope (i.e. - electric field) of the left contact is written to this file.
    (written out each time when solving Poisson equation)
    Tune the slope at the left contact (i.e. - electric field), so that the difference in the potential at the boundaries equals the difference in the chemical potentials.
    (Use only with drifted Fermi distributions in the contacts.)
    The slope at the right contact is proportional to this slope: F(right) = - F(left) * epsilon(left) / epsilon(right)
    where F is the electric field (i.e. - poisson_slope) and epsilon is the electric field.
     

 

AVS files

Note: AVS files can be opened conveniently by "double-clicking" on the *.v files.

  • EnergyResolvedDensity_avs.v
    EnergyResolvedDensity_avs.fld, *.coord, *.dat
    energy resolved density "density(z,E)": z, energy, density in units of [eV-1 * 1018 cm-3].
    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.dat:     energy resolved density "density(z,E)": z, energy, density in units of [eV-1 * 1024 cm-3].
    EnergyResolvedDensity_0.mtx
    : energy resolved density: matrix z x E (contains density for each matrix element density(z,E))
  • EnergyResolvedCurrent_avs.v
    EnergyResolvedCurrent_avs.fld, *.coord, *.dat
    energy resolved current density "current density(z,E)": z, energy, current density in units of [Ampere/(cm^2 eV)].
    EnergyResolvedCurrent.dat    -
    EnergyResolvedCurrent_ij.dat - x,y,f(x,y)
    format
    Note: EnergyResolvedCurrent_avs_interpolation.v.
  • Energy resolved local density of states (LDOS) (see Fig. in ICPS poster) (z, Ez, LDOS(z,Ez)) in units of [1 / (eVAngstrom)]
    ==> LDOS.v
     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.
     spectral_real.dat
    :
     spectral_real2.dat:
     spectral_aimag.dat:
     spectral_aimag2.dat:
     spectral_real_old.dat:
  • spectrum_ana.mtx: matrix representation of spectral_real.dat
  • spectrum_ana2.mtx: matrix representation of
  • spectrum_aver.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.
    The output units for the absorption (gain) are [1/m].

    - gain_real_avs.v
      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 divided by interval used for integration:
                        alpha(E)      where E is in units of [eV]
      gain_real_integrated_wavelength.dat
     
    contains the integrated absorption over spatial coordinate divided by interval used for integration:
                        alpha(lambda) where lambda is in units of [µm]
        Note: The interval that is used for integration is specified via
                gain-integrate-device-from-to     = 5d0 65d0 ! [nm]

    - 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 (I-V characteristics)

  • IV_characteristics1D_NEGF.dat:         current-voltage characteristics (I-V characteristics)
    There are three columns:
    - applied voltage in units of [V]
    - current density (averaged value over all grid points (N-2)) in units of [A/cm2]
    - difference in electrostatic potential of left and right boundaries in units of [V]: phi(1) - phi(Nz)
     
  • IV_characteristics1D_NEGF_run.dat: current-voltage characteristics (I-V characteristics)
    - applied voltage in units of [V]
    -
    current density at each grid point (should be the same for all grid points if converged) in units of [A/cm2]

 

Convergence files

During the calculation, one can check the status of the convergence.

  • min_pot.dat: minimum of conduction band edge during iterations ==> if converged, this value should be converged
    Returns the lowest value (minimum) of the conduction band edge in units of [eV], i.e. of the file pot_new.dat.
    Note: min_potV is currently used only in FUNCTION get_drift_momentum.
  • long_convergency.dat: contains convergence parameter: relative change of density to previous iteration
    (only Poisson (phi) self-consistency)
    see also specifier long_conv_limit
  • convergency.dat: contains convergence parameter: relative change of density to previous iteration
    (both Poisson (phi) self-consistency and scattering-self-consistency (sigma))
  • comp_current.mtx: electron current density [A/Angstrom2] - each line corresponds to an iteration
  • comp_density.mtx: electron density               [Angstrom3] - each line corresponds to an iteration
  • density.dat: last line of comp_density.dat

 

 

Other files

  • screening_length.dat - electrostatic screening length in units of [Angstrom]
    written out in subroutine get_density
  • tau.dat -
  • test_debug.dat -
  • test_greenL.dat -
  • second_div_low.dat -
  • run_status.txt -
  • LOS.dat - SUBROUTINE get_density
    contains real part of the spectral function for k|| = 0.

 

How to restart a calculation

If you used

 save-every-nth-iteration = ! saves information in binary format that can be read in
                               ! later to restart a calculation (default: 10)

then you can restart a calculation by reading in previously saved data. This feature is useful if you had a system crash or system shut down, for instance. The calculations are then restarted from the point where the NEGF_data/stop/*.sav files have been written.

  1. Generate a file named run.txt in the folder of the executable. The content of that file does not matter – it may be empty.
  2. Start the program with the same input file the NEGF_data/stop/*.sav files have been generated with.
  3. Wait until the following is written on the screen output, or in the output file in the case you pipe (> logfile.out) the screen output (may take some time, depending on the job):
    - reading the Green's functions
    - reading the self energies on hard drive
    - reading the numerical constants
    - reading the physical constants
    - reading the remaining global variables
    - reading the global functions
    Then the reading of the former program process is done.
  4. Now you may delete the run.txt file. That might be saver, but it should not matter leaving the file as it is. (We have not seen any problems with that.)

Note: If save-every-nth-iteration = is chosen, then for each iteration the *.sav files are written. On modern architectures, this is usually fast. On older systems, this might take significant time.

 

For an example of the Green's function functionality, have a look at the RTD tutorial.

 

Parallelization of NEGF algorithm

The NEGF algorithm has been parallelized.
Three options for parallelization are available.

  • no parallelization (executables compiled with NAG and g95 compilers)

  • parallelization with OpenMP (executables compiled with Intel compiler, including parallel version of MKL)
    Very easy to use, i.e. specify number of threads via command line: nextnano3.exe -threads 4
    (uses four threads, e.g. on a quad-core CPU)

  • parallelization with Co-array Fortran
    (not implemented yet)

For further details, see also:
  $global-settings
   ...
   number-of-threads = 2     ! 2 =
for dual-core CPU

 

   
Last modified: 05-May-2010   -   optimised for Microsoft Internet Explorer 7®