Quasi-particles and Self-energy within the Multipole Approximation (MPA)

From The Yambo Project
Jump to navigation Jump to search

In this tutorial you will learn how to use the Multipole Approximation (MPA) for the frequency description in GW as an alternative to the plasmon-pole approximation (PPA) and numerical full frequency (FF) methods.

Prerequisites

  • yambo executable (version 5.2)
  • gnuplot, for making plots
  • Having completed the following tutorials:

First steps: a walk through from DFT to optical properties

How to obtain the quasi-particle band structure of a bulk material: h-BN

Brief introduction

The multipole approximation (MPA) is a technique to address the frequency convolution in the GW self-energy analytically. It can be thought as a generalization of the plasmon-pole approximation (PPA) able to provide full-frequency accuracy at a much lower computational cost than other methods like numerical full frequency integrations on the real axis (FF-RA).

The main concepts to be familiarized with include the design of samplings in the complex frequency plane, the methods to solve the non-linear MPA interpolation, the treatment of unfulfilled modes, and how to run calculations to compute quasi-particle energies and the frequency dependence of the self-energy and the spectral function.

A more detailed description can be found in the papers presenting the MPA method[1], [2].


How to generate inputs

Setting a G0W0 calculation with MPA can be done in a similar way to PPA or FF-RA by using the following command

$ yambo -gw0 m

You will recognize the type of calculation in the first lines of the generated input:

gw0                                       # [R] GW approximation
mpa                                       # [R][Xm] Multi Pole Approximation for the Screened Interaction

It can be combined with other command as well. Let's define for instance an input with a specific name for an MPA calculation setting the treatment of the Coulomb potential and verbosity for parallelization:

$ yambo -F mpa_rimV_par.in -gw0 m -r -V par

Let's now generate the following inputs for PPA, MPA and FF-RA calculations:

$ yambo -F ppa.in -gw0 p
$ yambo -F mpa.in -gw0 m
$ yambo -F ffr.in -gw0 r

We can compare the variables corresponding to the different descriptions of the frequency dependence. You may be familiar with PPA from previous tutorials. In this case the polarizability operator, from where W is computed, is numerically evaluated in two frequencies, z = 0, and a pure imaginary frequency PPAPntXp set by default to 1 Ha, from where the parameters of the plasmon pole model are interpolated.

In the full frequency case, the polarizability is evaluated on a grid of frequencies along the real axis. The variable ETStpsXd set by default to 100 define the number of frequency points of the grid, while the variable DmRngeXd corresponds to a damping parameter. As described in the tutorials for optical calculations, it is also possible to specify the energy range along the real frequency axis by setting the variable EnRngeXd, otherwise it is automatically set to the largest energy transition.

At variance with PPA and FF-RA, MPA uses a sampling in the complex frequency plane. You will find similar variables in the MPA input to control the sampling. In this case, ETStpsXm define the number of frequency points, which is equivalent to twice the number of poles used in the MPA model, so it should be set to an even number. EnRngeXm is the energy range along the real frequency axis, while ImRngeXm is the energy range along the imaginary axis, which is set by default to 1 Ha similarly to the PPA case. In case the so called "double parallel sampling" is used, DmRngeXm specifies the imaginary shifts of the sampling branch closer to the real frequency axis: the first shift corresponds to the first point only while the second shift to the rest of the points.

Exercise 1: Run MPA and compare with PPA and FF-RA calculations

Since we are only interested in the different frequency description with PPA, MPA and FF-RA, we can fix the unrelated parameters to the default or to a reasonable value. Let's take for example the PPA input and set

EXXRLvcs=  3187                    RL    # [XX] Exchange    RL components
VXCRLvcs=  3187                    RL    # [XC] XCpotential RL components
% BndsRnXp
   1 | 100 |                             # [Xm] Polarization function bands
%
NGsBlkXp= 3000                    mRy    # [Xm] Response block size
% LongDrXp
 1.000000 | 1.000000 | 1.000000 |        # [Xm] [cc] Electric Field
