I'm new to DFT. I want to make use of the GTH pseudopotential.

I am trying to understand how this potential works. I read the article "Separable dual-space Gaussian pseudopotentials" by S. Goedecker, M. Teter, and J. Hutter.

It indicates that the potential consists of two parts: local and nonlocal. There is an exponential parameter $r_{loc}$ in the local potential. This parameter denotes the range of the Gaussian ionic charge distribution.

What is meant by this in terms of physical quantities? Does it mean that at distances exceeding $r_{loc}$, the non-local part of the potential begins to prevail? As the non-local part of the potential does not contain the parameter $r_{loc}$ at all. How is $r_{loc}$ determined in practice? enter image description here

enter image description here

Can anyone please explain the purpose of the parameter $r_{loc}$?

  • 3
    $\begingroup$ +10. Great first question, and welcome! Hopefully we see more of you! $\endgroup$ May 24, 2020 at 14:47

1 Answer 1


Great question, will allow me to advertize our newly-released DFT code :](https://github.com/JuliaMolSim/DFTK.jl/).

The rloc parameter is the characteristic distance at which the pseudopotential acts. At distances bigger than rloc, the potential starts to behave like a Coulomb potential. Note that the nonlocal potential also has a characteristic size, though. Generally speaking, the largest rloc the better for numerical purposes (because the potential is less sharp around the nuclei). It can vary a lot from element to element, as the following Julia script shows: (edit: with corresponding Coulomb potential, following Michael's suggestion)

using DFTK
using PyPlot

x = range(0, 2, length=10000)
for pseudo in ("Si-q4", "O-q6", "H-q1")
    psp = load_psp("hgh/lda/$(pseudo)")
    p, = plot(x, DFTK.eval_psp_local_real.(Ref(psp), x), label=pseudo, lw=3)
    q = parse(Int, pseudo[end])
    plot(x, -q ./ x, color=p.get_color(), linestyle="-.")
    axvline(psp.rloc, color=p.get_color(), lw=2)
    xlabel("r (Bohr)")
ylim([-40, 0])

println.([(psp.identifier, load_psp(psp.identifier).rloc) for psp in DFTK.list_psp(family="hgh", functional="lda")])

enter image description here

  • 2
    $\begingroup$ Could you add the appropriate coulomb potential just for comparison of the behaviour? $\endgroup$ Jun 5, 2020 at 12:45
  • 2
    $\begingroup$ good idea! thanks! $\endgroup$ Jun 5, 2020 at 12:52
  • $\begingroup$ +1. So it seems rloc is the inflection point at which the curves switch from positive curvature to negative curvature? $\endgroup$ Jun 5, 2020 at 13:12
  • $\begingroup$ Certainly seems so but I'd imagine that's a coincidence more than anything else; the functional form is pretty complex $\endgroup$ Jun 5, 2020 at 15:04

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .