As part of my research stay at the
of ENPC Paris Tech and Inria
I have been developing the density-functional toolkit,
together with Antoine Levitt and Eric Cancès.
Finally after about six months of joint effort
on this Julia code, we just released a first preview in the form of
As I mentioned already in
the aim of DFTK is to bridge between mathematicians,
computer scientists and materials scientists
and to simplify mathematically-motivated
research in this interdisciplinary subject.
Currently we exclusively focus on a plane-wave discretisation
of density-functional theory (PWDFT)
as implemented in plenty of mature packages in the community
(Abinit, Quantum Espresso,
DFTK is mainly born from two realisations:
Firstly, existing PWDFT progams have huge code bases,
where reducing or altering the physical model to a case,
which can be treated with rigorous mathematics
is very challenging.
As a result mathematical research is done in custom codes
developed mostly for the purpose of a single project or research
questions and findings hardly make it into a setting useful
Secondly, such single-purpose custom codes are usually are not fast
enough to treat the setting of real-world applications.
This prevents verification of obtained results in the context
actually relevant in practice.
With DFTK we want to overcome this issue by allowing
in one code to both implement toy problems and upscale
them to the high-performance level needed in practice.
As of now, we're certainly not fully there,
but given the short time, we're still proud of our feature list:
- Plane-wave basis sets
- All LDA and GGA functionals from libxc
- Modelling of Insulators and metals (Fermi-Dirac or Methfessel-Paxton smearing)
or HGH Pseudopotentials
- Exploitation of Brillouin zone symmetry for
- Band structure computation
- Full access to intermediate quantities (density, Bloch wave)
- Three SCF algorithms
(DIIS, NLsolve, damping)
- Close agreement with Abinit for a few
thoroughly tested cases (silicon, graphite, manganese).
- Support for both single and double precision throughout the
library for a small set of functionals.
Support for arbitrary floating point types
is on the way.
Recently we moved the code to JuliaMolSim
a github organisation, where we want to collect Julia codes
for performing molecular simulations in quantum chemistry
and materials science.
Along with this we registered the release
with the MolSim
Julia registry, which means that you can install DFTK by two simple steps:
- Add the MolSim registry to your Julia installation. Type from a Julia REPL:
] registry add https://github.com/JuliaMolSim/MolSim.git
- Install DFTK as usual, again from a REPL:
For the time being, DFTK will probably stay in the
pre-release stage, as we are not yet completely happy with the
internal code structure and the API and we think
some more restructuring should follow.
Still, we consider the code now
sufficiently advanced to suggest you
to have a look and try it out :).
With this naturally comes a small plea: If you discover something,
which bothers you or something, which does not work,
please open an issue
on github and pose it for discussion.
Also we are very happy if you want to contribute something,
please just get going!
For further details and the DFTK source code, see the
DFTK project page
on github. Citations to the DFTK source code are possible
using DOI 10.5281/zenodo.3541724.