-
-
Notifications
You must be signed in to change notification settings - Fork 60
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
Support for SIESTA-BdG in sisl #873
Comments
Thanks for this, let me note that I think the entire details should just be stored in one HSX file. Is there a reason for not storing everything in one HSX file? |
The reason was mostly convenience (or laziness 😅). By doing it this way we could re-use the |
I think the siesta write still works for nspin>8, no? Otherwise it really should! :) |
Hmm, we actually never tried. Maybe we can look into this. That does require us to supply a single object that contains all 16 spin components to the routine (right now the two parts are stored in different objects both with 8 spin components). |
I have created a merge-request so it can be simpler to write a HSX file object https://gitlab.com/siesta-project/siesta/-/merge_requests/400 This should enable you to store two different hamiltonian objects in a single HSX file. This should be very simple for you! :) |
That's great, thanks! We will update the writing of the HSX file in the SIESTA-BdG code. |
How would you btw handle the writing of Delta and H^ee in other files (such as SystemLabel.nc or DMHS.nc)? |
I would also extend it with more spin dimensions. Unless there are good reasons for not to do it. |
If you like the solution, I would heavily suggest you to comment in the merge-request, so it can get merged in, then you can rebase ontop of |
I commented on the request to indicate that this would be useful for us. |
Is there a reason why the ordering of the Delta matrix elements are not aligned with that of the Hamiltonian spin-box? It seems a bit odd to have a different ordering of elements, although the matrix spin box looks very different, I think the chances of people mis-understanding this is high. readability here is likely more important IMHO! I.e. lets assume one wishes to create a tight-binding model of this thing, would they work in the singlet+triplet basis, or just use the Delta spin-box indices for assigning values? |
Maybe @nils-wittemeier can also comment on this but as far as I understood the reason is that we store the singlet and three triplet components as four complex numbers sequentially in HBdG, i.e. Singlet = HBdG(1) + i HBdG(2), Triplet_{u,u} = HBdG(3) + i HBdG(4), etc., see also the last part of the comment above that explains the matrix form of the singlet and triplet contributions. This is inherited from Gabor's initial implementation I believe and this has probably been done this way for easy mapping between input and
For users it would be easier to work in the singlet-triplet basis I think. This is also how they specify the input Delta now in SIESTA-BdG. I.e., they would specify that they want singlet pairing between atom 1 and 2 or something. Otherwise you would have to manually figure out which components of the Delta spin-box to set to get the correct singlet or triplet pairing that you want. |
NOTE: this should be discussed in a future MR against siesta! IMHO, it would make sense to have the internal representation to be just as the siesta hamiltonian, right now the Hamiltonian indices are difficult enough to grasp, and with this additional complexity it becames very hard.
Yes, but in sisl? Would you still do it like this? |
Hmmm ... I have to say that the seperation in singlet and triplet component seems to be much easier to understand for users compares to the abstract uu ud etc. How things should be handled internally is ofcourse another matter and I understand your point as well, Nick. For maintenance of the code it might be better to stick to the normal convention. As you pointed out this should be discussed on the siesta MR. I do quickly want to noted that this would require a decomposition into singlet triplet for grid operations. |
Ok, seems like the single/triplet separation makes sense internally as well. |
I would like to comment that singlet and triplet components are easier to grasp/commonly used in the superconductors community and they are associated to specific physical phenomena/interpretations. |
@nils-wittemeier this is no different from what has to be done for the diagonal (electron-electron) quantities right? There you also have to combine/decompose the DM spin-box to create the X and Y spin components for rho in So I don't think that would prevent us from using the same convention for the spin-box of Delta internally. |
That's a fair point |
How does the density matrix look like in BdG? Does the DM have the same elements, singlet + triplet? |
And could you comment on how PDOS etc looks like with wavefunctions from BdG simulations? |
Could you please have a look in #877? It should implement everything for nambu code style in sisl (except pdos and some minor details). |
Correct me if I'm wrong @nils-wittemeier: The structure is similar as for the Hamiltonian. So we have two separate matrix objects in the SIESTA-BdG code, DM and ADM (anomalous density matrix), where the ADM is analogous to Delta (HBdG in the code), so we also store the singlet and triplet components in the same order in the ADM matrix, i.e. Singlet = ADM(1) + i ADM(2), Triplet_{u,u} = ADM(3) + i ADM(4), etc. We also store the ADM in a separate file at the moment (with extension
The wavefunctions that come out of diagonalizing the BdG Hamiltonian are 4-component Nambu spinors of the form,
where
Here For the PDOS the number of spin components is doubled and we basically store first the electron PDOS and then the hole PDOS with for both the same spin order as for SOC, so I hope the above is clear enough. |
That is fast! On first glance things look good. I'll try to have a closer look later (also comparing with how we do things in the SIESTA-BdG code). |
PDOS is now implemented, and one should also be able to do all other kinds of stuff, I think the only thing missing is the |
I have a general question on this thread. Would it also be a good idea to make sure that we can exploit sisl.viz functionalities to plot the quantities that we compute within the SIESTA-BdG code? Would those changes done for the |
Of course these things would be ideal to have there as well. I don't know what is involved in the grid-operations you have. But I can't see that there should be a huge limitation here, so of course that should exist in sisl. I have taken a first stab, and then I would advice you to test that backend, once in, you can extend sisl to your liking and give a PR. |
Describe the feature
As was mentioned in a discussion between @zerothi and @rreho #869, it would be good to have support for the BdG Hamiltonian in sisl that is used/produced by SIESTA-BdG (which will be merged into main SIESTA sometime in the future) (see https://journals.aps.org/prb/abstract/10.1103/PhysRevB.110.134505 for implementation paper). Here we will supply some details about how the BdG Hamiltonian is implemented in SIESTA so that we can discuss what is necessary to add this support to sisl.
First of all, we will explain the structure of the Hamiltonian. The structure of the BdG Hamiltonian is (see paper for more details):
Within SIESTA-BdG there are two matrices, one for
H^ee
and one forDelta
, both with 8 spin components (same as SOC). The spin components have the following meaning in the SIESTA-BdG code:To avoid confusion, it's important to mention that inside the code, we use
HBdG
to refer to the matrix object that stores theDelta
part of the BdG Hamiltonian. At the end of a calculation, we saveH^ee
andDelta
separately to two HSX files (which both have 8 spin components), namelySystemLabel.HSX
andSystemLabel.HBdG.HSX
respectively.We hope that this description is clear enough and a good start for a discussion. If you have any questions let us know.
On another note, @nils-wittemeier do you think we can give @zerothi access to the SIESTA-BdG repo? It might be useful if he can see the code.
The text was updated successfully, but these errors were encountered: