Disclaimer:

Heavy calculations (~ 800 core hours): Current tutorial is best performed on an HPC facility.

1. OS with QE/W90 and cthyb: SrVO3 MIT

Hello and welcome to the first part of the tutorial for solid_dmft. Here we will guide to set up and run your first DMFT calculations.

To begin your DMFT journey we will immediately start a DMFT run on strontium vanadate (SVO). SVO is a member of a family of material known as complex perovskite oxides with 1 electron occupying the t2g manifold. Below, we show the band structure of the frontier (anti-bonding) t2g bands for SVO.

svobands

In these materials, the electrons sitting on the transition metal ions (V in this case) are fairly localized, and the fully delocalized picture of DFT is insufficient to describe their physics. DMFT accounts for the electron-electron interaction by providing a fully interacting many body correction to the DFT non-interacting problem.

If you want to generate the h5 archive svo.h5 yourself, all the necessary files are in the ./quantum_espresso_files/ folder. We used quantum espresso in this tutorial.


1. Starting out with DMFT

To start your first calculation run:

mpirun solid_dmft

Once the calculation is finished, inspect the /out/ folder: our file of interest for the moment will be observables_imp0.dat, open the file:

it |        mu |            G(beta/2) per orbital |               orbital occs up+down |impurity occ
 0 |  12.29775 | -0.10489   -0.10489     -0.10489 |  0.33366      0.33366      0.33366 |     1.00097
 1 |  12.29775 | -0.09467   -0.09488     -0.09529 |  0.36155      0.35073      0.36169 |     1.07397
 2 |  12.31989 | -0.08451   -0.08363     -0.08463 |  0.33581      0.34048      0.34488 |     1.02117
 3 |  12.29775 | -0.08282   -0.08296     -0.08254 |  0.32738      0.34572      0.34479 |     1.01789
 4 |  12.28973 | -0.08617   -0.08595     -0.08620 |  0.33546      0.33757      0.33192 |     1.00494
 5 |  12.28825 | -0.08410   -0.08458     -0.08510 |  0.33582      0.33402      0.33759 |     1.00743
 6 |  12.28486 | -0.08474   -0.08549     -0.08618 |  0.32276      0.33028      0.32760 |     0.98063
 7 |  12.29097 | -0.08172   -0.08220     -0.08118 |  0.32072      0.33046      0.33529 |     0.98647
 8 |  12.29497 | -0.08318   -0.08254     -0.08332 |  0.34075      0.32957      0.33089 |     1.00120

The meaning of the column names is the following:

  • it: number of the DMFT iteration

  • mu: value of the chemical potential

  • G(beta/2) per orbital: Green’s function evaluated at \(\tau=\beta/2\), this value is proportional to the projected density of states at the fermi level, the first objective of this tutorial would be to try and drive this value to 0

  • orbital occs up+down: occupations of the various states in the manifold

  • impurity occ: number of electrons in each site

2. Looking at the Metal-Insulator Transition

In the following steps we will try to drive the system towards a Mott-insulating state.

Inspect the script run_MIT_coarse.sh, we iterate the same type of calculation that was performed in the last step for a series of value of U {2-10} and J {0.0-1.0}.

Run the script, sit back and have a long coffee break, this is going to take a while (about 6 hours on 30 cores).

Once the run is finished run

python3 ./collect_results_coarse.py

The script will produce a heatmap image of the value of G(beta/2) for each pair of U and J. The darker area corresponds to an insulating state.

coarsegrid

Do you notice anything strange? (hint: look at the bottom right corner and check the output file observables_imp0.dat for U = 2 J=1.0. )

We have seen that for 1 electron per system U and J are competing against each other: larger J favor the metallic state. The coulomb integral U wants to repel neighbouring electrons while J would like to bring electrons together on one site,. When the latter component dominates the resulting phase is known as a charge disproportionated state which is also insulating. What is happening in the bottom right corner is that the J favors here charge disproportionation but the unit cell has a single site, therefore the system has trouble converging and oscillates between a high occupation and a low occupation state.

3. Refining the diagram

In order to get better resolution in terms of the diagram you can run the script run_MIT_fine.sh and plot the result with

python3 ./collect_results_fine.py

The result is also visible here:

finegrid

4. Plotting the spectral function

The spectral function in DMFT represents the local density of states of the impurity site. In order to plot it we need to use one of the scripts that implements the maximum entropy method ( Maxent ), while in the folder run (be aware that you need to substitute /path_to_solid_dmft/ with the path where you have installed solid_dmft) :

mpirun -n 30 python3 /path_to_solid_dmft/python/solid_dmft/postprocessing/maxent_gf_imp.py ./J0.0/U4/out/svo.h5

and plot the result by running in the docker container:

python3 read_spectral_function.py

Afunc

Take care to edit the values of J and U in the python file. What is happing to the spectral function (density of states) as one cranks U up?

5 Visualizing the MIT

We will now plot the spectral function at different U values for J = 0.0 eV:

Run the script run_maxent_scan.sh.

Then collect the data:

python3 read_spectral_function_transition.py

MIT