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.

struct defect

In accordance with the paper mentioned above, the defect struct 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.

constexpr bool operator==(const defect &rhs) const noexcept = default

This operator compares two defect instances for equality. It checks if the type, charge, epsilon_r, and lambda_tf members of the two instances are equal.

Parameters:

rhs – defect instance to compare against.

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.

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_VACANCY and ARSENIC types are charged. Those charged defects are to be avoided by a larger distance.

Parameters:

defect – Defect to check.

Returns:

true iff defect is 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 NONE defect type is technically neutral, it is not a defect per se which is why this function returns false on the NONE defect input.

Parameters:

defect – Defect to check.

Returns:

true iff defect is 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:

true iff defect has 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:

true iff defect has 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:

true iff defect has 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 defect struct 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_VACANCY and ARSENIC types are charged. Those charged defects are to be avoided by a larger distance.

Parameters:

defect – Defect to check.

Returns:

true iff defect is 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 NONE defect type is technically neutral, it is not a defect per se which is why this function returns false on the NONE defect input.

Parameters:

defect – Defect to check.

Returns:

true iff defect is 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:

true iff defect has 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:

true iff defect has 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:

true iff defect has 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.