currents{}

Specifications for the current equation such as mobility models and recombination models.

currents{

   mobility_model    = constant

   high_field_saturation{
     alpha_electrons = 0.0    # >= 0.0
     beta_electrons  = 2.0    # >= 0.001
     vsat_electrons  = 1.0    # >= 1.0

     alpha_holes     = 0.0    # >= 0.0
     beta_holes      = 2.0    # >= 0.001
     vsat_holes      = 1.0    # >= 1.0
   }


   recombination_model{       # required
     SRH               = yes  # optional, default: no
     Auger             = yes  # optional, default: no
     radiative         = yes  # optional, default: no
     enable_generation = yes  # optional, default: yes
   }


   output_fermi_levels{}
   output_fermi_level_differences{}

   output_mobilities{}
   output_recombination{}

   output_currents{}

   output_velocities{}
   output_power_density{}

   # linear equation solver in current equation
   linear_solver{
     iterations   = 200
     abs_accuracy = 1e-30
     rel_accuracy = 1e-13
     dkr_value    = 0.1
     use_cscg     = no
     force_diagonal_preconditioner = no
     force_iteration               = no
     extended accuracy = 0
   }

   debuglevel      = 1

   insulator_bandgap = 0.5   # [eV]

   minimum_density        = 1e11            # [cm^-3]
   minimum_density_factor = [ 1.0 , 1.0 ]   # [cm^-3]

   maximum_density        = 1e30            # [cm^-3]
   maximum_density_factor = [ 1.0 , 1.0 ]   # [cm^-3]

   minimal_recombination = yes
}

Mobility models in currents{} - current syntax

Four low-field following mobility models are supported in nextnano++:

One of them can be chosen by using and atrribute mobility_model. If neither of groups, electron _mobility{} or hole_mobility{}, is called, then this keyword applies.

mobility_model (optional)
value

“string”

options

constant, masetti, arora, minimos

default

constant

high_field_saturation{} (optional)

experimental feature (use with care!)

alpha_electrons
value

double >= 0.0

example

0.0

beta_electrons
value

double >= 0.001

example

2.0

vsat_electrons
value

double >= 1.0

example

1.0

alpha_holes
value

double >= 0.0

example

0.0

beta_holes
value

double >= 0.001

example

2.

vsat_holes
value

double >= 1.0

example

1.0

Specify \(\alpha\), \(\beta\) and \(v_ \text{sat}\) values for electrons and holes, respectively.

Model for velocity saturation

The parameters derive from an extended Canali model. The driving force \(\mathbf{F}\) of the respective carriers is currently the gradient of the respective quasi-Fermi level.

Setting alpha to one and beta to 2 will yield the Hänsch model.

Note that convergence may be much more difficult to achieve when high field saturation (hfs) is enabled. Therefore, this feature should remain disabled by default.

\(\mu(F) = \frac{ (\alpha + 1) \mu _\text{low} }{ \alpha + \left( 1 + \left( (\alpha + 1) \frac{\mu _\text{low} F}{v_\text{sat}} \right)^\beta \right)^{1/\beta} }\)

\(\mu _\text{low}\): low field mobility

\(v_ \text{sat}\): saturation velocity

Mobility models in currents{} - new syntax (next release)

Groups electron _mobility{} and hole_mobility{} allows to define both low-field and high-field models for carriers, separately for electrons and holes. Callig one of these groups redefines the mobility model for respective type of carriers.

Warning

Convergence may be poor or non-existent for some choices of parameters. Please make sure that the high-field model is suitable for the semiconductor system of modelled device.

electron_mobility{} (optional) & hole_mobility{} (optional)
low_field_model
comment

overrides mobility_model for electrons or holes

type

choice

options

constant, masetti, arora, minimos

high_field_model{} (optional)
vsat

saturation velocity

type

real number

unit

cm/s

constraint

vsat >= 1.0

haensh{} (optional)

This group triggers Haensh model

canali{} (optional)

This group triggers extended Canali model

alpha
type

real number

constraint

alpha > 0.0

comment

set equal 1 for Hänsch model

beta
type

real number

constraint

beta > 0.001

comment

