Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Collinear spin for GGA functionals #327

Merged
merged 4 commits into from
Oct 8, 2020
Merged

Collinear spin for GGA functionals #327

merged 4 commits into from
Oct 8, 2020

Conversation

mfherbst
Copy link
Member

@mfherbst mfherbst commented Oct 7, 2020

  • silicon no ρspin works
  • silicon random ρspin relaxes to proper non-spin-broken solution
  • Hamiltonian consistency works
  • Agreement with ABINIT on spin-polarised iron
  • Tests

@mfherbst mfherbst mentioned this pull request Oct 7, 2020
5 tasks
@antoine-levitt
Copy link
Member

Hamiltonian consistency works

I'm so happy we wrote this test, it's super useful.

@mfherbst mfherbst changed the title Collinear spin for PBE Collinear spin for GGA functionals Oct 8, 2020
@mfherbst mfherbst marked this pull request as ready for review October 8, 2020 09:59
@mfherbst
Copy link
Member Author

mfherbst commented Oct 8, 2020

Hooray! Got it to work after all ...

@antoine-levitt
Copy link
Member

LGTM!

@antoine-levitt
Copy link
Member

Looks like SCF convergence is pretty good, even in the spin polarized case.

@antoine-levitt
Copy link
Member

About 15 iterations. Dielectric eigenvalues should be very interesting here!

@antoine-levitt
Copy link
Member

So playing around with the XC scaling factor it does look like a pitchfork (I haven't done any fancy continuation, just trying several random values), at about a scaling of .35. It would maybe be better to only scale the spin-coupling exchange interaction, without touching the XC of each spin independently. Is this something that can be done easily with libxc?

@mfherbst
Copy link
Member Author

mfherbst commented Oct 8, 2020

Not so easily because libxc internally computes ζ = (ρ_α - ρ_β) / (ρ_α + ρ_β) and that you would need to scale without scaling ρ_α and ρ_β itself.

If that's an issue for our investigations we might as well code up PBE ourselves. It's still reasonable

@antoine-levitt
Copy link
Member

You don't really want to scale ζ itself, you'd want to scale the contribution to the energy coming from ζ. The correlation energy is not separable though... So I guess scaling ζ itself is the simplest way. We can hack this by scaling the rhospin taken as input to the xc functional.

@mfherbst
Copy link
Member Author

mfherbst commented Oct 8, 2020

But that's the point. Libxc does not take ρ_spin. It takes ρ_α and ρ_β.

Well I guess you could scale ρ_spin from DFTK though, which effectively scales ζ, but also the σ_αβ = \nabla ρ_α \cdot \nabla ρ_β ... but that might be what you want anyway.

@antoine-levitt
Copy link
Member

Yeah but you can always fudge the rho_a and rho_b to have what you want, it's just a change of variables. Essentially I think there are two ways to do it: the energy is F(rhotot, rhospin), so we can do F(rhotot, alpha*rhospin) or (1-alpha) F(rhotot, 0) + alpha F(rhotot, rhospin). The second one is probably better (because you deform energies instead of densities), and simpler to implement. To implement we'd simply need another xc term that doesn't take into account the rhospin, and then you'd just have two XC terms, with different weights.

@mfherbst
Copy link
Member Author

mfherbst commented Oct 8, 2020

Yes that last thing sounds like a reasonable solution.

@mfherbst mfherbst merged commit a444606 into master Oct 8, 2020
@mfherbst mfherbst deleted the collinear_pbe branch October 8, 2020 13:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants