SIESTA Si:P dopant
Unfold a substituted SIESTA supercell — one Si atom of the 8-atom conventional-cubic cell replaced by P — onto the primitive fcc cell band path. The substitution breaks the translation symmetry: host bands keep weight 1 while donor-derived states appear with fractional weight.
The bundle
Download siesta-p-doped.tar.gz and unpack it:
tar xf siesta-p-doped.tar.gz && cd siesta-p-doped
Shipped: the Si₇P supercell fixtures (data/si_sc_p.fdf +
si_sc_p.HSX), the pristine primitive cell (data/si_prim.fdf +
si_prim.HSX, POSCAR copy in data/si_prim.vasp), the P
pseudopotential (pseudos/P.psml), and reproduce.py. Prerequisites:
pip install unfolding plus pip install HamiltonIO sisl. No SIESTA
run is needed.
Structure and k-path
Identical to the pristine example: primitive 2-atom
fcc cell (a = 5.430 Å), supercell matrix
M = [[-1,1,1],[1,-1,1],[1,1,-1]], path Γ-X-W-Γ-L-W-X with 300 points.
Run parameters and shared options (mode, spin, method, resolve_degenerate, supercell-matrix row convention, k-path coordinates and frames, energy-reference conventions) are explained together in the method, parameters, and k-path guide.
Primitive cell input: required for the siesta route — it supplies the relabel map and the default path cell.
Configuration
# SIESTA Si:P dopant: one Si of the 8-atom conventional cell replaced by P.
# Run from the unpacked bundle root: unfolding --config unfold.toml
# or with explicit flags:
# unfolding siesta --fdf data/si_sc_p.fdf --primitive data/si_prim.vasp \
# --unfold-mat -1 1 1 1 -1 1 1 1 -1 --special-points GXWGLX \
# --npts 300 --method ideal --no-match-species \
# --output si_p_doped_unfolded_cli.png
#
# match_species = false lets the P dopant map onto the host site it
# replaces (same position and orbital count): host bands keep weight 1
# while donor-derived states appear with fractional weight.
route = "siesta"
[input]
fdf = "data/si_sc_p.fdf" # Si7P supercell run; reads si_sc_p.HSX
[structure]
primitive = "data/si_prim.vasp" # pristine 2-atom primitive fcc cell (a = 5.430 Ang)
supercell_matrix = [[-1, 1, 1], [1, -1, 1], [1, 1, -1]] # conventional = M @ primitive
[path]
special_points = "GXWGLX"
npts = 300
[options]
method = "ideal"
match_species = false # substitutional dopant: ignore species when matching
[output]
output = "si_p_doped_unfolded_cli.png"Run it
The dopant needs one extra setting: atom matching must ignore species
(match_species = false), so the P atom maps onto the host site it
replaces (same position and orbital count). From the unpacked bundle
directory, one command with the shipped config:
unfolding --config unfold.toml # -> si_p_doped_unfolded_cli.png
The same TOML can be passed as the only Python input:
from unfolding import load_config, run
run(load_config("unfold.toml"))or with explicit flags (the same call the TOML encodes):
unfolding siesta --fdf data/si_sc_p.fdf --primitive data/si_prim.vasp \
--unfold-mat -1 1 1 1 -1 1 1 1 -1 --special-points GXWGLX \
--npts 300 --method ideal --no-match-species \
--output si_p_doped_unfolded_cli.png
or through the Python API with explicit parameters:
import numpy as np
from ase.io import read
from HamiltonIO.siesta import SislParser
from unfolding.lcao_unfolder import HamiltonIOModel, LCAOUnfolder
from unfolding.mapping import RelabelMap
sc = SislParser("data/si_sc_p.fdf").get_model()
prim = SislParser("data/si_prim.fdf").get_model()
M = np.array([[-1, 1, 1], [1, -1, 1], [1, 1, -1]])
rm = RelabelMap.from_atoms(
sc.atoms, prim.atoms, M,
orb_counts_sc=[4] * 8, orb_counts_prim=[4, 4],
match_species=False, # the P dopant maps onto the Si site it replaces
)
unf = LCAOUnfolder(HamiltonIOModel(sc), rm)
result = unf.compute(kpts, method="ideal")reproduce.py renders the published figure:
python reproduce.py # -> si_p_doped_unfolded.png

The fixtures
Same SIESTA setup as the pristine example (GGA-PBE, SZ PAO basis,
MeshCutoff 100 Ry, 2×2×2 k-grid SCF, a = 5.430 Å) with one
substitutional P. For your own doped supercell: relax the geometry as
you see fit, keep SaveHS true and a k-sampled SCF, and pass
match_species=False as above. The unperturbed host bands must stay at
weight 1 — if they do not, the dopant site is mapping to the wrong
host.