Operating with defect lists

Introduction

The defect list commands define the types of defect and set up the environment to calculate the energies and entropies of defects. Each of these commands (see Defect list types) indicates the defect type.

Defect lists usage

Once a particular type of defect has been chosen by the use of the particular defect list types, the usage is very similar.

  • The defect list finds all the possible defects in the specified reference MaterialSpecifications and finds out which ones are equivalent for the given reference. Then, it creates a list on non equivalent defects.
  • By default, all non equivalent defects are included. A different approach can be followed by filtering the defects. The available filters are listed for each particular defect, being ‘filterByWyckoff’, ‘filterByLatticeSpecies’, and ‘filterByDistance’.
    • ‘filterByWyckoff’ is intended to let users pick up particular defects in the defect list.
    • ‘filterByLatticeSpecies’ is intended to select inequivalent defects by element name
    • ‘filterByDistance’ is used to pick up defects at a particular distance from an origin.
  • Once the defects have been chosen and optionally filtered, the energy and entropy calculations are run by calling the ‘update’ command on them.
  • The entropy calculations are optional, and can be disabled by defining and assumed formation entropy in MaterialSpecifications. By default they are performed.
  • Once the defects have been updated they can be saved with a regular nlsave command. These saved files can be open and visualized.
  • A simple, text-based, visualization of the computed values can be obtained with the displayDefectCharacterization command.
  • Further preprocessing on the values computed to generate a Sentaurus Process file can be done using the writeSentaurusParameters command.

Defect list types

The defect list types are:

Directory names

All the defect list automatically create directories with the logs and results of the ChargedPointDefect calculations that are run for each particular defect. Such directories names have the following conventions.

  1. Defect name, in particular cluster, interstitial, pair, split, substitutional and vacancy
  2. Defect description, usually including the defect Wyckoff type. See each particular defect for the description.
  3. Defect site, different for each defect, even if they are equivalent.
  4. Material specifications hash, that uniquely identify the particular material specification options used as reference.

For instance, the following shows directory names created by SMW:

pair/CV/C^Si_0+Si_0/001+000/8510ca94d3b960045791f06a3741606f
vacancy/Si_0/004/8510ca94d3b960045791f06a3741606f
substitutional/C^Si_0/004/8510ca94d3b960045791f06a3741606f
interstitial/C_0/004/8510ca94d3b960045791f06a3741606f
cluster/AsV4/Si_0+Si_0+Si_0+Si_0+As^Si_0/004+002+015+008/8510ca94d3b960045791f06a3741606f

Usage example

This example script shows how to perform a simple study of vacancies and interstitials in bulk silicion, 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 vacancies and investigate charges 0 and 1
vacancies = VacancyList(reference, [0, 1])
nlprint(vacancies)

# Create a list with all non equivalent interstitials, charges [-1, 0]
interstitials = InterstitialList(reference, Silicon, [-1, 0])
nlprint(interstitials)

# Update, i.e., perform calculations
vacancies.update()
interstitials.update()

# Save
nlsave('defects.hdf5', vacancies)
nlsave('defects.hdf5', interstitials)

# Show results on screen
displayDefectCharacterization([vacancies, interstitials], [])

# Generate a simple Sentaurus Process KMC file with them.
writeSentaurusParameters([vacancies, interstitials], [], SentaurusProcessKMC, 'KMC.pdb')

defect_lists.py

It is important to note that this example is only intended to provide an overview of the creation of defect lists, and its use. In particular, it does not extensively study the defects (by adding other charges, and more defects, e.g., split interstials and substitutionals), and it uses a fast calculator.

nlprint output

nlprint detects only 1 inequivalent position for the vacancy, and 2 inequivalent positions for the interstitial (the tetrahedral and hexagonal positions).

+------------------------------------------------------------------------------+
| VacancyList defect summary                                                   |
+------------------------------------------------------------------------------+
| 1 inequivalent defect positions:                                             |
|     Wyckoff: 0, is Si_0. (2 defects).                                        |
+------------------------------------------------------------------------------+
+------------------------------------------------------------------------------+
| InterstitialList defect summary                                              |
+------------------------------------------------------------------------------+
| 2 inequivalent defect positions:                                             |
|     Wyckoff: 0, is C_0. (4 defects).                                         |
|     Wyckoff: 1, is C_1. (2 defects).                                         |
+------------------------------------------------------------------------------+

