Reproduce band structure Kagome Fermi-Hubbard using Python

  • Thread starter Thread starter randomquestion
  • Start date Start date
  • Tags Tags
    Band Structure
Click For Summary

Homework Help Overview

The discussion revolves around reproducing the band structure of the Kagome Fermi-Hubbard model using Python. Participants are exploring the correct definitions of high symmetry points in the Brillouin zone and their implications on the resulting energy band structure.

Discussion Character

  • Exploratory, Assumption checking, Problem interpretation

Approaches and Questions Raised

  • Participants are attempting to define high symmetry points and paths in the Brillouin zone, questioning the correctness of their definitions and the impact on the energy band structure. There are discussions about the argument used in the cosine function and variations in the chosen paths.

Discussion Status

Some participants have identified potential errors in the definitions of the high symmetry points and have shared corrections. Others are comparing their results with figures from a referenced paper, noting discrepancies and exploring the implications of different paths on the band structure.

Contextual Notes

There are references to specific figures and equations from a paper, indicating that participants are working within the constraints of established literature. Some participants express uncertainty about their understanding of the material and the software being used.

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   Reactions: 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).
 
  • Like
Likes   Reactions: TSny
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   Reactions: randomquestion and PhDeezNutz

Similar threads

  • · Replies 0 ·
Replies
0
Views
2K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 7 ·
Replies
7
Views
3K
Replies
0
Views
2K
Replies
7
Views
2K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 6 ·
Replies
6
Views
2K
Replies
1
Views
806
  • · Replies 6 ·
Replies
6
Views
4K
  • · Replies 1 ·
Replies
1
Views
4K