SplitInterstitialList¶
- class SplitInterstitialList(material_specifications, interstitial_element, split_direction_cartesian=None, split_direction_miller=None, split_length=None, charge_states=None, processes_per_defect=None, processes_per_task=None, processes_per_displacement=None, resume=None)¶
A class which describes the list of split interstitial defects for a given host material. The splits are along a particular direction.
- Parameters:
material_specifications (
MaterialSpecifications
) – A descriptor of a bulk material, plus the information needed to perform the calculations.interstitial_element (
PeriodicTableElement
) – The element to add as split interstitial defect.split_direction_cartesian (sequence of numbers (size 3)) – Unitless vector specifying the split direction in Cartesian coordinates. This option is mutually exclusive to
split_direction_miller
. The direction is always renormalized to be a unit vector. Default: Nonesplit_direction_miller (
MillerIndices
) – Object containing 3 int This option is mutually exclusive tosplit_direction_cartesian
. Default: Nonesplit_length (float, PhysicalQuantity of type length) – Length of the split. Default: None
charge_states (int | sequence of int) – The charge states to calculate for each defect. Default:
0
processes_per_defect (int) – The number of processes assigned to calculating a single defect. Default: All available processes.
processes_per_task (int) – The number of processes assigned to each task. The number of processes per defect divided by the processes per task determines the number of tasks to be computed in parallel for each defect. If more than 1 task is computed in parallel, 1 processor will be devoted to synchronize all tasks, so that in practice the number of parallel tasks will be (processes_per_defect - 1) / processes_per_task Default: Each charge will be run in parallel, i.e.: processes_per_task = (processes_per_defect - 1) / len(charge_states)
processes_per_displacement (int) – The number of processes assigned to calculating a single displacement in a dynamical matrix (used for phonon calculations). Default: Use all available processes.
resume (bool) – Whether reruning the simulation will resume non converged results Default: True
- areResultsAvailable()¶
- Returns:
True, if results are available.
- Return type:
bool
- chargeStates()¶
- Returns:
The charge states to calculate for each defect.
- Return type:
list of int
- filterByDistance(distance, cartesian_coordinates=None, fractional_coordinates=None)¶
Method for filtering defects by distance. Given a origin in the supercell and a distance, all defects within a bigger distance will be filtered out. After filtering, the wyckoff indices with no defects will be erased.
- Parameters:
distance (PhysicalQuantity of type length) – Maximum distance
cartesian_coordinates (sequence (size 3) of PhysicalQuantity of type length) – The position of the reference to measure distances, given in absolute coordinates. This option is mutually exclusive to
fractional_coordinates
. Default: Nonefractional_coordinates (sequence (size 3) of float) – The position of the reference to measure distances, given in fractional coordinates of the bulk unit cell. This option is mutually exclusive to
cartesian_coordinates
. Default: None
- Returns:
A filtered defect list.
- Return type:
- filterByEquivalentEnvironments(num_groups, r_cut=PhysicalQuantity(6.0, Ang))¶
- Parameters:
num_groups – The number of unique defect types. This will cause defects to be grouped into num_groups types where the defects in each group are the most similar to one another.
r_cut (PhysicalQuantity of type length) – The cut-off distance for the local atomic environment. Atoms outside of this radius are not included when comparing/grouping defects together. Default: 6.0 * Angstrom
- Returns:
A filtered defect list.
- Return type:
VacancyList
|SubstitutionalList
|InterstitialList
SplitInterstitialList
|DefectPairList
|DefectClusterList
- filterByFormationEnergy(charge=0, minimum_energy=None, maximum_energy=None)¶
Method for filtering defects by formation energy. This method only works on defects that are updated. Given a minimum and maximum energy, only defects between those values will be kept, the rest being discarded. A value of None means that the particular limit is not applied.
- Parameters:
charge (int) – Charge state for the filtering. Default: 0
minimum_energy (PhysicalQuantity of type energy) – Defects with energies lower than this will be discarded.
maximum_energy (PhysicalQuantity of type energy) – Defects with energies higher than this will be discarded.
- Returns:
a filtered defect list.
- Return type:
VacancyList
|SubstitutionalList
|InterstitialList
SplitInterstitialList
|DefectPairList
|DefectClusterList
- filterByInterface(interface_index, distance)¶
- Parameters:
interface_index (int) – The index of the interface to filter by.
distance (PhysicalQuantity of type length) – The distance from the interfaces to include.
- Returns:
A filtered defect list.
- Return type:
VacancyList
|SubstitutionalList
|InterstitialList
SplitInterstitialList
|DefectPairList
|DefectClusterList
- filterByLatticeSpecies(element_list)¶
Method for selecting inequivalent defects by element name. Valid only for defect types that are associated with a lattice site, e. g. Vacancies, but not Interstitials.
- Parameters:
element_list (
PeriodicTableElement
| list ofPeriodicTableElement
) – List of elements to keep after filtering.- Returns:
A filtered defect list.
- Return type:
- filterByLayer(layer_index, distance=None)¶
- Parameters:
layer_index (int) – The index of the layer to filter by.
distance (PhysicalQuantity of type length) – The distance from the interfaces to exclude. Default: 0.0*Angstrom
- Returns:
A filtered defect list.
- Return type:
VacancyList
|SubstitutionalList
|InterstitialList
SplitInterstitialList
|DefectPairList
|DefectClusterList
- filterByMostStable(how_many, charge=0)¶
Method for filtering the most stable (by formation energy) converged defects.
- Parameters:
how_many (int) – Maximum number of filtered defects.
charge (int) – Charge state for the formation energies Default: 0
- Returns:
a filtered defect list.
- Return type:
VacancyList
|SubstitutionalList
|InterstitialList
SplitInterstitialList
|DefectPairList
|DefectClusterList
- filterBySymmetryAfterRelaxation(charge_state, discard_faulty=True, tolerance=None)¶
A filter which analyzes the defect configurations after relaxation and discards ones which have relaxed to the same configuration, also taking into account possible symmetry transformations.
- Parameters:
charge_state (int) – The charge state to carry out the symmetry analysis for.
discard_faulty (bool) – Whether to discard faulty defects in the list. Default:
True
tolerance (PhysicalQuantity of type length) – The tolerance for atomic positions used to decide whether two defect configurations are equivalent. Default:
0.1 * Angstrom
- Returns:
The filtered defect list.
- Return type:
VacancyList
|SubstitutionalList
|InterstitialList
SplitInterstitialList
|DefectPairList
|DefectClusterList
- filterByWyckoffIndex(wyckoff_indices)¶
Method for filtering the list of inequivalent point defects by selecting specific Wyckoff indices.
- Parameters:
wyckoff_indices (int | list of int) – The list of Wyckoff indices to keep after filtering.
- Returns:
A filtered defect list.
- Return type:
VacancyList
|SubstitutionalList
|InterstitialList
SplitInterstitialList
|DefectPairList
|DefectClusterList
- materialSpecifications()¶
- Returns:
The descriptor of a bulk material, plus the information needed to perform the calculations.
- Return type:
- nlprint(stream=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>)¶
Prints a summary of the wyckoff indices created and equivalent defects
- pointDefects()¶
- Returns:
The list of inequivalent point defects.
- Return type:
Vacancy
|Substitutional
|Interstitial
|DefectCluster
|SplitInterstitial
- processesPerDefect()¶
- Returns:
The number of processes to be assigned to calculating each defect. If None, all available processes should perform the calculation for each defect collaboratively.
- Return type:
int | None
- processesPerDisplacement()¶
- Returns:
Number of processes assigned per displacement in dynamical matrix calculations.
- Return type:
int
- processesPerItem()¶
- Returns:
Processes per item
- Return type:
int
- processesPerTask()¶
- Returns:
Number of processes assigned per task and per defect.
- Return type:
int | None
- results(discard_faulty=True)¶
Method for retrieving calculated defect studies.
- Parameters:
discard_faulty (bool) – Flag to determine whether faulty defect studies should be discarded. Default:
True
- Returns:
The list of defect studies stored on the object.
- Return type:
list of
HarmonicChargedPointDefect
- resume()¶
- Returns:
Whether running it again will resume unconverged simulations
- Return type:
bool
- splitDirectionCartesian()¶
- Returns:
Unitless vector specifying the split direction in Cartesian coordinates. The direction is always renormalized to be a unit vector.
- Return type:
sequence of numbers (size 3)
- splitInterstitialElement()¶
- Returns split_interstitial_element:
The element to add as split_interstitial defect.
- Rtype split_interstitial_element:
- splitLength()¶
- Returns:
Length of the split.
- Return type:
PhysicalQuantity of type length
- uniqueString()¶
Return a unique string representing the state of the object.
- update(disable_log=None)¶
Update all the harmonic charged point defect studies contained in the defect list.
- Parameters:
disable_log (bool) – Disable detailed logging. Default:
False
- wyckoffIndices()¶
- Returns:
The Wyckoff indices for the current defect list.
- Return type:
list of int
Directory name¶
SplitInterstitialList
creates directory names with a structure
split/element1element2_wyckoff_hash1/site/hash2
For instance,
split/SiSi_0_caf3/004/8510ca94d3b960045791f06a3741606f
for a silicon interstitial with Wyckoff index 0, splitting the lattice site index 4.
All split interstitials are stored in a directory call split.
element1 represents the element in the lattice site.
element2 represents the interstitial element. The pair element1 and element2 form a dumbbell defect.
wyckoff is the Wyckoff number for the defect, different for all non equivalent positions.
hash1 compacts the split direction and length.
site contains the particular lattice site index where the split sits.
A hash2 string representing the material specifications.
Usage Example¶
Given a host material and dumbbell parameters (interstitial atom type, bond length, and direction), the SplitInterstitialList object generates a list of all possible dumbbells. Because of crystal symmetry, some dumbbells may be equivalent to others, thus, SplitInterstitialList finds and returns the unique (inequivalent) dumbbells, along with information of all dumbbells equivalent to them.
material_specifications = GaAs_64_tersoff
# Generate defects
defect_list = SplitInterstitialList(
material_specifications,
Arsenic,
split_length=1.8 * Angstrom,
split_direction_cartesian=[0., 0., 1.]
)
# Summary
nlprint(defect_list)
# Select dumbbells centered on As sites.
filtered_list = defect_list.filterByLatticeSpecies(Arsenic)
nlprint(filtered_list)
# Extract the defect. There is only 1 inequivalent defect.
pd = filtered_list.pointDefects()[0]
# Create and save bulk configuration with the defect
bulk_configuration = pd._generate(material_specifications.pristineConfiguration(),
material_specifications.supercellRepetitions())
split_interstitial_list_example.py
The output from the nlprint
command is:
+------------------------------------------------------------------------------+
| SplitInterstitialList defect summary |
+------------------------------------------------------------------------------+
| 2 inequivalent defect positions: |
| * Wyckoff 0 (32 defects), is GaAs_0_f25e n=[ 0.0, 0.0, 1.0] d= 1.80A: |
| - Ga vacancy of type 0, site 0 at (0.5000, 0.5000, 0.5000) |
| - Ga interstitial at (0.5000, 0.5000, 0.4204) |
| - As interstitial at (0.5000, 0.5000, 0.5796) |
| * Wyckoff 1 (32 defects), is AsAs_1_f25e n=[ 0.0, 0.0, 1.0] d= 1.80A: |
| - As vacancy of type 1, site 5 at (0.3750, 0.6250, 0.3750) |
| - As interstitial at (0.3750, 0.6250, 0.2954) |
| - As interstitial at (0.3750, 0.6250, 0.4546) |
+------------------------------------------------------------------------------+
It indicates that an interstitial As atom can generate two inequivalent split-interstitial defects in the given crystal, one centered on a Ga site (dumbbell Ga–As) and the other on a As site (As–As). It also provides detailed information on which atoms are removed and added to create a split interstitial.
One can applies filters to select only the As–As dumbbells. The second nlprint
command shows
+------------------------------------------------------------------------------+
| SplitInterstitialList defect summary |
+------------------------------------------------------------------------------+
| 1 inequivalent defect positions: |
| * Wyckoff 1 (32 defects), is AsAs_1_f25e n=[ 0.0, 0.0, 1.0] d= 1.80A: |
| - As vacancy of type 1, site 5 at (0.3750, 0.6250, 0.3750) |
| - As interstitial at (0.3750, 0.6250, 0.2954) |
| - As interstitial at (0.3750, 0.6250, 0.4546) |
+------------------------------------------------------------------------------+
There are a total of 32 As–As defects; all are equivalent to each other. The inequivalent
dumbbell returned by
SplitInterstitialList, and saved in arsenic.hdf5
, is shown in Fig. 172.