%
% GbndRnge
   1 | 100 |                             # [GW] G[W] bands range
%
DysSolver= "n"                           # [GW] Dyson Equation solver ("n","s","g")
%QPkrange                                # [GW] QP generalized Kpoint/Band indices
7|7|8|9|

Notice that similarly to other tutorials on bulk hBN the range of quasi-particles corresponds to the direct gap of the system, i.e. bands 8 and 9 at the k-point number 7 in the QPkrange variable. We set the same values for the analogous variables in the MPA and FF-RA inputs: BndsRnXm = BndsRnXd = BndsRnXp and LongDrXm = LongDrXd = LongDrXp. Let's now set the variables related to frequency.

In the case of PPA input set

PPAPntXp= 1.00000                  Ha    # [Xp] PPA imaginary energy

or leave the default value in eV.

In the FF_RA input set

% DmRngeXd
 0.200000 | 0.200000 |             eV    # [Xd] Damping range
%
ETStpsXd= 400                            # [Xd] Total Energy steps

By varying the number of frequencies in intervals of 50 you can check the convergence of this parameter set to 400.

In the MPA input set

EnSampXm= "2l"                           # [Xm] Frequency sampling in the complex plane ("1l" one line, "2l" two lines)
EnGridXm= "lP"                           # [Xm] Partition along the real axis ("ho" homogeneous, "lP" linear, "qP" quadratic, "cP" cubic)
% EnRngeXm
  0.00000 | 4.00000 |              Ha    # [Xm] Energy range
%
% ImRngeXm
  1.00000 | 1.00000 |              Ha    # [Xm] Imaginary range
%
% DmRngeXm
  0.00000 | 0.10000 |              Ha    # [Xm] Damping range
%
ETStpsXm=  16                            # [Xm] Total Energy steps
IntSolXm= "PT"                           # [Xm] MPA interpolation solver ("LA" linear algebra, "PT" Pade-Thiele)
#mpERdb                                  # [Xm] Write to disk MPA poles and residues

Minimal explanation of the MPA input variables:

The value of the EnSampXm variable corresponds to two lines defining a double parallel sampling, the EnGridXm variable defines the type of distribution of points along the real frequency axis, we are using a linear partition in power of 2 as the default value.

The maximum of the real frequency range, EnRngeXm, has been set to 4 Ha, a value slightly below the most energetic transition with 100 bands, which has a value of 123.8 eV (4.55 Ha). You can check that the results are not much sensitive to varying the range from the energy of the larger transition to half its value. The imaginary component ImRngeXm has been set to the same default value of 1 Ha used in the PPA input, while the shifts DmRngeXm have been set to their defaults too, 0 and 0.1 Ha.

The variable ETStpsXm is set to 16 frequency points corresponding to a model with 8 poles, as commented above. You can try to use a different number of poles and check that the selected value is reasonable. Be aware that the parameters controlling the MPA sampling need to be chosen with care according to the specific system and that they can't be converged with standard procedures, for example, a larger number of poles does not always lead to a more accurate result.

The input variable IntSolXm selects between the two possible solvers for the interpolation of the MPA model. Mathematically both are equivalent, although due to the non-linear nature of the system of equations, numerical instabilities may arise specially for a large number of poles, then the Pade-Thiele solver is more stable, but the one based on linear algebra is more flexible and it is use only in rare cases. In practice, for MPA it is recommended to compile Yambo in double precision and avoid using more than 20 poles. Rather than increasing the number of poles, it is recommended to try tuning better the other parameters of the sampling. Last, it is possible to store an additional database with the interpolated poles and residues of the MPA model by adding the mpERdb label, which is left inactivated for now.

Let's now run the calculations and compare the results

$ yambo -F ppa.in -J pp1_i1Ha_x3Ry_b100
$ yambo -F ffr.in -J ff400_d0.2eV_x3Ry_b100
$ yambo -F mpa.in -J mp8_r0-4i1-1d0-0.1Ha_x3Ry_b100

