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

Calculating Berry Phase around a loop #227

Open
khaledb9 opened this issue Jun 25, 2024 · 10 comments
Open

Calculating Berry Phase around a loop #227

khaledb9 opened this issue Jun 25, 2024 · 10 comments

Comments

@khaledb9
Copy link

khaledb9 commented Jun 25, 2024

Hello

I hope you are doing well.

I'm trying to calculate the berry phase around a nodal point at Gamma in a hexagonal BZ. My code below should work as per my understanding of z2pack and previous related inquires here.

My confusion arises in the choice of bands, my understanding is that the bands of interest (i.e. two intersecting bands) should be taken into account. However, when I do that I get zero polarization, on the other hand, when I try each of the bands separate, one band yields values >0.85 and <0.99, while the other band has a much smaller contribution such that when adding both the total is exactly 1.0. I have also noticed that tbmodels reads the nodal points as degenerate. I attach a slice of the band structure for clarity, where the numbers are the band indices from tbmodels indexed at 1.

My question is whether the method of calculating the berry phase involves picking two bands or one band, and what would be an appropriate choice of radius, I noticed robust results at 0.001 or 0.005. However, I see typical radii of 0.02-0.01 sometimes. Any guidance on that part would be really helpful.

Edit:
I would like to add that this behavior of bands doesn't happen for all bands, some bands when taken together yield one while some yield zero, and when taken separate give 1, Also the eigenvals read from the Hamiltonian show degenerate states but i skipped the numbering in the picture for clarity. Below are results for a loop calculation (all converged) for the bands in the picture (band index-1):

Berry Phase of band 622 around a closed loop of radius 0.001: 0.04100696872977625
Berry Phase of band 623 around a closed loop of radius 0.001: 0.9589928889922766
Berry Phase of band 624 around a closed loop of radius 0.001: 0.9992665499471752
Berry Phase of band 625 around a closed loop of radius 0.001: 0.00073365589170473
Berry Phase of band 626 around a closed loop of radius 0.001: 0.9893624039963602
Berry Phase of band 627 around a closed loop of radius 0.001: 0.010637242474431005
Berry Phase of band 628 around a closed loop of radius 0.001: 0.023553042727784267
Berry Phase of band 629 around a closed loop of radius 0.001: 0.9764470491165737
Berry Phase of band 630 around a closed loop of radius 0.001: 0.995853412417517
Berry Phase of band 631 around a closed loop of radius 0.001: 0.004146595726341293
Berry Phase of band 632 around a closed loop of radius 0.001: 0.9694079911836682
Berry Phase of band 633 around a closed loop of radius 0.001: 0.030592063207998062
Berry Phase of band 634 around a closed loop of radius 0.001: 0.00023132206496108225
Berry Phase of band 635 around a closed loop of radius 0.001: 0.9997690718767575
Berry Phase of band 636 around a closed loop of radius 0.001: 0.025006111884210876
Berry Phase of band 637 around a closed loop of radius 0.001: 0.9749933038092109
Berry Phase of band 638 around a closed loop of radius 0.001: 0.00548851032211312
Berry Phase of band 639 around a closed loop of radius 0.001: 0.9945115379076279

Thanks

image

import tbmodels
import numpy as np
import matplotlib.pyplot as plt
import z2pack
import logging

Load the model

model = tbmodels.Model.from_hdf5_file('tb.hdf5')

logging.getLogger('z2pack').setLevel(logging.INFO)
system = z2pack.tb.System(model, bands=[639])

x0 = 0
y0 = 0
radii = [0.01]

for r in radii:
result= z2pack.line.run(
system=system,
line=lambda t: [x0 + r * np.cos(2 * np.pi * t), y0 + r * np.sin(2 * np.pi * t), 0],
iterator=range(10, 200, 10),
pos_tol=0.001
)

    print(f"Berry Phase around a closed loop: {result.pol}")
@greschd
Copy link
Member

greschd commented Jun 25, 2024

I'm trying to calculate the berry phase around a nodal point at Gamma in a hexagonal BZ.

The Hybrid Wannier Charge Center (HWCC) values are computed from eigenvalues $e^{i 2 \pi \lambda}$ ($\lambda$ being the HWCC) of the Wilson loop. This means they are well-defined only up to adding an integer constant.

In that sense, whether the value computed for two bands is 0 or 1 makes no difference, this is the same result.

What kind of topological protection are you aiming to detect here? It can happen that the HWCC are further quantized, or the two states can be separated into two symmetry-protected halves, but this in general requires additional symmetry (and is less straightforward to compute).

For the generic Weyl node, the Berry flux needs to be computed on a sphere surrounding the node. See the following example for reference: https://z2pack.greschd.ch/en/latest/examples/tb/wte2_tb.html

@khaledb9
Copy link
Author

My material is 2D so the typical weyl sphere method might not be correct in my case. I'm trying to calculate the berry phase for a closed circular loop in 2D around the Gamma point, to show that these points have a chirality and thus, surface states. I have learned (correct me if im wrong please) that the polarization is related to the berry phase so 1 means 2pi berry phase? My system obeys Time reversal symmetry.

In fact I have been testing with z2pack and obtaining results that doesnt seem to be right wether the bands issue I mentioned or the fact that the polarization for points with no intersection gives polarization of 1, which makes me ask if the relation between berry phase and polarization I mentioned holds.

@khaledb9
Copy link
Author

khaledb9 commented Jun 25, 2024

To illustarte further please check the below result, I cant seem to calculate the berry phase in a correct way. I chose the loop to be around K point

Berry Phase of band 652 around a closed loop of radius 0.005: 7.368303312205171e-05
Berry Phase of band 653 around a closed loop of radius 0.005: 0.999642837064755
Berry Phase of band 654 around a closed loop of radius 0.005: 0.000765376347885649
Berry Phase of band 655 around a closed loop of radius 0.005: 2.8407457023149618e-05
Berry Phase of band 656 around a closed loop of radius 0.005: 3.889830566095043e-06
Berry Phase of band 657 around a closed loop of radius 0.005: 0.9998660516678797
Berry Phase of band 658 around a closed loop of radius 0.005: 0.9999464708214418
Berry Phase of band 659 around a closed loop of radius 0.005: 0.00023017399217906132
Berry Phase of band 660 around a closed loop of radius 0.005: 0.9999637112609321
Berry Phase of band 661 around a closed loop of radius 0.005: 0.9996424753705355

image

@greschd
Copy link
Member

greschd commented Jun 25, 2024

that the polarization is related to the berry phase so 1 means 2pi berry phase

Yes, that's right. But the Berry phase is only Gauge-invariant up to multiples of $2\pi$. So a Berry phase of 0 or $2\pi$, or $4\pi$, is all the same result. Z2Pack chooses to show the result within $[0, 1)$, but e.g. $-0.1$ and $0.9$ are equivalent.

The topological invariants which Z2Pack can compute are smooth evolutions of the Berry phase over a surface. Or in the case of a line, if it was e.g. quantized to multiples of $\pi$, not $2\pi$.

0.005: 0.00023017399217906132

As the radius goes to zero, it's expected that the Berry phase approaches 0 (or -0, i.e. 0.999) on a trivial band.

@khaledb9
Copy link
Author

khaledb9 commented Jun 25, 2024 via email

@greschd
Copy link
Member

greschd commented Jun 25, 2024

If I understand correctly, that means if the Berry phase is pi I should expect a polarization of 0.5. ?

Yes, that's right.

So is there is a way by which I can differentiate between a trivial point in a band and a point with Berry phase of 2pi?

Short answer: I don't know exactly.

One way which I think could occur is that the Berry phase of each band individually goes to $\pi$ as the radius goes to zero. But there may be other options of topological invariants which could be defined.

@khaledb9
Copy link
Author

khaledb9 commented Jun 26, 2024

One way which I think could occur is that the Berry phase of each band individually goes to
𝜋
as the radius goes to zero. But there may be other options of topological invariants which could be defined.

Would that be equivalent to the case I mentioned earlier, where two bands each have a fraction, (i.e 0.25 and 0.75), this then makes the berry phase 2pi since each band has a non-trivial polarization value? In the other case where the bands are trivial then each band would have a polarization of 0 or 1?

Lastly, I would be grateful for your comment on the choice of bands, whether to pick the relevant bands or the full bands (up to band of interest). The reason I'm bringing this up is that I've been looking at the source code of wanniertools just for a comparison with the results I get from z2pack and I've noticed that the berry phase is taken as contributions from all bands not only bands of choice.

Thank you for your useful insights.

@greschd
Copy link
Member

greschd commented Jun 26, 2024

Would that be equivalent to the case I mentioned earlier, where two bands each have a fraction, (i.e 0.25 and 0.75), this then makes the berry phase 2pi since each band has a non-trivial polarization value? In the other case where the bands are trivial then each band would have a polarization of 0 or 1?

The important here would be that the individual bands have fractional polarization as the loop radius goes to zero. In that case, the gap cannot adiabatically be opened since that would discontinuously change the Berry phase.

Lastly, I would be grateful for your comment on the choice of bands, whether to pick the relevant bands or the full bands (up to band of interest). The reason I'm bringing this up is that I've been looking at the source code of wanniertools just for a comparison with the results I get from z2pack and I've noticed that the berry phase is taken as contributions from all bands not only bands of choice.

It's typical to choose all occupied bands. But in the general case, any set of bands which are separated by a direct energy gap along the line / surface of consideration can be computed.

@khaledb9
Copy link
Author

khaledb9 commented Jun 26, 2024

Thanks for your reply

The important here would be that the individual bands have fractional polarization as the loop radius goes to zero. In that case, the gap cannot adiabatically be opened since that would discontinuously change the Berry phase.

If the radius goes to zero, the dispersion around the point will not be captured, how will the calculation of berry phase be meaningful? In fact, for any band (in other examples as well) when I try a radius close to zero (0.005) I get a Polarization of 1 or 0. Shouldn't the radius be large enough to capture the dispersion character? In my case is 0.015-0.03. Maybe I did not completely understand your statement above. This also agree with your reply above.

As the radius goes to zero, it's expected that the Berry phase approaches 0 (or -0, i.e. 0.999) on a trivial band.

As for the bands, there happens to be weyl points that are gapless, hence the topological character around the point itself is useful. Would the fact that the points of interest are gapless affect the fractional polarization above, and the choice of bands, I find it more meaningful to choose two isolated bands.

@greschd
Copy link
Member

greschd commented Jun 29, 2024

Since I really don't know which topological invariants exist in the 2D case, I'll answer the question about the radius w.r.t. 3D Weyl points: in that case, the Chern invariant / evolution of hybrid Wannier charge centers remains non-zero as the radius of the sphere surrounding it goes to zero. That is precisely what constitutes its topological nature: there is no way to adiabatically perturb the Hamiltonian and open the gap, since that would necessitate a discontinuous change in Berry flux.

Would the fact that the points of interest are gapless affect the fractional polarization above, and the choice of bands, I find it more meaningful to choose two isolated bands.

It really depends what the goal of the calculation is: when searching for edge states near the Fermi energy, it makes sense to include all unoccupied bands in one calculation. When the bands are considered individually, one can of course still add them up and get to that result. But topological bands far away from the Fermi energy may not be very meaningful when they're cancelled by other nearby bands.

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