contacts{ }

Calling sequence

contacts{ }

Properties

  • usage: required

  • items: exactly 1

Dependencies

Functionality

Defines available boundary conditions for the Current and Poisson equations. 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.

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 ϕ(x) and quasi-Fermi levels EF,e/h(x) at the boundaries of the entire simulation. These are either, default, Neumann boundary conditions (ddxϕ(x)=0 and ddxEF,e/h(x)=0) or periodic boundary conditions.

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.

Example

# In this example, there are three bias configurations computed
# 1) gate = 0.0 V, source = 0.0 V, drain = 0.0 V
# 2) gate = 0.5 V, source = 0.0 V, drain = 0.2 V
# 3) gate = 1.0 V, source = 0.0 V, drain = 0.2 V

contacts{
    vacuum_level = 6.2
    schottky{
        name = "gate"
        bias = [ 0.0, 0.5, 1.0]
        barrier = 0.2
    }
    ohmic{
        name = "source"
        bias = 0.0
    }
    ohmic{
        name = "drain"
        bias = [ 0.0, 0.2]
    }
    bias_steps = 1
}
# In this example, there are three bias configurations computed
# 1) gate = 0.00 V, source = 0.0 V, drain = 0.0 V (as with bias_steps = 0)
# 2) gate = 0.00 V, source = 0.0 V, drain = 0.1 V
# 3) gate = 0.50 V, source = 0.0 V, drain = 0.2 V (as with bias_steps = 0)
# 4) gate = 0.75 V, source = 0.0 V, drain = 0.2 V
# 3) gate = 1.00 V, source = 0.0 V, drain = 0.2 V (as with bias_steps = 0)

contacts{
    vacuum_level = 6.2
    schottky{
        name = "gate"
        bias = [ 0.0, 0.5, 1.0]
        barrier = 0.2
    }
    ohmic{
        name = "source"
        bias = 0.0
    }
    ohmic{
        name = "drain"
        bias = [ 0.0, 0.2]
    }
    bias_steps = 2
}

Nested keywords


vacuum_level

Calling sequence

contacts{ vacuum_level }

Properties

  • usage: optional

  • type: real number

  • values: [-1e2, 1e2]

  • default: r=6.3

  • unit: eV

Functionality

Energy of vacuum level Evac, used for schottky{ }. The value 6.3 eV is predefined in correspondence to the band offsets in the default database.


schottky{ }

Calling sequence

contacts{ schottky{ } }

Properties

  • usage: conditional

  • items: no constraints

Dependencies

Functionality

This keyword applies Dirichlet boundary conditions to the Fermi levels EF,e(x) and EF,h(x)

EF,e(x)=EF,h(x)=qU,

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

ϕ(x)=ϕ0,

where ϕ0 is determined numerically by requiring that the difference of the conduction band edge EcΓ(x) and the Fermi level EF is equal to the value of given Schottky barrier B,

EcΓ(x)EF=B,

or by requiring that the difference of the vacuum level Evac and the Fermi level EF is equal to the value of given work function W,

EvacEF=W.

Attention

The Schottky contact with schottky{ barrier } defined requires paying attention to the material chosen for the region of the contact, as this material is used as a reference for the definition.


schottky{ name }

Calling sequence

contacts{ schottky{ name } }

Properties

  • usage: required

  • type: character string

Functionality

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


schottky{ bias }

Calling sequence

contacts{ schottky{ bias } }

Properties

  • usage: required

  • type: vector of up to 100 real numbers: (r1), (r1,r2), ldots, (r1,r2,,r100)

  • values: no constraints

  • unit: V

Functionality

Explicitly defined set of values set to both electron and quasi-Fermi levels as minus bias multiplied by the electron charge. Often it corresponds directly to applied voltage.


schottky{ barrier }

Calling sequence

contacts{ schottky{ barrier } }

Properties

  • usage: conditional

  • type: real number

  • values: [-1e2, 1e2]

  • unit: eV

Functionality

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


schottky{ work_function }

Calling sequence

contacts{ schottky{ work_function } }

Properties

  • usage: conditional

  • type: real number

  • values: [-1e2, 1e2]

  • unit: eV

Functionality

Work function W - a difference between vacuum level and the Fermi level The Schottky-Mott is be used to determine the barrier height of the contact.

Note

Due to Fermi level pinning, experimentally measured Schottky barrier heights may be quite different.

Hint

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.

Hint

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


ohmic{ }

Calling sequence

contacts{ ohmic{ } }

Properties

  • usage: conditional

  • items: no constraints

Functionality

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

ϕ(x)=ϕ0,

where ϕ0 is determined numerically by requiring local charge neutrality for each grid point of the contact if the shift parameter ΔU=0, and Dirichlet boundary conditions to the Fermi levels EF,e(x) and EF,h(x)

EF,e(x)=EF,h(x)=qU,

where q is the elementary charge and U is an explicitly defined bias. If ΔU0 then, after the procedure described above, band edges are moved by the value qΔU and ϕ0 is recalculated.

Attention

Material under the ohmic contact influences computing charge neutrality conditions. Therefore, one should pay attention to the material (and doping) chosen for the region of this type of contact.

Note

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


ohmic{ name }

Calling sequence

contacts{ ohmic{ name } }

Properties

  • usage: required

  • type: character string

Functionality

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


ohmic{ bias }

Calling sequence

contacts{ ohmic{ bias } }

Properties

  • usage: required

  • type: vector of up to 100 real numbers: (r1), (r1,r2), ldots, (r1,r2,,r100)

  • values: no constraints

  • unit: V

Functionality

Explicitly defined set of values set to both electron and quasi-Fermi levels as minus bias multiplied by the electron charge. Often it corresponds directly to applied voltage.


ohmic{ shift }

Calling sequence

contacts{ ohmic{ shift } }

Properties

  • usage: optional

  • type: real number

  • values: no constraints

  • default: r=0.0

  • unit: eV

Functionality

Shift potential energy of the bands ΔU.

Hint

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 bisection{ } to learn about applied algorithm for definition of quasi-Fermi levels in this contact.


fermi{ }

Calling sequence

contacts{ fermi{ } }

Properties

  • usage: conditional

  • items: no constraints

Functionality

Applies Dirichlet boundary conditions to the Fermi levels EF,e(x) and EF,h(x)

EF,e(x)=EF,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 ϕ(x).


fermi{ name }

Calling sequence

contacts{ fermi{ name } }

Properties

  • usage: required

  • type: character string

Functionality

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

Attention

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


fermi{ bias }

Calling sequence

contacts{ fermi{ bias } }

Properties

  • usage: required

  • type: vector of up to 100 real numbers: (r1), (r1,r2), ldots, (r1,r2,,r100)

  • values: no constraints

  • unit: V

Functionality

Explicitly defined set of values set to both electron and quasi-Fermi levels as minus bias multiplied by the electron charge. Often it corresponds directly to applied voltage.


fermi_electron{ }

Calling sequence

contacts{ fermi_electron{ } }

Properties

  • usage: conditional

  • items: no constraints

Functionality

This keyword applies only Dirichlet boundary conditions to the quasi-Fermi level for electrons EF,e(x)

EF,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 ϕ(x) and for quasi-Fermi level for holes EF,h(x).

Attention

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

Attention

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

Warning

Using fermi_electron{ } and fermi_hole{ } for current calculations within biased structures may cause violation of charge conservation.


fermi_electron{ name }

Calling sequence

contacts{ fermi_electron{ name } }

Properties

  • usage: required

  • type: character string

Functionality

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


fermi_electron{ bias }

Calling sequence

contacts{ fermi_electron{ bias } }

Properties

  • usage: required

  • type: vector of up to 100 real numbers: (r1), (r1,r2), ldots, (r1,r2,,r100)

  • values: no constraints

  • unit: V

Functionality

Explicitly defined set of values set to both electron and quasi-Fermi levels as minus bias multiplied by the electron charge. Often it corresponds directly to applied voltage.


fermi_hole{ }

Calling sequence

contacts{ fermi_hole{ } }

Properties

  • usage: conditional

  • items: no constraints

Functionality

This keyword applies only Dirichlet boundary conditions to the quasi-Fermi level for holes EF,h(x)

EF,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 ϕ(x) and for quasi-Fermi level for electrons EF,e(x).

Warning

Using fermi_electron{ } and fermi_hole{ } for current calculations within biased structures may cause violation of charge conservation.


fermi_hole{ name }

Calling sequence

contacts{ fermi_hole{ name } }

Properties

  • usage: required

  • type: character string

Functionality

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

Attention

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

Attention

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


fermi_hole{ bias }

Calling sequence

contacts{ fermi_hole{ bias } }

Properties

  • usage: required

  • type: vector of up to 100 real numbers: (r1), (r1,r2), ldots, (r1,r2,,r100)

  • values: no constraints

  • unit: V

Functionality

Explicitly defined set of values set to both electron and quasi-Fermi levels as minus bias multiplied by the electron charge. Often it corresponds directly to applied voltage.


charge_neutral{ }

Calling sequence

contacts{ charge_neutral{ } }

Properties

  • usage: conditional

  • items: no constraints

Functionality

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

