Skip to content

Centro-symmetry parameter

CentroSymmetryParameter measures how far the neighbors of each atom are from coming in opposite pairs: zero in perfect fcc and bcc, large at surfaces, dislocation cores and stacking faults.

import numpy as np
from mdapy.build import build_crystal
from mdapy.identify import CentroSymmetryParameter

# fcc copper of 4 x 4 x 4 cubic cells, with one atom missing
crystal = build_crystal("fcc", 3.615, elements="Cu", repeat=(4, 4, 4))
system = crystal.filter(np.arange(len(crystal)) > 0)

result = CentroSymmetryParameter(num_neighbors=12).compute(system)
result.csp.max()  # Å^2, at the neighbors of the vacancy
system = system.with_columns(result)  # the column 'csp'

Around a dislocation, the stacking fault and the partial dislocations stand out:

from mdapy.build import build_crystal, edge_dislocation
from mdapy.calculators import EAM
from mdapy.simulation import minimize
from mdapy.visualization import render, write_png

cell = build_crystal(
    "fcc", 3.615, elements="Cu", orientation=[(1, -1, 0), (1, 1, -2), (1, 1, 1)]
)
edge = edge_dislocation(cell, (30, 6, 12))
relaxed = minimize(edge, EAM.zhou(["Cu"]), max_force=1e-3, max_steps=3000).system
csp = CentroSymmetryParameter().compute(relaxed).csp

z = relaxed["positions"][:, 2]
shown = (csp > 0.5) & (np.abs(z - z.mean()) < 15)  # not the free surfaces
write_png(
    "images/csp.png",
    render(relaxed, atoms=shown, color=csp, colormap="plasma", value_range=(0, 6),
           view="top", width=1000, height=500, legend="CSP (Ų)"),
)  # fmt: skip

Centrosymmetry around a dissociated dislocation

A relaxed edge dislocation in copper seen from above its glide plane, the atoms with a parameter above 0.5 Ų: the stacking fault (yellow, about 5.7 Ų) between the cores of the two Shockley partials (purple, about 1.7 Ų).

Parameters

Name Type Default Unit Meaning
num_neighbors int32 12 number \(N\) of nearest neighbors, even: 12 for fcc, 8 for bcc

compute(system, *, neighbors=None, progress=None, cancel=None) takes the arguments of every analysis. A given neighbor list must hold the num_neighbors nearest neighbors of every atom.

Results

A CentroSymmetryResult:

Attribute Type Unit Meaning
csp (N,) float64 Ų the parameter of each atom; also its column csp

Errors

The constructor raises InvalidParameter for a num_neighbors that is odd or below 2; compute raises it for a neighbor list that does not hold the num_neighbors nearest neighbors, or a system without periodic directions with no more atoms than num_neighbors.

Definition

Of the \(N\) nearest neighbors of an atom, at \(\mathbf r_1, \dots, \mathbf r_N\) from it, every pair \((a, b)\) gives \(|\mathbf r_a + \mathbf r_b|^2\), which is zero for opposite neighbors. The parameter is the sum of the \(N/2\) smallest of these values. It is zero in perfect fcc and bcc and \(a^2\) for the twelve neighbors of ideal hcp of lattice constant \(a\).

The sum of the smallest values is the definition of LAMMPS compute centro/atom; it can use one neighbor in two pairs.

See also

Please cite

Kelchner et al. (1998).