Calculation Workflow¶
This page summarizes the current DFT+DMFT workflow and translates the older PDF tutorial material into the current input.toml, DMFT.py, and postDMFT.py interface.
For concrete runnable starting points, see Examples.
Overview¶
DMFTwDFT combines a DFT calculation, a Wannier90 projection, and a DMFT impurity loop. The main DMFT executable computes the local Green’s function G_loc.out and hybridization functions Delta*.inp from the current self-energy sig.inp. The impurity solver then updates the self-energy, and the process repeats until the lattice and impurity quantities converge.
The normal calculation stages are:
Run or provide a DFT calculation for the structure.
Define a Wannier subspace for the correlated orbitals and any ligand orbitals needed to describe them.
Configure
input.toml,para_com.dat, and optionallypara_com_dft.dat.Run
DMFT.pyto prepare DFT/Wannier inputs and launch the DMFT or Hartree-Fock loop.Inspect
INFO_ITERand related output files for convergence.Run
postDMFT.pyfor analytic continuation, density of states, and band structures.
For workflows modeled on the bundled examples, the initial DFT/Wannier calculation should be non-spin-polarized even if the subsequent DMFT calculation uses nspin = 2. This keeps the Wannier basis spin independent while allowing spin-polarized many-body self-energies in the DMFT step.
Wannier Subspace¶
Choose the Wannier energy window from the DFT band structure, usually with the help of orbital-projected bands. The window should contain the correlated orbitals and any strongly hybridized ligand states needed to represent the low-energy subspace.
In input.toml, the window is set by ewin relative to the DFT Fermi energy. For example, the LaNiO3 VASP example uses:
ewin = [-8, 3.1]
The older PDF tutorial gives the corresponding Wannier90 idea explicitly. If the DFT Fermi level is 7.6986 eV and the desired absolute window is approximately -8 eV to 3 eV relative to the Fermi level, the wannier90.win disentanglement limits are shifted by the Fermi level:
dis_win_min = -0.3014
dis_win_max = 10.6986
num_wann = 28
For transition-metal oxides, the projection often includes metal d orbitals and oxygen p orbitals. In the LaNiO3 example, 2 Ni atoms contribute 10 d Wannier functions and 6 O atoms contribute 18 p Wannier functions, for num_wann = 28.
For low-symmetry octahedral environments, rotate local d axes when needed to reduce off-diagonal Hamiltonian terms in the correlated basis. The current input uses L_rot; the helper generate_win.py can be used when local projection axes need to be generated.
Important Input Parameters¶
Most calculation settings live under the [p] table in input.toml.
Niter
: Number of outer DFT+DMFT iterations. Niter = 1 is a non-charge-self-consistent DFT+DMFT calculation. Larger values request charge-self-consistent loops when the DFT interface supports them.
Nit
: Number of DMFT self-consistency iterations per outer loop.
Ndft
: Number of DFT iterations in a charge-self-consistent outer loop.
n_tot
: Total number of electrons in the Wannier subspace. For LaNiO3 with 2 Ni ions and 6 O ions, a common count is 2 x 7 Ni d electrons plus 6 x 6 O p electrons, giving 50.
nf
: Target or initial correlated-shell occupancy. This can be a nominal value or a DFT-estimated occupancy.
nspin
: Number of DMFT spin channels. Use 2 for spin-polarized DMFT calculations.
atomnames and orbs
: Atom species and orbital channels used to construct the Wannier basis.
L_rot
: Whether to rotate local projection axes for each atom/orbital channel. Use 1 for rotated local axes and 0 otherwise.
cor_at
: Correlated atoms. Symmetry-equivalent atoms can be grouped together.
cor_orb
: Correlated orbitals on each correlated atom. Orbitals listed here are treated by DMFT; other orbitals in the Wannier subspace are treated outside the impurity problem.
U and J
: Hubbard interaction and Hund coupling for each correlated atom group.
alpha
: Double-counting correction parameter. The PDF manuals describe alpha = 0 as the conventional fully localized limit; current examples often use nonzero values selected for the material.
mix_sig
: Mixing parameter between previous and current self-energies.
q
: Dense k-point mesh used for the DMFT Wannier k-sum. This is often chosen larger than the DFT k-mesh because the Wannier interpolation is cheaper than the DFT calculation.
ewin
: Wannier projection energy window relative to the DFT Fermi energy.
path_bin
: Path to the DMFTwDFT bin directory. Set this to your local checkout; do not copy the absolute paths from bundled examples.
The [pC] table contains impurity-solver settings such as inverse temperature beta, Monte Carlo steps M, Matsubara sampling nom, warmup, and measurement parameters. The [pD] table contains CIX/atomic solver parameters passed to the impurity setup.
Running A Calculation¶
Run DMFT.py from a calculation directory containing input.toml, para_com.dat, and the DFT inputs or outputs required by the selected backend.
Examples:
DMFT.py -dft vasp -dmft
DMFT.py -dft siesta -structurename SrVO3 -dmft
DMFT.py -dft qe -structurename SrVO3 -dmft
DMFT.py -dft qe -aiida -dmft -v
Use -hf instead of -dmft to run the Hartree-Fock path for the correlated orbitals. Use -restart to restart from the beginning. For SIESTA and QE, -structurename should match the seed name used by files such as <seed>.fdf, <seed>.scf.in, and Wannier90 outputs.
para_com.dat contains the MPI command for DMFTwDFT and the impurity solver, for example:
mpirun -np 16
If the DFT executable needs a different MPI command, place it in para_com_dft.dat; otherwise DMFTwDFT reuses para_com.dat.
SIESTA Notes¶
For SIESTA calculations, the calculation directory should contain input.toml, para_com.dat, optional para_com_dft.dat, <seed>.fdf, pseudopotential files such as .psf, and optionally an initial DFT_mu.out. For the bundled SrVO3 example, the seed is SrVO3, so the main SIESTA input is SrVO3.fdf and the command uses -structurename SrVO3.
The SIESTA .fdf file must request the Wannier90 files that DMFTwDFT needs. The historical SIESTA PDF lists the essential block:
Siesta2Wannier90.WriteMmn .true.
Siesta2Wannier90.WriteAmn .true.
Siesta2Wannier90.WriteEig .true.
Siesta2Wannier90.WriteUnk .false.
Siesta2Wannier90.NumberOfBands 28
Adjust Siesta2Wannier90.NumberOfBands for the material and energy window. The SrVO3 PDF example used 28 DFT bands and 14 Wannier bands for V d and O p states.
DMFTwDFT generates the Wannier90 input unless -nowin is supplied. For SIESTA workflows, it runs Wannier90 preprocessing to create <seed>.nnkp, runs SIESTA, then runs Wannier90 and the DMFT loop.
The -lowdin flag is available for the SIESTA Lowdin workflow:
DMFT.py -dft siesta -structurename SrVO3 -lowdin -dmft
The SIESTA PDF also describes charge self-consistency. The key idea is the same as the general library-mode formalism in Library Mode: replace the ordinary DFT contribution from bands inside the correlated Wannier window with a DMFT occupancy-matrix contribution, while keeping bands outside the window at their DFT occupancy.
The PDF’s subroutine_dmft test directory describes prototype files named test_dmft.F90, dmft.F90, and libdmft.a. In the current source tree, the library entry points are implemented in sources/src/dmft_lib.F90, and the bundled test is under examples/library_mode_test.
Output Files¶
The main runtime files are written inside the generated DMFT or HF directory.
INFO_ITER
: Main convergence table. Columns include outer iteration, DMFT iteration, lattice occupancy Nd_latt, impurity occupancy Nd_imp, lattice and impurity (Sigoo - Vdc), two total-energy estimates, and charge difference for charge-self-consistent runs.
INFO_KSUM
: DMFT k-sum information such as chemical potential, total electron count, occupancies, kinetic energy, and self-energy high-frequency terms.
INFO_DM
: Occupancy matrix information.
INFO_ENERGY
: DFT energy and DMFT energy corrections.
INFO_TIME
: Timing information.
INFO_DFT_loop
: DFT-loop summary for charge-self-consistent calculations.
G_loc.out
: Local Green’s function from the lattice k-sum.
Delta*.inp
: Hybridization functions passed to impurity problems.
sig.inp and sig.inp.<outer>.<dmft>
: Current and archived self-energy files on the imaginary axis.
To judge convergence, compare lattice and impurity quantities in INFO_ITER. In a converged DMFT loop, Nd_latt and Nd_imp should approach each other, and the lattice and impurity (Sigoo - Vdc) values should stabilize. In charge-self-consistent runs, also monitor the final charge-difference column.
Post-Processing¶
Run postDMFT.py inside the completed DMFT or HF directory.
Analytic continuation averages the last self-energy files and writes ac/Sig.out on the real axis:
postDMFT.py ac -siglistindx 4
Density-of-states calculations use the real-axis self-energy and write outputs under dos:
postDMFT.py dos -show
Band-structure calculations write outputs under bands:
postDMFT.py bands -plotplain
postDMFT.py bands -plotpartial -wo 4 5 6
postDMFT.py bands -sp -show
postDMFT.py bands -compare
For projected bands, -wo uses 1-based Wannier orbital indices. The ordering follows the atom order in the structure and the Wannier orbital order.
Legacy PDF Command Mapping¶
Some commands in the PDF manuals are old names or manual steps that are now wrapped by DMFT.py and postDMFT.py.
PDF-era item |
Current usage |
|---|---|
|
|
|
Usually handled by |
|
Usually launched by |
|
|
Manual |
|
Manual |
|
Manual |
|
The legacy scripts remain useful for debugging individual stages, but the documented workflow should use the current top-level commands first.