4.18. k-pointsΒΆ

This example gives some basic instructions on how to do DFT calculations with k-points for a diamond cell and how one can manipulate the k-points.


from eminus import Cell, SCF
from eminus.units import ang2bohr

Create a diamond cell

kmesh=(2, 1, 1) will create a Monkhorst-Pack k-point grid with two k-points

cell = Cell("C", "diamond", 30, ang2bohr(3.57), kmesh=(2, 1, 1))

One can also use a custom crystal basis, the diamond system would be equivalent of the following

# cell = Cell("C", "fcc", 30, ang2bohr(3.57), basis=[[0, 0, 0], [0.25, 0.25, 0.25]])

Do a DFT calculation for the cell

scf = SCF(cell)
scf.run()

The SCF and Atoms objects have a k-point object

print(f"\nKPoints object\n{scf.kpts}\n")

The object can be modified, e.g., to create a non-Gamma-point centered mesh or to shift the k-points (do not forget to rebuild the object)

print(f"Original points:\n{cell.kpts.k}")
cell.kpts.gamma_centered = False
cell.build()
print(f"non-Gamma-centered points:\n{cell.kpts.k}")
cell.kpts.kshift = [1, 0, 0]
cell.kpts.build()
print(f"Shifted points:\n{cell.kpts.k}\n")

One can also use custom k-points

The easiest way to set them is the following

cell.set_k([[0, 0, 0]])
SCF(cell, verbose=3).run()

Download 18_k_points.py