2.6.2. contacts{}

What are contacts in nextnano++

Boundary conditions for the Current and Poisson equations are defined in nextnano++ within this group. These conditions can be assigned to specific regions by referring to assigned attribute name. We use the name contacts for these boundary conditions since typically they are chosen as the most outer regions of the structures aiming at simulating real contacts of some devices. It is, however, important to remember that whether these regions correspond to any contact in a real device or not depends on how semiconductors behave near the contact at specific conditions. To model the contacts properly, some knowledge about physics around contacts, specifically about Fermi levels and (or) electric potential, in the modeled device is required and should be applied as the boundary conditions for our solver.

Attributes

vacuum_level

Energy of vacuum level \(E_{vac}\), used for contacts{ schottky{} }.

type:

real

unit:

eV

default:

6.3

long_directory_names

An attribute allowing to use longer names for bias subdirectories, dependent on the number of defined contacts.

type:

choice

values:

yes, no

default:

no

Available boundary conditions

All available groups for specifying boundary conditions for the Current and Poisson equations are described below. It is important to remember that, on top of them, the global boundary conditions are applied to the electrostatic potential \(\phi(x)\) at the boundaries of the entire simulation. These are either, default, Neumann boundary conditions \(\frac{{\text d}}{{\text d} x}\phi(x) = 0\) or periodic boundary conditions.

contacts{ schottky{} }

This keyword applies Dirichlet boundary conditions to the Fermi levels \(E_{F,e}(x)\) and \(E_{F,h}(x)\)

\[E_{F,e}(x) = E_{F,h}(x) = -qU,\]

where \(q\) is the elementary charge and \(U\) is an explicitly defined bias, and Dirichlet boundary conditions to the electrostatic potential \(\phi(x)\)

\[\phi(x) = \phi_0,\]

where \(\phi_0\) is determined numerically by requiring that the difference of the conduction band edge \(E_c^{\Gamma}(x)\) and the Fermi level \(E_F\) is equal to the value of given Schottky barrier \(B\),

\[E_c^{\Gamma}(x) - E_F = B,\]

or by requiring that the difference of the vacuum level \(E_{vac}\) and the Fermi level \(E_F\) is equal to the value of given work function \(W\),

\[E_{vac} - E_F = W.\]
name

A name of the contact for referencing it in structure{ region{ contact{} } }

type:

string

bias

Explicitly defined bias \(U\)

type:

real vector

steps (optional)

Number of biases between consecutive bias points

type:

integer

barrier (conditional)

A Schottky barrier \(B\) - a difference between conduction band minimum and the Fermi level

type:

real number

work_function (conditional)

Work function \(W\) - a difference between vacuum level and the Fermi level

type:

real number

Tip

You can check the section about Band Offsets to estimate the energy of vacuum level in respect to band extrema of materials in your simulation.

Tip

This keyword can be successfully used to model the effect of Fermi level pinning due to surface states.

Caution

(conditional) – One of attributes barrier or work_function is required to be specified to define boundary conditions for Fermi levels.

contacts{ charge_neutral{} }

This keyword applies Dirichlet boundary conditions to the electrostatic potential \(\phi(x)\)

\[\phi(x) = \phi_0,\]

where \(\phi_0\) determined numerically by requiring local charge neutrality for each grid point of the contact, and Dirichlet boundary conditions to the Fermi levels \(E_{F,e}(x)\) and \(E_{F,h}(x)\)

\[E_{F,e}(x) = E_{F,h}(x) = -qU,\]

where \(q\) is the elementary charge and \(U\) is an explicitly defined bias.

name

A name of the contact for referencing it in structure{ region{ contact{} } }

type:

string

bias

Explicitly defined bias \(U\)

type:

real vector

steps (optional)

Number of biases between consecutive bias points

type:

integer

Tip

You may find this keyword useful to calculate the energy levels in a quantum well (QW) or quantum cascade laser (QCL) as a function of applied bias.

Note

Check poisson{ bisection{} } (optional) to learn about applied algorithm for definition of quasi-Fermi levels in this contact.

contacts{ ohmic{} }

This keyword applies Dirichlet boundary conditions to the electrostatic potential \(\phi(x)\)

\[\phi(x) = \phi_0,\]

where \(\phi_0\) is determined numerically by requiring local charge neutrality for each grid point of the contact if the shift parameter \(\Delta U = 0\), and Dirichlet boundary conditions to the Fermi levels \(E_{F,e}(x)\) and \(E_{F,h}(x)\)

\[E_{F,e}(x) = E_{F,h}(x) = -qU,\]

where \(q\) is the elementary charge and \(U\) is an explicitly defined bias. If \(\Delta U \ne 0\) then, after the procedure described above, band edges are moved by the value \(-q\Delta U\) and \(\phi_0\) is recalculated.