set equal 2 for Hänsch model

transferred{} (optional)

This group triggers trensferred-electron model

alpha (optional)
type

real number

constraint

alpha > 0.001

default

1

beta
type

real number

constrain

beta > 1.001

gamma (optional)
type

real number

constraint

gamma > 0.0

default

0

E0
type

real number

unit

V/cm

constraint

E0 > 1.0

eastman{} (optional)

This group triggers extended Eastman-Tiwari-Shur model

alpha
type

real number

constraint

alpha > 0.0

beta
type

real number

constraint

beta > 1.001

High-field mobility models

Three high-field mobility models are currently implemented.

Extended Canali model given by the formula:

\(\mu(F) = \frac{ (\alpha + 1) \mu _\text{low} }{ \alpha + \left( 1 + \left( (\alpha + 1) \frac{\mu _\text{low} F}{v_\text{sat}} \right)^\beta \right)^{1/\beta} }\)

where \(\mu _\text{low}\) is low-field mobility, \(v_ \text{sat}\) is saturation velocity, and \(\mathbf{F}\) is the driving force. Parameters \(\alpha\), \(\beta\) and \(v_ \text{sat}\) are be defined independently for holes and electrons . The driving force \(\mathbf{F}\) of the respective carriers is evaluated as the gradient of the respective quasi-Fermi level.

Hänsch model which is a special case of the Canali model with \(\alpha=1\) and \(\beta=2\) given by the formula:

\(\mu(F) = \frac{ 2 \mu _\text{low} }{ 1 + \left( 1 + \left( 2 \frac{\mu _\text{low} F}{v_\text{sat}} \right)^2 \right)^{1/2} }\)

Transferred-Electron model given by the formula:

\(\mu(F) = \frac{ \mu _\text{low} + \frac{v_\text{sat}}{F}\left(\frac{F}{E_0}\right)^\beta }{ 1 + \gamma \left( \frac{F}{E_0}\right)^\alpha + \left( \frac{F}{E_0}\right)^\beta }\)

where \(E_0\) is critical field.

Eastman-Tiwari-Shur model given by the formula:

\(\mu\left(F\right)=\frac{\mu_\mathrm{low}+\frac{v_{\mathrm{sat}}}{F}\alpha\left(\frac{\mu_\text{low}F}{v_\text{sat}}\right)^{\beta}}{1+\alpha\left(\frac{\mu_\text{low}F}{v_\text{sat}}\right)^\beta}\)

Recombination in currents{}

recombination_model{}
SRH (optional)
value

yes or no

default

no

Shockley-Read-Hall recombination (Shockley-Read-Hall (SRH) recombination)

Auger (optional)
value

yes or no

default

no

Auger recombination (Auger recombination)

radiative (optional)
value

yes or no

default

no

radiative recombination (direct recombination) (Radiative recombination)

enable_generation (optional)
value

yes or no

default

yes

Generation can be switched on (default: yes) or off for the enabled processes.

For each enabled of the three processes, generation is enabled/disabled using enable_generation. Thus, enabling only generation without also enabling recombination is not possible (enable_generation = yes has no effect then). If radiative recombination is calculated (radiative = yes), then the photo_current is included in the file IV_characteristics.dat. Additionally, the internal quantum efficiency is written to the file internal_quantum_efficiency.dat.

Output in currents{}

output_fermi_levels{}

prints out the Fermi levels for electrons and holes [eV]

output_fermi_level_differences{}

prints out the difference of electron and holes Fermi levels, \(\Delta E_ \text{F} = E_{\text{F,n}} - E_{\text{F,p}}\) [eV]

By overlaying the Fermi level difference over the band gaps, you may e.g. determine where and involving which bands lasing may occur.

output_mobilities{}

prints out the electron and hole mobilities [cm^2/Vs]

output_recombination{}

prints out the recombination rates [1e18/(cm^3s)]

Note: If you want to output the generation rate, you have to specify this in structure{ generation{} ==> output_generation{} }.

output_currents{}

prints out the electron and hole current densities [A/cm^2]

Note: The electron, hole, and total currents (integrated over the contacts surfaces) are always written into the files IV_electrons.dat, IV_holes.dat, and IV_characteristics.dat (in units of [A/cm^2] (1D), [A/cm] (2D), [A] (3D)), respectively. If radiative recombination is used, the file IV_characteristics.dat also contains the photo current. In all IV_*.dat files, the first columns indicate the voltages at each contact. Typically, the first column should be the one that is swept as it is then easier to plot the results within nextnanomat as the first column is the x axis in such a plot. You can switch the columns by reordering the contacts, see contacts{}. The consumed power is written in IV_Power.dat in units of [W/cm^2] (1D), [W/cm] (2D), [W] (3D), respectively. The emitted power column is added if the energy resolved density integration is enabled.

output_velocities{}

prints out electron and hole drift velocities [cm/s]

output_power_density{}

prints out power density (only Joule heating) [W/cm^3]

Solver in currents{}

linear_solver{}

Parameters for linear equation solver in current equation.

iterations
value

integer

default

10000

example

200

number of iterations

abs_accuracy
value

double

default

1e-30 # [eV]

example

1e-30 # [eV]

absolute accuracy of Fermi level, use a small value to force convergence

Note

abs_accuracy is (dimension dependent!!!):

(default is: 1e-30 [eV] (1D), 1e-30 [eV] (2D), 1e-30 [eV] (3D))

rel_accuracy
value

double, 0.0 <= rel_accuracy <= 0.01

default

1e-13 # [dimensionless]

relative accuracy

(default is: 1e-13 [dimensionless]), 0.0 <= rel_accuracy <= 0.01

dkr_value
value

double, must be <= 0.5

default

-1.0 # [dimensionless]

example

0.1 # [dimensionless]

magic parameter to speed up calculations, affects preconditioning

Note: Negative values are ignored but will switch to a slightly slower but more stable preconditioner.

use_cscg
value

yes or no

default

no

Forces the slower but occasionally more robust CSCG (Composite Step Conjugate Gradient ) linear solver to be used rather than the cg (Conjugate Gradient) linear solver. May occasionally prevent a diagonalization failure.

force_diagonal_preconditioner
value

yes or no

default

no

Only for debugging purposes, enabling will make code much slower or prevent convergence. Forces the use of a slower but more robust diagonal preconditioner. Only for debugging purposes, enabling will make code much slower or prevent convergence. Please try setting it to yes in case preconditioning fails or the linear solver diverges. If set to yes, iterations may have to be further increased.

force_iteration
value

yes or no

default

no

Only for debugging purposes, enabling will make code much slower or prevent convergence.

extended_accuracy
value

0 or 1

default

0

If set to 1, then current equation is solved using slower but more accurate solver (only implemented for nonperiodic 1D simulations). Experimental feature, will change in the future.

debuglevel

value

integer value between [-1,3]

default

1

The higher this integer number, the more information on the numerical solver is printed to the screen output. Increasing the respective debuglevel to 2 or more significantly increases the volume of the diagnostic output displayed in nextnanomat (or a shell window). As result of the additional I/O load, particularly 1D simulations will slow down correspondingly (especially for currents{} and poisson{}).

insulator_bandgap

value

double

default

1.0 # [eV]

example

0.5 # [eV]

\(I_{\text{gap}}\) affects initial solution of Fermi level.

A large value (relative to band gap) of \(I_{\text{gap}}\) lets Fermi level drop continuously. A small value of \(I_{\text{gap}}\) lets Fermi level drop in barrier and makes it flat in small bandgap regions. A better, more meaningful, name for insulator_bandgap might have been initial_energy_scale.

The drift-diffusion current equation reads \(\text{div} \left( \mu n \nabla E_{\text{F}} \right) = G-R\). In order to calculate the density \(n\), we have to know the quasi-Fermi level \(E_{\text{F}}\). Approximately, the intrinsic density exponentially depends on the band gap \(E_{\text{gap}}\). Therefore we apply a trick, and use \(\text{div} \exp \left( E_{\text{gap}} / I_{\text{gap}} \right) \nabla E_{\text{F}} = 0\) in order to find a first approximation to the quasi-Fermi level, where \(I_{\text{gap}}\) can be entered in the input file (insulator_bandgap) to adjust the convergence behavior of the initial solution.

