contacts{ }
Calling sequence
contacts{ }
Properties
usage:
items: exactly 1
Dependencies
At least one of fermi{ }, fermi_electron{ }, fermi_hole{ }, schottky{ }, ohmic{ }, zero_field{ }, and charge_neutral{ } must be defined.
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
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:
type: real number
values:
[-1e2, 1e2]
default:
unit:
Functionality
Energy of vacuum level
schottky{ }
Calling sequence
contacts{ schottky{ } }
Properties
usage:
items: no constraints
Dependencies
Exatly one of schottky{ barrier } and schottky{ work_function } must be defined within this group.
Functionality
This keyword applies Dirichlet boundary conditions to the Fermi levels
where
where
or by requiring that the difference of the vacuum level
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:
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:
type: vector of up to 100 real numbers:
, , ldots,values: no constraints
unit:
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:
type: real number
values:
[-1e2, 1e2]
unit:
Functionality
A Schottky barrier
schottky{ work_function }
Calling sequence
contacts{ schottky{ work_function } }
Properties
usage:
type: real number
values:
[-1e2, 1e2]
unit:
Functionality
Work function
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:
items: no constraints
Functionality
This keyword applies Dirichlet boundary conditions to the electrostatic potential
where
where
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:
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:
type: vector of up to 100 real numbers:
, , ldots,values: no constraints
unit:
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:
type: real number
values: no constraints
default:
unit:
Functionality
Shift potential energy of the bands
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:
items: no constraints
Functionality
Applies Dirichlet boundary conditions to the Fermi levels
where
fermi{ name }
Calling sequence
contacts{ fermi{ name } }
Properties
usage:
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:
type: vector of up to 100 real numbers:
, , ldots,values: no constraints
unit:
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:
items: no constraints
Functionality
This keyword applies only Dirichlet boundary conditions to the quasi-Fermi level for electrons
where
Attention
As quasi-Fermi level for holes
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:
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:
type: vector of up to 100 real numbers:
, , ldots,values: no constraints
unit:
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:
items: no constraints
Functionality
This keyword applies only Dirichlet boundary conditions to the quasi-Fermi level for holes
where
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:
type: character string
Functionality
A name of the contact for referencing it in structure{ region{ contact{} } }
Attention
As quasi-Fermi level for electrons
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:
type: vector of up to 100 real numbers:
, , ldots,values: no constraints
unit:
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:
items: no constraints
Functionality
This keyword applies Dirichlet boundary conditions to the electrostatic potential
where
where
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:
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:
type: vector of up to 100 real numbers:
, , ldots,values: no constraints
unit:
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:
items: no constraints
Functionality
This keyword applies Neumann boundary conditions to the electrostatic potential
and Dirichlet boundary conditions to the Fermi levels
where
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:
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:
type: vector of up to 100 real numbers:
, , ldots,values: no constraints
unit:
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:
type: choice
values:
yes
orno
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:
type: integer
values:
default:
unit:
Functionality
Defines the number 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:
type: choice
values:
yes
orno
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:
type: integer
values:
default:
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