Nexus: Implementation of GCTA with (spin)-adapted Fermi levels#5029
Merged
Conversation
Contributor
Author
|
I should mention that the spin-collinear case is hard-coded in the current implementation. Support for spinors is possible with |
Contributor
|
I will review this later today. |
jtkrogel
requested changes
Jun 7, 2024
Contributor
jtkrogel
left a comment
There was a problem hiding this comment.
This looks solid. Bonus points for the tutorial-length example!
Just change the couple of "==None" to "is None" and I will approve.
Contributor
|
Test this please |
Contributor
|
Test this please |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Proposed changes
This PR implements the grand-canonical twist averaging using (spin)-adapted Fermi levels [GCTA-(S)AFL] as described in:
https://pubs.acs.org/doi/10.1021/acs.jctc.4c00058
The implementation introduces a new
GCTAclass, which stores most of the functionality and data in the class instance. To avoid interference with theQmcpackclass, deep-copied attributes of theQmcpackobject are passed into theGCTAinstance.The user-facing keyword is simple:
gcta = ...ingenerate_qmcpack(), which activates GCTA occupations. Thegctakeyword supports four possible arguments:('safl', 'afl', 'nscf', 'scf'). Currently,pwscfcode interface has full support. Other codes can be readily supported by introducing functions that can read the eigenvalues and k-point data.To verify the implementation, I compared the resulting twist occupations to those obtained by the independent workflow used in the above article. The twist occupations of Al and Fe at primitive cells and supercells showed the same GCTA occupations using the old implementation versus the new implementation in Nexus. Also, primitive cell runs of Fe showed the same VMC energy as in the above article.
The tested cases of Al and Fe are both cubic systems. More production tests are needed with non-cubic systems. In general, a drop in twist-averaged energy is expected for dense twist-mesh when compared to the case without the use of
gctakeyword.A Nexus example was added that discusses the case of BCC Fe. If needed, more thorough documentation could be added to Nexus docs. This PR also lacks Nexus tests, which we plan to add in the future. All existing Nexus tests are passing.
What type(s) of changes does this code introduce?
Does this introduce a breaking change?
What systems has this change been tested on?
Laptop, Perlmutter
Checklist