[ase-users] [gpaw-users] Minimum k-point density
Morten Niklas Gjerding
mogje at fysik.dtu.dk
Fri Mar 6 16:48:57 CET 2015
Hi Peter.
I don't have much to say about your first point other than you argument sounds reasonable. On your other point:
A monkhorst-pack grid not centered on the gamma point is not guaranteed to fulfill the symmetries of non-orthorhombic unitcells. This could be one reason on why to avoid even integers or to shift the even monkhorst pack grid by using the {"gamma": True} keyword.
I found something here (slide ~30) about the symmetry breaking: https://www.vasp.at/vasp-workshop/slides/k-points.pdf
KR. Morten
________________________________
From: gpaw-users-bounces at listserv.fysik.dtu.dk [gpaw-users-bounces at listserv.fysik.dtu.dk] on behalf of Peter Bjerre Jensen [pbjen at dtu.dk]
Sent: Friday, March 06, 2015 4:38 PM
To: gpaw-users at listserv.fysik.dtu.dk; ase-users at listserv.fysik.dtu.dk
Subject: [gpaw-users] Minimum k-point density
(crossposting to gpaw-users and ase-users, as both codes are involved)
Hi
According to the gpaw manual (https://wiki.fysik.dtu.dk/gpaw/documentation/manual.html#manual-kpts) one can specify a k-point density, instead of number of kpts per direction:
You can also specify the k-point density in units of points per Å−1:
kpts={'density': 2.5} # Monkhorst-Pack with a density of 2.5 points/Ang^-1
kpts={'density': 2.5, 'even': True} # round off to neares even number
kpts={'density': 2.5, 'gamma': True} # include gamma-point
The k-point density is calculated as:
Na2π,
Normally I would expect that one was interested in specifying a minimum k-point density, but that is not how the function works. (the calls go all the way to ase.calculators.calculator.py)
def kptdensity2monkhorstpack(atoms, kptdensity=3.5, even=True):
"""Convert k-point density to Monkhorst-Pack grid size.
atoms: Atoms object
Contains unit cell and information about boundary conditions.
kptdensity: float
K-point density. Default value is 3.5 point per Ang^-1.
even: bool
Round to even numbers.
"""
recipcell = atoms.get_reciprocal_cell()
kpts = []
for i in range(3):
if atoms.pbc[i]:
k = 2 * pi * sqrt((recipcell[i]**2).sum()) * kptdensity
if even:
kpts.append(max(1, 2 * int(round(k / 2))))
else:
kpts.append(max(1, int(round(k))))
else:
kpts.append(1)
return np.array(kpts)
If one for example specify a cell = [6,6,6] and a kptdensity = 25/(2pi), kpts is set to [4,4,4], which give a lower kpts-density (24 kpts per Å^-1).
Wouldn't it make more sence to use int(ceil(***)), to ensure a minimum density? (if so, the max(1,*) can also be skipped)
Furthermore there is the option to only allow even integers - are there any other reasons that one wants this, than to optimize the parallelization, and it is recommend "always" to use even=True?
Best regards
Peter
Peter Bjerre Jensen
Postdoc
DTU Energy
Technical University of Denmark
[cid:part1.02070702.08000602 at dtu.dk]
Department of Energy Conversion and Storage
Fysikvej, Building 309
2800 Kgs. Lyngby
pbjen at dtu.dk<mailto:pbjen at dtu.dk>
www.ecs.dtu.dk<http://www.ecs.dtu.dk>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.fysik.dtu.dk/pipermail/ase-users/attachments/20150306/cb7f1223/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: DTU_email_logo_01.gif
Type: image/gif
Size: 1055 bytes
Desc: DTU_email_logo_01.gif
URL: <http://listserv.fysik.dtu.dk/pipermail/ase-users/attachments/20150306/cb7f1223/attachment-0001.gif>
More information about the ase-users
mailing list