# Self-Consistency With Approximate Linear Response

### Table of Contents

### Tutorial

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

$dq_{RL} = P^{0}_{RL,R'L'}dv_{R'L'}$$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
```

Edit This Page