Random Surface Slabs (Random Slab)

Group: Surface | Class: RandomSlabCard

What the card does

Cut slabs from a bulk structure over ranges of Miller indices, layer counts, and vacuum thicknesses, covering multiple surface orientations and geometries.

Example workflow

Scenario: model adsorption energies are systematically biased relative to DFT

You trained an NEP model on bulk Pt and obtained good elastic and phonon properties. For CO adsorption on Pt(111), however, the predicted adsorption is 0.5 eV weaker than DFT, well outside the acceptable error.

Diagnosis: The training set contains only bulk Pt, so the model has never seen undercoordinated surface atoms. Terrace and step environments on Pt(111) differ strongly from bulk coordination, dropping from 12 neighbors to 9 or fewer. Include slabs with multiple orientations and thicknesses before expecting transfer to surface chemistry.

Input: A bulk fcc Pt unit cell.

Goal: Generate slabs spanning several Miller-index combinations, with 3–6 layers and 10 Å of vacuum, including the (111) surface.

Parameters:

  • H Range = [0, 1, 1]K Range = [0, 1, 1]L Range = [1, 3, 1]

  • Layer Range = [3, 6, 1]

  • Vacuum Range = [10, 10, 1]

Output: Slab structures over the selected hkl combinations and 3–6 layer thicknesses with 10 Å vacuum, labeled Slab(hkl=...,L=...,vac=...).

How to verify that training-set quality improved:

  • After DFT labeling and retraining, recalculate CO adsorption on Pt(111) and compare it with the DFT reference.

  • Check that the two slab surfaces do not overlap and that the vacuum separates periodic images adequately.

  • If surface-energy predictions remain inaccurate, expand l_range to [1, 5, 1] to include more orientations, while controlling the total count.

  • If the slabs are too thin and the two surfaces interact strongly, raise the lower bound of layer_range.

When to add this card

Add it when:

  • The model is inaccurate for adsorption, surface energies, or surface reactions.

  • You need to cover several surface orientations and thicknesses.

  • You need parent slabs for downstream adsorption or defect cards.

Do not add it when:

  • The model targets bulk properties only and does not need surface structures.

  • The required slabs have already been prepared and only surface modification is needed.

Parameters

H Range(h_range)

Sequence[int], default: (0, 1, 1). Integer [minimum, maximum, step] range for the Miller h index.

The (0, 0, 0) combination is skipped. Before running, estimate the output count as Nh × Nk × Nl × Nlayers × Nvacuum; the five nested ranges can grow quickly.

K Range(k_range)

Sequence[int], default: (0, 1, 1). Integer [minimum, maximum, step] range for the Miller k index.

Using [0,1,1] for h and k limits the scan to low-index values; [0,2,1] broadens it, while [0,3,1] is exploratory. Control both ranges because their combinations multiply.

L Range(l_range)

Sequence[int], default: (1, 3, 1). Integer [minimum, maximum, step] range for the Miller l index. Its default starts at 1 because (0, 0, 0) is undefined and would be skipped.

Use [1,1,1] for a single l value, [1,3,1] for routine coverage, and [1,5,1] for exploration, accounting for multiplication by all other ranges.

Layer Range(layer_range)

Sequence[int], default: (3, 6, 1). Integer [minimum, maximum, step] range for slab thickness in atomic layers.

Three to six layers is a practical starting range, but convergence must be checked for the material and property of interest. One- or two-layer slabs can show strong finite-size effects; slabs above eight layers increase DFT cost substantially.

Vacuum Range(vacuum_range)

Sequence[int], default: (10, 10, 1). Vacuum-thickness range in Å, expressed as [minimum, maximum, step].

Ten Å is a common starting point, but vacuum convergence remains system dependent. For adsorbates, 15–20 Å may be needed to avoid contact with the periodic image. Vacuum below 5 Å is generally unsafe for isolated-slab calculations.

Recommended presets

Low-index surfaces ((111), 3–6 layers, 10 Å vacuum, few outputs)

{
  "class": "RandomSlabCard",
  "check_state": true,
  "h_range": [0, 1, 1],
  "k_range": [0, 1, 1],
  "l_range": [1, 1, 1],
  "layer_range": [3, 6, 1],
  "vacuum_range": [10, 10, 1]
}

Multiple orientations (h/k: 0–1, l: 1–3; 3–6 layers; 10–15 Å vacuum)

{
  "class": "RandomSlabCard",
  "check_state": true,
  "h_range": [0, 1, 1],
  "k_range": [0, 1, 1],
  "l_range": [1, 3, 1],
  "layer_range": [3, 6, 1],
  "vacuum_range": [10, 15, 5]
}

Broad orientation exploration (h/k: 0–2, l: 1–5; 3–9 layers; 10–20 Å vacuum)

{
  "class": "RandomSlabCard",
  "check_state": true,
  "h_range": [0, 2, 1],
  "k_range": [0, 2, 1],
  "l_range": [1, 5, 1],
  "layer_range": [3, 9, 3],
  "vacuum_range": [10, 20, 5]
}

Recommended combinations

  • Random SlabInsert Defect: cut surfaces, then place adsorbates.

  • Random SlabRandom Vacancy: cut surfaces, then remove surface atoms to create vacancies.

  • Super CellRandom Slab: enlarge the in-plane dimensions before cutting slabs.

Common questions

No structures are produced. After (0, 0, 0) is removed, the selected ranges may contain no valid Miller combination, or the bulk lattice may be incompatible with the requested cut.

The output count is unexpectedly large. The five ranges form a Cartesian product. Estimate Nh × Nk × Nl × Nlayer × Nvacuum; if it is too large, narrow l_range and layer_range first.

The upper and lower slab surfaces overlap or interact too strongly. The lower bound of layer_range is too small. Increase it and recheck thickness convergence.

Output labels

Slab(hkl={h}{k}{l},L={layer count},vac={vacuum})

Reproducibility

Deterministic: identical inputs and parameters produce identical outputs.