o-pp1_i1Ha_x3Ry_b100.qp:

K-point            Band               Eo [eV]            E-Eo [eV]          Sc|Eo [eV]

7                  8                -0.411876          -0.332210           2.632103
7                  9                 3.877976           1.047207          -3.890988

o-ff400_d0.2eV_x3Ry_b100.qp:

K-point            Band               Eo [eV]            E-Eo [eV]          Sc|Eo [eV]

7                  8                -0.411876          -0.347396           2.599905
7                  9                 3.877976           1.037291          -3.873562

o-mp8_r0-4i1-1d0-0.1Ha_x3Ry_b100.qp:

K-point            Band               Eo [eV]            E-Eo [eV]          Sc|Eo [eV]

7                  8                -0.411876          -0.349764           2.598567
7                  9                 3.877976           1.038180          -3.875556

As can be noticed, the results corresponding to MPA with 8 poles are practically on top of the FF-RA results. The difference between the quasi-particle energies computed with MPA and FF-RA is around 2 meV, while in the case of PPA is around 15 meV. This differences are small since the response of this system is well described by a single pole, however, the difference between PPA and full frequency is expected to increase by an order of magnitude with a larger number of bands and polarizability cutoff.

Exercise 2: Run self-energy calculations

So far we have computed quasi-particles with the Newton method, this means that we are evaluating the self-energy in two frequency points used to solve the linearized quasi-particle equation. Now we will plot the whole frequency dependence of the self-energy and the spectral function.

Let's first make a copy of the input files to keep the previous modifications

$ cp ppa.in ppa_SG.in
$ cp mpa.in mpa_SG.in
$ cp ffr.in ffr_SG.in

Then we regenerate the inputs specifying the Dyson solver to be the one corresponding the Green's function

$ yambo -F ppa.in -gw0 p -g g
$ yambo -F mpa.in -gw0 m -g g
$ yambo -F ffr.in -gw0 r -g g

You will now see and set the following variables

DysSolver= "g"                       # [GW] Dyson Equation solver ("n","s","g")
GEnSteps= 200                        # [GW] Green`s Function (GF) energy steps
% GEnRnge
-40.00000 | 40.00000 |         eV    # [GW] GF energy range
%
% GDmRnge
 0.100000 | 0.100000 |         eV    # [GW] G_gw damping range

We can use the same job identifiers to run the calculations

$ yambo -F ppa_SG.in -J pp1_i1Ha_x3Ry_b100
$ yambo -F ffr_SG.in -J ff400_d0.2eV_x3Ry_b100
$ yambo -F mpa_SG.in -J mp8_r0-4i1-1d0-0.1Ha_x3Ry_b100

Let's plot the results

$ gnuplot

Self-energy:

gnuplot> p "o-pp1_i1Ha_x3Ry_b100.G_Sc_band_008_k_007" u 1:5 w lp, 
           "o-mp8_r0-4i1-1d0-0.1Ha_x3Ry_b100.G_Sc_band_008_k_007" u 1:5 w lp, 
           "o-ff400_d0.2eV_x3Ry_b100.G_Sc_band_008_k_007" u 1:5 w lp

Spectral function:

gnuplot> p "o-pp1_i1Ha_x3Ry_b100.G_Sc_band_008_k_007" u 1:4 w lp, 
           "o-mp8_r0-4i1-1d0-0.1Ha_x3Ry_b100.G_Sc_band_008_k_007" u 1:4 w lp, 
           "o-ff400_d0.2eV_x3Ry_b100.G_Sc_band_008_k_007" u 1:4 w lp

The results for both quasi-particles will be similar to these:

PPA vs MPA vs. FF-RA: self-energy and spectral function

Notice that PPA is only accurate in a zone of the tail of the self-energy corresponding to the quasi-particle peak, while MPA captures all the features in the whole frequency range, including the satellite structures.

Exercise 3: Count unfulfilled modes

We can now examine one of the problems of PPA that concerns the fulfillment of a physical constraint for the poles of W. As an example, for the diagonal elements, W evaluated on the imaginary axis should be real and therefore unfulfilled modes are those for which the interpolated PPA pole is instead imaginary. Since the current implementation of Yambo it is possible to check in the report file some information about unfulfilled modes for each q point.

Let's open the file r-pp1_i1Ha_x3Ry_b100_HF_and_locXC_gw0_em1d_ppa and check the following lines corresponding to the first q point:

  Current Q-pt index             :  1
  :: PP condition fails/total    :  0.216216
  :: Time ordering fails/rest    :  0.500466
  :: Mean rel dev of PP cond     :  0.216203
  Current Q-pt index             :  2
  ...

In the Exercise 1 we have set the cutoff energy for the size of the polarizability matrix to 3000 mRy, which corresponds to matrices of dimension 37. In the report we can see that the 22% of these matrix elements are identified as unfulfilled modes. In the PPA case the energy of the failing poles is set to a fixed value of 1 Ha, which produces a mean relative standard deviation of 0.22. There is a third variable accounting for the percentage of fulfilled modes with a wrong time ordering. This variable is usually around 50%, since PPA drops the imaginary part of the poles and does't really account for their time ordering.

The condition controlling the fulfillment of the constraint has been generalized to a multipole expression for the MPA case, which also forces all the poles to be compliant with the time ordering. In order to count the unfulfilled modes we need to run the MPA calculation switching on the mpERdb label in the input file. Let's also change the number of poles in the mpa.in file:

ETStpsXm=  4                             # [Xm] Total Energy steps
mpERdb                                   # [Xm] Write to disk MPA poles and residues

and then

$ yambo -F mpa.in -J mp2_r0-4i1-1d0-0.1Ha_x3Ry_b100

Now we can check the report file r-mp2_r0-4i1-1d0-0.1Ha_x3Ry_b100_HF_and_locXC_gw0_em1d_ppa

  :: Current Q-pt index     : 1
  :: Number of poles  : 2
  :: PP cond fix/tot      :  0.081406
  :: Mean np reduction    :  0.000000
  :: Mean Xm rel dev      :  0.079866
  ...

You can see that already with 2 poles the number of unfulfilled modes is reduced to 8% and the mean relative deviation to 0.08. In the cases with more than one pole the generalized condition may result in the reduction of the number of poles for a specific matrix element, there is an additional variable in the report accounting for the mean pole reduction in the given matrix.

Since MPA uses an improved condition to fix the nonphysical poles, we can also compare the case of MPA with a single pole with PPA. In order to do so we need to modify the sampling to make it consistent to the one used in PPA. Let's make a copy of the input:

$ cp mpa.in mpa1.in

and set the sampling in mpa1.in as follows:

% EnRngeXm
  0.00000 | 0.00000 |              Ha    # [Xm] Energy range
%
% ImRngeXm
  0.00000 | 1.00000 |              Ha    # [Xm] Imaginary range
%
ETStpsXm=  2                             # [Xm] Total Energy steps

Then run the calculation and check the output results

$ yambo -F mpa1.in -J mp1_r0-0i0-1Ha_x3Ry_b100

You will find that in cases like this, where the treatment of the unfulfilled modes is important, MPA with a single pole already improves the PPA results:

K-point            Band               Eo [eV]            E-Eo [eV]          Sc|Eo [eV]
7                  8                -0.411876          -0.346001           2.615150
7                  9                 3.877976           1.056318          -3.880004


References

  1. D. A. Leon, C. Cardoso, T. Chiarotti, D. Varsano, E. Molinari, and A. Ferretti, Frequency dependence in GW made simple using a multipole approximation Phys. Rev. B 104, 115157 (2021)
  2. D. A. Leon, A. Ferretti, D. Varsano, E. Molinari, and C. Cardoso, Efficient full frequency GW for metals using a multipole approach for the dielectric screening Phys. Rev. B 107, 155130 (2023)