ϕ(x)=ϕ0,

where ϕ0 determined numerically by requiring local charge neutrality for each grid point of the contact, and Dirichlet boundary conditions to the Fermi levels EF,e(x) and EF,h(x)

EF,e(x)=EF,h(x)=qU,

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

Attention

Material under the Charge-Neutral contact influences computing charge neutrality conditions. Therefore, one should pay attention to the material (and doping) chosen for the region of this type of contact.

Hint

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 bisection{ } to learn about applied algorithm for definition of quasi-Fermi levels in this contact.


charge_neutral{ name }

Calling sequence

contacts{ charge_neutral{ name } }

Properties

  • usage: required

  • type: character string

Functionality

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


charge_neutral{ bias }

Calling sequence

contacts{ charge_neutral{ bias } }

Properties

  • usage: required

  • type: vector of up to 100 real numbers: (r1), (r1,r2), ldots, (r1,r2,,r100)

  • values: no constraints

  • unit: V

Functionality

Explicitly defined set of values set to both electron and quasi-Fermi levels as minus bias multiplied by the electron charge. Often it corresponds directly to applied voltage.


zero_field{ }

Calling sequence

contacts{ zero_field{ } }

Properties

  • usage: conditional

  • items: no constraints

Functionality

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

ddxϕ(x)=0,

and Dirichlet boundary conditions to the Fermi levels EF,e(x) and EF,h(x)

EF,e(x)=EF,h(x)=qU,

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

Attention

Material under the Zero-Field contact influences computing charge neutrality conditions. Therefore, one should pay attention to the material (and doping) chosen for the region of this type of contact.


zero_field{ name }

Calling sequence

contacts{ zero_field{ name } }

Properties

  • usage: required

  • type: character string

Functionality

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

Attention

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.


zero_field{ bias }

Calling sequence

contacts{ zero_field{ bias } }

Properties

  • usage: required

  • type: vector of up to 100 real numbers: (r1), (r1,r2), ldots, (r1,r2,,r100)

  • values: no constraints

  • unit: V

Functionality

Explicitly defined set of values set to both electron and quasi-Fermi levels as minus bias multiplied by the electron charge. Often it corresponds directly to applied voltage.


long_directory_names

Calling sequence

contacts{ long_directory_names }

Properties

  • usage: optional

  • type: choice

  • values: yes or no

  • default: no

Functionality

An attribute allowing to use longer names for bias subdirectories, dependent on the number of defined contacts. If long_directory_names = no then bias subdirectories are enumerated as bias_***** independently of the numbers of contacts defined.

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


bias_steps

Calling sequence

contacts{ bias_steps }

Properties

  • usage: conditional

  • type: integer

  • values: 1z999

  • default: z=1

  • unit:

Functionality

Defines the number N of bias steps (N1 intermediate values of voltages applied to all the contacts) between explicitly defined values within the bias attribute defined separately for each of the contacts. These values are linear interpolations of the values defined within the bias vectors. For instance, having contacts{ ohmic{ bias = [0, 10] } } and contacts{ bias_steps = 5 } results in a sweep for biasses: 0, 2, 4, 6, 8, and 10 V (6 bias points) for this specific contact. If other contacts have more explicit bias points defined, e.g., [0, 10, 20] resulting in 11 bias points: 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20. Then the contact with bias = [0, 10] will be swept multiple times repeating the last voltage to provide 6+5 biasses as well. Therefore, it will be swept through biasses: 0, 2, 4, 6, 8, 10, 10, 10, 10, 10, and 10 V.

Hint

See file bias_points.log to see the actual bias values used. This file contains the mapping between bias values and bias index for all bias points.


reuse_previous

Calling sequence

contacts{ reuse_previous }

Properties

  • usage: optional

  • type: choice

  • values: yes or no

  • default: no

Functionality

It turns on the bias ramping when set to yes. As a result the electrostatic potential and quasi-Fermi levels obtained within simulations of preceding bias point are used to initialize simulations for the next bias point (set of voltages for all contacts). If this keyword is used in conjunctions with importing electrostatic potential, the potential is imported only to initialize the first iteration of the entire sweep.


bias_output_level

Calling sequence

contacts{ bias_output_level }

Properties

  • usage: optional

  • type: integer

  • values: 0z2

  • default: z=2

Functionality

It controls output for the sweep. All regular outputs are always generated for the last bias point of the entire sweep. If set to 0, then only convergence outputs and data entering I-V characteristics are included in the output for non-last bias point. If set to 1, then also all densities, potentials, band edges, and currents are included for non-last bias points. If set to 2, then all regular outputs are generated for all bias points.


Last update: 02/04/2025