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 no final_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 as SinglePath and Disabled 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:

OptimizeTransitionPathParameters

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.

../../../_images/fp_neb.png

Fig. 216 Migration path of Si atom (light brown sphere) at substitutional Ga site paired with Ga vacancy. Dark brown spheres represent Ga atoms and purple spheres represent As atoms. To show the migration path, all images along the path are overlaid. During the migration, the upper Si atom moves to the Ga vacancy site that is underneath this 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).

../../../_images/ring.png

Fig. 217 (Top) Dopant-vacancy exchange and (bottom) dopant-vacancy ring mechanism

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')

transition_path_list.py

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
}

KMC.pdb

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.