Skip to content

Translational symmetry with generator defined hoppings #57

Description

@AnMiser

While constructing series of hopping automatically using the hopping_generator modifier I noted that the model created in this way has troubles in dealing with periodic boundary conditions.
I attach a simple example for a basic graphene system

from math import pi, sqrt
import numpy as np
from scipy.spatial import cKDTree
import matplotlib.pyplot as plt
import pybinding as pb
from pybinding.repository.graphene import a, a_cc, t

def monolayer_graphene():
    lat = pb.Lattice([a/2, a*np.sqrt(3)/2], [-a/2, a*np.sqrt(3)/2])
    lat.add_sublattices(("A", [0, 0]),
                        ("B", [0, a_cc]))
    return lat

@pb.hopping_generator("intralayer", energy=t)
def intralayer_generator(x, y, z):
    positions = np.stack([x, y, z], axis=1)
    layer = (z == 0)
    d_min = a_cc * 0.98
    d_max = a_cc * 1.1
    kdtree1 = cKDTree(positions[layer])
    kdtree2 = cKDTree(positions[layer])
    coo = kdtree1.sparse_distance_matrix(kdtree2, d_max, output_type='coo_matrix')
    idx = coo.data > d_min
    abs_idx = np.flatnonzero(layer)
    row, col = abs_idx[coo.row[idx]], abs_idx[coo.col[idx]]
    return row, col

lattice = monolayer_graphene()
model = pb.Model(lattice, intralayer_generator, pb.translational_symmetry())
solver = pb.solver.lapack(model)
Gamma = [0, 0]
K1 = [-4*pi / (3*sqrt(3)*a_cc), 0]
M = [0, 2*pi / (3*a_cc)]
K2 = [2*pi / (3*sqrt(3)*a_cc), 2*pi / (3*a_cc)]
bands = solver.calc_bands(K1, Gamma, M, K2)
bands.plot(point_labels=['K', r'$\Gamma$', 'M', 'K'])

The bands are computed incorrectly (they're simply confused with the starting Hamiltonian eigenvalues).
Is there a way to enforce translation symmetry for a lattice with hoppings created by a generator?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions