Exemplo n.º 1
0
    def berry(self):
        
        # Calculate Berry phase around Dirac cones

        K = -(4 * np.pi) / (3 * np.sqrt(3))

        if self.Haldane.value() != 0:
            Lat = lattice('Sheet', 'Haldane')
        else:

            Lat = lattice('Sheet', 'Monolayer')

        H = Hamiltonian(Lat, self.Hoppingt2.value(), 0, 0, self.Haldane.value())
        if self.Magneticfield2.value() != 0:
            H.add_magnetic_field(self.Magneticfield2.value(), 'Perpendicular')
        if self.OnsiteV2.value() != 0:
            H.add_lattice_imbalance(self.OnsiteV2.value())

        i = topology(H)

        k1 = i.berry_curvature(np.array([-(4 * np.pi) / (3 * np.sqrt(3)), 0]))
        k2 = i.berry_curvature(np.array([(4 * np.pi) / (6 * np.sqrt(3)), (4 * np.pi) / (3 * 2)]))
        k3 = i.berry_curvature(np.array([(4 * np.pi) / (6 * np.sqrt(3)), -(4 * np.pi) / (3 * 2)]))
        k4 = i.berry_curvature(np.array([(4 * np.pi) / (3 * np.sqrt(3)), 0]))
        k5 = i.berry_curvature(np.array([-(4 * np.pi) / (6 * np.sqrt(3)), (4 * np.pi) / (3 * 2)]))
        k6 = i.berry_curvature(np.array([-(4 * np.pi) / (6 * np.sqrt(3)), -(4 * np.pi) / (3 * 2)]))
        G = i.berry_curvature(np.array([0, 0]))

        msgBox = QtWidgets.QMessageBox()
        s = "K-point: {:.4f} \n K'-point: {:.4f} \n Gamma-point: {:.4f}".format(k1, k4, G)
        msgBox.setText("Berry phase")
        msgBox.setInformativeText(s)
        msgBox.exec_()
Exemplo n.º 2
0
    def locchernKprime(self):
        
        # Calculate local chern number at K' valley from chosen lattice and Hamiltonian

        K = -(4 * np.pi) / (3 * np.sqrt(3))

        if self.Haldane.value() != 0:
            Lat = lattice('Sheet', 'Haldane')
        else:

            Lat = lattice('Sheet', 'Monolayer')

        H = Hamiltonian(Lat, self.Hoppingt2.value(), 0, 0, self.Haldane.value())
        if self.Magneticfield2.value() != 0:
            H.add_magnetic_field(self.Magneticfield2.value(), 'Perpendicular')
        if self.OnsiteV2.value() != 0:
            H.add_lattice_imbalance(self.OnsiteV2.value())

        i = topology(H)

        ch = i.chern_valley("K'", 0.01) # calculate chern number
        s = "{:.4f}".format(ch)

        

        msgBox = QtWidgets.QMessageBox()
        msgBox.setText("Local Chern number:")
        msgBox.setInformativeText(s)
        msgBox.exec_()
Exemplo n.º 3
0
    def dos(self):
        
        # Calculate density of states from chosen lattice and Hamiltonian
        
        K = -(4 * np.pi) / (3 * np.sqrt(3))

        if self.Haldane.value() != 0 or self.AntiHaldane.value() != 0:
            Lat = lattice('Sheet', 'Haldane')
        else:

            Lat = lattice('Sheet', 'Monolayer')

        if self.AntiHaldane.value() != 0:
            H = Hamiltonian(Lat, self.Hoppingt2.value(), 0, 0, self.AntiHaldane.value())
            H.add_antiHaldane()
        else:
            H = Hamiltonian(Lat, self.Hoppingt2.value(), 0, 0, self.Haldane.value())
        if self.Magneticfield2.value() != 0:
            H.add_magnetic_field(self.Magneticfield2.value(), 'Perpendicular')
        if self.OnsiteV2.value() != 0:
            H.add_lattice_imbalance(self.OnsiteV2.value())
        H.build_Hamiltonian()

        dos, ev = H.dos(self.numberofKop.value(), emin = -self.energy.value(), emax = self.energy.value(), kxmin=-np.pi, kxmax=np.pi, kymin=-np.pi, kymax=np.pi)
        plt.plot(dos[1][:-1], dos[0])
        plt.ylabel('Density of states')
        plt.xlabel('Energy')
        plt.show()
