Check2xsf: kpoints

Check2xsf can perform some manipulations of kpoint data. It can read kpoints from a check or cell file, and output them into a new cell file. This requires the -l (list) option.

It can also expand a regular grid specification (generally misnamed a Monkhorst-Pack grid) to an explicit list of k-points. The grid can be specified with the -M option, which takes zero, three, or six parameters. With no parameters, it expects to read a grid specification from the cell file. With three, it generates the given grid density including the Gamma point. With six the last three parameters give the offset of the grid from the Gamma point, in terms of the size of a kpoint mesh cell, so the offset is usually 0.25. Note that Castep includes the Gamma point for odd grids, and excludes it for even grids.

Finally, it has support for calculating the first failure star of a kpoint set.

Examples

A surface

$ c2x -lf --cell surface.check k.cell
First failure star, integral 1.000000
Typical vector: (-5.791203,10.030659,0.000000), length**2=134.152151

and the .cell file contains a block reading

%block KPOINTS_LIST
 -0.333333333  -0.333333333   0.000000000      0.222222222
 -0.333333333   0.333333333   0.000000000      0.222222222
  0.000000000  -0.333333333   0.000000000      0.222222222
  0.000000000   0.000000000   0.000000000      0.111111111
  0.333333333   0.000000000   0.000000000      0.222222222
%endblock KPOINTS_LIST

The same output could be generated from the original cell file (which contained no kpoint information) by specifying

$ c2x -M=3,3,1 -f --cell surface.cell k.cell

And one can investigate better kpoint sets.

$ c2x -M=4,4,1 -fvv --null surface.cell
Generated 16 kpts, after inversion 10
No symops passed to sym2ksym
First failure star, integral 1.000000
Typical vector: (-7.721604,13.374212,0.000000), length**2=238.492715

A cubic cell

Considering a simple cubic cell, one can try:

$ c2x -M=2,2,2 -fvv --null si8.cell 
Generated 8 kpts, after inversion 8
basis_equal called
No symops passed to sym2ksym
First failure star, integral 1.000000
Typical vector: (0.000000,0.000000,10.920000), length**2=119.246400
$ c2x -M=2,2,2,.25,.25,.25 -fvv --null si8.cell 
Generated 8 kpts, after inversion 8
basis_equal called
No symops passed to sym2ksym
First failure star, integral 1.000000
Typical vector: (-10.920000,0.000000,10.920000), length**2=238.492800
$ c2x -M=2,2,2,.5,.5,.5 -fvv --cell si8.cell k.cell
Generated 8 kpts, after inversion 4
basis_equal called
No symops passed to sym2ksym
First failure star, integral -1.000000
Typical vector: (0.000000,0.000000,10.920000), length**2=119.246400

This shows that including the Gamma point gives the joint most expensive set (no kpoints get eliminated through inversion), and the joint poorest (joint smallest failure star). A shift of one quarter keeps the same number of points, but the quality is better, and a shift of one half is computationally the cheapest, and no worse than no shift.

For an odd grid, the abbreviated results are

$ c2x -M=3,3,3 -fvv --null si8.cell
Generated 27 kpts, after inversion 14
Typical vector: (0.000000,0.000000,16.380000), length**2=268.304400
$ c2x -M=3,3,3,.25,.25,.25 -fvv --null si8.cell
Generated 27 kpts, after inversion 27
Typical vector: (-16.380000,0.000000,16.380000), length**2=536.608800
$ c2x -M=3,3,3,.5,.5,.5 -fvv --null si8.cell
Generated 27 kpts, after inversion 14
Typical vector: (0.000000,0.000000,16.380000), length**2=268.304400

For further details of the theory, see the "Bloch's Theorem" link on my page of Castep notes.

References

Further notes on, and references for, Monkhorst and Pack k-point grids.