CBRcurrent
This keyword is necessary for ballistic current calculations and for
calculations of the transmission coefficient T(E).
CBR = Contact Block Reduction method
Efficient method for the calculation of ballistic quantum transport
D. Mamaluy, M. Sabathil, and P. Vogl
J. Appl. Phys. 93, 4628 (2003)
Ballistic Quantum Transport using the Contact Block Reduction (CBR) Method 
An introduction
S. Birner, C. Schindler, P. Greck, M. Sabathil, P. Vogl
Journal of Computational Electronics 8, 267286 (2009)
DOI 10.1007/s108250090293z
At a glance: CBR current calculation
 Full 1D, 2D and 3D calculation of quantum mechanical ballistic
transmission probabilities for open systems with scattering boundary
conditions.
 Contact Block Reduction method:
 Only incomplete set of quantum states needed (~ 1020 %)
 Reduction of matrix sizes from O(N³) to O(N²)
 Ballistic current according to LandauerBüttiker formalism
The CBR method is an efficient method that uses a
limited set of eigenstates of the decoupled device and a few propagating lead
modes to calculate the retarded Green's function of the device coupled to
external contacts. From this Green's function, the density and the current is
obtained in the ballistic limit using Landauer's formula with fixed Fermi levels
for the leads.
It is important to note that the efficiency of
the calculation and also the convergence of the results
are strongly dependent
on the cutoff energies for the eigenstates and lead modes. Thus it is important to
check during the calculation if the specified number of states and modes is
sufficient for the applied voltages. To summarize, the code may do its job very
efficiently but is far away from being a black box tool.
Limitation: A constant grid spacing in
real space is necessary. (It is possible to extend this algorithm to nonuniform
grids. Will be done in the future...)
!!
$CBRcurrent
optional !
destinationdirectory character
required ! directory for output and
data files
calculateCBR
character
optional ! flag: "yes "/"no "
calculateCBRDOS
character
optional ! flag: "yes "/"no "
selfconsistentCBR character
optional ! flag: "yes "/"no "
readinCBRstates
character
optional ! flag: "yes "/"no "
!
mainqrnum
integer
optional ! number of main quantum
cluster for which transport is calculated
numleads
integer
optional ! total number of leads
attached to main region
leadqrnumbers
integer_array optional
! quantum cluster numbers corresponding to each lead
propagationdirection integer_array
optional ! direction of propagation
(1,2,3) for each lead
nummodesperlead integer_array
optional ! number of modes per lead
used for CBR calculation
! must be <= number of eigenvalues specified in corresponding quantum
model
numeigenvectorsused integer_array optional ! number of eigenvectors in
main quantum cluster used for CBR calculation (for each Schrödinger equation)
leadmodescalculation character
optional !
!
Emin
double
optional ! lower boundary for
transmission energy interval
Emax
double
optional ! upper boundary for
transmission energy interval
numenergysteps
integer
optional ! number of energy steps for
transmission energy interval
adaptiveenergygrid
character
optional ! flag: "yes "/"no "
!
extractquasiFermilevel character
optional ! flag: "yes "/"no "
!
$end_CBRcurrent
optional !
!!
Syntax
destinationdirectory = mydirectory/
e.g. = CBR_data1/
Name of directory to which the files should be written. Must exist
and directory name has to include the slash (\
for DOS and / for UNIX)
calculateCBR = yes
=
no
Flag whether to calculate ballistic CBR current or not.
calculateCBRDOS = yes
=
no
Flag whether to calculate and output the local density of states (which are
the diagonal elements (divided by 2 pi) of the spectral function), and the
density of states with the CBR method.
Note: The calculation of the transmission coefficient T(E) is much faster
than the calculation of the local DOS.
If one is only interested in the transmission coefficient, the calculation
of the local DOS can be omitted using this specifier.
selfconsistentCBR = yes
=
no ! (default)
If yes , then the the quantum
density is calculated via the CBR method, and not by the usual quantum
mechanical approach (of occupying the square of the wave function with the
local quasiFermi level.)
This will influence selfconsistent calculations.
See also adaptiveenergygrid .
readinCBRstates = yes
=
no ! (default)
Flag whether to read in CBR states or not.
mainqrnum = 1
Number of main quantum cluster for which ballistic transport is calculated.
This cluster is usually labeled with 1
and corresponds to the device itself.
numleads = 3 ! 2D/3D (>=
2)
numleads = 2 ! 1D ( must
be equal to 2 in 1D simulation)
Total number of leads (= contacts) attached to main quantum cluster (mainqrnum = 1 ).
In 1D, only 2 leads are possible.
For higher dimensions, more than 2
leads (= contacts) are possible.
2 leads is the lower boundary.
leadqrnumbers = 2 3
Quantum cluster numbers corresponding to each lead.
Must be equal to "2 3"
for a 1D simulation.
propagationdirection = 1 1
Direction of propagation (1,2,3) for each lead.
1 : along x direction
2 : along y direction
3 : along z direction
nummodesperlead = 41 13 41 !
2D/3D ( a value >= 1 is required
for each lead)
nummodesperlead = 1 1 !
1D ( must be equal to "1 1"
for a 1D simulation)
Number of modes per lead used for CBR calculation.
Must be <= number of eigenvalues specified in corresponding quantum model.
Note: For k.p CBR calculation, one must take into account all
modes. For k.p, the number of modes per lead cannot be reduced.
For details about "Mode space reduction in singleband case", see section V.
in
Mamaluy et al., Physical Review B 71, 245321 (2005)
numeigenvectorsused = 30 !
(This could be an integer array for each Schrödinger equation.)
Number of eigenvectors in main quantum cluster used for CBR calculation.
Must be <= number of eigenvalues specified in corresponding quantum model.
If number is larger than the number of eigenvalues specified in
corresponding quantum model, all eigenstates are used (default).
Example: The following figure shows the calculated transmission from
lead 1 to lead 3 as a function of energy T_{13}(E).
Full line: All eigenfunctions (numeigenvectorsused =
[maximum no. of eigenfunctions]) of the decoupled
device are taken into account.
Dashed line: Only the lowest 7% of the eigenfunctions are included (numeigenvectorsused
= [0.07 * maximum no. of eigenfunctions]).
Here, Neumann boundary conditions are used for the propagation direction
at the contact grid points.
The vertical line indicates the cutoff energy, i.e. the highest eigenvalue
that is taken into account.
leadmodescalculation = CBRleadHamiltonian
! (default)
= CBRquantumcluster !
= nextnano3quantumcluster ! (not
recommended so far)
This keywords specifies how
 for a 3D CBR (dim=3) calculation the 2D Schrödinger equation for
the leads is discretized to obtain the lead modes.
 for a 2D CBR (dim=2) calculation the 1D Schrödinger equation for
the leads is discretized to obtain the lead modes.
This keyword is only relevant for a 2D or 3D CBR calculation. It is irrelevant
for 1D CBR.
= CBRleadHamiltonian
! Calculate eigenvalues and wave functions within CBR routine using a
separate Hamiltonian.
! In 2D, potential energy and mass profile is correct for this 1D
Hamiltonian.
! In 3D, potential energy and masses are assumed to be constant for this
2D Hamiltonian.
! A constant grid spacing is assumed in (dim) for the (dim1)
Hamiltonian.
= CBRquantumcluster
! Calculate eigenvalues and wave functions within CBR routine
! using the nextnano³ implementation of the (dim1) Schroedinger
equation.
! (only implemented for 2D CBR so far)
= nextnano3quantumcluster
! Take eigenvalues and wave functions from nextnano³ calculation.
! So far: (dim) Schrödinger equation is used, but: (to do) (dim1)
Schrödinger equation should be used instead
In the long term, nextnano3quantumcluster
should be the default, or at least
CBRquantumcluster .
Emin = 0.0d0 ! 0.0 [eV]
Lower boundary for the energy interval of the transmission coefficient T(E) in units of [eV].
Should be smaller than the lowest eigenvalue E_{1}.
Emax = 0.6d0 ! 0.6 [eV]
Upper boundary for the energy interval of the transmission coefficient T(E) in units of [eV].
If one wants to calculate the current for low temperatures, then it is
sufficient to set Emax to the energy of the Fermi level.
numenergysteps = 100
Number of energy steps between Emin and Emax .
This number determines the resolution of the transmission curve T(E) where E
is the energy in units of [eV].
==> The number of energy grid points = numenergysteps +
1
because the first grid point (Emin ) is also included.
adaptiveenergygrid = adaptiveexponential
! (recommended for selfconsistent CBR calculations)
= adaptivelinear !
= adaptiveNEGF
! (adaptive energy grid, same subroutine as NEGF algorithm)
= no
! (default)
For selfconsistent CBR (selfconsistentCBR = yes )
a selfadapting energy grid leads to faster convergence.
Information on the grid can be found in this file: EnergyGrid.dat
number of energy grid point energy [eV]
Note: The boundaries of the energy grid are automatically adjusted to
Emin = energy of lowest mode
Emax = energy of highest mode + 0.2 eV
(Comment S. Birner: It might be necessary to adjust this value, or to use
as Emax the value specified in the input file.)
The remaining energy grid points are distributed over the grid to minimize
the maximum grid spacing.
adaptiveexponential
/ adaptivelinear :
This algorithm sets up the energy grid, trying to resolve the anticipated peaks in the density of states due to the onset of the lead modes (2D/3D).
In 1D, these are the band edge energies at the left and right device boundary.
This works particularly well in rather open devices,
where the density of (DOS) states is dominated by the leads.
The algorithm finds all propagating modes of a lead within an energy range
up to the lead cutoff and
resolves each mode by "points_per_mode" with a local grid spacing of delta_E
in an exponential or linear
grid
extractquasiFermilevel = yes ! (default)
= no ! E_{F} = 0 eV is
assumed. (faster but not stable for all situations, e.g. high biases)
In a selfconsistent CBR calculation, for the calculation of the density of
the bands that are not treated within the CBR method,
a quasiFermi level is required.
With this flag, an estimate is calculated.
For details, see the CBR paper of S. Birner et al.
Additional notes on the meaning of the quantum clusters
We need (at least) three quantum clusters, one for the device,
and the remaining for the leads.
Reason: We have to tell the nextnano³ code where the device Hamiltonian
and where the lead Hamiltonians have to be set up.
 quantumcluster = 1: Device: This is the interesting region where we are solving
the Schrödinger equation of the device (decoupled device, i.e. closed
system).
Special boundary conditions for CBR method:
For the main quantum cluster (mainqrnum = 1 )
for which ballistic transport is calculated, the nextnano³ code overwrites
internally the entries made in
the input file.
Generally speaking:
==> Along propagation direction nextnano³ chooses Neumann.
==> Perpendicular to the propagation direction nextnano³ chooses Dirichlet.
(i.e. boundary condition for propagation direction: Neumann, for remaining
directions: Dirichlet)
Actually, to be more precise:
For each grid point in the main quantum cluster it is checked if
it is at the boundary and if it is in contact to a lead.
If it is at the boundary, and if it is
in contact to a lead, a Neumann boundary condition is set.
If it is at the boundary, and if it is not in contact to a lead, a
Dirichlet boundary
condition is set.
 quantumcluster = 2: Lead no. 1: Dirichlet boundary conditions
perpendicular to propagation direction
 quantumcluster = 3: Lead no. 2: Dirichlet boundary conditions
perpendicular to propagation direction
Note: Physically speaking, the lead quantum cluster must be a twodimensional
surface in a 3D simulation, a onedimensional line in a 2D simulation and a
zerodimensional point in a 1D simulation.
So far the leads must contain 2 grid points along the propagation
direction. This is because it is currently not allowed to have a
twodimensional (i.e. a width of 1 grid point only) quantum cluster in a 3D
simulation. Internally, the eigenvalues and modes are treated as to be
twodimensional. In a 2D CBR simulation, similar restrictions apply, i.e. the
lead quantum regions must be rectangles of width 2 grid points, although
internally a onedimensional line is used.
Note: The lead quantum cluster must not be overlapping with the device
quantum region. The lead quantum grid points must be neighbors to the device
quantum grid points.
Note: In the future, we will allow the user to specify 2D leads (rectangles)
in a 3D simulation, and 1D leads (lines) in a 2D simulation.
This is currently not possible.
Note: In 1D it is not necessary to specify more than one quantum cluster,
i.e. the quantum clusters for the leads must be omitted.
(For code developers: Check the specifier: leadmodescalculation =
... )
Example
$quantummodelelectrons
modelnumber
= 1
...
clusternumbers =
1 !
Main quantum cluster (mainqrnum = 1 )
for which ballistic transport is calculated.
boundarycondition100 = Dirichlet !
This boundary conditions is overwritten internally in any case.
boundarycondition010 = Dirichlet !
This boundary conditions is overwritten internally in any case.
boundarycondition001 = Neumann !
This boundary conditions is overwritten internally in any case.
(propagation direction is along z direction)
modelnumber
= 2
...
clusternumbers =
2 !
Lead no. 1
boundarycondition100 = Dirichlet !
boundarycondition010 = Dirichlet !
boundarycondition001 = Neumann !
propagation direction is along z direction
modelnumber
= 3
...
clusternumbers =
3 !
Lead no. 2
boundarycondition100 = Dirichlet !
boundarycondition010 = Dirichlet !
boundarycondition001 = Neumann !
propagation direction is along z direction
Note: The boundary conditions are irrelevant. They are overwritten
internally.
The CBR method only works if you have chosen the correct flowscheme ($simulationflowcontrol ).
The current cluster must be deactivated.
$currentcluster
clusternumber = 1
regionnumbers = 1
deactivatecluster = yes
In order to print out currentvoltage characteristics (IV characteristics), the
corresponding specifier must be activated, see
$outputcurrentdata
for details.
Output
 Transmission coefficient T_{ij}(E) between Lead i and Lead j of
Schrödinger equation
sg001
 transmission2D_cb_sg001_CBR.dat
Energy[eV] T_01_02 T_01_03
T_02_03
 Density of states DOS(E) for each lead, and the total DOS(E)
 DOS1D_sg001.dat
energy[eV] Lead001 Lead002
SumOfAllLeads
The units are [eV^1] .
 (Total) local density of states LDOS(z,E), i.e. sum of LDOS(z,E) of each
lead
 LocalDOS1D_sg001.dat / *.coord / *.fld or in the *_ij.dat
format ( x,y, f(x,y) )
position[nm] energy[eV] LDOS[eV^1nm^1]
The units of the LDOS are [eV^1 nm^1] .
Note:
 In 1D, the LDOS(z,E) is a twodimensional plot.
How the hell do I plot these strangely
".dat / *.coord / *.fld" like formatted files?
 In 2D, the LDOS(x,y,E) is a threedimensional plot.
 In 3D, the LDOS(x,y,z,E) is a fourdimensional plot (not
implemented yet).
 Local density of states LDOS(z,E) of each lead
 LocalDOS1D_sg001_Lead01.dat / *.coord / *.fld or in the
*_ij.dat format ( x,y, f(x,y) )
position[nm] energy[eV] LDOS[eV^1nm^1]
The units of the LDOS are [eV^1 nm^1] .
Note:
 In 1D, the LDOS(z,E) is a twodimensional plot.
How the hell do I plot these strangely
".dat / *.coord / *.fld" like formatted files?
 In 2D, the LDOS(x,y,E) is a threedimensional plot.
 In 3D, the LDOS(x,y,z,E) is a fourdimensional plot (not
implemented yet).
 Additional 1D output:
Local density of states LDOS(z=zmin,E) and LDOS(z=zmax,E) at the boundaries
of the device (i.e. at contact grid points).
 LocalDOS_at_boundaries1D_sg001.dat
energy[eV] LDOS(zmin,E)[eV^1nm^1] LDOS(zmax,E)[eV^1nm^1]
 Energy grid that is used for the CBR calculation
 CBR_EnergyGridV.dat
EnergyGridPoint Energy[eV]
The energy grid could have a constant grid spacing, or be a
selfadapting grid with varying grid spacing.
 Electron or hole density as calculated from the CBR algorithm
1D:
 density1D_sg001.dat
position[nm] density[10^18cm^3]
2D:
 density2D_sg001.dat / *.coord / *.fld or in the
*_ij.dat format ( x,y, f(x,y) )
position[nm] density[10^18cm^3]
3D:
 density3D_sg001.dat / *.coord / *.fld or in the
*_ijk.dat format ( x,y,z, f(x,y,z) )
position[nm] density[10^18cm^3]
 Fermi levels
 _FermiLevel_el_CBR.dat
 _FermiLevel_hl_CBR.dat
position[nm] FermiLevel[eV]
Parallelization of CBR algorithm
The CBR algorithm has been parallelized, i.e. the
loop over numenergysteps .
This is relevant for 2D and 3D CBR calculations, in 1D the effect is very small
(negligible).
Three options for parallelization are available.

no parallelization

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

parallelization with
Coarray Fortran
(executable compiled with g95
compiler)
Not so easy to use, only available on Linux so far:
Start g95 Coarray console:
cocon
fork 4 (sets 4 images (=
threads))
run nextnano3_g95.exe
(uses four images (= threads), e.g. on a quadcore CPU)
For further details, see also:
$globalsettings
...
numberofparallelthreads = 2
! 2 = for dualcore CPU
