Error in the calculation of Z2 invariant of Kane-Mele Model

SAYAN MONDAL mondal18 at iitg.ac.in
Fri Sep 17 08:28:40 CEST 2021


Dear Developer,
                             I am trying to get the phase diagram of the Kane-Mele model as described in Fig. 1 of  (https://doi.org/10.1103/PhysRevLett.95.146802). The Z2 invariant is 1 inside the curve while it vanishes outside. So I tried to get the Z2 invariant for several values of lambda_R and lambda_v. The code is giving correct results for some values of  lambda_R and lambda_v, but for some other values it is showing some errors as follows:

WARNING: Iterator stopped before the calculation could converge.
WARNING: Iterator stopped before the calculation could converge.
WARNING: 'min_neighbour_dist' reached: cannot add line at t = 0.6562500000000001
WARNING: Iterator stopped before the calculation could converge.
WARNING: Iterator stopped before the calculation could converge.
WARNING: 'min_neighbour_dist' reached: cannot add line at t = 0.6562500000000001
WARNING: Iterator stopped before the calculation could converge.
WARNING: Iterator stopped before the calculation could converge.
WARNING: 'min_neighbour_dist' reached: cannot add line at t = 0.6562500000000001

My code is attached below:
*************************************
import logging

import z2pack
import numpy as np
from numpy import cos, sin, kron, sqrt
import matplotlib.pyplot as plt


logging.getLogger('z2pack').setLevel(logging.WARNING)

# defining pauli matrices
identity = np.identity(2, dtype=complex)
pauli_x = np.array([[0, 1], [1, 0]], dtype=complex)
pauli_y = np.array([[0, -1j], [1j, 0]], dtype=complex)
pauli_z = np.array([[1, 0], [0, -1]], dtype=complex)


def get_kane_mele_hamiltonian(t, lambda_v, lambda_R, lambda_SO):
    def inner(k):
        k = np.array(k) * 2 * np.pi
        kx, ky = k
        # change to reduced coordinates
        x = (kx - ky) / 2
        y = (kx + ky) / 2
        return (
            t * (1 + 2 * cos(x) * cos(y)) * kron(pauli_x, identity) +
            lambda_v * kron(pauli_z, identity) + lambda_R *
            (1 - cos(x) * cos(y)) * kron(pauli_y, pauli_x) +
            -sqrt(3) * lambda_R * sin(x) * sin(y) * kron(pauli_y, pauli_y) +
            2 * t * cos(x) * sin(y) * kron(pauli_y, identity) + lambda_SO *
            (2 * sin(2 * x) - 4 * sin(x) * cos(y)) * kron(pauli_z, pauli_z) +
            lambda_R * cos(x) * sin(y) * kron(pauli_x, pauli_x) +
            -sqrt(3) * lambda_R * sin(x) * cos(y) * kron(pauli_x, pauli_y)
        )

    return inner


if __name__ == '__main__':
    arr = []
    lambda_R_list = np.linspace(0, 0.31, 20)
    lambda_v_list = np.linspace(0, 0.24, 20)
    for lR in lambda_R_list:
        for lv in lambda_v_list:
            system = z2pack.hm.System(
                get_kane_mele_hamiltonian(
                    t=1, lambda_v = lv, lambda_R=lR, lambda_SO=0.06
                ),
                dim=2,
                check_periodic=True
            )
            res = z2pack.surface.run(system=system, surface=lambda s, t: [s / 2, t])
        #    print('Z2 invariant: {}'.format(z2pack.invariant.z2(res)))
            val = z2pack.invariant.z2(res)
            arr.append([lR, lv, val])

    arr = np.asarray(arr)
    np.savetxt('pd.txt', arr)
    print(arr)

#    z2pack.plot.wcc(res, axis=ax)
#    ax.set_xticks([0, 1])
#    ax.set_xticklabels(['0', '0.5'])
#    ax.set_xlabel(r'$k_y$')
#    ax.set_yticks([0, 1])
#    ax.set_ylabel(r'$\bar{y}$', rotation='horizontal')
#    plt.savefig('plot.pdf', bbox_inches='tight')

**************************************************


Is there any way to correct those errors? I shall look forward to your kind cooperation.

Thank you

Best Regards,
Sayan Mondal,
Research Scholar,
Dept. of Physics,
Roll No. -   186121022,
E-mail:       mondal18 at iitg.ac.in
Indian Institute of Technology Guwahati
Guwahati - 781039
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.phys.ethz.ch/pipermail/z2pack/attachments/20210917/6c06dd6d/attachment.html>


More information about the Z2Pack mailing list