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

Reusing WCC calculations for Chern numbers of multiple bands #91

Open
liquidnode opened this issue Jul 24, 2020 · 3 comments
Open

Reusing WCC calculations for Chern numbers of multiple bands #91

liquidnode opened this issue Jul 24, 2020 · 3 comments

Comments

@liquidnode
Copy link

Hi there,

I would like to simultaneously calculate the Chern number of all given bands at once. It would be very time consuming if this is done sequentially, since I would like to use the first principles part of Z2Pack. Essentially, I would like to change the number of occupied states in retrospect. I think this should be possible, since it should be save to assume, that if all WCCS of the full overlap matrix converge any submatrix of the overlap matrices should also result in converged WCCs. Is there a way to do this in Z2Pack, that is select submatrices of the overlap matrix to perform a Chern number calculation? Maybe by misusing the symmetry projection code, where instead of a symmetry projector I use a projection matrix onto occupied states or a single band, though it seems like symmetry projection is only available for plotting of WCCs with color-coded symmetry eigenvalues (z2pack.plot.wcc_symmetry).

If this is not currently possible, I think it should be not too hard if I implement a overlap-submatrix selection myself.

@greschd
Copy link
Member

greschd commented Jul 25, 2020

Hi,

Currently there is no built-in functionality to do this projection onto different bands after the calculation. But, as you said, this should not be too difficult to do.

However, I am fairly certain the argument that the WCC of single bands should be converged if those of the whole set of bands are is incorrect. Consider the simple case of two bands that cross: if both bands are considered, everything is fine. But considering only the "lower" of the two bands for example, you will get a discontinuity at the crossing point and an ill-defined Chern number.

@liquidnode
Copy link
Author

Thanks for your input. Yes you're right about the WCC convergence. I think in this case one should specify already at the start of the surface run which submatrices one wants to analyze later, so that the convergence metrics are calculated on the worst converging submatrix. Hmm this makes all of this more complicated than I first thought.

Could you show me where I can implement these features? I'm still a bit lost in the code base.

@greschd
Copy link
Member

greschd commented Aug 7, 2020

Yeah - so this is indeed a bit more complicated than it probably should be.

In general, the convergence features are implemented by the "Controls", see e.g. https://github.com/Z2PackDev/Z2Pack/blob/dev/current/z2pack/surface/_control.py#L33. In the update method, the current data is passed in, and they have a converged attribute / property: For "line controls" that's just a single boolean. For "surface" controls, it's a list of bools, one for each neighboring pairs of lines.

The other important concepts you may have to touch are the "Data" classes - these are constructed from the eigenstates or overlaps, and actually compute the WCC etc.: https://github.com/Z2PackDev/Z2Pack/blob/dev/current/z2pack/line/_data.py

The "Result" classes are just a small wrapper around "Data", that also contain the convergence info.

The main problem here is that there's currently no nice way to split the Hilbert space and apply the Controls on each sub-space. I'd suggest you start by implementing what you need directly in a new Control, as a proof of concept. The Hilbert space splitting requires some thinking on my part.. and it would actually neatly enable also the symmetry feature (#89).

P.S.: I started a developer's guide some time ago here: http://z2pack.ethz.ch/doc/2.1/devguide/index.html. It's incomplete, but some of the concepts are explained there also. Please let me know if some things are unclear.

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

No branches or pull requests

2 participants