8
$\begingroup$

I am currently trying to determine how DFT+U values can be determined self consistently. I see that the bare and converged linear response matrix contain the difference in occupancies from the ground state. I am wondering if my understanding of the approach is correct.

  1. Calculate ground state and record the final occupancies
  2. Calculate perturbed state (bare) by applying U to the ground state charge density then taking the first set of occupancies from the first SCF step as the bare response matrix (bare - ground)
  3. Converge the bare state and take the final set of occupancies as the converged response matrix (converged - ground)

Then you end up with two matrices, the bare response matrix and the converged response matrix. The U value is then taken as follows.

U = (Converged-1) - (Bare-1)

My question is maybe naive, but how does this final step of subtracting two matrices give a U value.

I am using this as a resource to understand what is going on in this method.

If it at all matters, I would like to use CASTEP or GPAW as my calculator.

$\endgroup$

1 Answer 1

5
$\begingroup$

The $U$ in this case is actually a matrix, since on Prof. Kulik's page that you linked, she is explaining multi-site $U$ calculations. The perturbation of a single site may also affect the response at a different site (e.g. from your link, perturbing Mn can affect O).

When doing the perturbations, you record the changes in all the occupations at different sites. Then when you do the matrix inversion these initial off-diagonal elements will have an affect on the resulting inverted matrix's diagonal elements. The diagonal elements $U_{ii}$ are of course the values of $U$ for site $i$. This type of calculation takes into account the effect of neighboring atoms on a given atom's response to the perturbation, as opposed to the single-site $U$ (which you could calculate separately for each site) that does not.

$\endgroup$
8
  • 1
    $\begingroup$ Is there any good worked example of how this actually functions? To do two elements then, you need to do a 2D scan of perturbations from -0.08 to 0.08? Also does this use a U value shift for perturbation? I see a hubbard_alpha as well sometimes. It would be good to know some good resource for doing this which is code agnostic and explains it at a level someone just familiar with basic DFT can understand. $\endgroup$ Oct 19, 2020 at 21:32
  • $\begingroup$ @TristanMaxson Have you looked at the Python scripts in the tutorial you linked to? You could try modifying them to use CASTEP or GPAW like you wanted. I think the perturbations will still only be "1D", you just need to perturb each site you're interested in. You need to record the change in occupations in "2D" though; but that's easy since you should get that from the output of each perturbation calculation. Hubbard_alpha(i) is the value of the perturbation on atom i when using Quantum Espresso. $\endgroup$ Oct 19, 2020 at 21:36
  • 1
    $\begingroup$ I have tried to understand what the python scripts are doing but they are very difficult to read and understand. I see that CASTEP also has a hubbard_alpha tag, so that is what the perturbation should be done using. So I perturb at some value to get my bare and converged and plot the values for a linear regression. In the single site example U=3.47 but (1/0.15) - (1/0.32) = 3.52, maybe the rounding gives a problem with it aligning though. $\endgroup$ Oct 19, 2020 at 21:44
  • 1
    $\begingroup$ So if you do the same procedure after applying the calculated U, you determine a slightly more accurate U, rinse and repeat until converged? $\endgroup$ Oct 19, 2020 at 21:54
  • 1
    $\begingroup$ I guess that is an important distinction, nothing promises it is more accurate. Thanks. $\endgroup$ Oct 19, 2020 at 21:55

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .