Skip to content

Calculating Berry Phase around a loop #227

@khaledb9

Description

@khaledb9

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}")

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions