Spectral functions for LSCO

This tutorial explains how to generate densities-of-states and k-resolved spectral functions A(k,ω)A(\mathbf{k},\omega) from a local dynamical self-energies Σ(ω)\Sigma(\omega) generated by DFMT.

It has close similarities to generating spectral functions from dynamical self-energies Σ(k,ω)\Sigma(\mathbf{k},\omega) generated by the GW code; see for example this tutorial.

Table of Contents

Command summary

The following sequence generates “interacting energy bands” along symmetry lines as defined in syml.lscoq.

lmfdmft lscoq --rs=1,0 --ldadc=82.2 -job=1 --pade~nw=121~window=-4/13.606,4/13.606~icut=30,75
lmchk lscoq | grep -A 3 Qlat | tail -3 | awk '{print $4, $5, $6}' > qlat
~/lm/startup/symlinepoints -qlat=qlat -nk=101 syml.lscoq > syml2.lscoq
lmfdmft lscoq -vnkabc=8 --ldadc=82.2 --job=1 --gprt~band,fn=syml2~rdsigr=sig2~mode=19 --pr45
lmfgws  lscoq '--sfuned~units eV~readsek@readef@irrmesh@minmax@ib=30:38~eps 0.02~se band@fn=syml2 nw=2 isp=1 range=-4,4'
plbnds -sp~atop=10~window=-4,4 spq.lscoq ; gnuplot gnu.plt ; open spf.ps

The following sequence generates “spectrum DOS” (the k integrated spectral function)

lmfdmft lscoq -vnkabc=8 --ldadc=82.2 --job=1 --gprt~rdsigr=sig2~mode=19
lmfgws  lscoq -vnkgw=8 '--sfuned~units eV~readsek@readef@ib=30:38~eps 0.02~dos isp=1 range=-4,4 getev=12 nw=4~savesea~q'

Note: the main part of both sequences are done automatically by invoking ~/lm/dmft/test/test.dmft lscoq 2


This tutorial works with paramagnetic LaCuO4. QSGW code has no CPA-like capability (in contrast to DMFT, which may be thought of as a dynamical generalization of the Coherent Potential Approximation). At the GW level the material must be treated either as an ordered antiferromagnet, in which case it predicts LaCuO4 to be an insulator with a gap of ~4 eV, or nonmagnetically, in which case it predicts LaCuO4 to be a metal.

Experimentally, LaCuO4 is an insulator with an optical gap slightly less than 2 eV. Both LDA+DMFT and QSGW+DMFT yield an insulator in the paramagnetic state: the x2y2x^2{-}y^2 orbital (which in the nonmagnetic case forms a continuous band that crosses the Fermi level) gets split off.

This tutorial starts from a static nonlocal QSGW self-energy Σ0(k)\Sigma^0(\mathbf{k}) and a local, dynamical Σ(iωn)\Sigma(i\omega_n), projected onto the Cu d states, generated by DMFT for frequencies on the Matsubara axis. The materials system is LaCuO4; files are taken from a validatation test taken from the Questaal installation.

It tutorial assumes your build directory is ~/lm, and the executables are your path. The test itself can be run by the script ~/lm/dmft/test/test.dmft.
It requires the following:

  • lmfdmft  is used for Pade extrapolation of Σ to the real axis, and also to embed Σ into the QSGW bath.
  • lmchk   is used to create file qlat, needed by symlinepoints
  • ~/lm/startup/symlinepointsmaps k-point lines in syml.lscoq to syml2.lscoq.
  • lmfgws   Makes A(k,ω)A(\mathbf{k},\omega) from the embedded Σ(k,ω)\Sigma(\mathbf{k},\omega). lmfgws uses the self-energy editor, described here
  • plbnds    band plot utility, operating in the spectral function mode
  • gnuplot
  • open    [use any utility that views postscript files]

assumed to be in your path.

Interacting Energy bands

This section parallels the tutorial for the interacting band structure generated by GW. In the GW case, Σ(k,ω)\Sigma(\mathbf{k},\omega) is generated from QSGW on the real axis. Here Σ(k,ω)\Sigma(\mathbf{k},\omega) is generated from a local Σd(ω)\Sigma_d(\omega) generated by DMFT on the Matsubara axis.

To generate physical observables, we need to analytically continue Σ(iωn)\Sigma(i\omega_n), given by DMFT for a set of discrete Matsubara frequencies, to the real axis. This is an important difference between Questaal’s QSGW and DMFT implementations.

In this tutorial we use lmfdmft’s built in Pade extrapolator to carry out the analytic continuation.
Note: analytic continuation is a tricky business. Pade works reliably only when the polynomial order is not too large, which means in can operate reliably only over a small energy window. Also the self-energy should be reasonably smooth.

Continue the local DMFT Σ(iω)\Sigma(i\omega) to the real axis in an energy window [−4,4] eV, using a Pade extrapolation:

$ lmfdmft lscoq --rs=1,0 --ldadc=82.2 -job=1 --pade~nw=121~window=-4/13.606,4/13.606~icut=30,75

The switches to --pade are delimited by  ~  which is the first character following --pade:

  • ~nw=121
    Create an energy mesh of 121 points
  • ~window=−4/13.606,4/13.606
    Use an energy window of [−4,4] eV (specify in Ry units)
  • ~icut=30,75
    Specifies which Matsubara points to use in the Pade approximant. Use the first 30 points; thereafter increment the spacing by 1,2,4 … points.
    Continue until the counter passes point 75. In this case the Pade approximant includes Matsubara points 1:30,32,36,44,60

Next, we need a list of q-points where the spectral function A(k,ω)A(\mathbf{k},\omega) will be made (band plot). Here we use generic symmetry lines from syml.lscoq, which contain high-symmetry points in units of the reciprocal lattice vectors. The symlinepoints utility will convert these points to Cartesian coordinates and at the same time specify a number of points on each line to make the spacing between points approximately uniform. Do the folllowing:

$ lmchk lscoq | grep -A 3 Qlat | tail -3 | awk '{print $4, $5, $6}' > qlat
$ ~/lm/startup/symlinepoints -qlat=qlat -nk=101 syml.lscoq > syml2.lscoq

symlinepoints writes points in Questaal’s symmetry line format to file syml2.lscoq.

Next, we need to embed the local DMFT self-energy Σd(ω)\Sigma_d(\omega) (now analytically continued to the real axis) in the bath defined by the one-particle QSGW hamiltonian. The next step will:

  1. Determine the Fermi level, so the one-particle states can be referenced relative to it
  2. Embed Σd(ω)\Sigma_d(\omega) into Σ(k,ω)\Sigma(\mathbf{k},\omega), in the basis of QSGW eigenfunction, for each of the k points supplied through syml2.lscoq.

    $ lmfdmft lscoq -vnkabc=8 --ldadc=82.2 --job=1 --gprt~band,fn=syml2~rdsigr=sig2~mode=19 --pr45

lmfdmft first determines the chemical potential μ from Σd\Sigma_d on the Matsubara axis, avoiding errors in the Pade approximation. Next it makes another band pass for the points defined through syml2.lscoq. For each point it embeds Σd(ω)\Sigma_d(\omega) (now continued to the real axis) to construct the crystal Σ(k,ω)\Sigma(\mathbf{k},\omega), for the set of bands defined by the DMFT hybridization function. It writes Σ(k,ω)\Sigma(\mathbf{k},\omega) to se.lscoq.
Note: lmfdmft writes only the diagonal part of Σ to se.lscoq. It is assumed that the off-diagonal elements do not significantly modify the spectral function.

We are now in a position to make spectral functions. It is done by the dynamical self-energy editor lmfgws. Σ(k,ω)\Sigma(\mathbf{k},\omega) constructed either by DMFT and GW can use this utility to analyze spectral functions. For the GW case see this Fe tutorial.

lmfgws can work interactively by adding  --sfuned  unadorned by modifiers:

$ lmfgws  lscoq --sfuned

or it can be invoked in batch mode. We do the latter here. The following instruction will read se.lscoq, interpolate it to a finer frequency mesh, and write A(k,ω)A(\mathbf{k},\omega) to file spq.lscoq.

$ lmfgws  lscoq '--sfuned~units eV~readsek@readef@irrmesh@minmax@ib=30:38~eps 0.02~se band@fn=syml2 nw=2 isp=1 range=-4,4'

The editor’s instructions are delimited by the first character following --sfuned, which is  ~  in this case. They perform the following functions:

  • units eV
    Select data is to be output in electron volt units

  • readsek@flags
    Reads the self-energy from se.lscoq. Optional flags (separated by a delimiter) modify what is read.
    Note: you cannot use  ~  for the flags delimiter because it was already used to separate instructions to --sfuned (batch mode). The flags perform the following functions:

    • readef
      Tells the editor to use the chemical potential in se.lscoq. The QSGW and DMFT Fermi levels are different, and this switch can have some effect if lmfgws is used to interpolate between k points. However, in this context it is not because lmfgws already has the one-particle levels and self-energy relative to the Fermi level for every k point; there is no interpolation (in contradistinction to the DOS calculation
    • irrmesh
      Tells the editor that data is not being read on a regular mesh of points suitable for k integration. Operations that require k integration or k interpolation cannot be performed.
    • minmax
      Instructs the editor to print out the minimum and maximum values of QP levels among all the q points it reads. Values are printed for each band. This is for informational purposes only.
    • ib=30:38
      Restricts the bands entering into the spectral function to bands 30 through 38. These are the bands in the energy window [−4,4] eV, as the minmax printout will show.
  • eps 0.02
    add a constant 0.02 eV to Im Σ. this broaden spectral functions that have small imaginary parts near their peak, rendering a cleaner display.

  • se   band@fn=syml2   nw=2   range=−4,4
    Instructs the editor to generate spectral functions at the list of k points you specify.

    • band@fn=syml2
      generates a list of k points in lines defined through syml2.lscoq.  @  is a delimiter separating flags to band (In general the band instruction can have multiple flags). By default band operates in symmetry line mode, which read points symmetry lines from syml2.lscoq. Here we synchronize the k points with the same list for which lmfdmft made the self energy. That way Σ\Sigma will not need to be interpolated in q.
    • nw=n
      Refines the given energy mesh by interpolating Σ to an n multiple of the given energy mesh. n must be an integer.
    • range=#1,#2
      Specifies the energy window [#1,#2] where the spectral function is to be generated.

Finally, invoke plbnds in spectral function mode to generate an “interacting energy bands” figure.

$ plbnds -sp~atop=10~window=-4,4 spq.lscoq
$ gnuplot gnu.plt
$ open spf.ps   [choose your postscript file viewer]

plbnds will generate a gnuplot script file gnu.plt together with a data file spf.lscoq. gnuplot makes a postcript file, spf.ps.

The open merely displays spf.ps.

Spectrum DOS

Edit This Page