# Self-Consistency With Approximate Linear Response

### Tutorial

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

$dv_{R'L'}$ is the constant potential shift in the channel $L'$ of sphere $R'$, and $dq_{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:

where

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

and

$M =$ Madelung Matrix

lm and lmgf can both generate $P^{0}$, and store it on the disk. If you have generated $P^{0}$, you can have the mxing precedure construct $\eta^{-1}$ and then screen $(q^{out}-q^{in})$ by $\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 $\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 $P^{0}$ from the disk ($P^{0}$ is stored in the file psta.ext). You can create $P^{0}$ either with the band program lm or the Green’s function code lmgf. Since the metals treatment of $P^{0}$ is very primitive in the lm coce, it is better to use the lmgf to create $P^{0}$ for metals. lmgf can also make $P^{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 $P^{0}$.

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

If you don’t want to make $P^{0}$, you can let the codes make a model estimate for you. It saves you the trouble of making $P^{0}$, but it is less good than when $P^{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