I want to learn DFT, I love Julia, and would like to learn DFT by doing, so I am looking for a package in a decent language with good documentation. Any tips?
Videos
There are plenty of software that can be of your help. I am only providing some of them. Some of them are free, some are not.
- Gaussian (Paid) Link
- ORCA (Free for academic use, link)
- PSI4 (Free, open source) Link
- CFOUR (Only wave functions, Free) link
- MRCC (Free) link
- QCHEM (Paid) Link
- OpenMOLCAS (Free, open source)
- PySCF (Free, open source) link
Feel free to look for your needs. I have done structural, vibrational and electronic structure analysis with Gaussian, PySCF, ORCA, Psi4. You may also consider using Multiwfn for post-processing of the .fch/.wfn files as input to obtain density and other real-space properties. It is also free. Good Luck.
PySCF
Since most people already know how to install and use Python packages, PySCF might be the easiest option for you to get started for DFT calculations on your organic molecule.
Advantages
- Free, and open-source
- Large developer community (maybe the largest and fastest-growing and most world-wide out of all quantum chemistry software options)
- Easy to get started for most people, since most people already know how to use Python and Python packages
- Works easily with Python: For example, when making scripts to automate tasks, the fact that PySCF is already a Python package makes this easy for you to do with Python
- It might be comparatively easy to develop or modify if you already know Python and don't know other languages
- Quite fast
- Has a lot of DFT functionalities that other DFT software doesn't have. For example:
- It has an MC-PDFT extension
- It can do calculations with periodic boundary conditions
- PySCF has fairly advanced functionality for relativistic corrections
- Many properties and things like NMR shielding are available
- Has a lot of other functionality beyond DFT in case you want to double-check your DFT accuracy using coupled-cluster calculations
- Has occasional conferences such as the one at the California Institute of Technology in January 2025
- It uses
libxc, so it has a wide range of functionals
Disadvantages
PySCF shares some of the disadvantages that Python itself has.
- The installation of PySCF can be a lot more difficult than it is for OpenMolcas, CFOUR, MRCC, and other software that offers reliable one-line build commands such as
build openmoclas, especially on HPC clusters, for example see this: How can I build the wheels necessary for a quick installation of PySCFad on a "compute node"?, - 1.5 years ago a student of mine couldn't use PySCF without making changes, because SciPy changed a very basic function which is linalg.solve without telling the PySCF developers in advance. This is now fixed in PySCF, but things like this can happen.
Some other disadvantages are:
Spaghetti code: it can sometimes be hard to make contributions or fixes or customizations to PySCF (for example certain FCIDUMP functionality is in the NECI module rather than in a general spot)
Not as much history as other quantum chemistry such as Gaussian, OpenMolcas, Q-Chem, Molpro, etc. Some examples of consequences of this are:
- About 10 years ago, MC-PDFT was invented, and it was introduced in OpenMolcas first because the group that invented it happened to be involved in OpenMolcas development long before PySCF existed. In 2022 an MC-PDFT extension for PySCF was written by Matthew Hermes.
- There's not as much literature that has used PySCF, not as many users, not as many calculations over the years, not as many years of testing and bug-finding, etc. Even just a couple years ago, basic things didn't work at first and had to be fixed, as you can see in the following threads (they are not focused on DFT, but they do give an accurate impression of PySCF in general): Why does CCSD work, but not CCSD(T), after reading an FCIDUMP in PySCF?, PySCF: How to do CCSD calculations from an FCIDUMP file in HDF5 format?, Is PySCF able to print checkpoint files during a CISD calculation?. Some things still haven't been fixed, for example: Why is my CISD restart failing in PySCF?
It's intended more to be a "general-purpose" quantum chemistry software, with perhaps more focus on wavefunction-based methods and other things, unlike software like ADF (Amsterdam Density Functional) and BDF (Beijing Density Functional) which are more specifically focused on DFT.
QuantumVITAS
As I understand, OP's requirements are
- Do basic calculations using DFT
- Prefer open source software which is easy to use
- Interested in DFT only as a tool to calculate properties of materials
- Not interested in learning details of DFT/software developing
Since the OP is already aware of Quantum ESPRESSO and is interested only in calculating basic properties of materials using an opensource easy to use software I will introduce a new GUI for Quantum ESPRESSO named QuantumVITAS (Quantum Visualization Interacting Toolkit for Ab-initio Simulations). It comes bundled with Quantum Espresso engine and pseudopotential libraries and works out of the box in Windows, Linux and Mac OS.
It is capable of doing
Magnetism and spin orbital coupling (SOC)
DFT+U
Hybrid functionals
Van der Waals corrections
Structural optimization/relaxation (OPT)
Density of states (DOS)
Band structure (including spin polarized and SOC)
Molecular dynamics (Born–Oppenheimer MD)
Time-dependent density-functional theory (TDDFT)
Phonon (gamma point, DOS, dispersion, raman, dielectric constant)
NEB (Nudged Elastic Band) for transition energy barrier calculation
Projection to atomic orbitals (to each atom or to each element, also in the spin polarized case and SOC)

WARNING : The tool should not be used as a black box and be aware about pitfalls awaiting you!.
SIESTA
I strongly recommend SIESTA. From the site:
SIESTA is both a method and its computer program implementation, to perform efficient electronic structure calculations and ab initio molecular dynamics simulations of molecules and solids. SIESTA's efficiency stems from the use of a basis set of strictly-localized atomic orbitals. A very important feature of the code is that its accuracy and cost can be tuned in a wide range, from quick exploratory calculations to highly accurate simulations matching the quality of other approaches, such as plane-wave methods.
As it uses numerical orbitals, the demand for memory is lower than the codes you mention. Some of the properties it can calculate:
- Total and partial energies.
- Atomic forces.
- Stress tensor.
- Electric dipole moment.
- Atomic, orbital and bond populations (Mulliken).
- Electron density.
- Geometry relaxation, fixed or variable cell.
- Constant-temperature molecular dynamics (Nose thermostat).
- Variable cell dynamics (Parrinello-Rahman).
- Spin polarized calculations (collinear or not).
- k-sampling of the Brillouin zone.
- Local and orbital-projected density of states.
- COOP and COHP curves for chemical bonding analysis.
- Dielectric polarization.
- Vibrations (phonons).
- Band structure.
The code can be downloaded from here. The page has links to the manual, tutorials and mailing list.
One big feature it has is the TranSIESTA module that permits doing transport calculation using several electrodes.
As an example, here is an input file. It is free format and designed to use keywords for the task you want to complete:
# ---------------------------------------------------------------------------
# Name and Label
# ---------------------------------------------------------------------------
SystemName BN-Cd-p0
SystemLabel BN-Cd-p0
# ---------------------------------------------------------------------------
# Lattice
# ---------------------------------------------------------------------------
LatticeConstant 12.787740 Ang
%block LatticeVectors
1.394587 0.000000 0.000000
0.000000 1.394587 0.000000
0.000000 0.000000 1.000000
%endblock LatticeVectors
# ---------------------------------------------------------------------------
# Species and Atoms
# ---------------------------------------------------------------------------
NumberOfSpecies 3
NumberOfAtoms 121
%block ChemicalSpeciesLabel
1 5 B
2 7 N
3 48 Cd
%endblock ChemicalSpeciesLabel
# ---------------------------------------------------------------------------
# Atomic Coordinates
# ---------------------------------------------------------------------------
AtomicCoordinatesFormat Ang
%block AtomicCoordinatesAndAtomicSpecies
12.92631935 8.92625145 2.84349444 1 1 B
12.92618164 8.92582742 7.10464184 1 2 B
12.93639581 8.92650310 11.36723889 1 3 B
.
.
.
12.20659949 6.53582303 9.93994222 2 117 N
12.73788419 7.68704422 0.71272677 1 118 B
12.72084758 7.68856837 4.97486209 1 119 B
12.73073524 7.68655704 9.23576392 1 120 B
8.91680374 2.17946810 5.76712116 3 121 Cd
%endblock AtomicCoordinatesAndAtomicSpecies
PAO.BasisSize DZP
MD.TypeOfRun CG
MD.NumCGsteps 0
MinSCFIterations 3
MaxSCFIterations 1000
SpinPolarized .true.
MeshCutoff 500 Ry
DM.MixingWeight 0.25
DM.NumberPulay 1
DM.Tolerance 0.001
XC.functional GGA
XC.authors PBE
SolutionMethod diagon
#############################
XML.Write .true.
---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
XML.Write .true.
#############################
WriteEigenvalues .true.
WriteKbands .true.
WriteBands .true.
WriteWaveFunctions .true.
SaveRho .true.
SaveElectrostaticPotential .true.
UseSaveData .true.
%block kgrid_Monkhorst_Pack
1 0 0 0.0
0 1 0 0.0
0 0 20 0.0
%endblock kgrid_Monkhorst_Pack
%block BandLines
1 0.00 0.00 0.00 \Gamma #Starting from gamma point
200 0.00 0.00 1.00 Z #200 points from gamma to Z.
%endblock BandLines
%block LocalDensityOfStates
-20.00 0.00 eV
%endblock LocalDensityOfStates
%block ProjectedDensityOfStates
-7.0 1.0 0.05 1000 eV
%endblock ProjectedDensityOfStates
#################################
# Charge calculation #
#################################
WriteMullikenPop 1
WriteDenchar .true.
WriteHirshfeldPop .true.
WriteVoronoiPop .true.
SaveTotalCharge .true.
SaveBaderCharge .true.
#################################