-
Notifications
You must be signed in to change notification settings - Fork 89
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
Conversation
mfherbst
commented
Oct 7, 2020
•
edited
Loading
edited
- 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
I'm so happy we wrote this test, it's super useful. |
21078d4
to
daec0b0
Compare
Hooray! Got it to work after all ... |
LGTM! |
Looks like SCF convergence is pretty good, even in the spin polarized case. |
About 15 iterations. Dielectric eigenvalues should be very interesting here! |
daec0b0
to
3533db1
Compare
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? |
Not so easily because libxc internally computes If that's an issue for our investigations we might as well code up PBE ourselves. It's still reasonable |
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. |
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 |
3533db1
to
fd1095b
Compare
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. |
Yes that last thing sounds like a reasonable solution. |
fd1095b
to
8b7cd2c
Compare