name

A name of the contact for referencing it in structure{ region{ contact{} } }

type:

string

bias

Explicitly defined bias \(U\)

type:

real vector

steps (optional)

Number of biases between consecutive bias points

type:

integer

shift (optional)

Shift potential of the bands \(\Delta U\)

type:

real

Tip

You may find this keyword useful to calculate the energy levels in a quantum well (QW) or quantum cascade laser (QCL) as a function of applied bias.

Note

Check poisson{ bisection{} } (optional) to learn about applied algorithm for definition of quasi-Fermi levels in this contact.

contacts{ zero_field{} }

This keyword applies Neumann boundary conditions to the electrostatic potential \(\phi(x)\)

\[\frac{\text d }{{\text d} x}\phi(x) = 0,\]

and Dirichlet boundary conditions to the Fermi levels \(E_{F,e}(x)\) and \(E_{F,h}(x)\)

\[E_{F,e}(x) = E_{F,h}(x) = -qU,\]

where \(q\) is the elementary charge and \(U\) is an explicitly defined bias.

name

A name of the contact for referencing it in structure{ region{ contact{} } }

type:

string

bias

Explicitly defined bias \(U\)

type:

real vector

steps (optional)

Number of biases between consecutive bias points

type:

integer

Caution

Use of this group is typically not recommended. Quantum regions extending into zero field contacts will cause carrier densities higher than those in metals and Fermi levels in the range of keV. The cause of this is a nonphysical way in which zero field contacts are calculated, by enforcing a Neumann zero-field condition at the contact.

contacts{ fermi{} }

This keyword applies only Dirichlet boundary conditions to the Fermi levels \(E_{F,e}(x)\) and \(E_{F,h}(x)\)

\[E_{F,e}(x) = E_{F,h}(x) = -qU,\]

where \(q\) is the elementary charge and \(U\) is an explicitly defined bias. No boundary conditions are specified for the electrostatic potential \(\phi(x)\).

name

A name of the contact for referencing it in structure{ region{ contact{} } }

type:

string

bias

Explicitly defined bias \(U\)

type:

real vector

steps (optional)

Number of biases between consecutive bias points

type:

integer

Caution

When triggered, both Poisson and Schrödinger equations are solved in the regions with these boundary conditions.

contacts{ fermi_electron{} }

This keyword applies only Dirichlet boundary conditions to the quasi-Fermi level for electrons \(E_{F,e}(x)\)

\[E_{F,e}(x) = -qU,\]

where \(q\) is the elementary charge and \(U\) is an explicitly defined bias. No boundary conditions are specified for the electrostatic potential \(\phi(x)\) and for quasi-Fermi level for holes \(E_{F,h}(x)\)

name

A name of the contact for referencing it in structure{ region{ contact{} } }

type:

string

bias

Explicitly defined bias \(U\)

type:

real vector

steps (optional)

Number of biases between consecutive bias points

type:

integer

Caution

As quasi-Fermi level for holes \(E_{F,h}(x)\) is not defined within this group, other contacts are necessary to do so.

Caution

When triggered, both Poisson and Schrödinger equations are solved in the regions with these boundary conditions.

contacts{ fermi_hole{} }

This keyword applies only Dirichlet boundary conditions to the quasi-Fermi level for holes \(E_{F,h}(x)\)

\[E_{F,h}(x) = -qU,\]

where \(q\) is the elementary charge and \(U\) is an explicitly defined bias. No boundary conditions are specified for the electrostatic potential \(\phi(x)\) and for quasi-Fermi level for electrons \(E_{F,e}(x)\)

name

A name of the contact for referencing it in structure{ region{ contact{} } }

type:

string

bias

Explicitly defined bias \(U\)

type:

real vector

steps (optional)

Number of biases between consecutive bias points

type:

integer

Caution

As quasi-Fermi level for electrons \(E_{F,e}(x)\) is not defined within this group, other contacts are necessary to do so.

Caution

When triggered, both Poisson and Schrödinger equations are solved in the regions with these boundary conditions.

Summary and Additional Remarks

Please note the following important computational limitation: For almost all types of contacts involving the Poisson equation (ohmic, schottky with barrier defined, charge_neutral, zero_field), the material under the contact is used as reference for computing charge neutrality conditions, ohmic properties, or barrier heights, not the material adjacent to the contact. Thus, please make sure that an appropriate material is defined under the contact to be available as reference. The only exceptions to this behavior are fermi contacts, since these contacts are only involved the current equations, and schottky contacts with defined work_function, since then no reference material is needed.

