Dislocations¶
insert_dislocation displaces the atoms of a system by the elastic field of
a straight dislocation, isotropic or anisotropic; edge_dislocation joins
two crystals with one period more below a line than above it.
dislocation_cylinder and dislocation_quadrupole build the two models of
atomistic studies of dislocation cores around the common dislocations of
bcc, fcc and diamond crystals, DISLOCATIONS, or your own: a cylinder with
a fixed outer shell, and a periodic quadrupole.
import numpy as np
from mdapy.build import build_crystal, edge_dislocation, insert_dislocation
# a screw dislocation along [111] in iron
iron = build_crystal(
"bcc",
2.87,
elements="Fe",
orientation=[(1, 1, -2), (-1, 1, 0), (1, 1, 1)],
repeat=(10, 16, 2),
)
center = iron.box.matrix.diagonal() / 2 + [0.1, 0.1, 0.0]
screw = insert_dislocation(iron, [0, 0, 2.87 * np.sqrt(3) / 2], line="z", center=center)
# an edge dislocation in copper: x along [1-10], y along the line, z normal
# to the (111) glide plane; its Burgers vector along +y is 1/2 [-110]
cell = build_crystal(
"fcc", 3.615, elements="Cu", orientation=[(1, -1, 0), (1, 1, -2), (1, 1, 1)]
)
edge = edge_dislocation(cell, (30, 2, 12))
Relaxed with a potential, the edge dislocation splits:
from mdapy.calculators import EAM
from mdapy.identify import CommonNeighborAnalysis
from mdapy.simulation import minimize
from mdapy.visualization import render, write_png
relaxed = minimize(edge, EAM.zhou(["Cu"]), max_force=1e-3, max_steps=3000).system
cna = CommonNeighborAnalysis()
core = cna.compute(relaxed)
size = {"width": 600, "height": 500}
along_screw = render(screw, color=cna.compute(screw), view="top", **size, legend=True)
along_edge = render(
relaxed, atoms=core.structure != 1, color=core, view="back", **size, legend=True
)
write_png("images/dislocations.png", np.hstack([along_screw, along_edge]))

Left: the screw dislocation in iron seen along its line: bcc atoms (blue) around the core (white); the faces of the box, where the cut ends, are not bcc either. Right: the relaxed edge dislocation in copper seen along its line, without the fcc atoms: two Shockley partials (white) around a ribbon of stacking fault (red), between the free surfaces at the top and the bottom.
Anisotropic elasticity, cylinders and quadrupoles¶
With the elastic constants of the crystal, the displacements are those of anisotropic elasticity. The models take the elastic constants of the cubic cell, here those of the potentials, and relax with the atoms of the shell fixed:
from mdapy.build import DISLOCATIONS, dislocation_cylinder, dislocation_quadrupole
from mdapy.identify import DiamondStructure
from mdapy.lattice_dynamics import elastic_constants
zhou_cu, zhou_fe = EAM.zhou(["Cu"]), EAM.zhou(["Fe"])
cu = minimize(
build_crystal("fcc", 3.615, elements="Cu", repeat=(3, 3, 3)), zhou_cu, cell="full"
).system
fe = minimize(
build_crystal("bcc", 2.865, elements="Fe", repeat=(4, 4, 4)), zhou_fe, cell="full"
).system
a_cu, a_fe = cu.box.matrix[0, 0] / 3, fe.box.matrix[0, 0] / 4 # 3.615, 2.866 Å
c_cu = elastic_constants(cu, zhou_cu).constants # GPa: C11 168.5, C12 121.6, C44 75.4
c_fe = elastic_constants(fe, zhou_fe).constants # GPa: 229.6, 135.5, 116.7
# a screw dislocation of iron in anisotropic elasticity, in any system
anisotropic = insert_dislocation(
iron,
[0, 0, 2.87 * np.sqrt(3) / 2],
center=center,
elastic=c_fe,
orientation=[(1, 1, -2), (-1, 1, 0), (1, 1, 1)],
)
# an edge dislocation of copper split into Shockley partials 20 Å apart, in
# a cylinder of radius 50 Å whose outer 6 Å are fixed
edge = dislocation_cylinder(
"fcc edge", a_cu, c_cu, 50.0, elements="Cu", length=2, dissociation=20.0
)
edge = minimize(edge, zhou_cu, max_force=1e-3).system # the shell stays put
# a periodic quadrupole of screw dislocations of iron
quadrupole = dislocation_quadrupole("bcc screw", a_fe, c_fe, (8, 14, 1), elements="Fe")
quadrupole = minimize(quadrupole, zhou_fe, max_force=1e-3).system
# a 30° partial of silicon, its stacking fault reaching out to -x
partial = dislocation_cylinder(
"diamond 30 partial", 5.431, (165.6, 63.9, 79.5), 30.0, elements="Si", length=2
)
size = {"width": 500, "height": 500, "view": "top"}
fcc = cna.compute(edge)
pictures = [
render(edge, atoms=fcc.structure != 1, color=fcc, box=False, **size, legend=True),
render(quadrupole, color=cna.compute(quadrupole), **size, legend=True),
render(
partial,
color=DiamondStructure().compute(partial),
box=False,
**size,
legend=True,
),
]
write_png("images/dislocation-models.png", np.hstack(pictures))

Seen along the lines. Left: the relaxed edge dislocation of copper, without the fcc atoms: two Shockley partials (white) around the ribbon of stacking fault (red), and the free surface of the cylinder. Middle: the quadrupole of screw dislocations of iron, relaxed, each core three columns of atoms that are not bcc (white). Right: the 30° partial of silicon on the glide set of {111} planes, its intrinsic stacking fault in hexagonal diamond (orange).
DISLOCATIONS holds these dislocations, each with x in its glide plane, y
normal to it and z along its line, and the Burgers vector the
dislocation analysis finds along +z:
| Name | Burgers vector | x | y | z (line) | Partials |
|---|---|---|---|---|---|
"bcc screw" |
1/2[-1-1-1] | [11-2] | [-110] | [111] | |
"bcc edge" |
1/2[-1-1-1] | [111] | [-110] | [-1-12] | |
"bcc mixed" |
1/2[-1-1-1], 70.5° | [-1-1-2] | [-110] | [11-1] | |
"bcc <100> edge" |
[-100] | [100] | [010] | [001] | |
"bcc <100>{110} edge" |
[-100] | [100] | [011] | [0-11] | |
"fcc screw" |
1/2[-110] | [11-2] | [111] | [1-10] | 1/6[-211] + 1/6[-12-1] |
"fcc edge" |
1/2[-110] | [1-10] | [111] | [-1-12] | 1/6[-211] + 1/6[-12-1] |
"diamond screw" |
1/2[-110] | [11-2] | [111] | [1-10] | two 30° partials |
"diamond 60" |
1/2[-101] | [11-2] | [111] | [1-10] | 1/6[-211] (30°) + 1/6[-1-12] (90°) |
"diamond 30 partial" |
1/6[-12-1] | [11-2] | [111] | [1-10] | |
"diamond 90 partial" |
1/6[-1-12] | [11-2] | [111] | [1-10] |
The dislocations of diamond lie on the glide set, between the planes of a
pair; the bcc screw dislocation in its easy core. A Dislocation(structure,
orientation, burgers, partial=False, core=(0.5, 0.5)) of your own takes
any cubic structure, orientation and Burgers vector in the glide plane (in
units of the lattice constant, in the axes of the cubic cell); core puts
the line s rows of atoms along x from a row of the plane below it and t of
the way to the plane above.
Parameters¶
insert_dislocation(system, burgers, *, line=2, normal=1, center=None, poisson=1/3, elastic=None, orientation=None)
| Name | Type | Default | Unit | Meaning |
|---|---|---|---|---|
burgers |
(3,) float64 | Å | the Burgers vector the dislocation analysis finds along +line, in the plane of cut: its part along line is screw, the rest edge |
|
line |
int32 or str | "z" |
the Cartesian axis along the dislocation line | |
normal |
int32 or str | "y" |
the Cartesian axis normal to the plane of cut, other than line |
|
center |
(3,) float64 | center of the box | Å | a point of the line |
poisson |
float64 | 1/3 | Poisson's ratio, for the edge part, in isotropic elasticity | |
elastic |
(3,) or (6, 6) float64 | None |
any | (C11, C12, C44) or the Voigt matrix of the elastic constants, in the axes of the cubic cell: anisotropic elasticity |
orientation |
three directions | the cubic axes | the crystal directions along x, y and z, with elastic |
dislocation_cylinder(dislocation, a, elastic, radius, *, elements="X", length=1, fixed=6.0, dissociation=0.0)
| Name | Type | Default | Unit | Meaning |
|---|---|---|---|---|
dislocation |
str or Dislocation |
a name of DISLOCATIONS or a dislocation of your own |
||
a |
float64 | Å | the lattice constant | |
elastic |
(3,) or (6, 6) float64 | any | (C11, C12, C44) or the Voigt matrix, in the axes of the cubic cell | |
radius |
float64 | Å | the radius of the cylinder | |
elements |
str or sequence | "X" |
as for build_crystal |
|
length |
int32 | 1 | periods of the crystal along the line | |
fixed |
float64 | 6 | Å | the thickness of the outer shell kept still, best at least the cutoff of the potential |
dissociation |
float64 | 0 | Å | the distance between the Shockley partials of an fcc or diamond dislocation, rounded to whole rows of atoms; 0 for a perfect one |
dislocation_quadrupole(dislocation, a, elastic, repeat, *, elements="X", dissociation=0.0)
takes the same dislocation, a, elastic, elements and
dissociation, and repeat, the periods of the oriented crystal along x,
y and z, at least 2 along x and y; a perfect dislocation, not a partial.
edge_dislocation(cell, repeat) takes an orthogonal periodic cell whose
period along x is the Burgers vector, and repeat = (nx, ny, nz): nx + 1
periods along x below the line and nx above, ny along y, nz along z, at
least 2.
Results¶
insert_dislocation returns the same atoms, displaced, in the same box. The
displacements do not fit a box periodic across the line: the plane of cut
reaches one face of the box, where the crystal is no longer continuous.
dislocation_cylinder returns the cylinder along z, the line in the
middle of x and y, in a box periodic along z only, with a column movable
(N, 3) that is False for the atoms of the fixed shell, which minimize
keeps still. dislocation_quadrupole returns a fully periodic
crystal with a dislocation at a quarter of x and y and the opposite one half
a box away along both, so that each has four of the other sign around it;
its box is tilted by the plastic strain of the dipole, and with an edge part
a slab of atoms between their glide planes is taken away, as the
definition below tells.
edge_dislocation returns the lower crystal compressed and the upper one
stretched along x to nx + 1/2 periods, in a box periodic along x and y and
not along z; the line lies between them at the middle of x. Relaxed with a
potential, the dislocation takes its core; in fcc metals it splits into two
Shockley partials around a ribbon of stacking fault.
Errors¶
insert_dislocation raises InvalidParameter for the same axis as line and
normal, a Burgers vector out of the plane of cut or not of three
components, a Poisson's ratio out of (−1, 0.5), elastic constants not of
(3,) or (6, 6) or not symmetric and positive definite, an orientation not
of three orthogonal directions, an unknown axis, or an atom on the line;
edge_dislocation for a cell that is not orthogonal and periodic, or a
repeat too small. Dislocation raises it for a structure that is not
cubic, an orientation that is not orthogonal and right-handed, and a
Burgers vector that is zero or out of the glide plane;
dislocation_cylinder and dislocation_quadrupole for an unknown name, a
radius that is not positive, a negative fixed or dissociation, a
length that is not a positive integer, a repeat below 2 along x or y,
a partial in a quadrupole, and a dissociation of a partial, of a
dislocation outside fcc and diamond, off a {111} plane or not made of two
Shockley partials.
Definition¶
The Burgers vector \(\mathbf b\) of a dislocation along +line is the one
the dislocation analysis finds, as OVITO's:
the opposite of that of Hirth and Lothe (FS/RH), whose displacements are
those of \(-\mathbf b\) here. With \(x_1\) along the edge part \(b_e\) of the
Burgers vector, \(x_2\) along normal and \(x_3\) along line, measured from
center, the screw part \(b_s\) displaces the atoms along the line and the
edge part across it, as in isotropic elasticity:
with \(\nu\) Poisson's ratio: counterclockwise around the line, the atoms
along a circuit add up to \(\mathbf b\) in the perfect crystal. The cut of the screw part is the half plane
\(x_1 < 0\); that of the edge part the half plane \(x_1 > 0\), where the atoms
below the plane first move by \(|b_e|/2\) along \(x_1\) and those above it move
back by \(|b_e|/2\) after the displacement, as atomsk does with -dislocation
... edge.
In anisotropic elasticity, with \(C_{ijkl}\) the elastic constants in the axes \(x_1\), \(x_2\), \(x_3\) of the dislocation, the displacements are those of Stroh,
with \(p_\alpha\) the three roots of positive imaginary part of \(\det[Q + p(R + R^\mathsf T) + p^2 T] = 0\), \(Q_{ik} = C_{i1k1}\), \(R_{ik} = C_{i1k2}\), \(T_{ik} = C_{i2k2}\), and \((\mathbf a_\alpha, \mathbf l_\alpha)\) the eigenvectors of the sextic problem scaled to \(2\, \mathbf a_\alpha \cdot \mathbf l_\alpha = 1\). The cut is the half plane \(x_1 < 0\) for every part; crossing it from below to above, the displacement drops by \(\mathbf b\). With the line along z and the cut normal to y, these are the displacements of atomsk with an elastic tensor for \(-\mathbf b\). When the roots come closer than \(10^{-4}\), the crystal is isotropic about the line as far as it matters, and the isotropic displacements above take their place, with Poisson's ratio of the Voigt average.
In the models a dislocation splits into Shockley partials \(\mathbf b = \mathbf b_1 + \mathbf b_2\) on its {111} glide plane, \(\mathbf b_2\) on the +x side; their cuts make the crystal above the plane between them move by \(-\mathbf b_2\), which must be an intrinsic stacking fault: the projection on the plane of a nearest neighbor above it. Each line sits between two planes of atoms and between rows of atoms along x, the displacements taken at the positions of the perfect crystal.
In the quadrupole the cut runs from the first dislocation along its glide plane to halfway, across the planes between them, and along the glide plane of the second to it. Across the planes, an edge part \(b_x\) would open a gap or crowd the atoms; the second dislocation is taken above or below the first so that it crowds them, and the slab of atoms of width \(|b_x|\) beside the cut is taken away. The displacements of the dipole and its images within 10 periods of the box both ways are summed; the sum is periodic only up to a linear term, which is set so that the displacements change by \(\Delta_k\) from one periodic image to the next, the box vectors \(\mathbf c_k\) (\(k = 1, 2\)) becoming \(\mathbf c_k + \Delta_k\):
with \(\mathbf d_s\) each piece of the cut and \(\mathbf b_s\) minus the Burgers vector of the lines before it: the plastic strain of the dipole, which leaves no mean stress in the crystal.
Please cite
Hirth and Lothe (1982); with elastic constants Stroh (1958); for the quadrupole Bulatov and Cai (2006).
See also¶
- atomsk
-dislocation, whose isotropic screw and edge dislocations, and dislocations with an elastic tensor along z cut normal to y,insert_dislocationgives to rounding for the opposite Burgers vector: atomsk follows Hirth and Lothe. - matscipy, whose dislocation module builds the same models.
- Surfaces and slip systems for the slip systems of these dislocations, and Defect energies for their stacking faults.