Atomic deformation descriptors#
Given a deformed configuration and a reference configuration, the local response of the material can be characterised by per-atom strain measures and by quantities that detect non-affine motion. These descriptors all share the same construction: for each atom \(i\) a best-fit local transformation \(\pmb{F}(i)\) is found that maps the reference neighbor vectors onto the current ones, and the deviation from this fit is then analysed.
The deformation gradient is obtained by minimising
where \(\pmb{R}_{ij}\) are reference bond vectors and \(\pmb{r}_{ij}\) are the corresponding current bond vectors. From \(\pmb{F}\) the Lagrangian strain \(\pmb{E} = \tfrac{1}{2}(\pmb{F}^T\pmb{F} - \pmb{I})\) is built.
All deformation descriptors require both atoms and a reference Atoms object with the same number of atoms in matching order. Neighbors are taken from the reference configuration.
import pyscal
from ase.io import read
ref = read('conf0.dump', format='lammps-dump-text')
atoms = read('conf.dump', format='lammps-dump-text')
pyscal.find_neighbors(ref, method='cutoff', cutoff=0)
Atomic strain#
The full Lagrangian strain tensor for each atom,
strain = pyscal.atomic_strain(atoms, reference=ref)
Stored as atoms.arrays['pyscal_strain'] with shape \((N, 3, 3)\).
Von Mises strain#
The scalar von Mises invariant of the deviatoric part of \(\pmb{E}\),
is a convenient single number per atom for visualising shear localisation.
vm = pyscal.von_mises_strain(atoms, reference=ref)
Stored as atoms.arrays['pyscal_von_mises'].
\(D^2_{\min}\)#
Falk and Langer [1] introduced the residual of the affine fit,
as a measure of non-affine displacement. Atoms participating in shear transformations show large \(D^2_{\min}\) values that highlight the carriers of plastic deformation in amorphous solids.
d2 = pyscal.d2min(atoms, reference=ref)
Stored as atoms.arrays['pyscal_d2min'].
Slip vector#
Zimmerman et al. [2] proposed the slip vector,
where the sum runs over the \(n_s\) neighbors that have slipped (whose displacement exceeds a small threshold). The magnitude \(|\pmb{s}|\) identifies dislocation cores and stacking faults; the direction gives the local Burgers vector.
slip = pyscal.slip_vector(atoms, reference=ref)
Stored as atoms.arrays['pyscal_slip_vector'].
References#
Falk, M. L. & Langer, J. S. Dynamics of viscoplastic deformation in amorphous solids. Phys. Rev. E 57, 7192–7205 (1998).
Zimmerman, J. A., Kelchner, C. L., Klein, P. A., Hamilton, J. C. & Foiles, S. M. Surface step effects on nanoindentation. Phys. Rev. Lett. 87, 165507 (2001).