Surfaces and slip systems¶
A surface or a slip plane is the xy plane of a crystal built with
orientation: z along the normal of the plane
and, for slip, x along the slip direction. A slab of the crystal then has
two such surfaces, and stacking_fault_energy slips the upper half along x.
The tables below give the orientations of the common surfaces and slip
systems, each a right-handed triple (\(\mathbf z = \mathbf x \times \mathbf y\)).
from mdapy.build import build_crystal
from mdapy.calculators import EAM
from mdapy.simulation import stacking_fault_energy, surface_energy
copper = EAM.zhou(["Cu"])
# the (111) plane of fcc copper, x along the partial slip direction [11-2]
orientation = [(1, 1, -2), (-1, 1, 0), (1, 1, 1)]
cell = build_crystal("fcc", 3.615, elements="Cu", orientation=orientation)
period = cell.box.matrix[0, 0] # the whole slip vector along x: a sqrt(6) / 2
crystal = build_crystal(
"fcc", 3.615, elements="Cu", orientation=orientation, repeat=(1, 4, 5)
)
surface_energy(crystal, copper).energy # J/m², the (111) surface
curve = stacking_fault_energy(crystal, copper, [period, 0, 0], points=25)
curve.energy[8] # J/m², the intrinsic stacking fault at a third: 1/6 [11-2]
The box along x is the shortest period of the crystal in that direction, so
the slip vector of a whole period, from one perfect stacking to the next, is
the length of the box of one cell, cell.box.matrix[0, 0]. Repeat the cell
across the plane until the surfaces or the faults no longer feel each other,
about 20 Å; along the plane one period is enough for a flat fault and
surface.
Common surfaces¶
| Crystal | Surface | x | y | z |
|---|---|---|---|---|
| fcc, diamond | (100) | [100] | [010] | [001] |
| fcc, diamond | (110) | [001] | [1-10] | [110] |
| fcc, diamond | (111) | [1-10] | [11-2] | [111] |
| bcc | (100) | [100] | [010] | [001] |
| bcc | (110) | [001] | [1-10] | [110] |
| bcc | (112) | [11-1] | [-110] | [112] |
| hcp | basal (0001) | [10-10] | [-12-10] | [0001] |
| hcp | prismatic (10-10) | [-12-10] | [0001] | [10-10] |
The hexagonal directions are four Miller–Bravais indices. The surface energies of copper and iron with the EAM potentials of Zhou et al., and each surface seen from above:
import numpy as np
from mdapy.visualization import render, write_png
iron = EAM.zhou(["Fe"])
surfaces = {
("fcc", "(100)"): [(1, 0, 0), (0, 1, 0), (0, 0, 1)],
("fcc", "(110)"): [(0, 0, 1), (1, -1, 0), (1, 1, 0)],
("fcc", "(111)"): [(1, -1, 0), (1, 1, -2), (1, 1, 1)],
("bcc", "(100)"): [(1, 0, 0), (0, 1, 0), (0, 0, 1)],
("bcc", "(110)"): [(0, 0, 1), (1, -1, 0), (1, 1, 0)],
("bcc", "(112)"): [(1, 1, -1), (-1, 1, 0), (1, 1, 2)],
}
energies, pictures = {}, []
for (kind, plane), orientation in surfaces.items():
element, a, potential = (
("Cu", 3.615, copper) if kind == "fcc" else ("Fe", 2.865, iron)
)
cell = build_crystal(kind, a, elements=element, orientation=orientation)
# at least 8 x 8 Å across and 24 Å thick
repeat = np.ceil([8, 8, 24] / cell.box.matrix.diagonal()).astype(int)
crystal = build_crystal(
kind, a, elements=element, orientation=orientation, repeat=repeat
)
energies[kind, plane] = surface_energy(crystal, potential).energy
if kind == "fcc":
top = crystal["positions.z"]
pictures.append(
render(crystal, color=top, view="top", box=False, width=400, height=400)
)
energies # J/m²: fcc (111) 1.50 < (100) 1.56 < (110) 1.74; bcc (110) 1.43 < (100), (112) 1.69
write_png("images/surfaces.png", np.hstack(pictures))

The (100), (110) and (111) surfaces of fcc copper seen from above, each atom colored by its height, the top layer yellow: a square, a rectangular and a triangular lattice. The closest packed (111) surface has the lowest energy.
Common slip systems¶
| Crystal | Slip system | x (slip) | y | z (normal) | Whole slip vector |
|---|---|---|---|---|---|
| fcc | {111}<110>, full dislocations | [1-10] | [11-2] | [111] | \(a/\sqrt2\) |
| fcc | {111}<112>, Shockley partials | [11-2] | [-110] | [111] | \(a\sqrt6/2\), the partial \(a/\sqrt6\) at a third |
| bcc | {110}<111> | [111] | [11-2] | [-110] | \(a\sqrt3/2\) |
| bcc | {112}<111> | [111] | [1-10] | [11-2] | \(a\sqrt3/2\); the two senses differ, one is the twinning sense |
| hcp | basal (0001)<10-10>, partials | [10-10] | [-12-10] | [0001] | \(\sqrt3 a\), the partial at a third |
| hcp | prismatic {10-10}<11-20> | [-12-10] | [0001] | [10-10] | \(a\) |
| diamond | {111}<110>, shuffle or glide set | [1-10] | [11-2] | [111] | \(a/\sqrt2\) |
| diamond | {111}<112>, glide set | [11-2] | [-110] | [111] | \(a\sqrt6/2\) |
The generalized stacking fault energy of each, with the EAM potentials of Zhou et al. (magnesium: \(a\) = 3.20 Å, \(c\) = 5.20 Å, the minimum of its energy):
from mdapy.visualization import plot
magnesium = EAM.zhou(["Mg"])
# the crystal, its potential, and the x, y and z of each slip system
systems = {
"fcc Cu": ("fcc", 3.615, {"elements": "Cu"}, copper, {
"{111}<112>": [(1, 1, -2), (-1, 1, 0), (1, 1, 1)],
"{111}<110>": [(1, -1, 0), (1, 1, -2), (1, 1, 1)],
}),
"bcc Fe": ("bcc", 2.865, {"elements": "Fe"}, iron, {
"{110}<111>": [(1, 1, 1), (1, 1, -2), (-1, 1, 0)],
"{112}<111>": [(1, 1, 1), (1, -1, 0), (1, 1, -2)],
}),
"hcp Mg": ("hcp", 3.20, {"elements": "Mg", "c": 5.20}, magnesium, {
"basal <10-10>": [(1, 0, -1, 0), (-1, 2, -1, 0), (0, 0, 0, 1)],
"prismatic <a>": [(-1, 2, -1, 0), (0, 0, 0, 1), (1, 0, -1, 0)],
}),
} # fmt: skip
with plot.style():
fig, axes = plot.figure("double", 55, ncols=3, sharey=True)
for ax, (name, (kind, a, options, potential, paths)) in zip(axes, systems.items()):
for label, orientation in paths.items():
cell = build_crystal(kind, a, orientation=orientation, **options).box.matrix
repeat = (1, 4, int(np.ceil(30 / cell[2, 2])))
crystal = build_crystal(
kind, a, orientation=orientation, repeat=repeat, **options
)
curve = stacking_fault_energy(
crystal, potential, [cell[0, 0], 0, 0], points=25
)
plot.stacking_fault(curve, ax=ax, label=label)
ax.set_title(name)
ax.legend()
ax.label_outer()
plot.save(fig, "images/slip-systems", formats=("png",))

Left: in copper the partial path has the intrinsic stacking fault, a local minimum at a third, and a lower barrier than the whole <110> vector, which is why the dislocations of fcc metals split. Middle: in iron the {112} curve is not symmetric about one half: slipping one way, the twinning sense, costs less than the other. Right: in magnesium the basal plane has its fault at a third; the prismatic plane slips over a single barrier.
Shuffle and glide planes of diamond¶
The (111) planes of diamond and silicon come in pairs: the gap within a
pair is a third of the gap between pairs. A fault between two pairs, the
shuffle set, cuts one bond per atom; one within a pair, the glide set,
cuts three. height puts the fault at a fractional height of the box: the
middle of a wide or of a narrow gap between the planes of atoms. Silicon
with the Stillinger–Weber potential of LAMMPS:
from mdapy.calculators import LAMMPS
silicon = LAMMPS("pair_style sw\npair_coeff * * Si.sw Si", elements=["Si"])
a = 5.431
partial = [(1, 1, -2), (-1, 1, 0), (1, 1, 1)] # x along <112>, y along <110>
crystal = build_crystal(
"diamond", a, elements="Si", orientation=partial, repeat=(1, 2, 4)
)
# the gaps between the planes of atoms, and the middle of a wide and of a narrow one
side = crystal.box.matrix[2, 2]
planes = np.unique(np.round(crystal["positions.z"] % side, 4))
gaps = np.diff(np.append(planes, planes[0] + side))
middles = (planes + gaps / 2) / side
wide = gaps > gaps.mean()
heights = {
"shuffle": min(middles[wide], key=lambda h: abs(h - 0.5)),
"glide": min(middles[~wide], key=lambda h: abs(h - 0.5)),
}
vectors = {"<110>": [0, a / np.sqrt(2), 0], "<112>": [a * np.sqrt(6) / 2, 0, 0]}
with plot.style():
fig, ax = plot.figure("single")
for name, height in heights.items():
for path, vector in vectors.items():
curve = stacking_fault_energy(
crystal, silicon, vector, points=25, height=height
)
plot.stacking_fault(curve, ax=ax, label=f"{name} {path}")
ax.set_yscale("symlog", linthresh=100)
ax.legend()
plot.save(fig, "images/shuffle-glide", formats=("png",))

The shuffle set slips along <110> over about 0.9 J/m², the glide set over nearly 7 J/m²; along <112> the glide set has its intrinsic stacking fault at a third, at no energy with this potential, which has no interaction beyond the nearest neighbors. Partial dislocations of silicon move on the glide set, whole ones on the shuffle set.
See also¶
- Crystals for
orientation, Point defects, stacking faults and surfaces forslipandadd_vacuum, and Defect energies forsurface_energyandstacking_fault_energy. - Dislocations built on these slip systems.