Exemplo n.º 4
0
    def plot_summary(self):
        
        # Generate summary plot from chosen lattice and Hamiltonian
        
        K = -(4 * np.pi) / (3 * np.sqrt(3))

        if self.Haldane.value() != 0 or self.AntiHaldane.value() != 0:
            Lat = lattice('Sheet', 'Haldane') # Get correct lattice
        else:

            Lat = lattice('Sheet', 'Monolayer')


        if self.AntiHaldane.value() != 0:
            H = Hamiltonian(Lat, self.Hoppingt2.value(), 0, 0, self.AntiHaldane.value())
            H.add_antiHaldane() # If selected, add complex hopping
        else:
            H = Hamiltonian(Lat, self.Hoppingt2.value(), 0, 0, self.Haldane.value()) # If selected, add complex hopping
        if self.Magneticfield2.value() != 0: # Add magnetic field
            H.add_magnetic_field(self.Magneticfield2.value(), 'Perpendicular')
        if self.OnsiteV2.value() != 0: # Add sublattice imbalance
            H.add_lattice_imbalance(self.OnsiteV2.value())
        
        # Generate summary plot
        P = Plot(H)
        P.summary(self.Nk.value(), K, 0, self.xIndex.value(), self.yIndex.value(), self.dxIndex.value(),
                  self.dyIndex.value())
        plt.show()
Exemplo n.º 5
0
    def locchernKprime(self):
        
        # Calculate local chern number in K' valley

        K = -(4 * np.pi) / (3 * np.sqrt(3))

        Lat = lattice('Sheet', self.SelectStack.currentText())

        H = Hamiltonian(Lat, self.Hoppingt2.value(), self.Hoppingtprime2.value())
        if self.Magneticfield2.value() != 0:
            H.add_magnetic_field(self.Magneticfield2.value(), self.SelectBBil.currentText(), self.BAngle.value())

        if self.OnsiteV_2.value() != 0:
            H.add_sublattice_imbalance(self.OnsiteV_2.value())

        i = topology(H)

        ch = i.chern_valley("K'", 0.01)
        s = "{:.4f}".format(ch)

        #print("Local Chern number:", i.chern_valley("K'", 0.01))

        msgBox = QtWidgets.QMessageBox()
        msgBox.setText("Local Chern number:")
        msgBox.setInformativeText(s)
        msgBox.exec_()
Exemplo n.º 6
0
    def locchernKprime(self):
        
        # Calculate local chern number at K' valley from chosen lattice and Hamiltonian

        K = -(4 * np.pi) / (3 * np.sqrt(3))

        Lat = lattice('Sheet', self.SelectStack.currentText()) # Create lattice

        H = Hamiltonian(Lat, self.Hoppingt2.value(), self.Hoppingtprime2.value()) # Create Hamiltonian
        if self.Magneticfield2.value() != 0: # Add magnetic field
            H.add_magnetic_field(self.Magneticfield2.value(), self.SelectBBil.currentText(), self.BAngle.value())
        if self.OnsiteV.value() != 0: # Add layer potentials
            H.add_lattice_imbalance(self.OnsiteV.value())
        if self.OnsiteV_2.value() != 0: # Add sublattice potentials
            H.add_sublattice_imbalance(self.OnsiteV_2.value())

        i = topology(H) # Create invariants object

        ch = i.chern_valley("K'", 0.01) # Calculate chern number
        s = "{:.4f}".format(ch)

        

        msgBox = QtWidgets.QMessageBox()
        msgBox.setText("Local Chern number:")
        msgBox.setInformativeText(s)
        msgBox.exec_()
Exemplo n.º 7
0
    def ldos(self):

        # Calculate local density of states from chosen lattice and Hamiltonian

        Lat = lattice(
            'Ribbon',
            self.SelectEdge.currentText() + ' ' +
            self.SelectStack.currentText(), self.NUnit.value())

        H = Hamiltonian(Lat, self.Hoppingt.value(), self.Hoppingtprime.value())
        if self.Magneticfield.value() != 0:
            H.add_magnetic_field(self.Magneticfield.value(),
                                 self.SelectBBil.currentText())
        if self.OnsiteV.value() != 0:
            H.add_lattice_imbalance(self.OnsiteV.value())
        H.build_Hamiltonian()

        # calculate ldos

        ldos = H.expec_operators(es=np.linspace(-self.energy.value(),
                                                self.energy.value(), 100),
                                 delta=self.delta.value(),
                                 nk=self.numberofKop.value(),
                                 op=None)

        X, E = np.meshgrid(
            np.arange(0, len(Lat.orb[:, 1]), 1),
            np.linspace(-self.energy.value(), self.energy.value(), 100))
        plt.contourf(X, E, ldos)
        cbar = plt.colorbar()
        cbar.set_label('Local density of states')
        plt.ylabel('Energy')
        plt.xlabel('Lattice sites')
        plt.show()
Exemplo n.º 8
0
    def dos(self):

        # Calculate density of states from chosen lattice and Hamiltonian

        Lat = lattice('Ribbon',
                      self.SelectEdge.currentText() + ' ' +
                      self.SelectStack.currentText(),
                      self.NUnit.value())  # Generate lattice

        H = Hamiltonian(Lat, self.Hoppingt.value(),
                        self.Hoppingtprime.value())  # Generate Hamiltonian
        if self.Magneticfield.value() != 0:  # Add magnetic field
            H.add_magnetic_field(self.Magneticfield.value(),
                                 self.SelectBBil.currentText())
        if self.OnsiteV.value() != 0:  # Add layer polarization
            H.add_lattice_imbalance(self.OnsiteV.value())
        H.build_Hamiltonian()

        # calculate dos

        dos, ev = H.dos(self.numberofKop.value(),
                        emin=-self.energy.value(),
                        emax=self.energy.value(),
                        kxmin=-np.pi,
                        kxmax=np.pi,
                        kymin=-np.pi,
                        kymax=np.pi)
        plt.plot(dos[1][:-1], dos[0])
        plt.ylabel('Density of states')
        plt.xlabel('Energy')
        plt.show()
Exemplo n.º 9
0
    def berry(self):
        # calculate Berry phases
        K = -(4 * np.pi) / (3 * np.sqrt(3))

        Lat = lattice('Sheet', self.SelectStack.currentText())

        H = Hamiltonian(Lat, self.Hoppingt2.value(), self.Hoppingtprime2.value())
        if self.Magneticfield2.value() != 0:
            H.add_magnetic_field(self.Magneticfield2.value(), self.SelectBBil.currentText(), self.BAngle.value())
        if self.OnsiteV_2.value() != 0:
            H.add_sublattice_imbalance(self.OnsiteV_2.value())

        i = topology(H)

        k1 = i.berry_curvature(np.array([-(4 * np.pi) / (3 * np.sqrt(3)), 0]))
        k2 = i.berry_curvature(np.array([(4 * np.pi) / (6 * np.sqrt(3)), (4 * np.pi) / (3 * 2)]))
        k3 = i.berry_curvature(np.array([(4 * np.pi) / (6 * np.sqrt(3)), -(4 * np.pi) / (3 * 2)]))
        k4 = i.berry_curvature(np.array([(4 * np.pi) / (3 * np.sqrt(3)), 0]))
        k5 = i.berry_curvature(np.array([-(4 * np.pi) / (6 * np.sqrt(3)), (4 * np.pi) / (3 * 2)]))
        k6 = i.berry_curvature(np.array([-(4 * np.pi) / (6 * np.sqrt(3)), -(4 * np.pi) / (3 * 2)]))
        G = i.berry_curvature(np.array([0, 0]))



        msgBox = QtWidgets.QMessageBox()
        s = "K-point: {:.4f} \n K'-point: {:.4f} \n Gamma-point: {:.4f}".format(k1, k4, G)
        msgBox.setText("Berry phase")
        msgBox.setInformativeText(s)
        msgBox.exec_()
