Skip to content
Density-functional toolkit
Julia Shell
Branch: master
Clone or download
mfherbst Merge pull request #126 from JuliaMolSim/flexible-convergence
First go at flexible SCF convergence criteria
Latest commit 0826daf Feb 14, 2020
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows Add runexamples action Feb 2, 2020
codegen/xc_fallback Doc and cleanup Aug 7, 2019
data/psp/hgh Fixes for PSP parser (#83) Dec 8, 2019
deps
docs Add latex documentation for symmetry Feb 13, 2020
examples
src Fix in density interpolation Feb 13, 2020
test Adapt test tolerances Feb 13, 2020
.bumpversion.cfg
.gitignore Add relevant files from FourierTransforms.jl as a copy Nov 18, 2019
.travis.yml
LICENSE Initial commit May 2, 2019
Project.toml Run ABINIT directly from DFTK datastructures Feb 7, 2020
README.md

README.md

dftk logo

Density-functional toolkit

license Build Status on Linux Coverage Status DOI

The density-functional toolkit, or short DFTK is a library of Julia routines for experimentation with plane-wave-based density-functional theory (DFT), as implemented in much larger production codes such as Abinit, Quantum Espresso and VASP. The main aim at the moment is to provide a platform to facilitate numerical analysis of algorithms and techniques related to DFT. For this we want to leverage as much of the existing developments in plane-wave DFT and the related ecosystems of Julia python or C codes as possible.

Features

The library is at an early stage and the supported feature set is still limited. An overview:

  • Methods and models:
    • Periodic Hamiltonians, such as reduced Hartree-Fock, Gross-Pitaevskii, density-functional theory, analytic potentials
    • All LDA and GGA functionals from libxc supported.
    • Godecker pseudopotentials (GTH, HGH)
    • Exploit Brillouin zone symmetry for k-Point sampling
    • Fermi-Dirac or Methfessel-Paxton smearing to treat metals
    • Self-consistent field approaches: Damping, Kerker mixing, Anderson mixing (Pulay DIIS), all solvers from NLsolve.jl
    • Direct minimization
  • Ground-state properties and post-processing:
    • Total energy
    • Forces
    • Density of states (DOS) and local density of states (LDOS)
    • Band structures
    • Full access to all intermediate quantities (e.g. density, Bloch wave)
  • Support for arbitrary floating point types, including Float32 (single precision) or Double64 (from DoubleFloats.jl). For DFT this is currently restricted to LDA (with Slater exchange and VWN correlation).

Note: DFTK has only been compared against standard packages for a small number of test cases and might still contain bugs.

Installation

The package is not yet registered in the General registry of Julia. Instead you can obtain it from the MolSim registry, which contains a bunch of packages related to performing molecular simulations in Julia. Note that at least Julia 1.2 is required.

First add MolSim to your installed registries. For this use

] registry add https://github.com/JuliaMolSim/MolSim.git

for a Julia command line. Afterwards you can install DFTK like any other package in Julia:

] add DFTK

or if you like the bleeding edge:

] add DFTK#master

Some parts of the code require a working Python installation with the libraries scipy, pymatgen and spglib. The examples require matplotlib as well. Check out which version of python is used by the PyCall.jl package. You can do this for example with the Julia commands

using PyCall
PyCall.python

Then use the corresponding package manager (usually apt, pip or conda) to install aforementioned libraries, for example

pip install scipy spglib matplotlib pymatgen

or

conda install -c conda-forge scipy spglib matplotlib pymatgen

You can then run the code in the examples/ directory.

Perspective

Despite the current focus on numerics, the intention is to keep the project rather general, so that this platform is useful for general research in materials science.

Citation

DOI

Contact

Feel free to contact us (@mfherbst and @antoine-levitt) directly, open issues or submit pull requests. Any contribution or discussion is welcome!

You can’t perform that action at this time.