Interface with Wien2k¶
We assume that the user has obtained a self-consistent solution of the Kohn-Sham equations. We further have to require that the user is familiar with the main in/output files of Wien2k, and how to run the DFT code.
Conversion for the DMFT self-consistency cycle¶
First, we have to write the necessary quantities into a file that can be processed further by invoking in a shell the command
x lapw2 -almd
We note that any other flag for lapw2, such as -c or -so (for spin-orbit coupling) has to be added also to this line. This creates some files that we need for the Wannier orbital construction.
The orbital construction itself is done by the Fortran program
dmftproj. For an extensive manual to this program see
TutorialDmftproj.pdf
.
Here we will only describe the basic steps.
In the following, we use SrVO3 as an example to explain the
input file case.indmftpr
for dmftproj.
A full tutorial on SrVO3 is available in the SrVO3 tutorial.
3 ! Nsort
1 1 3 ! Mult(Nsort)
3 ! lmax
complex ! choice of angular harmonics
1 0 0 0 ! l included for each sort
0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0)
cubic ! choice of angular harmonics
1 1 2 0 ! l included for each sort
0 0 2 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0)
01 !
0 ! SO flag
complex ! choice of angular harmonics
1 1 0 0 ! l included for each sort
0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0)
-0.11 0.14
The first three lines give the number of inequivalent sites, their multiplicity (to be in accordance with the Wien2k struct file) and the maximum orbital quantum number \(l_{max}\). In our case our struct file contains the atoms in the order Sr, V, O.
Next we have to specify for each of the inequivalent sites, whether we want to treat their orbitals as correlated or not. This information is given by the following 3 to 5 lines:
- We specify which basis set is used (complex or cubic harmonics).
- The four numbers refer to s, p, d, and f electrons, resp. Putting 0 means doing nothing, putting 1 will calculate unnormalized projectors in compliance with the Wien2k definition. The important flag is 2, this means to include these electrons as correlated electrons, and calculate normalized Wannier functions for them. In the example above, you see that only for the vanadium d we set the flag to 2. If you want to do simply a DMFT calculation, then set everything to 0, except one flag 2 for the correlated electrons.
- In case you have a irrep splitting of the correlated shell, you can specify here how many irreps you have. You see that we put 2, since eg and t2g symmetries are irreps in this cubic case. If you don’t want to use this splitting, just put 0.
- (optional) If you specifies a number different from 0 in above line, you have to tell now, which of the irreps you want to be treated correlated. We want to t2g, and not the eg, so we set 0 for eg and 1 for t2g. Note that the example above is what you need in 99% of the cases when you want to treat only t2g electrons. For eg’s only (e.g. nickelates), you set 10 and 01 in this line.
- (optional) If you have specified a correlated shell for this atom, you have to tell if spin-orbit coupling should be taken into account. 0 means no, 1 is yes.
These lines have to be repeated for each inequivalent atom.
The last line gives the energy window, relative to the Fermi energy, that is used for the projective Wannier functions. Note that, in accordance with Wien2k, we give energies in Rydberg units!
After setting up the case.indmftpr
input file, you run:
dmftproj
Again, adding possible flags like -so for spin-orbit coupling. This program produces the following files (in the following, take case as the standard Wien2k place holder, to be replaced by the actual working directory name):
case.ctqmcout
andcase.symqmc
containing projector operators and symmetry operations for orthonormalized Wannier orbitals, respectively.case.parproj
andcase.sympar
containing projector operators and symmetry operations for uncorrelated states, respectively. These files are needed for projected density-of-states or spectral-function calculations in post-processing only.case.oubwin
needed for the charge density recalculation in the case of fully self-consistent DFT+DMFT run (see below).
Now we convert these files into an hdf5 file that can be used for the
DMFT calculations. For this purpose we
use the python module Wien2kConverter
. It is initialized as:
from triqs_dft_tools.converters.wien2k_converter import *
Converter = Wien2kConverter(filename = case)
The only necessary parameter to this construction is the parameter filename.
It has to be the root of the files produces by dmftproj. For our
example, the Wien2k naming convention is that all files have the
same name, but different extensions, case.*
. The constructor opens
an hdf5 archive, named case.h5
, where all relevant data will be
stored. For other parameters of the constructor please visit the
Converters section of the reference manual.
After initializing the interface module, we can now convert the input text files to the hdf5 archive by:
Converter.convert_dft_input()
This reads all the data, and stores it in the file case.h5
.
In this step, the files case.ctqmcout
and
case.symqmc
have to be present in the working directory.
After this step, all the necessary information for the DMFT loop is stored in the hdf5 archive, where the string variable Converter.hdf_filename gives the file name of the archive.
At this point you should use the method dos_wannier_basis
contained in the module SumkDFTTools
to check the density of
states of the Wannier orbitals (see Tools for analysis).
You have now everything for performing a DMFT calculation, and you can proceed with the section on single-shot DFT+DMFT calculations.
Data for post-processing¶
In case you want to do post-processing of your data using the module
SumkDFTTools
, some more files
have to be converted to the hdf5 archive. For instance, for
calculating the partial density of states or partial charges
consistent with the definition of Wien2k, you have to invoke:
Converter.convert_parproj_input()
This reads and converts the files case.parproj
and
case.sympar
.
If you want to plot band structures, one has to do the following. First, one has to do the Wien2k calculation on the given \(\mathbf{k}\)-path, and run dmftproj on that path:
x lapw1 -bandx lapw2 -band -almddmftproj -band
Again, maybe with the optional additional extra flags according to
Wien2k. Now we use a routine of the converter module allows to read
and convert the input for SumkDFTTools
:
Converter.convert_bands_input()
After having converted this input, you can further proceed with the Tools for analysis. For more options on the converter module, please have a look at the Converters section of the reference manual.
Data for transport calculations¶
For the transport calculations, the situation is a bit more involved, since we need also the optics package of Wien2k. Please look at the section on Transport calculations to see how to do the necessary steps, including the conversion.