The methods implemented in Spex distinguish themselves from conventional DFT with local or semilocal functionals by the fact that individual two-particle scattering processes are described explicitly. In such processes, the state of an incoming particle and the state that it scatters into form products of wave functions. Many of the physical quantities, such as the Coulomb interaction, the polarization function, and the dielectric function, become matrices when represented in a suitable product basis. In the context of the FLAPW method, the mixed product basis is an optimal choice. It consists of two separate sets of functions that are defined only in one of the spatial regions, while being zero in the other, the first is defined by products of the LAPW MT functions and the second by interstitial plane waves. (The products of plane waves are plane waves again.) The corresponding parameters are defined in the section ``MBASIS`` of the input file.

...

...

@@ -37,8 +38,10 @@ If :math:`{N}` is the number of LAPW basis functions, one would naively expect t

| | | | :math:`Bohr^{-1}` for the product plane waves. |

The MT functions are constructed from the products :math:`{u_{lp}^a(r)Y_{lm}(\hat{\mathbf{r}})u_{l'p'}^a(r)Y_{l'm'}(\hat{\mathbf{r}})}`. (Obviously, the atom index :math:`{a}` must be indentical.) The product of spherical harmonics exands into a linear combination of :math:`{Y_{LM}(\hat{\mathbf{r}})}` with :math:`{L=|l-l'|,...,l+l'}` and :math:`{|M|\le L}`. In principle, this leads to a cutoff of :math:`{2l_\mathrm{max}}` for the products, but, as with the plane waves, one can afford to use a much smaller cutoff parameter in practice. We use :math:`{L_\mathrm{max}=l_\mathrm{max}/2}` as the default. The corresponding keyword in the input file is called ``LCUT``.

