-
Notifications
You must be signed in to change notification settings - Fork 52
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
Comments
The Hybrid Wannier Charge Center (HWCC) values are computed from eigenvalues 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 |
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. |
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 |
Yes, that's right. But the Berry phase is only Gauge-invariant up to multiples of 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
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. |
If I understand correctly, that means if the Berry phase is pi I should expect a polarization of 0.5. ??
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?
Get Outlook for iOS<https://aka.ms/o0ukef>
…________________________________
From: Dominik Gresch ***@***.***>
Sent: Tuesday, June 25, 2024 10:52:08 PM
To: Z2PackDev/Z2Pack ***@***.***>
Cc: Khaled Badawy ***@***.***>; Author ***@***.***>
Subject: Re: [Z2PackDev/Z2Pack] Calculating Berry Phase around a loop (Issue #227)
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.
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.
—
Reply to this email directly, view it on GitHub<#227 (comment)>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/AXGS3TBMCLZCQ4Q6VCSHCRTZJG35RAVCNFSM6AAAAABJ333OLSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCOBZG4ZTONRWGY>.
You are receiving this because you authored the thread.Message ID: ***@***.***>
|
Yes, that's right.
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 |
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. |
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.
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. |
Thanks for your reply
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 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. |
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.
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. |
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
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
)
The text was updated successfully, but these errors were encountered: