# Nickel spectral functions and optics

This tutorial explains how to generate spectral functions $A(\mathbf{k},\omega)$ from a local dynamical self-energies $\Sigma(\omega)$ generated by DMFT.

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

### Command summary

The following sequence generates “interacting energy bands” along symmetry lines as defined in syml2.ni. First you need to prepare the syml2.ni file. Please copy the text below inside the syml2.ni file.

 41    0.000000   0.000000   0.000000    1.000000   0.000000   0.000000    G to X
35    1.000000   0.000000   0.000000    0.500000   0.500000   0.500000    X to L
35    0.500000   0.500000   0.500000    0.000000   0.000000   0.000000    L to G


Below are the commandlines for producing spectral functions for Nickel.

bsub -Is -n 24 -q scarf-rhel7 -R "span[hosts=1]" /bin/bash
module use /home/cseg/scarf590/opt/modules/o
mkdir SPECTRA
cp dmftrun/{rst,ctrl,basp,site,sigm,indmfl}.ni SPECTRA/
cp dmftrun/Sig.out SPECTRA/sig.inp
cd SPECTRA
mpirun -n 24 lmfdmft ni --rs=1,0 --ldadc=28.95 -job=1 --pade~nw=1001~window=-8/13.606,8/13.606~icut=40,100  # analytically continue the self energy and writes it in sig2.ni file
mpirun -n 24 lmfdmft ni -vnkabc=24 --ldadc=28.95 --job=1 --gprt~band,fn=syml2~rdsigr=sig2~mode=20 --pr45    # reads local self energy from sig2.ni on real axes and writes diagonal self energy (momentum and energy resolved on real frequencies)
lmfgws  ni '--sfuned~units eV~readsek@useef@irrmesh@minmax~eps 0.00000000~se band@fn=syml2 nw=2 isp=1 range=-8,8' # produces the spectral functions for up spin
plbnds -sp~atop=3~window=-6,6 spq.ni; gnuplot gnu.plt # plots the spectral functions for up spin
lmfgws  ni '--sfuned~units eV~readsek@useef@irrmesh@minmax~eps 0.00000000~se band@fn=syml2 nw=2 isp=2 range=-8,8' # produces the spectral functions for down spin
plbnds -sp~atop=3~window=-6,6 spq2.ni; gnuplot gnu.plt ; open spf.ps # plots the spectral functions for down spin


For computing optical conductivity first we need to add some extra switches to the ctrl.ni file.

OPTICS  MODE=1 NPTS=1001 MEFAC=1 WINDOW=0 1 ESCISS=0 LTET=3


Now the ctrl.ni file looks like:

# Autogenerated from init.ni using:
# blm --gw --mag ni

# Variables entering into expressions parsed by input
% const nit=10
% const met=5
% const nsp=2 so=0
% const lxcf=2 lxcf1=0 lxcf2=0     # for PBE use: lxcf=0 lxcf1=101 lxcf2=130
% const pwmode=0 pwemax=3          # Use pwmode=1 or 11 to add APWs
% const sig=12 gwemax=2 gcutb=3.3 gcutx=2.7  # GW-specific
% const nkabc=0 nkgw=nkabc gmax=9.0

VERS  LM:7 FP:7 # ASA:7
IO    SHOW=f HELP=f IACTIV=f VERBOS=35,35  OUTPUT=*
EXPRESS
# Lattice vectors and site positions
file=   site

# Basis set
gmax=   {gmax}                   # PW cutoff for charge density
autobas[pnu=1 loc=1 lmto=5 mto=4 gw=1 pfloat=2,0]

# Self-consistency
nit=    {nit}                    # Maximum number of iterations
mix=    B2,b=.3,k=7              # Charge density mixing parameters
conv=   1e-5                     # Convergence tolerance (energy)
convc=  3e-5                     # tolerance in RMS (output-input) density

# Brillouin zone
nkabc=  12                  # 1 to 3 values
metal=  {met}                    # Management of k-point integration weights in metals

# Potential
nspin=  {nsp}                    # 2 for spin polarized calculations
so=     {so}                     # 1 turns on spin-orbit coupling
xcfun=  {lxcf},{lxcf1},{lxcf2}   # set lxcf=0 for libxc functionals

#SYMGRP i r4x r3d
HAM
PWMODE={pwmode} PWEMIN=0 PWEMAX={pwemax} OVEPS=0 # For APW addition to basis
FORCES={so==0} ELIND=-0.7
RSRNGE=8
RDSIG={sig} SIGP[EMAX={gwemax}]  # Add self-energy to LDA
GW    NKABC=12 GCUTB={gcutb} GCUTX={gcutx} DELRE=.01 .1
GSMEAR=0.003 PBTOL=1e-3
OPTICS  MODE=1 NPTS=1001 MEFAC=1 WINDOW=0 1 ESCISS=0 LTET=3
SPEC
ATOM=Ni       Z= 28  R= 2.354453  LMX=3 LMXA=4 MMOM=0,0,2 PZ=0,0,4.4
DMFT    PROJ=2 NLOHI=1,8 BETA=50 NOMEGA=999 KNORM=0


The following commandlines are for calculation of optical conductivity with the ‘interacting energy bands’. At this point you might like to change the the nkabc value to 12, instead of 24:

mpirun -n 24 lmf ctrl.ni -vnit=1 --rs=1,0  --quit=rho -vlteto=0 -voptmod=1 -vmet=2 --opt:woptmc # comptes velocity matrix elements
mpirun -n 24 lmfdmft ni --ldadc=28.95 --job=1 --gprt~rdsigr=sig2~mode=20 --pr45 --rs=1,0        # computes spectral properties on real frequencies using local self energy from sig2.ni
lmfgws ni '--sfuned~units ev~readsek@minmax@readef~eps .00100000~imeps range=-8,8 nq=12 nw=5'    # computes real part of optical conductivity


It will finally dump out a file called opt.ni, which has 7 columns: first column is energies, second, third and fourth contain the imaginary parts of the dielectric functions for one spin sector and fifth, sixth, seventh contain the imaginary parts of the dielectric functions for the other spin sector.

What we caution you at this point, that you are using the Pade analytical continuation scheme that comes with the lmfdmft for analytically continuing local DMFT self energies and storing the information in a file called sig2.ni. But you are free to analytically continue the Matsubara data in any other way you want; we provide a maxent_run.py script that you can also use to continue data with maximum entropy method MEM ; instead of Pade. If you rename the output file produced using MEM to sig2.ni, the commandlines should just work in the same fashion documented above.

However, if you really want to see why you should prefer MEM for analytical continuation of self-energies which are not perfectly analytic (a bad metal, a non-Fermi liquid, Mott insulators), we provide a test case for the non-analytic self energy continued onto the real frequency axes for $La_{2}CuO_{4}$ here this link. The self energies for Nickel are perfectly analytic as Nickel is a good metal, so Pade might just give you reasonably good results and you don’t want to spend a lot of time doing MEM on Nickel.