Calculation update

The calculation starts with an update of the vacancy and interstitial lists. For example, the vacancy list calculations are reported as:

+------------------------------------------------------------------------------+
| Defect List                                                                  |
+------------------------------------------------------------------------------+
| 1 defect(s) will be calculated.                                              |
+------------------------------------------------------------------------------+
+------------------------------------------------------------------------------+
| Calculating defect 1 / 1:                                                    |
|   Results and log will be saved to the following folder:                     |
|   vacancy/Si_0/000/09b9bbcb4726cd378b8486c59fd59266/                         |
+------------------------------------------------------------------------------+
+------------------------------------------------------------------------------+
| Calculation 1 / 1 finished.                                                  |
|   Convergence status: Not converged. Some of the results might not be        |
|   available. See the log file for more details.                              |
+------------------------------------------------------------------------------+

The message about convergence status informs us about a potential problem in the calculation. In this particular case, a careful check of the log file shows a problem in the phonon calculations produced, most probably, by the fast, but not accurate, selection of the calculator and convergence criteria.

Calculation results

Once all the calculation results are available, the showValues_f function provides an overview of the available results.

Legend                                                                 Si
                                              ---------------------------

Total energies (eV)                           ---------------------------
Si                                                             -337.019
vacancy_Si_0/000                                               -170.640
vacancy_Si_0/000.p1                                            -170.433
interstitial_Si_0/000.n1                                       -517.566
interstitial_Si_0/000                                          -514.321
interstitial_Si_1/002.n1                                       -517.566
interstitial_Si_1/002                                          -514.321

Given chemical potentials (eV)                ---------------------------
Si                                                             -168.510

Element chemical potentials (eV)                                 NOTYPE

Formation energies (eV)                       ---------------------------
vacancy_Si_0/000                                                 -2.160
vacancy_Si_0/000.p1                                               0.136

interstitial_Si_0/000                                            -8.735
interstitial_Si_1/002                                            -8.735
interstitial_Si_1/002.n1                                         -8.418
interstitial_Si_0/000.n1                                         -2.542

Fermi-level dependent formation energies (eV) ---------------------------
Eg (Extracted)                                                    2.443
Eg (Specified)                                                     None

vacancy_Si_0/000                            q  Ef@Ev  Ef@Ei  Ef@Ec  Etrap
                                              ---------------------------
                                         ( 0) -2.160 -2.160 -2.160      -
                                         ( 1)  0.136  1.358  2.579  4.740

                                       Trans.       EF-Evbm            Ef
                                              ---------------------------
                                      ( 0/ 0)         0.000        -2.160

interstitial_Si_0/000                       q  Ef@Ev  Ef@Ei  Ef@Ec  Etrap
                                              ---------------------------
                                         (-1) -2.542 -3.763 -4.985      -
                                         ( 0) -8.735 -8.735 -8.735 -3.750

                                       Trans.       EF-Evbm            Ef
                                              ---------------------------
                                      ( 0/ 0)         0.000        -8.735

interstitial_Si_1/002                       q  Ef@Ev  Ef@Ei  Ef@Ec  Etrap
                                              ---------------------------
                                         (-1) -8.418 -9.640 -10.861      -
                                         ( 0) -8.735 -8.735 -8.735  2.127

                                       Trans.       EF-Evbm            Ef
                                              ---------------------------
                                      ( 0/ 0)         0.000        -8.735
                                      ( 0/-1)         0.317        -8.735
                                      (-1/-1)         2.443       -10.861

Sentaurus Process Parameters

The writeSentaurusParameters function creates the following file:

# Generated by Sentaurus Materials Workbench
pdbSet Silicon KMC Int Ef   -8.73462
pdbSet Silicon KMC Int D0FS 9.56058
pdbSet Silicon KMC Vac Ef   -2.16048
pdbSet Silicon KMC Vac D0FS 1881.52
pdbSetDoubleArray Silicon KMC Int e0 {
                  IM 0.316559
}
pdbSetDoubleArray Silicon KMC Vac e0 {
                  VP -2.29661
}

KMC.pdb

Transition Path calculation

For transition path calculations, needed to compute migration barriers, see the TransitionPathList page.