This repository demonstrates the supporting Python code and input/output data files for the following manuscripts:
- A. J. Plowman and Christopher P. Race, 'A First Principles Study of Zirconium Grain Boundaries'. Journal of Nuclear Materials 568 (1 September 2022): 153853. https://doi.org/10.1016/j.jnucmat.2022.153853.
- A. J. Plowman and Christopher P. Race, 'A Density Functional Theory Study of Embrittlement of Zirconium Grain Boundaries by Fission Products', in preparation.
The easiest way to explore both the code and data is to use Binder, by clicking the link above.
Each sub-folder in the data
folder is briefly explained below. Note that simulation input and output files have been individually compressed using the lzma
Python module. When the data in these files is utilised in the Jupyter notebooks in this repository, the files are decompressed on the fly using the decompress_file
function in the utilities.py
module.
This folder contains the key CASTEP simulation input and output files (.cell
, .param
, .castep
, .geom
) for each simulated ab initio tensile test. For each simulated system, files are organised into sub-folders like "08_+0.200", which, for example, contains the simulation results for which 0.2 Angstroms of vacuum was added at each of the two pre-determined cleavage planes (i.e. at the grain boundary for the grain boundary systems). The "rgs" in these folders stands for "rigid grain shift".
This folder contains the key CASTEP simulation input and output files (.cell
, .param
, .castep
, .geom
) for each simulated gamma surface, which is an exploration of the energy landscape formed by translating one micro-grain relative to the other. For each simulated system, the results are organised into folders such as "0.4_3.6__+0.6200", which refers to a simulation for which one of the micro-grains was translated in the boundary plane by a vector of (0/4, 3/6) (which simplifies to (0, 0.5)) in fractional coordinates of the supercell boundary area. The final component refers to the amount of additional vacuum added between the two micro-grain; here, it is 0.62 Angstroms.
This folder contains the key CASTEP simulation input and output files (.cell
, .param
, .castep
, .geom
) for the pristine and defective grain boundary calculations. See below ("Structure codes") for the meaning behind the sub-folder naming scheme.
This folder contains a copy of the EAM empirical potential (M.I. Mendelev and G.J. Ackland, Phil. Mag. Letters 87, 349-359 (2007)) used in the LAMMPS gamma surface simulations.
This folder contains results that were derived from the simulation outputs found in the other folders. The following sub-folders exist:
This sub-folder contains JSON files that include the results of the ab initio tensile tests. In particular, these JSON files can be loaded by the atomistic
Python package. The traction separation curve can then be visualised. See the ab_initio_tensile_test
Jupyter notebook for more details.
This sub-folder contains JSON files that include the results from gamma surface simulations from both LAMMPS (in the eam
sub-folder) and CASTEP (in the dft
sub-folder). These JSON file can be loaded by the atomistic
Python package, which enables easy visualisation of the results. See the gamma_surfaces
Jupyter notebook for more details.
The results from simulations are organised and referred to by structure codes. In this work, we were interested in studying grain boundaries from first principles. Subsequently, and since we used a periodic plane-wave DFT code (CASTEP), we were limited to periodic grain boundary supercells. Periodic grain boundaries are commonly described by their integer Σ value. We also simulated bulk and free surface systems (to, for instance, compute the grain boundary energy). In these cases, the supercells were always associated with a corresponding grain boundary system of approximately the same size and shape. Thus, where we have results for a grain boundary, we also have results for corresponding free surface and bulk system, which are referenced using the same Σ value as the grain boundary.
By example, the structure code s13-tlA-gb-b1+a3
can be decoded in the following way:
s13
: Σ13 systemtlA
: tilt grain boundarygb
: grain boundary supercellb1+a3
: two defects are present near the boundary:b1
refers to a caesium (Cs) substitutional atom at defect site 1a3
refers to an iodine (I) substitutional atom at defect site 3
In the defect specification, a
refers to a substitutional iodine defect, b
refers to a substitional caesium defect, and v
refers to a vacancy. For each system, three defect sites were chosen at roughly increasing distance from the nominal GB plane as: 1
, 2
and 3
.
This repository contains several Jupyter notebooks that demonstrate and visualise the data and the analysis methods of the work. These make use of wrapper functions in the included Python modules utilities.py
, gamma_surfaces.py
, and tensile_test.py
. These modules are designed to be lightweight wrappers over the more generalised code that exists primarily in the atomistic
Python package (see below - "Dependencies overview").
This notebook demonstrates how to visualise the computed gamma surfaces, and runs through the steps to generate simulation input files and collate the results in order to compute a gamma surface.
This notebook demonstrates how to visualise the computed traction-separation curves from the ab initio tensile tests.
This notebook can be used to generate schematics of the simulated systems.
During the course of this work, a number of Python packages were developed. These packages are dependencies of this repository. Their functions are briefly outlined below. Note that the required versions of these packages are noted/tracked in the requirements.txt
file.
- This package is for generating and manipulating atomistic structures, including grain boundaries.
- It includes convenience classes that wrap up useful functionality for generating and analysing gamma surfaces and atomistic tensile tests.
- PyPI link
- GitHub link
- The geometry modeller package is used to enable visualisations of
AtomisticStructure
objects. - 3D and arbitrary 2D orthographic projections are supported, using Plotly as a backend. (It is, however, designed to eventually support multiple backends.)
- PyPI link
- GitHub link
- This package is for representing Bravais lattices and is used by
atomistic
. - PyPI link
- GitHub link
- This package is for storing and manipulating arrays of vectors using
Numpy
. - It was created to easily allow each vector in a
Numpy
array of vectors to be associated with additional information (labels). - For example:
- In the
atomistic
package, theSites
class is used to represent atoms and lattice sites within anAtomisticStructure
. - The species of each atom, for instance, is stored as a
Sites
label.
- In the
- PyPI link
- GitHub link
- This package was developed to write and parse CASTEP input/output files.
- PyPI link
- GitHub link
- This package was developed to write and parse LAMMPS input/output files.
- PyPI link
- GitHub link