{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Centrosymmetry parameter\n",
"\n",
"Centrosymmetry parameter (CSP) was introduced by [*Kelchner et al.*](https://journals.aps.org/prb/abstract/10.1103/PhysRevB.58.11085) to identify defects in crystals. The parameter measures the loss of local symmetry. For an atom with $N$ nearest neighbors, the parameter is given by,\n",
"\n",
"$$\n",
"\\mathrm{CSP} = \\sum_{i=1}^{N/2} \\big | \\textbf{r}_i + \\textbf{r}_{i+N/2} \\big |^2\n",
"$$\n",
"\n",
"$\\textbf{r}_i$ and $\\textbf{r}_{i+N/2}$ are vectors from the central atom to two opposite pairs of neighbors. There are two main methods to identify the opposite pairs of neighbors as described in [this publication](https://arxiv.org/abs/2003.08879). The first of the approaches is called [*Greedy Edge Selection*](https://iopscience.iop.org/article/10.1088/0965-0393/20/4/045021/meta)(GES) and is implemented in [LAMMPS](https://lammps.sandia.gov/) and [Ovito](https://www.ovito.org/). GES algorithm calculates a weight $w_{ij} = |\\textbf{r}_i + \\textbf{r}_j|$ for all combinations of neighbors around an atom and calculates CSP over the smallest $N/2$ weights. \n",
"\n",
"A centrosymmetry parameter calculation using GES algorithm can be carried out as follows-\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import pyscal.core as pc\n",
"sys = pc.System()\n",
"sys.read_inputfile('conf.dump')\n",
"sys.find_neighbors(method='voronoi')\n",
"sys.calculate_centrosymmetry(nmax = 12)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`nmax` parameter specifies the number of nearest neighbors to be considered for the calculation of CSP. The second algorithm is called the [Greedy Vertex Matching](https://dl.acm.org/doi/book/10.5555/1206879) and is implemented in [AtomEye](http://li.mit.edu/Archive/Graphics/A/) and [Atomsk](https://atomsk.univ-lille.fr/). This algorithm orders the neighbors atoms in order of increasing distance from the central atom. From this list, the closest neighbor is paired with its lowest weight partner and both atoms removed from the list. This process is continued until no more atoms are remaining in the list. CSP calculation using this algorithm can be carried out by,"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import pyscal.core as pc\n",
"sys = pc.System()\n",
"sys.read_inputfile('conf.dump')\n",
"sys.find_neighbors(method='voronoi')\n",
"sys.calculate_centrosymmetry(nmax = 12, algorithm = \"gvm\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "lammps",
"language": "python",
"name": "lammps"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}