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.