Reproduce band structure Kagome Fermi-Hubbard using Python

  • Thread starter Thread starter randomquestion
  • Start date Start date
  • Tags Tags
    Band Structure
AI Thread Summary
The discussion focuses on reproducing the band structure of the Kagome Fermi-Hubbard model using Python, specifically along the high symmetry path Gamma-K-M-Gamma. Participants highlight the importance of correctly defining the high symmetry points, particularly the K and M points, to achieve accurate energy band results. There is debate over the correct expressions for the M points, with suggestions that the definitions in the referenced paper may be misinterpreted. Adjustments to the cosine function's argument are also discussed, with participants noting that using the correct definitions leads to reproducing the expected figure from the paper. Ultimately, clarifications on point definitions and code adjustments are crucial for accurate reproduction of the band structure.
randomquestion
Messages
6
Reaction score
2
Homework Statement
I am trying to reproduce figure 5c) of https://arxiv.org/pdf/2002.03116.pdf in Python.
But I cannot spot my error in my attempt
Relevant Equations
$$\epsilon_{\boldsymbol{k}} / t = 2,-1 \pm \sqrt{3+2 \sum_{\nu=1}^3 \cos \left(\boldsymbol{k}\cdot e_{\nu}\right)}$$
We need to define a high symmetry point path in the Brillouin zone, we can choose: Gamma-K-M-Gamma

My attempt:


Code:
import numpy as np
import matplotlib.pyplot as plt

# lattice vectors
a1 = np.array([1, 0])
a2 = np.array([-1/2, np.sqrt(3)/2])
a3 = -(a1 + a2)
a = [a1,a2,a3]

#high symmetry points
Gamma = np.array([0, 0])
K = 2*np.pi*np.array([2/3, 0])
M = 2*np.pi*np.array([0, 1/np.sqrt(3)])


num_points = 100
k_path = np.concatenate([np.linspace(k_Gamma, k_K, num_points, endpoint=False),
                         np.linspace(k_K, k_M, num_points, endpoint=False),
                         np.linspace(k_M, k_Gamma, num_points)])


# Calculate energy eigenvalues for each k-point
energies = np.zeros((3, len(k_path)))
for i, k in enumerate(k_path):
    cos_sum = np.cos(np.dot(k,a[0]))+ np.cos(np.dot(k,a[1]))+np.cos(np.dot(k,a[2]))
    energies[:, i] = [2, -1 + np.sqrt(3 + 2*cos_sum), -1 - np.sqrt(3 + 2*cos_sum)]

   
   
# Plot the energy bands
plt.figure(figsize=(8, 6))
for band in range(3):
    plt.plot(np.arange(len(k_path)), energies[band], label=f'Band {band+1}')

plt.ylabel('Energy')

plt.grid(True)

plt.xticks([0, 3*num_points//3, 2*3*num_points//3, num_points*3], [r'$\Gamma$', 'K', 'M', r'$\Gamma$'])
 
Physics news on Phys.org
I noticed that in your program the argument of the cosine function in the energy is ##\vec k \cdot \vec a_\nu##. But it looks to me that on page 8 of the paper, the argument is ##\vec k \cdot \vec a_\nu / 2##.

Also, would it make a difference in the energy band structure graph if you choose the "high-symmetry path" to be ##\Gamma## - ##K_2## - ##M_1## - ##\Gamma## rather than your choice of ##\Gamma## - ##K_2## - ##M_2## - ##\Gamma##? I ask mostly out of curiosity. I'm not knowledgeable in this field.
 
1713399385369.png


In the paper at the top right of page 8, they write ##\vec M_1 = \dfrac{2\pi}{a}(0, \frac 1 {\sqrt 3})##. But, to me, this looks like the expression for ##\vec M_2##. Shouldn't ##\vec M_1## be ##\vec M_1 = \dfrac{2\pi}{a}(\frac 1 2, \frac 1 {2\sqrt 3})##?

I'm able to reproduce figure 5(c) using the path ##\Gamma##-##K_2##-##M_1##-##\Gamma## with ##\vec M_1 = \dfrac{2\pi}{a}(\frac 1 2, \frac 1 {2\sqrt 3})##. However, I have to follow your lead and use ##\vec k \cdot \vec a_\nu## instead of ##\vec k \cdot \vec a_\nu/2 ## for the argument of the cosine function.

If I construct the band structure graph using the path ##\Gamma##-##K_2##-##M_2##-##\Gamma## with ##\vec M_2 = \dfrac{2\pi}{a}(0, \frac 1 {\sqrt 3})##, I get a graph that differs from 5(c). That's not surprising. I think this is the graph that your code would produce:

1713401059123.png


Path ##\Gamma##-##K_1##-##M_2##-##\Gamma## should also reproduce 5(c) since this path is equivalent to ##\Gamma##-##K_2##-##M_1##-##\Gamma##.

I don't know Python, so I used different software.

[Edited to insert the clip of code.]
 
Last edited:
  • Like
Likes randomquestion
Am I going insane? When I run your code I get the following which looks correct to me. The only thing I had to change was

##k_K \rightarrow K##

##k_M \rightarrow M##

##k_Gamma \rightarrow \Gamma##

4434A87F-AF8B-49B4-A952-899C09643EFB.jpeg
 
Hello, thank you all for the replies. I found the source of my error. I have wrongly defined the K point.

It should be:

# high symmetry points
Gamma = np.array([0, 0])
K = 2*np.pi*np.array([1/3, 1/np.sqrt(3)])
M = 2*np.pi*np.array([0, 1/(np.sqrt(3))])


with this convention we get the correct plot (Fig. 5c).
 
TSny said:
View attachment 343611

In the paper at the top right of page 8, they write ##\vec M_1 = \dfrac{2\pi}{a}(0, \frac 1 {\sqrt 3})##. But, to me, this looks like the expression for ##\vec M_2##. Shouldn't ##\vec M_1## be ##\vec M_1 = \dfrac{2\pi}{a}(\frac 1 2, \frac 1 {2\sqrt 3})##?

I'm able to reproduce figure 5(c) using the path ##\Gamma##-##K_2##-##M_1##-##\Gamma## with ##\vec M_1 = \dfrac{2\pi}{a}(\frac 1 2, \frac 1 {2\sqrt 3})##. However, I have to follow your lead and use ##\vec k \cdot \vec a_\nu## instead of ##\vec k \cdot \vec a_\nu/2 ## for the argument of the cosine function.

If I construct the band structure graph using the path ##\Gamma##-##K_2##-##M_2##-##\Gamma## with ##\vec M_2 = \dfrac{2\pi}{a}(0, \frac 1 {\sqrt 3})##, I get a graph that differs from 5(c). That's not surprising. I think this is the graph that your code would produce:

View attachment 343613

Path ##\Gamma##-##K_1##-##M_2##-##\Gamma## should also reproduce 5(c) since this path is equivalent to ##\Gamma##-##K_2##-##M_1##-##\Gamma##.

I don't know Python, so I used different software.

[Edited to insert the clip of code.]
thank you
 
PhDeezNutz said:
Am I going insane? When I run your code I get the following which looks correct to me. The only thing I had to change was

##k_K \rightarrow K##

##k_M \rightarrow M##

##k_Gamma \rightarrow \Gamma##

View attachment 343629
The middle part of your graph, K -> M, differs from Figure 5(c) in the paper. This is due to point M in the paper's graph corresponding to M1. But M in @randomquestion's code is M2.

1713447456279.png


1713447536585.png


The first and last segments of the two graphs are the same.
 
  • Like
Likes randomquestion and PhDeezNutz
Back
Top