What is a good and free software for this endeavor? Any recommended articles on the subject? I want to design dft functionals, trying out different parametrizations and optimizing mixing constants for exchange and correlation contributions for specific data sets. Even add PT2 perturbation energy into the mix if possible.

I am aware of Gaussian's user-defined functional options, but would like to have a bit more control in the parameters and contributions, instead of just 6 parameters.


4 Answers 4


Depending on what you're after, you might want to look for programs using libxc, so you can completely define your own functionals.

From the libxc section of the Octopus wiki, these include:

  • Abinit – plane-wave code
  • APE – an atomic code
  • Atomistix ToolKit – numerical orbitals code
  • AtomPAW – projector augmented wave functions generator
  • BigDFT – wavelet code
  • CP2K - A program to perform atomistic and molecular simulations of solid state, liquid, molecular, and biological systems.
  • DP – Dielectric Properties, a linear response TDDFT code
  • Elk – FP-LAPW code
  • ERKALE – a DFT/HF molecular electronic structure code based on Gaussian orbitals
  • exciting – FP-LAPW code
  • GPAW – grid-based projector-augmented wave method
  • JDFTx – plane-wave code designed for Joint Density Functional Theory
  • MOLGW - a small, but accurate MBPT code for molecules
  • octopus – real-space (TD)DFT code
  • Yambo – solid state and molecular physics many-body calculations code

On a more personal note, and this is just my opinion, if you're just arbitrarily mixing functionals, you should really make sure you have a scientific justification for doing this, otherwise you're just generating numbers without basis.

  • $\begingroup$ Thanks Aesin, theses resources were what I was looking for. I have used Octopus before and it works really good. I completely agree with your stance on getting "numbers without basis". $\endgroup$
    – beangoben
    Jan 29, 2014 at 0:46
  • $\begingroup$ @Aesin Even if you don't mix-a-match functionals, no matter what you do, the DFT method should always always ALWAYS be calibrated before running with it. Of course not everyone can implement rigorous wave function methods (e.g. CCSD(T)) but un-calibrated DFT is just bad science in general. $\endgroup$ Jul 28, 2014 at 13:22
  • $\begingroup$ @LordStryker: I disagree somewhat: if you understand what the origins of the functions and parameters used in your functional are, how they relate to your simulated system, and are aware of obvious possible sources of limitations, I think calibration isn't always necessary. Helpful, yes, and a good idea, but not necessary. I guess they're two ways of approaching the functional verification: empirical vs theoretical matching. $\endgroup$
    – Aesin
    Jul 28, 2014 at 18:48
  • $\begingroup$ @Aesin It depends, I suppose, on what property you're trying to analyze. In my work, DFT has done well with qualitatively reproducing energetics of non-covalent interactions between weakly-bound clusters (especially with the recent dispersion corrected schemes of Grimme). However, there is severe disagreement with the Hessians produced by (most) of the DFT methods implemented and Hessians from wave function theory. In every case, perfect agreement was not observed. $\endgroup$ Jul 28, 2014 at 19:19
  • $\begingroup$ @LordStryker: Hah, yes, in this case I'd say "obvious possible sources of limitations" -> "Typical forms of KS-DFT are really bad at this". $\endgroup$
    – Aesin
    Jul 28, 2014 at 19:55

If you're trying to modify the source code and run DFT jobs, then you basically have only three options:

  1. PSI4 (very powerful, written in both C and Fortran)

  2. NWChem (very powerful and fast)

  3. GAMESS (kind of fast, fully written in FORTRAN)

If you would like to play with codes and tweak it as you wish, not worrying about the speed and optimization level, then you must try PyQuante. They recently added DFT and MP2 codes in it, so you it will be easy for you to play with. Needless to say, it runs slowly because the top layer is written in Python, while the inner layers are written in C and FORTRAN. I guess you will love playing with it!


Since you mentioned "free", you maybe want to have a look at GAMESS from the Gordon group.

I have really no idea whether it's fit for the task, but last time I checked it was free for academic use.

There's of course Turbomole, but according to an old thread in a forum from 2007, they weren't fond of custom functionals either at that time. The statement of one of the developers might be worth reading anyway.

  • 1
    $\begingroup$ Thanks! I use GAMESS extensively, but they have no easy way of using custom made DFT functionals. Their help file only describes already-made functionals. $\endgroup$
    – beangoben
    Jan 28, 2014 at 20:19

Maybe, Molpro has one of the easiest ways to do it http://www.molpro.net/info/2012.1/doc/manual/node194.html though, not free


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.