Self-Consistency With Approximate Linear Response

Table of Contents


This tutorial, which also acts as documentation, outlines the steps needed to estimate the self-consistent density given some dielectric response function. The codes have some capability to generate this dielectric response function approximately however this is less good than when calculated explicitly - this tutorial will detail both the explicit steps you can perform yourself and the commands required for the suite to calculate it for you.



First, you need to care the ASA bare response function P0P^{0}, which will be defined as:

dqRL=PRL,RL0dvRLdq_{RL} = P^{0}_{RL,R'L'}dv_{R'L'}

dvRLdv_{R'L'} is the constant potential shift in the channel LL' of sphere RR', and dqRLdq_{RL} is the induced change in the 0th moment in channel L of sphere R, without taking into account interactions between electrons (noninteracting susceptibility). The static dielectric response function is:

η1=(1MP0)1\eta^{-1} = (1-M'P^{0})^{-1}


M=MM'=M + (on-site term = something like the intraatomic U)


M=M = Madelung Matrix

lm and lmgf can both generate P0P^{0}, and store it on the disk. If you have generated P0P^{0}, you can have the mxing precedure construct η1\eta^{-1} and then screen (qoutqin)(q^{out}-q^{in}) by η1\eta^{-1}. More exactly, it replaces the raw qout (generated by lm or lmgf) by:


and then it proceeds with self-consistency in the usual way, using quot* in place of the usual qout. It is not difficult to show that if η1\eta^{-1} is the exact inverse dielectric function, qout* is the RPA estimate of the self-consistent density. See, for example, Richard Martin’s book, Electronic Structure. Indeed, η\eta is sometimes called the “density-density response function”.

To tell the code to do this screening, set OPTIONS_SC=2. The program will crash if it can’t read P0P^{0} from the disk (P0P^{0} is stored in the file psta.ext). You can create P0P^{0} either with the band program lm or the Green’s function code lmgf. Since the metals treatment of P0P^{0} is very primitive in the lm coce, it is better to use the lmgf to create P0P^{0} for metals. lmgf can also make P0P^{0} for the noncollinear case. To run lmgf, you need to add a couple of tokens to the ctrl file. For either program, set OPTIONS_SCR=1 to create P0P^{0}.

The intraatomic U is esimated from the second derivative of the sphere total energy wrt to charge. You can update it every kthk^{th} iteration by adding 10*k to the token SCR=… thus SCR=52 will update the U each 5th5^{th} iteration in the sphere program.

If you don’t want to make P0P^{0}, you can let the codes make a model estimate for you. It saves you the trouble of making P0P^{0}, but it is less good than when P0P^{0} is calculated explicitly.

All of these functionalities can be enabled through the OPTIONS_SCR token:

OPTIONS_SCR       opt    i4       1,  1          default = 0
    Use scr to accelerate convergence:
    0 do nothing
    1 Make ASA static response function (see documentation)
    2 Use response to screen output q and ves
    4 Use model response to screen output q
    6 Use response to screen output ves only
      Add 1 to combine mode 1 with another mode
      Add 10*k to compute intra-site contribution to vbare each kth iteration
      Add 100*k to compute response function on every kth iteration

Edit This Page