[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