TransitionPathList¶
- class TransitionPathList(initial_defect_list, final_defect_list=None, ring_mechanism=None, discard_faulty=True, processes_per_path=None, processes_per_displacement=1, optimize_transition_path_parameters=None)¶
An object which provides a list of
TransitionPath
objects between defect configurations.- Parameters:
initial_defect_list (
VacancyList
|SubstitutionalList
|InterstitialList
SplitInterstitialList
|DefectPairList
|DefectClusterList
) – A list of the possible initial defect states. If nofinal_state_defect_list
is specified, this list defines also the possible final states.final_defect_list (
VacancyList
|SubstitutionalList
|InterstitialList
SplitInterstitialList
|DefectPairList
|DefectClusterList
) – A list of the possible final defect states. If not specified,initial_state_defect_list
is used to determine the possible final states. the possible final state.ring_mechanism (
Disabled
|SinglePath
|MultiplePath
| bool) – Only available when the initial defect is a vacancy impurity pair. If set to SinglePath, analyzes the lattice structure to include the path needed for the vacancy to approach the substitutional impurity from a different bond. If set to Disabled only the swapping between the impurity and the vacancy is considered. When set to MultiplePathm, the path needed for the vacacncy to approach the impurity from a different side is split in their constituent single paths, and each one is analyzed independently, being put together at the end. MultiplePath should produce better to converge and more reliable ring mechanisms. True or False values can also be provided and will be evaluated asSinglePath
andDisabled
respectively. Default:Disabled
discard_faulty (bool) – Flag to determine whether faulty defect studies in the lists should be discarded. Default: True
processes_per_path (int) – The number of processes assigned to calculating a single defect. Default: All available processes.
processes_per_displacement (int) – The number of processes assigned to calculating a single displacement. Default: 1 process per displacement.
optimize_transition_path_parameters – The parameters to use for creating and optimizing the nudged elastic band geometries. Default: OptimizeTransitionPathParameters()
- areResultsAvailable()¶
- Returns:
True, if results are available.
- Return type:
bool
- discardFaulty()¶
- Returns:
whether faulty defect simulatins are to be discarded
- Return type:
bool
- filterByPathIndex(path_list)¶
Returns a transition path list where only the specified paths are considered. For example, if three paths have been calculated with three difference charge states, specifying path_list=[0, 1] will keep the first two transition paths for all the charge states.
- Parameters:
path_list (sequence of int) – List of transition paths to consider.
- Returns:
New transition path list with the requested paths only
- Return type:
TransitionPathList
- filterByRingIndex(ring_list)¶
Returns a transition path list where only the specified rings are considered
- Parameters:
path_list (Sequence of int.) – List of transition rings to consider.
- Returns:
New transition path list with the requested rings only
- Return type:
TransitionPathList
- finalDefectList()¶
- Returns:
The list of ending point defects used to generate the transition paths.
- Return type:
VacancyList
|SubstitutionalList
|InterstitialList
SplitInterstitialList
|DefectPairList
|DefectClusterList
- initialDefectList()¶
- Returns:
The list of starting point defects used to generate the transition paths.
- Return type:
VacancyList
|SubstitutionalList
|InterstitialList
SplitInterstitialList
|DefectPairList
|DefectClusterList
- materialSpecifications()¶
- Returns:
The material specifications associated with the initial and final list.
- Return type:
:class:~.MaterialSpecification
- nlinfo()¶
- Returns:
The nlinfo.
- Return type:
dict
- nlprint(stream=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>)¶
Prints a summary of the transitions created
- optimizeTransitionPathParameters()¶
- Returns:
set of parameters used to generate and optimize the transition paths
- Return type:
- processesPerDisplacement()¶
- Returns:
number of processes used per displement (in phonon calculations)
- Return type:
int
- processesPerItem()¶
- Returns:
Processes per item
- Return type:
int
- processesPerPath()¶
- Returns:
The number of processes to be assigned to calculating each path. If None, all available processes should perform the calculation for each path collaboratively.
- Return type:
int | None
- results(discard_faulty=True, charge_state=None)¶
Method for retrieving calculated transition paths.
- Parameters:
discard_faulty (bool) – Flag to determine whether faulty transition paths should be discarded. Default:
True
charge_state (int) – The charge state, for which the calculated transition paths should be retrieved. Default: All charge states.
- Returns:
The list of path studies stored on the object, if available.
- Return type:
list of
TransitionPath
- uniqueString()¶
Return a unique string representing the state of the object.
- update(disable_log=None)¶
Update all the transition paths.
- Parameters:
disable_log (bool) – Disable detailed logging. Default:
False
Setting Up the Migration Paths¶
The energy barrier for a defect to jump to adjacent equivalent sites is the migration energy, \(E^m\). The nudged elastic band (NEB) method can find such a reaction path and energy efficiently [1]. Sentaurus Materials Workbench can generate an initial path, run the jobs, check convergence, and finally calculate the migration energy.
Nudged Elastic Band Method¶
The NEB method requires:
An initial relaxed configuration for a defect.
A final relaxed configuration for a defect.
An initial guess for a series of intermediate configurations, taking the system between the initial and final configurations.
The initial, intermediate, final configurations are called images, and a collection of images is called a path. The point along the final path having the highest energy is the transition state. Fig. 216 illustrates the case of Si migration in a Si-vacancy defect pair. The NEB method relaxes the path to the one having the smallest possible maximum energy that connects the initial image and the final image.
Sentaurus Materials Workbench can generate such an initial path
The relaxed configuration for a defect should be used as an initial image configuration. In
general, the final configuration should be identical to the initial configuration except that it has
jumped to one of the next adjacent sites. To generate the final image configuration, a second
relaxation of the defect model must be performed with the initial positions of the migrating
species at an adjacent site. Then, the initial and final image coordinates of all the atoms can be
interpolated to generate the path. The number of atoms in the initial and final image
configurations must be identical, and the order of the labels of the atoms in must
be consistent. TransitionPathList
automatically takes care of all.
A TransitionPathList
commands performs the following operations
Checks all the possible combinations of initial and final defects, and creates the transition paths between them. Discards those that are not valid. For instance, given a binary material with different possible vacancies, for elements A, and B, transition paths between all the vacancies of element A and B with themselves are possible, but the transitions between vacancies of one element to the other will be automatically discarded, since they are impossible.
Ensures both the initial and final defects are properly relaxed.
Computes the NEBs for all the valid paths.
If no migration prefactor is assumed, runs phonon calculations to provide calculated prefactors.
Runs Harmonic Transition State Theory calculations, see HTSTEvent, to generate a proper transition rate.
Dopant-Vacancy ring mechanism¶
When a dopant diffuses using a vacancy-mediated mechanism, the dopant exchanges places with a vacancy. This simple mechanism, shown in Fig. 217 (top), does not explain the global movement of the dopant, because the next exchange with the vacancy would return the dopant to its original position. Therefore, for the dopant to actually diffuse, you need another mechanism that allows the vacancy to come from a different direction. The ring mechanism involves the diffusion of the vacancy far enough from the dopant to allow it to return from a different direction, thereby allowing the effective migration of the dopant as seen in Fig. 217 (bottom).
The calculation of the migration energy of a dopant-vacancy pair is complicated. You must
find some possible rings, select one (the shortest, for simplicity), establish all the initial and
final points for all the NEBs involved, run them, and interpret the results.
Sentaurus Materials Workbench can perform all these tasks automatically and transparently by using the
ring_mechanism
option of TransitionPathList
.
Usage examples¶
The following eample script shows how to perform a simple study of interstitials in bulk silicon, and the transitions between them, displaying the results on screen and extracting a Sentaurus Process KMC file.
from SMW import *
# Setup the reference bulk unit cell configuration.
lattice = FaceCenteredCubic(5.4306*Angstrom)
elements = [Silicon, Silicon]
fractional_coordinates = [[ 0. , 0. , 0. ],
[ 0.25, 0.25, 0.25]]
bulk_configuration = BulkConfiguration(
bravais_lattice=lattice,
elements=elements,
fractional_coordinates=fractional_coordinates,
)
# Setup the calculator.
basis_set = getattr(LDABasis, 'Silicon_SingleZeta')
calculator = LCAOCalculator(
basis_set=basis_set,
exchange_correlation=LDA.PZ,
numerical_accuracy_parameters=NumericalAccuracyParameters(
k_point_sampling=MonkhorstPackGrid(1, 1, 1))
)
# Create a MaterialSpecifications out out it
# An easier alternative is to use an already specified MaterialsSpecifications.
# For this example, we trade off accuracy for speed and create a small cell
# with 1x1x1 k-points and LDA instead of calling a more accurate specification
# from the database.
reference = MaterialSpecifications(
pristine_configuration=bulk_configuration,
formation_energy_calculator=calculator,
supercell_repetitions=(1, 1, 1),
sentaurus_material_name="Silicon",
)
# Create a list with all inequivalent neutral interstitials,
interstitials = InterstitialList(reference, Silicon)
nlprint(interstitials)
# Update, i.e., perform calculations, and save
interstitials.update()
nlsave('defects.hdf5', interstitials)
# Create the transition between interstitials, update, and save
transitions = TransitionPathList(interstitials, discard_faulty=False)
nlprint(transitions)
transitions.update()
nlsave('defects.hdf5', transitions)
# Show results on screen
displayDefectCharacterization([interstitials], [transitions])
# Generate a simple Sentaurus Process KMC file with them.
writeSentaurusParameters([interstitials], [transitions], SentaurusProcessKMC, 'KMC.pdb')
It is important to note that this example is only intended to provide an overwiew of the creation of a transition path list and its use. In particular, it does not extensively study all defects and it uses a fast calculator.
nlprint output¶
The nlprint
output for the interstitial list is:
+------------------------------------------------------------------------------+
| InterstitialList defect summary |
+------------------------------------------------------------------------------+
| 2 inequivalent defect positions: |
| Wyckoff: 0, is Si_0. (4 defects). |
| Wyckoff: 1, is Si_1. (2 defects). |
+------------------------------------------------------------------------------+
There are two different interstitial types. It is known that for diamond lattice type systems such types are the tetrahedron and hexahedron interstitials.
For the TransitionPathList
, we get the following nlprint
:
+------------------------------------------------------------------------------+
| TransitionPathList paths summary: 3 paths |
+------------------------------------------------------------------------------+
| Path: #0, Wyckoffs 0 -> 0. |
| Starts: interstitial_Si_0/000 |
| Ends: interstitial_Si_0/003 |
| Path: #1, Wyckoffs 0 -> 1. |
| Starts: interstitial_Si_0/000 |
| Ends: interstitial_Si_1/002 |
| Path: #2, Wyckoffs 1 -> 1. |
| Starts: interstitial_Si_1/002 |
| Ends: interstitial_Si_1/005 |
+------------------------------------------------------------------------------+
As expected, there are 3 transition paths. 2 of them are the ones provided by the defects migrating into the same defect type (0 -> 0 and 1 -> 1), and one by the transformation of one type into the other.
Calculation update¶
The 3 detected transition paths are calculated and displayed as follows:
+------------------------------------------------------------------------------+
| Transition Path List |
+------------------------------------------------------------------------------+
| 3 transition path(s) will be calculated. |
+------------------------------------------------------------------------------+
+------------------------------------------------------------------------------+
| Calculating transition path 1 / 3: |
| Results and log will be saved to the following folder: |
| interstitial~interstitial/Si_0~Si_0/000~003/09b9bbcb4726cd378b8486c59fd592 |
| 66/ |
+------------------------------------------------------------------------------+
+------------------------------------------------------------------------------+
| Calculation 1 / 3 finished. |
| Convergence status: Converged. All results will be available. |
+------------------------------------------------------------------------------+
+------------------------------------------------------------------------------+
| Calculating transition path 2 / 3: |
| Results and log will be saved to the following folder: |
| interstitial~interstitial/Si_0~Si_1/000~002/09b9bbcb4726cd378b8486c59fd592 |
| 66/ |
+------------------------------------------------------------------------------+
+------------------------------------------------------------------------------+
| Calculation 2 / 3 finished. |
| Convergence status: Converged. All results will be available. |
+------------------------------------------------------------------------------+
+------------------------------------------------------------------------------+
| Calculating transition path 3 / 3: |
| Results and log will be saved to the following folder: |
| interstitial~interstitial/Si_1~Si_1/002~005/09b9bbcb4726cd378b8486c59fd592 |
| 66/ |
+------------------------------------------------------------------------------+
+------------------------------------------------------------------------------+
| Calculation 3 / 3 finished. |
| Convergence status: Not converged. Some of the results might not be |
| available. See the log file for more details. |
+------------------------------------------------------------------------------+
Showing the path where the results are deposited and the convergence status for each calculation: while the first two calculations converged, the last one did not.
Calculation results¶
The calculation results are displayed with the function nlprint as:
Legend Si
---------------------------
Total energies (eV) ---------------------------
Si -337.019
interstitial_Si_0/000 -514.321
interstitial_Si_1/002 -510.337
Given chemical potentials (eV) ---------------------------
Si -168.510
Element chemical potentials (eV) NOTYPE
Formation energies (eV) ---------------------------
interstitial_Si_0/000 -8.735
interstitial_Si_1/002 -4.792
Migration energies (eV) ---------------------------
interstitial_Si_0/000~interstitial_Si_0/003 4.618
interstitial_Si_0/000~interstitial_Si_1/002 4.618
interstitial_Si_1/002~interstitial_Si_1/005 0.652 ?
Migration Frequencies (THz) ---------------------------
...stitial_Si_0/000~interstitial_Si_0/003 (F) 124.753
(R) 124.753
...stitial_Si_0/000~interstitial_Si_1/002 (F) 125.356
(R) 125.356
...stitial_Si_1/002~interstitial_Si_1/005 (F) 20.493 ?
(R) 20.493 ?
The question mark “?” is set when a calculation did not properly converge. The
TransitionPathList
results are displayed as migration energies and frequencies.
The frequencies were computed by running phonon calculations.
Sentaurus Process Parameters¶
Finally, the writeSentaurusParameters function creates the following file:
# Generated by Sentaurus Materials Workbench
pdbSet Silicon KMC Int Ef -8.73467
pdbSet Silicon KMC Int D0FS 6.37471
pdbSetDoubleArray Silicon KMC Int Em {
I 4.61811
}
pdbSetDoubleArray Silicon KMC Int Dm {
I 0.0461004
}
It includes both formation and migration parameters. The extracted parameters are an average between the different type of defects, as explained in the writeSentaurusParameters command.
Further defect studies¶
For further defect studies needed to properly characterize a material see Operating with defect lists.