Exemplo n.º 10
0
    def upper_edge(self):
        
        # Calculate bandstructure and highlight edge states

        Lat = lattice('Ribbon', self.SelectEdge.currentText()+' '+self.SelectStack.currentText(), self.NUnit.value()) # Create lattice

        H = Hamiltonian(Lat, self.Hoppingt.value(), self.Hoppingtprime.value())# Create Hamiltonian
        if self.Magneticfield.value() != 0:# Add magnetic field
            H.add_magnetic_field(self.Magneticfield.value(), self.SelectBBil.currentText())
        if self.OnsiteV.value() != 0:# Add lattice imbalance
            H.add_lattice_imbalance(self.OnsiteV.value())
        P = Plot(H)
        P.upper_edge()
Exemplo n.º 11
0
    def calc_bands(self):
        
        # Calculate bandstructure of finite system

        Lat = lattice('Ribbon', self.SelectEdge.currentText()+' '+self.SelectStack.currentText(), self.NUnit.value()) # Create lattice

        H = Hamiltonian(Lat, self.Hoppingt.value(), self.Hoppingtprime.value())# Create Hamiltonian
        if self.Magneticfield.value() != 0:# Add magnetic field
            H.add_magnetic_field(self.Magneticfield.value(), self.SelectBBil.currentText())
        if self.OnsiteV.value() != 0:# Add lattice imbalance
            H.add_lattice_imbalance(self.OnsiteV.value())
        P = Plot(H)
        P.show_rib()
Exemplo n.º 12
0
    def plot_summary(self):
        
        # Generate summary plot from chosen lattice and Hamiltonian
        
        K = -(4 * np.pi) / (3 * np.sqrt(3))

        Lat = lattice('Sheet', self.SelectStack.currentText()) # Create lattice

        H = Hamiltonian(Lat, self.Hoppingt2.value(), self.Hoppingtprime2.value()) # Create Hamiltonian
        if self.Magneticfield2.value() != 0: # Add magnetic field
            H.add_magnetic_field(self.Magneticfield2.value(), self.SelectBBil.currentText(), self.BAngle.value())

        if self.OnsiteV_2.value() != 0: # Add layer polarization
            H.add_sublattice_imbalance(self.OnsiteV_2.value())
        P = Plot(H)
        P.summary(self.Nk.value(), K, 0, self.xIndex.value(), self.yIndex.value(), self.dxIndex.value(), self.dyIndex.value())
Exemplo n.º 13
0
    def calc_edge(self):

        # Calculate bandstructure from chosen lattice and Hamiltonian with colormap highlighting edge states

        Lat = lattice(
            'Ribbon',
            self.SelectEdge.currentText() + ' ' +
            self.SelectStack.currentText(), self.NUnit.value())

        H = Hamiltonian(Lat, self.Hoppingt.value(), self.Hoppingtprime.value())
        if self.Magneticfield.value() != 0:
            H.add_magnetic_field(self.Magneticfield.value(),
                                 self.SelectBBil.currentText())
        if self.OnsiteV.value() != 0:
            H.add_lattice_imbalance(self.OnsiteV.value())
        P = Plot(H)
        P.calc_edge()
Exemplo n.º 14
0
    def berry(self):
        
        # Calculate berry phase around valleys from chosen lattice and Hamiltonian

        K = -(4 * np.pi) / (3 * np.sqrt(3))

        Lat = lattice('Sheet', self.SelectStack.currentText()) # Create lattice

        H = Hamiltonian(Lat, self.Hoppingt2.value(), self.Hoppingtprime2.value()) # Create Hamiltonian
        if self.Magneticfield2.value() != 0: # Add magnetic field
            H.add_magnetic_field(self.Magneticfield2.value(), self.SelectBBil.currentText(), self.BAngle.value())
        if self.OnsiteV.value() != 0: # Add layer potentials
            H.add_lattice_imbalance(self.OnsiteV.value())
        if self.OnsiteV_2.value() != 0: # Add sublattice potentials
            H.add_sublattice_imbalance(self.OnsiteV_2.value())

                i = topology(H) # Create invariants object
    def calc_edge(self):

        # Calculate bandstructure from chosen lattice and Hamiltonian and highlight edge states

        Lat = lattice('Ribbon', 'Twisted Bilayer', self.NUnit.value(),
                      self.TwistAngle.value())

        H = Hamiltonian(Lat, self.Hoppingt.value())
        if self.Magneticfield.value() != 0:
            H.add_magnetic_field(self.Magneticfield.value(),
                                 self.SelectBBil.currentText())
        if self.OnsiteV.value() != 0:
            H.add_lattice_imbalance(self.OnsiteV.value())
        if self.OnsiteV_2.value() != 0:
            H.add_sublattice_imbalance(self.OnsiteV_2.value())
        P = Plot(H)
        P.calc_edge()
Exemplo n.º 16
0
    def plot_summary(self):

        # Generate summary plot of chosen lattice and Hamiltonian

        K = -(4 * np.pi) / (3 * np.sqrt(3))

        Lat = lattice('Sheet', 'Twisted Bilayer', 1, self.TwistAngle.value())

        H = Hamiltonian(Lat, self.Hoppingt2.value())
        if self.Magneticfield2.value() != 0:
            H.add_magnetic_field(self.Magneticfield2.value(),
                                 self.SelectBBil.currentText(),
                                 self.BAngle.value())
        if self.OnsiteV.value() != 0:
            H.add_lattice_imbalance(self.OnsiteV.value())
        if self.OnsiteV_2.value() != 0:
            H.add_sublattice_imbalance(self.OnsiteV_2.value())
        P = Plot(H)
        P.summary(self.Nk.value(), K, 0, 17, 75, 75, 75)
Exemplo n.º 17
0
    def dos(self):
        
        # Calculate density of states from chosen lattice and Hamiltonian
        
        K = -(4 * np.pi) / (3 * np.sqrt(3))

        Lat = lattice('Sheet', self.SelectStack.currentText()) # Create lattice

        H = Hamiltonian(Lat, self.Hoppingt2.value(), self.Hoppingtprime2.value()) # Create Hamiltonian
        if self.Magneticfield2.value() != 0: # Add magnetic field
            H.add_magnetic_field(self.Magneticfield2.value(), self.SelectBBil.currentText(), self.BAngle.value())
        if self.OnsiteV.value() != 0: # Add layer potentials
            H.add_lattice_imbalance(self.OnsiteV.value())
        if self.OnsiteV_2.value() != 0: # Add sublattice potentials
            H.add_sublattice_imbalance(self.OnsiteV_2.value())
        H.build_Hamiltonian()

        dos, ev = H.dos(self.numberofKop.value(), emin=-self.energy.value(), emax=self.energy.value(), kxmin=-np.pi,
                        kxmax=np.pi, kymin=-np.pi, kymax=np.pi)
        plt.plot(dos[1][:-1], dos[0])
        plt.ylabel('Density of states')
        plt.xlabel('Energy')
        plt.show()
Exemplo n.º 18
0
    ax.plot(H.axis2[:, 0], E[x, :, 5])

    ax.set_xlabel("$k_ya$")
    ax.set_title('Plot along ky', fontsize=10)
    ax.set_ylabel("$\epsilon_{k}$")


# List of parameters

alpha = 0
theta = 0
t7 = 1

# Get lattice

Lat = lattice('Sheet', 'Trilayer ABC')

# Get Hamiltonian

H = Hamiltonian(Lat, 3, 0.3)

H.build_Hamiltonian()


def run():
    def update(ax1, ax2, ax3, ax4, val):

        alpha = alpha_slider.val

        theta = theta_slider.val
        t7 = t7_slider.val