Density Functional Theory


Historically important publications on DFT

References of integration methods over the Brillouin zone

Accompanying literature

  • ABC of DFT by Kieron Burke (pdf)
  • R. Martin: Electronic Structure, Basic Theory and Practical Methods (ub, amzn)

Problem Sets

Depending on the set, you will have a certain amount of time to work out a solution. For each topic (=group of sets, like EMP and DFT for He) you have to write a detailed scientific report on how you solved the problem. This report should also contain utilized references (text books, publications etc.) as well as a documentation/manual of your code and the answers to the questions you find in the set materials.

Code assignments should be written in python, so there is no need to ensure proper compilation on arbitrary hardware. Since support for python 2.x will be stopped as of 01/01/2020, you should write your code in python 3.x. All necessary libraries are installed in GEL-0032 if you prefer not to use your own laptop.

For your own mental health, write clean code. It will save you tons of time.
Not kidding! ;-)

Materials for problem sets

Empirical Pseudo Potentials:
Theory + Fourier Grid
Empirical Pseudo Potentials:
Primitive Cells & E-Cut-Off
Empirical Pseudo Potentials:
Density Functional Theory I:
Radial Schrödinger Equation
Density Functional Theory I:
Hartree Potential


Density Functional Theory II:
Important Concepts
 old sheet 
Density Functional Theory II:
Exchange and Correlation,
Local Density Approximation
 old sheet 
Density Functional Theory III:
LAPW Approach for Periodic Bulks
>>> NEW <<<DFT Cheat Sheet

Python Source Code

Your submitted python source files should be complient with the PEP8 standard. You can ensure this by running a so called linter over your source files re-formatting the content according to certain style guides. 

Two standard tools are flake8 and autopep8. You can install both on your linux machine via
#> pip install flake8; pip install autopep8
Both tools are already installed on all (linux) systems in the computer cabinet GEL-0032.

Running flake8 will only tell you style mismatches it finds in your code, whereas autopep8 will re-format your soure file in place (i.e. overwrite the original file).

Alternatively to autopep8, you can use black or YAPF.

I recommend to simply let autopep8 (or any alternative) handle all the reformatting for you. For an example python file, run:
#> autopep8 --aggressive --in-place
or (-l 79 ensures a maximum line-length of 79 characters):
#> black -l 79

For Windows users, I recommend to install anaconda or, even better, use the new Linux subsystem for Win10 (see below).

When working directly in a python shell for e.g. debug reasons, I highly recommend using ipython (Interactive Python) instead of the plain default python shell.

For setting breakpoints in a script use
| import IPython
| # -- your code --
| # next line will stop executing your script and drop into an ipython shell, where
| # you can do your debug stuff; quit via Ctrl+C and resume script
| IPython.embed()
| -- more of your code --

Linux Subsystem on Windows 10

Owners of Win10 can make use the Linux subsystem. This way you can use e.g. a Debian/Ubuntu/Suse Linux within your Windows installation without having to install it in a virtual environment like VirtualBox.

Requirements: at least Windows 10 build 16237


  1. Open a PowerShell with administrator priviledges and enter
    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
  2. Restart computer
  3. Open windows store, then choose and install one of the available Linux distributions. I recommend either Debian or Ubuntu.
  4. Open a Linux subsystem shell, update your system and install python
    #> sudo apt update && sudo apt upgrade
    #> sudo apt install ipython ipython3 python-autopep8 flake8

LaTeX template

You can download and use this LaTeX template for your final reports on the two assignment subjects "EPP" and "DFT". In case you don't have the DejaVu font package installed on your system, either get it here or change the related line in the header source to any other available font (see below).

Lines you can change in header.tex(*) according to your needs:

  • \documentclass[..., twoside=true/false, ...]
  • section "code inclusion configuration" (e.g. colors, numbered lines, etc.)
  • \newfontfamily\listingsfont(line)[...]{YOUR_FONT_NAME_HERE}

Your main working area is main.tex or, in case you prefer separate files for each section + include-statements, section_name.tex as created by yourself.

The template is optimized for being processed with the XeTeX compiler. Usually, you can change the compiler in the settings menu of your preferred IDE. 

The pdf output should look like this.

(*) Don't look too closely into this file. It certainly will not win the 'most-beautiful-or-readable-code-prize', but it does its job.

Literature for problem sets

  • J. M. Thijssen: Computational Physics (ub, amzn)
  • R. Groß, A. Marx: Festkörperphysik (ubamzn)
  • M. Cohen, S. Louie: Fundamentals of Condensed Matter Physics (ub, amzn)
  • E. Engel, R. M. Dreizler: Density Functional Theory (ub, amzn)
  • G. Giuliani / G. Vignale: Quantum theory of the electron liquid (amzn)
  • H. Eschrig: The fundamentals of density functional theory (pdf)
  • D. J. Singh, L. Nordström: Planewaves, pseudopotentials, and the LAPW method (ub, amzn)