SiDB Defect Types¶
Header: fiction/technology/sidb/model/defect.hpp
-
enum class fiction::sidb::model::defect_type : uint8_t¶
Specifies the types of fabrication defects that can occur on the H-Si(100) 2x1 surface according to “Atomic defect classification of the H–Si(100) surface through multi-mode scanning probe microscopy” by Jeremiah Croshaw, Thomas Dienel, Taleana Huff, and Robert Wolkow in Journal of Nanotechnology in 2020.
Values:
-
enumerator NONE¶
Defect-free H-Si.
-
enumerator DB¶
A stray dangling bond.
-
enumerator SI_VACANCY¶
A missing silicon atom.
-
enumerator SINGLE_DIHYDRIDE¶
Double hydrogen passivation.
-
enumerator DIHYDRIDE_PAIR¶
A missing bond between dimers that leads to two double hydrogen passivations.
-
enumerator ONE_BY_ONE¶
A collection of dihydride pairs.
-
enumerator THREE_BY_ONE¶
A collection of 1 by 1’s.
-
enumerator SILOXANE¶
An oxidized dimer.
-
enumerator RAISED_SI¶
A raised silicon dimer.
-
enumerator MISSING_DIMER¶
The dimer is missing altogether.
-
enumerator ETCH_PIT¶
A collection of missing dimers.
-
enumerator STEP_EDGE¶
A step edge, which is a break in the surface reconstruction.
-
enumerator GUNK¶
Residual material.
-
enumerator ARSENIC¶
Ionized arsenic atom as mentioned in “Electrostatic landscape of a Hydrogen-terminated Silicon Surface Probed by a Moveable Quantum Dot” by T. R. Huff, T. Dienel, M. Rashidi, R. Achal, L. Livadaru, J. Croshaw, and R. A. Wolkow in ACS Nano in 2019.
-
enumerator UNKNOWN¶
Unknown defect.
-
enumerator NONE¶
-
struct defect¶
In accordance with the paper mentioned above, the
defectstruct is used to represent a specific defect on the H-Si(100) 2x1 surface that has a charge as well as relative permittivity (epsilon_r) and Thomas-Fermi screening distance (lambda_tf) values associated to it.See “SiQAD: A Design and Simulation Tool for Atomic Silicon Quantum Dot Circuits” by S. S. H. Ng, J. Retallick, H. N. Chiu, R. Lupoiu, L. Livadaru, T. Huff, M. Rashidi, W. Vine, T. Dienel, R. A. Wolkow, and K. Walus in IEEE Transactions on Nanotechnology for more details on these values.
Public Functions
-
inline explicit constexpr defect(const defect_type defect_type = defect_type::UNKNOWN, const int64_t electric_charge = 0, const double relative_permittivity = 0.0, const double screening_distance = 0.0) noexcept¶
Standard constructor.
Public Members
-
defect_type type¶
Type of defect.
-
int64_t charge¶
Electrical charge in units of the elementary charge e (e.g., 1 ^= 1*e, -2 ^= -2*e).
-
double epsilon_r¶
Electric permittivity (unitless).
-
double lambda_tf¶
Thomas-Fermi screening distance in nm.
-
inline explicit constexpr defect(const defect_type defect_type = defect_type::UNKNOWN, const int64_t electric_charge = 0, const double relative_permittivity = 0.0, const double screening_distance = 0.0) noexcept¶
-
static constexpr bool fiction::sidb::model::is_charged_defect_type(const defect &defect) noexcept¶
Checks whether the given defect type is a charged one.
DB,SI_VACANCYandARSENICtypes are charged. Those charged defects are to be avoided by a larger distance.- Parameters:
defect – Defect to check.
- Returns:
trueiffdefectis of a charged type.
-
static constexpr bool fiction::sidb::model::is_neutral_defect_type(const defect &defect) noexcept¶
Checks whether the given defect type is not a charged one. Neutral defects are to be avoided as well, but not by such a large distance. Even though the
NONEdefect type is technically neutral, it is not a defect per se which is why this function returns false on theNONEdefect input.- Parameters:
defect – Defect to check.
- Returns:
trueiffdefectis not of a charged type.
-
static constexpr bool fiction::sidb::model::is_positively_charged_defect(const defect &defect) noexcept¶
Checks whether the given defect has a positive charge value assigned to it. This function is irrespective of the associated defect type.
- Parameters:
defect – Defect to check.
- Returns:
trueiffdefecthas a positive charge value.
-
static constexpr bool fiction::sidb::model::is_negatively_charged_defect(const defect &defect) noexcept¶
Checks whether the given defect has a negative charge value assigned to it. This function is irrespective of the associated defect type.
- Parameters:
defect – Defect to check.
- Returns:
trueiffdefecthas a negative charge value.
-
static constexpr bool fiction::sidb::model::is_neutrally_charged_defect(const defect &defect) noexcept¶
Checks whether the given defect has a neutral charge value, i.e.,
0, assigned to it. This function is irrespective of the associated defect type.- Parameters:
defect – Defect to check.
- Returns:
trueiffdefecthas a neutral charge value.
-
constexpr const uint16_t fiction::sidb::model::CHARGED_DEFECT_HORIZONTAL_SPACING = 26u¶
Horizontal distance to keep from charged SiDB defects. The value is to be understood as the number of DB positions rather than the number of dimers. This is true even though each defect always affects the entire dimer.
-
constexpr const uint16_t fiction::sidb::model::CHARGED_DEFECT_VERTICAL_SPACING = 13u¶
Vertical distance to keep from charged SiDB defects. The value is to be understood as the number of DB positions rather than the number of dimers. This is true even though each defect always affects the entire dimer.
-
constexpr const uint16_t fiction::sidb::model::NEUTRAL_DEFECT_HORIZONTAL_SPACING = 1u¶
Horizontal distance to keep from neutral SiDB defects. The value is to be understood as the number of DB positions rather than the number of dimers. This is true even though each defect always affects the entire dimer.
-
constexpr const uint16_t fiction::sidb::model::NEUTRAL_DEFECT_VERTICAL_SPACING = 0u¶
Vertical distance to keep from neutral SiDB defects. The value is to be understood as the number of DB positions rather than the number of dimers. This is true even though each defect always affects the entire dimer.
-
static constexpr std::pair<uint16_t, uint16_t> fiction::sidb::model::defect_extent(const defect &defect, const std::optional<std::pair<uint16_t, uint16_t>> &charged_defect_spacing_overwrite = std::nullopt, const std::optional<std::pair<uint16_t, uint16_t>> &neutral_defect_spacing_overwrite = std::nullopt) noexcept¶
Returns the extent of a defect as a pair of SiDB distances in the horizontal and vertical directions. If the defect type is
NONE,{0, 0}is returned.- Parameters:
defect – Defect type to evaluate.
charged_defect_spacing_overwrite – Override the default influence distance of charged atomic defects on SiDBs with an optional pair of horizontal and vertical distances.
neutral_defect_spacing_overwrite – Override the default influence distance of neutral atomic defects on SiDBs with an optional pair of horizontal and vertical distances.
- Returns:
A pair of uint16_t values representing the number of horizontal and vertical SiDBs affected by the given defect type.
- class sidb_defect_type(*values)¶
Specifies the types of fabrication defects that can occur on the H-Si(100) 2x1 surface according to "Atomic defect classification of the H–Si(100) surface through multi-mode scanning probe microscopy" by Jeremiah Croshaw, Thomas Dienel, Taleana Huff, and Robert Wolkow in Journal of Nanotechnology in 2020.
- NONE = 0¶
- DB = 1¶
- SI_VACANCY = 2¶
- SINGLE_DIHYDRIDE = 3¶
- DIHYDRIDE_PAIR = 4¶
- ONE_BY_ONE = 5¶
- THREE_BY_ONE = 6¶
- SILOXANE = 7¶
- RAISED_SI = 8¶
- MISSING_DIMER = 9¶
- ETCH_PIT = 10¶
- STEP_EDGE = 11¶
- GUNK = 12¶
- UNKNOWN = 14¶
- class sidb_defect(defect_type: sidb_defect_type = sidb_defect_type.UNKNOWN, electric_charge: int = 0, relative_permittivity: float = 0.0, screening_distance: float = 0.0)¶
In accordance with the paper mentioned above, the
defectstruct is used to represent a specific defect on the H-Si(100) 2x1 surface that has a charge as well as relative permittivity (epsilon_r) and Thomas-Fermi screening distance (lambda_tf) values associated to it.See "SiQAD: A Design and Simulation Tool for Atomic Silicon Quantum Dot Circuits" by S. S. H. Ng, J. Retallick, H. N. Chiu, R. Lupoiu, L. Livadaru, T. Huff, M. Rashidi, W. Vine, T. Dienel, R. A. Wolkow, and K. Walus in IEEE Transactions on Nanotechnology for more details on these values.
- property charge¶
Electrical charge in units of the elementary charge e (e.g., 1 ^= 1*e, -2 ^= -2*e).
- property epsilon_r¶
Electric permittivity (unitless).
- property lambda_tf¶
Thomas-Fermi screening distance in nm.
- property type¶
Specifies the types of fabrication defects that can occur on the H-Si(100) 2x1 surface according to "Atomic defect classification of the H–Si(100) surface through multi-mode scanning probe microscopy" by Jeremiah Croshaw, Thomas Dienel, Taleana Huff, and Robert Wolkow in Journal of Nanotechnology in 2020.
- is_charged_defect_type(defect: sidb_defect) bool¶
Checks whether the given defect type is a charged one.
DB,SI_VACANCYandARSENICtypes are charged. Those charged defects are to be avoided by a larger distance.- Parameters:
defect – Defect to check.
- Returns:
trueiffdefectis of a charged type.
- is_neutral_defect_type(defect: sidb_defect) bool¶
Checks whether the given defect type is not a charged one. Neutral defects are to be avoided as well, but not by such a large distance. Even though the
NONEdefect type is technically neutral, it is not a defect per se which is why this function returns false on theNONEdefect input.- Parameters:
defect – Defect to check.
- Returns:
trueiffdefectis not of a charged type.
- is_positively_charged_defect(defect: sidb_defect) bool¶
Checks whether the given defect has a positive charge value assigned to it. This function is irrespective of the associated defect type.
- Parameters:
defect – Defect to check.
- Returns:
trueiffdefecthas a positive charge value.
- is_negatively_charged_defect(defect: sidb_defect) bool¶
Checks whether the given defect has a negative charge value assigned to it. This function is irrespective of the associated defect type.
- Parameters:
defect – Defect to check.
- Returns:
trueiffdefecthas a negative charge value.
- is_neutrally_charged_defect(defect: sidb_defect) bool¶
Checks whether the given defect has a neutral charge value, i.e.,
0, assigned to it. This function is irrespective of the associated defect type.- Parameters:
defect – Defect to check.
- Returns:
trueiffdefecthas a neutral charge value.
- defect_extent(defect: sidb_defect, charged_defect_spacing_overwrite: tuple[int, int] | None, neutral_defect_spacing_overwrite: tuple[int, int] | None) tuple[int, int]¶
Returns the extent of a defect as a pair of SiDB distances in the horizontal and vertical directions. If the defect type is
NONE,{0, 0}is returned.- Parameters:
defect – Defect type to evaluate.
charged_defect_spacing_overwrite – Override the default influence distance of charged atomic defects on SiDBs with an optional pair of horizontal and vertical distances.
neutral_defect_spacing_overwrite – Override the default influence distance of neutral atomic defects on SiDBs with an optional pair of horizontal and vertical distances.
- Returns:
A pair of uint16_t values representing the number of horizontal and vertical SiDBs affected by the given defect type.