minimum_density

value

double

default

1e10 # [cm^-3]

example

1e11 # [cm^-3]

Improves condition number of current equation matrix.

Note: 1e12 [cm^-3] seems to be too high.

1e-10 is actually the smallest possible value, smaller values are just automatically increased to 1e-10 without warning. Minimum charge carrier density (lower limit) for both electrons and holes that can appear in drift-diffusion current equations. The minimum density might have to be increased in order to obtain convergence for the drift-diffusion current equations. The minimum density should be as low as possible. The minimum density can be chosen as large as possible but should be smaller than the minimum density in the converged result. As the drift-diffusion current is proportional to the charge carrier density, this eventually also sets the lower limit of the current. The minimum density is a useful flag for structures where regions are present that have almost no density (e.g. a barrier, or insulator). If the density in such an insulator is below 1 - 10^3 [cm^-3], the product of \(\mu n\) in the drift-diffusion current equation varies over several orders of magnitude. Consequently, the matrix used in the linear solver is not well conditioned. Here, the current through these insulating regions is basically zero which has implications on the convergence behavior of the drift-diffusion current equations. Increasing the minimum density will help in these cases. A useful value for the minimum density of a certain material depends on the band gap because its intrinsic density also depends on the band gap. A wide-band gap material has a much lower intrinsic density than a low-band gap material.

Minority carriers in highly doped semiconductors or carriers in undoped wide band gap semiconductors have extremely small equilibrium densities (much less than 1.0 cm^-3), resulting in complete breakdown of the solvers for current equation due to underflow. Unfortunately, it is not clear whether quadruple precision would cure this problem. Also, it seems unphysical to believe that one carrier per kilometre can be physically relevant (aside from the rather practical issue that real-life minority carrier densities are not in thermal equilibrium und thus never become as small as predicted). Therefore, we modified the code (2019-01-23) to make sure that the minimum density parameter as specified for the current equation is not smaller than 10^-10 cm^-3 (this value corresponds to a conductivity 10 orders of magnitude lower than the best insulators). At the same time, we left the minimum value in the syntax definition unchanged as 0.0 in order to avoid users getting annoying error messages when they experimentally set the value to zero (zero will just be silently increased to 1e-10). For systems without extremely low carrier densities, results will not be affected by this change.

Separate minimum densities for electrons and holes are optionally available:

minimum_density_factor

value

double array

default

[ 1.0 , 1.0 ] # [cm^-3]

example

[ 1.0 , 0.01 ] # [cm^-3]

Here, the two numbers for minimum_density_factor defines scaling factors by which the minimum density is multiplied for electrons and for holes. For example, a minimum density of 1e10 [cm^-3] for electrons and 1e8 [cm^-3] for holes could be defined e.g. as

minimum_density        = 1e10            # [cm^-3]
minimum_density_factor = [1.0 , 0.01]    # [cm^-3]

or

minimum_density        = 1e9             # [cm^-3]
minimum_density_factor = [10 , 0.1]      # [cm^-3]

or, most conveniently,

minimum_density        = 1.0             # [cm^-3]
minimum_density_factor = [1e10 , 1e8]    # [cm^-3]

Irrespective of the definition, the actually used values for the minimum densities are output close to the beginning of the log file.

maximum_density

value

double

default

1e30 # [cm^-3]

similar meaning as minimum_density

maximum_density_factor

value

double array

default

[ 1.0 , 1.0 ] # [cm^-3]

analogous to minimum_density

Note

Note that the minimum/maximum densities only affect the current operators (\(\nabla \mu n \nabla\)) and corresponding currents (\(e \mu n \nabla\)), thus, they have no direct influence on recombination (unless minimal_recombination = yes), computed densities, Poisson equation, etc. Also, when restricting effective densities in the current equations from above and/or below, please think first whether and in which way such restriction affects the physics: Increasing minimum densities make insulating regions less insulating, whereas decreasing maximum densities make conducting regions less conducting.

minimal_recombination

value

yes or no

default

no

If enabled, the minimum densities will also apply to the recombination/generation terms of the current equation.