Self-Consistency With Approximate Linear Response

Table of Contents


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