Skip to main content

Fermi Surface

Here we will calculate Fermi surface of copper. First step is to perform self- consistent field calculation.

src/cu/pw.scf.cu.in
&control
calculation = "scf",
prefix = "cu",
pseudo_dir = "../pseudos/",
outdir = "/tmp/cu/"
/

&system
ibrav = 2,
celldm(1) = 6.678,
nat = 1,
ntyp = 1,
ecutwfc = 40,
ecutrho = 300,
occupations = "smearing",
smearing = "mp",
degauss = 0.01,
nbnd = 16
/

&electrons
conv_thr = 1e-9,
/

ATOMIC_SPECIES
Cu 63.546 Cu_ONCV_PBE-1.0.oncvpsp.upf

ATOMIC_POSITIONS alat
Cu 0.00 0.00 0.00

K_POINTS automatic
8 8 8 1 1 1
mpirun -np 4 pw.x -in pw.scf.cu.in > pw.scf.cu.out

Next we perform bands calculation over dense uniform k-grid:

src/cu/pw.bands.cu.in
&control
calculation = "bands",
prefix = "cu",
pseudo_dir = "../pseudos/",
outdir = "/tmp/cu/"
/

&system
ibrav = 2,
celldm(1) = 6.678,
nat = 1,
ntyp = 1,
ecutwfc = 40,
ecutrho = 300,
occupations = "smearing",
smearing = "mp",
degauss = 0.01,
nbnd = 16
/

&electrons
conv_thr = 1e-9,
/

ATOMIC_SPECIES
Cu 63.546 Cu_ONCV_PBE-1.0.oncvpsp.upf

ATOMIC_POSITIONS alat
Cu 0.00 0.00 0.00

K_POINTS automatic
30 30 30 0 0 0
mpirun -np 4 pw.x -in pw.bands.cu.in > pw.bands.cu.out

Finally, we process the data with fs.x post processing tool. Below is the input file:

src/cu/fs.cu.in
&fermi
outdir = "/tmp/cu/"
prefix = "cu"
/
mpirun -np 4 fs.x -in fs.cu.in > fs.cu.out

We can visualize the output file cu_fs.bxsf using xcrysdens program:

xcrysden --bxsf cu_fs.bxsf
Fermi-surface-copper