mirror of
https://github.com/triqs/dft_tools
synced 2024-12-25 13:53:40 +01:00
1c29776727
* Committing missing files of last commit * Correcting typos * Modifications according to issue #56
113 lines
4.7 KiB
ReStructuredText
113 lines
4.7 KiB
ReStructuredText
.. _structure:
|
|
|
|
Structure of :program:`DFTTools`
|
|
================================
|
|
|
|
.. image:: images/structure.png
|
|
:width: 700
|
|
:align: center
|
|
|
|
The central part of :program:`DFTTools`, which is performing the
|
|
steps for the DMFT self-consistency cycle, is written following the
|
|
same philosophy as the :ref:`TRIQS <triqslibs:welcome>` toolbox. At
|
|
the user level, easy-to-use python modules are provided that allow to
|
|
write simple and short scripts performing the actual calculation.
|
|
The usage of those modules is presented in the user guide of this
|
|
:ref:`documentation`. Before considering the user guide, we suggest
|
|
to read the following introduction on the general structure of
|
|
the :program:`DFTTools` package.
|
|
|
|
The interface layer
|
|
-------------------
|
|
|
|
Since the input for this DMFT part has to be provided by DMFT
|
|
calculations, there needs to be another layer that connects the
|
|
python-based modules with the DFT output. Naturally, this layer
|
|
depends on the DFT package at hand. At the moment, there is an
|
|
interface to the Wien2k band structure package, and a very light
|
|
interface that can be used in a more general setup. Note that this
|
|
light interface layer **does not** allow full charge self-consistent
|
|
calculations.
|
|
|
|
Wien2k interface
|
|
""""""""""""""""
|
|
|
|
This interface layer consists of two parts. First, the output from Wien2k
|
|
is taken, and localized Wannier orbitals are constructed. This is done
|
|
by the FORTRAN program :program:`dmftproj`. The second part consist in
|
|
the conversion of the :program:`dmftproj` into the hdf5 file
|
|
format to be used for the DMFT calculation. This step is done by a
|
|
python routine called :class:`Wien2kConverter`, that reads the text output and
|
|
creates the hdf5 input file with the necessary ingredients. Quite
|
|
naturally, :program:`DFTTools` will adopt this converter concept also for future
|
|
developments for other DFT packages.
|
|
|
|
General interface
|
|
"""""""""""""""""
|
|
|
|
In addition to the specialized Wien2k interface, :program:`DFTTools`
|
|
provides also a very light-weight general interface. It basically
|
|
consists of a very simple :class:`HkConverter`. As input it requires a
|
|
Hamiltonian matrix :math:`H_{mn}(\mathbf{k})` written already in
|
|
localized-orbital indices :math:`m,n`, on a :math:`\mathbf{k}`-point
|
|
grid covering the Brillouin zone, and just a few other informations
|
|
like total number of electrons, how many correlated atoms in the unit
|
|
cell, and so on. It converts this Hamiltonian into a hdf5 format and
|
|
sets some variables to standard values, such that it can be used with
|
|
the python modules performing the DMFT calculation. How the
|
|
Hamiltonian matrix :math:`H_{mn}(\mathbf{k})` is actually calculated,
|
|
is **not** part of this interface.
|
|
|
|
The DMFT calculation
|
|
--------------------
|
|
|
|
As mentioned above, there are a few python routines that allow to
|
|
perform the multi-band DMFT calculation in the context of real
|
|
materials. The major part is contained in the module
|
|
:class:`SumkDFT`. It contains routines to
|
|
|
|
* calculate local Greens functions
|
|
* do the upfolding and downfolding from Bloch bands to Wannier
|
|
orbitals
|
|
* calculate the double-counting correction
|
|
* calculate the chemical potential in order to get the electron count right
|
|
* other things like determining the structure of the local
|
|
Hamiltonian, rotating from local to global coordinate systems, etc.
|
|
|
|
At the user level, all these routines can be used to construct
|
|
situation- and problem-dependent DMFT calculations in a very efficient
|
|
way.
|
|
|
|
Full charge self consistency
|
|
----------------------------
|
|
|
|
Using the Wien2k interface, one can perform full charge
|
|
self-consistent calculations. :class:`SumkDFT` provides routines to
|
|
calculate the correlated density matrix and stores it in a format that
|
|
can be read in by the :program:`lapw2` part of the Wien2k
|
|
package. Changing a one-shot calculation in a full charge
|
|
self-consistent one is only a couple of additional lines in the code!
|
|
|
|
Post-processing
|
|
---------------
|
|
|
|
The main result of DMFT calculation is the interacting Greens function
|
|
and the Self energy. However, one is normally interested in
|
|
quantities like band structure, density of states, or transport
|
|
properties. In order to calculate these things, :program:`DFTTools`
|
|
provides the post-processing modules :class:`SumkDFTTools`. It
|
|
contains routines to calculate
|
|
|
|
* (projected) density of states
|
|
* partial charges
|
|
* correlated band structures (*spaghettis*)
|
|
* transport properties such as optical conductivity, resistivity,
|
|
or thermopower.
|
|
|
|
.. warning::
|
|
At the moment neither :ref:`TRIQS<triqslibs:welcome>` nor :program:`DFTTools`
|
|
provides Maximum Entropy routines! You can use the Pade
|
|
approximation implemented in the :ref:`TRIQS <triqslibs:welcome>` library, or you use your own
|
|
home-made Maximum Entropy code to do the analytic continuation from
|
|
Matsubara to the real-frequency axis.
|