# Centrosymmetry parameter¶

Centrosymmetry parameter (CSP) was introduced by *Kelchner et al.* 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,

$\mathrm{CSP} = \sum_{i=1}^{N/2} \big | \textbf{r}_i + \textbf{r}_{i+N/2} \big |^2$

$$\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. Pyscal uses the first approach called *Greedy Edge Selection*(GES) and is implemented in LAMMPS and Ovito. 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.

A centrosymmetry parameter calculation using GES algorithm can be carried out as follows. First we can try a perfect crystal.

[4]:

import pyscal as pc
import pyscal.crystal_structures as pcs

import matplotlib.pyplot as plt

[5]:

atoms, box = pcs.make_crystal(structure='fcc', lattice_constant=4.0, repetitions=(3,3,3))

[6]:

sys = pc.System()
sys.box = box
sys.atoms = atoms
csm = sys.calculate_centrosymmetry(nmax = 12)

[8]:

plt.plot(csm, 'o')

[8]:

[<matplotlib.lines.Line2D at 0x7fdb95d78370>]


You can see all values are zero, as expected. Now lets add some noise to the structure and see how the centrosymmetry parameter changes.

[9]:

atoms, box = pcs.make_crystal(structure='fcc', lattice_constant=4.0, repetitions=(3,3,3), noise=0.1)

[10]:

sys = pc.System()
sys.box = box
sys.atoms = atoms
csm = sys.calculate_centrosymmetry(nmax = 12)

[11]:

plt.plot(csm, 'o')

[11]:

[<matplotlib.lines.Line2D at 0x7fdb95cfc9d0>]


The centrosymmetry parameter shows a distribution, owing to the thermal vibrations.

nmax parameter specifies the number of nearest neighbors to be considered for the calculation of CSP. If bcc structure is used, this should be changed to either 8 or 14.