The bias affects the value of the Fermi levels as it determines the Dirichlet value of the Fermi levels within the contacts. For example, by specifying a bias of 0.7 V, the Fermi level in the corresponding contact is set to a value of -0.7 eV.

Attention

At each grid point, only one type of contact can exist. For overlapping contact regions, the last defined contact on this grid point is used.

Examples

Note

This section will be moved and converted into set of tutorials.

Contact no. 1: Specify “Schottky barrier” to model Fermi level pinning due to surface states: For Schottky contacts, it is also possible to define the vacuum work function of the contact materials instead of the Schottky barrier. In this case, the Schottky-Mott rule will be used to determine the barrier height of the contact. However, please note that, due to Fermi level pinning, experimentally measured Schottky barrier heights may be quite different. The corresponding vacuum energy level () for all Schottky contacts is predefined as 6.3 [eV] in correspondence to the band offsets in the database, but can be modified as well if necessary.

schottky{
    name          = "air"
    bias          = 0.0      # [V]

    barrier       = 0.7      # [eV] Specify either barrier or work_function but not both.
    work_function = 0.7      # [eV] (optional)
}
vacuum_level = 6.3           # [eV] (optional, relevant for work_function only) (default = 6.3 eV, estimated from Si affinity of 4.05 eV and Si band offset in database)

Contact no. 2: Specify charge neutral contact.

charge_neutral{
    name    = "charge_neutral"
    bias    = 0.0                    # [V]
}

Contact no. 3: Specify ohmic contacts.

ohmic{
    name    = "source"               # name of contact
    bias    = 0.0                    # [V]
    shift   = 0.0                    # [eV] (optional, default = 0.0) Can be used to shift the band structure up (or down) in order to increase (or decrease) the ohmic behavior of the contact.
    # Warning: The effect of shift can be very large, best start with ±1 kBT for p-doped/n-doped material (that is ±0.025 eV at 300 K) and check the result.
}

contact no. 4: Specify zero field contacts (was called ohmic before 2019): (We are not sure whether there is a physical scenario for zero_field contacts, but we leave them in the code in case somebody wants them. In any case, users should keep in mind that they may induce huge space charges which often result into convergence problems.)

zero_field{
    name    = "source"               # name of contact
    bias    = 0.0                    # [V]
}

contact no. 5: Specify Fermi levels.

fermi{
    name    = "fermi_1"
    bias    = 0.7                    # [V]
}

It is possible to define Dirichlet regions for the electron or the hole quasi-Fermi level only (as compared to type fermi{} which always creates a Dirichlet region for both). This feature may be used to e.g. fix the quasi-Fermi level of majority carriers in a region while leaving the quasi-Fermi level of the minority carriers free to float there, as for instance in a bipolar device. Note that overlapping contact regions still cannot be defined, thus also no overlapping e.g. fermi_electron{} and fermi_hole{} contact regions with different bias. Each contact definition will replace (overwrite) previously defined contact region definitions at each respective grid point.

contact no. 6: Specify Fermi level for electrons.

fermi_electron{
    name    = "fermi_el"
    bias    = 0.7                    # [V]
}

contact no. 7 Specify Fermi level for holes.

fermi_hole{
    name    = "fermi_hl"
    bias    = 0.7                    # [V]
}

Directory names

long_directory_names = no # yes/no (default: no)

no: bias subdirectories are enumerated as bias_***** independently of the numbers of contacts defined.

yes: bias subdirectories are named bias_000_001_***_... which, for inputs with a large number of contacts, could result in issues with too long file paths.

See file bias_points.log in each subdirectory for the actual bias values used.

Each contact (ohmic, schottky, fermi, charge_neutral, zero_field) can contain an optional bias sweep.

Instead of specifying

bias  = 0.5         # [V]

one can alternatively define a voltage sweep (e.g. 0.0, 0.1, 0.2, …, 2.0)

bias  = [0.0, 2.0]  # start and end bias in [V]
steps = 20          # (optional) number of voltage sweep
                    # steps, integer between 1 and 999

or one can alternatively define a sequence of bias points for each contact:

bias  = [0.0, 1.8, 1.9, 2.0] # sequence of biases [V]
                             # (up to 100 bias points)
steps = 1                    # (optional) number of voltage
                             # sweep steps between
                             # consecutive bias points
                             # (default is 1)

If step is defined to be greater than 1, the space between the consecutive bias points is also subdivided correspondingly. Consecutive identical bias points are skipped. A reversal in the direction of the change in bias is allowed but currently probably not useful. If bias is defined as a scalar (or vector of length 1), only one bias value is calculated (and the value of steps is ignored).

The output file bias_points.log contains the mapping between bias values and bias index for all bias points. It is possible to define a bias sweep at several contacts.