(**) The MT part of the projections can be accelerated as well with the keywords ``LCUT`` and ``MTTHR`` in the section ``WFPROD``. (Note the other unrelated [[#LCUT|``LCUT``]] keyword in ``MBASIS``.) The first can be used to restrict the l cutoff of the wave functions (only for the projections), one l cutoff for each atom type. The second is a threshold value below which wave-function coefficients are neglected. By default, the two options are unused.

(**) The MT part of the projections can be accelerated as well with the keywords ``LCUT`` and ``MTTHR`` in the section ``WFPROD``. (Note the other unrelated :ref:`lcut` keyword in ``MBASIS``.) The first can be used to restrict the l cutoff of the wave functions (only for the projections), one l cutoff for each atom type. The second is a threshold value below which wave-function coefficients are neglected. By default, the two options are unused.

MINCPW (MBASIS)

----------------

(**) The keyword ``MINCPW`` modifies the plane-wave wave-function coefficients such that their absolute values become as small as possible. This reduces the error in the evaluation of the wave-function products arising from the finite G cutoff and leads to better convergence with respect to ``GCUT`` and smoother band structures, when ``APPROXPW`` is used. The coefficients can be modified, because the set of IPWs is overcomplete. If set, the eigenvectors of the overlap matrix with the ``n`` smallest eigenvalues are used for this modification. Note that it only makes sense to use this together with ``APPROXPW``.

Each Spex run needs a job definition, which defines what Spex should do, e.g., ``JOB GW 1:(1-5)`` for a ``GW`` calculation of the specified set of bands. The available jobs are

...

...

@@ -50,6 +52,8 @@ Details of these jobs are explained in subsequent sections. The job definition m

BZ

-----

.. _wrtkpt:

WRTKPT

-------

There are only two keywords that may not be omitted from the input file. The first is ``JOB``, the second ``BZ``, which defines the k-point set for the sampling of the Brillouin zone. The keyword requires four integer arguments, BZ l m n, defining an lxmxn k-point set. If the keyword ``WRTKPT`` is set (or, alternatively, with the command line option ``spex -w``), Spex uses the ``BZ`` definition to construct the irreducible wedge of the k-point set and writes the respective list of k points to a file, which is then read by the DFT code.

...

...

@@ -77,6 +81,8 @@ Input data

===========

Spex needs data from a previous self-consistent solution of a mean-field system (e.g., KS-DFT). Several keywords can be used to analyze, check, and modify the input data.

.. _nband:

NBAND

-----

The Green function involves a summation over electronic bands, as do the polarization function and the self-energy. The convergence with respect to the number of bands is a very important aspect in calculations based on many-body perturbation theory. The keyword NBAND n sets the number of bands to n. Obviously, n must not be larger than the number of bands provided by the input data. It should be noted that the actual number of bands can differ from n and also from k point to k point because Spex makes sure that degenerate subspaces are not cut in order to avoid symmetry breaking. If n is a real number (i.e., if it contains a decimal point: 3.0), it is interpreted as the maximal band energy. Then, all bands up to this energy are included. This is helpful if one wants to use a single parameter for calculations with differently sized unit cells. For example, when the unit cell doubles, one would have to include twice as many bands to reach the same accuracy, while the maximal band energy practically remains unchanged. If NBAND is unset, all available bands are used.

@@ -47,6 +47,8 @@ An example for a section in the input file is

.. note:: The keywords are detailed in the coming chapters. If a keyword belongs to a section, the section's name is specified as well, for example, ``CONTINUE (SENERGY)``.

.. _spex.out:

Output files

++++++++++++

The main output file of a Spex calculation is written directly to standard output (stdout). Errors, warnings, and (additional) info(rmation) are written to standard error (stderr). Errors stop the program run. Errors, warnings, and infos are of the form::

@@ -28,8 +28,10 @@ For the first and third step consult the manual of your DFT program. (Click `her

KPT X=[0,0,1] L=1/2*[1,1,1]

JOB GW 1:(1,2,5) X:(1,3,5) L:(1-3,5)

.. note:: Refer to the chapter :ref:`keyword_reference` for a full list of available keywords

For the second step only the lines beginning with ``BZ`` and ``WRTKPT`` are necessary. The line ``BZ 4 4 4`` defines a 4x4x4 k-point set, and the keyword ``WRTKPT`` tells Spex to write the (irreducible) k-points to a file (``kpts`` for Fleur) and stop.

For the fourth step you must remove (or comment out) the keyword ``WRTKPT``. Now all other parameters are needed. The results are written to standard output and should be piped to a file. As long as you do not change the k-point set, the first three steps need not be repeated for a new run of Spex.

For the fourth step you must remove (or comment out) the keyword ``WRTKPT``. Now all other parameters are needed. The results are written to standard output and should be piped to a :ref:`spex.out` file. As long as you do not change the k-point set, the first three steps need not be repeated for a new run of Spex.

.. note:: As an alternative to ``WRTKPT``, the command line option -w can be used (``spex -w``). It sets the keyword ``WRTKPT`` automatically.

(``ITERATE opt e``): Constructs a (``opt=NR``: non-relativistic, ``opt=SR``: scalar-relativistic, ``opt=FR``: fully relativistic, i.e., including SOC) LAPW(+LO) Hamiltonian from the converged DFT potential and calculates wave functions and energies from it, which are then used in the calculation. This spares you the last DFT run. The parameter ``e`` is the lower energy bound for the electron states. The calculation is fairly slow. (Default none)

``JOB job1 job2 ...``: Defines what Spex should do. Consult the [[Spex_Tutorial|tutorial]] for details.

``JOB job1 job2 ...``: Defines what Spex should do. Consult the :ref:`tutorials` for details.

``KPT label1 label2 ...``: Defines labels (single characters) for k points. Consult the [[Spex_Tutorial|tutorial]] for details. (Default none)

``KPT label1 label2 ...``: Defines labels (single characters) for k points. Consult the :ref:`tutorials` for details. (Default none)

``KPTPATH (A,B,C,...)``: Comma-separated list of k points that defines a k-point path. Spex automatically determines all k points (according to the ``BZ`` definition) that lie on the path. The path can be used (e.g., in the ``JOB`` definition) with ``PATH``. If Wannier functions are defined, Spex performs a Wannier interpolation along this path. (default none)

...

...

@@ -61,7 +61,7 @@ Global Keywords

``STOREIBZ``: Wave functions are only stored in the IBZ rather than in the full BZ. This decreases the memory demand considerably but slows down the calculation somewhat because wave functions must be regenerated when needed. (Default false)

``WRITE q1 q2 ...``: Tells Spex to write the head element of the specified quantities ``q1/2=`` ``SUSCEP``, ``DIELEC`` or ``SCREEN`` to a file. Optionally a job number can be specified in brackets, as in ``WRITE SUSCEP(2)``. If one of these quantities are explicitly defined in the job definition, they are automatically written to files. With ``q1=INFO``, Spex writes preliminary results to several output files. Consult the [[Spex_Tutorial|tutorial]] for details. (Default none)

``WRITE q1 q2 ...``: Tells Spex to write the head element of the specified quantities ``q1/2=`` ``SUSCEP``, ``DIELEC`` or ``SCREEN`` to a file. Optionally a job number can be specified in brackets, as in ``WRITE SUSCEP(2)``. If one of these quantities are explicitly defined in the job definition, they are automatically written to files. With ``q1=INFO``, Spex writes preliminary results to several output files. Consult the :ref:`tutorials` for details. (Default none)

``WRTKPT``: Tells Spex to write out the k-point set and exit. (Default false)

...

...

@@ -78,9 +78,9 @@ Section ``MBASIS``

``NOAPW``: Switches off construction of "product APWs", which are continuous at the MT sphere boundary. (Default false)

``OPTIMIZE``: Optimize mixed basis for correlation self-energy. Consult the [[Spex_Tutorial|tutorial]] for details. (Default none)

``OPTIMIZE``: Optimize mixed basis for correlation self-energy. Consult the :ref:`tutorials` for details. (Default none)

``SELECT l1,l3,lo1;l2,l4,lo2``: Selection of the MT radial functions from which the mixed basis is constructed. Consult the [[Spex_Tutorial|tutorial]] for details.

``SELECT l1,l3,lo1;l2,l4,lo2``: Selection of the MT radial functions from which the mixed basis is constructed. Consult the :ref:`tutorials` for details.

``TOL t``: Tolerance value for the removal of linear dependencies from the MT part of the mixed basis. (Default 0.0001)

The ''GW'' approach has become a routine method to calculate quasiparticle spectra from first principles. It is based on many-body perturbation theory, in which the Dyson equation (here in simplified notation)

...

...

@@ -21,11 +23,15 @@ which has been shown to yield accurate band structures for a wide range of mater

with the random-phase approximation for the polarization function :math:`{P}`

where :math:`{\phi_{n\mathbf{k}}(\mathbf{r})}` and :math:`{\epsilon_{n\mathbf{k}}}` are the eigenfunctions and eigenvalues, respectively, of the mean-field system. Here, a natural choice is to employ the solution of the KS equations

...

...

@@ -33,17 +39,23 @@ where :math:`{\phi_{n\mathbf{k}}(\mathbf{r})}` and :math:`{\epsilon_{n\mathbf{k}

often with the local-density approximation (LDA) for the exchange-correlation potential. In this respect, one says that LDA is the ''starting point'' for the ''GW'' calculation. Other starting points are generalized gradient approximation (GGA), LDA+''U'', hybrid functionals, Hartree-Fock, QSGW, et cetera. The explicit form of :math:`{G_0}` enables us to perform the frequency integration in [[#eq:P|:math:`{P}`]], which yields

with the (non-orthonormal) quasiparticle wavefunctions and (complex-valued) quasiparticle energies. It can be shown that the interacting Green function takes the same form as [[#eq:G0|:math:`{G_0}`]] (Lehmann representation) if the eigenfunctions and eigenvalues are replaced by the latter. The fact that this equation of motion is formally similar to the KS equation motivates to use perturbation theory of first order and write the quasiparticle energies as

with the renormalization constant :math:`{Z_{n\mathbf{k}}=[1-\partial\Sigma^{\mathrm{xc}}/\partial\omega(\epsilon_{n\mathbf{k}})]^{-1}}`. Both expressions can be taken to evaluate the quasiparticle energy, the first one is a non-linear equation in :math:`{E_{n\mathbf{k}}}` and requires an iterative solution. We thus have three ways to calculate the quasiparticle energies: (a) by solving the full [[#eq:qpeq|quasiparticle equation]], (b) with the [[#eq:qppert|non-linear equation]], and (c) using the [[#eq:qppert|linearized solution]]. The mathematical complexity, the computational cost, and the accuracy decreases in this order. For example, solution (a) requires the full self-energy matrix (i.e., including the off-diagonal elements) to be evaluated. Once the full matrix :math:`{\Sigma^\mathrm{xc}_{\mathbf{k},nn'}(\omega)}` is known, one can proceed to perform a self-consistent calculation within the QSGW approach. In this approach, the self-energy matrix is ''hermitianized'' and made frequency independent. This self-energy can then be used to replace :math:`{v^\mathrm{xc}}` in the KS equation, defining a new mean-field system. A self-consistent solution of this mean-field system (using a DFT code) is then employed as a new starting point and so on until self-consistency in the quasiparticle energies is achieved.