Skip to content
Snippets Groups Projects
diamond_chain-checkpoint.py 2.6 KiB
Newer Older
import kwant
import numpy as np


def diamond_chain_system(N_c, system_params):
    '''
    Create a diamond chain of trimer unit cells. Each atom of the trimer has two orbital angular momentum states, + and -
          _______
    ...  | C_i_+ |
         | C_i_- |         ...
        / ------- \ ______ /
    ...           | A_i_+ | ...
                  | A_i_- |
        \ ______ / ------- \
    ...  | B_i_+ |         ...
         | B_i_- |
          ------- 
    
    :param int N_c: number of unit cells to include in the cell
    :param dict system_params: parameters
    
    :rtype kwant.system.FiniteSystem:
    '''
    
    # make lattices and sublattices
    lat = kwant.lattice.Polyatomic(prim_vecs = [[1,0],[0,1]], basis = [[1,0],[1,0], [0,-1],[0,-1], [0,1],[0,1]])
    a_lat_pos, a_lat_neg, b_lat_pos, b_lat_neg, c_lat_pos, c_lat_neg = lat.sublattices
    
    #make builder and populate with onsite and hoppings
    syst = kwant.Builder()
    
    
    for i in range(N_c):
        
        #staggered point
        sp = 2*i
        
        syst[a_lat_pos(sp,0)] = 0
        syst[a_lat_neg(sp,0)] = 0
        syst[b_lat_pos(sp,0)] = 0
        syst[b_lat_neg(sp,0)] = 0
        syst[c_lat_pos(sp,0)] = 0
        syst[c_lat_neg(sp,0)] = 0
        
        if i < N_c - 1:
        
            
            syst[c_lat_pos(sp+2,0)] = 0
            syst[b_lat_pos(sp+2,0)] = 0
            syst[c_lat_neg(sp+2,0)] = 0
            syst[b_lat_neg(sp+2,0)] = 0

            # + <--> + 
            syst[a_lat_pos(sp,0), c_lat_pos(sp+2,0)] = 1
            syst[a_lat_pos(sp,0), b_lat_pos(sp+2,0)] = 1

            # - <--> -
            syst[a_lat_neg(sp,0), c_lat_neg(sp+2,0)] = 1
            syst[a_lat_neg(sp,0), b_lat_neg(sp+2,0)] = 1

            # + <--> - 
            syst[a_lat_pos(sp,0), b_lat_neg(sp+2,0)] = 1
            syst[a_lat_neg(sp,0), b_lat_pos(sp+2,0)] = 1

            # + <--> - hopping with phase
            syst[a_lat_pos(sp,0), c_lat_neg(sp+2,0)] = 1
            syst[a_lat_neg(sp,0), c_lat_pos(sp+2,0)] = 1
            
        # + <--> + 
        syst[a_lat_pos(2*i,0), c_lat_pos(sp,0)] = 1
        syst[a_lat_pos(2*i,0), b_lat_pos(sp,0)] = 1
        # - <--> -
        syst[a_lat_neg(2*i,0), c_lat_neg(sp,0)] = 1
        syst[a_lat_neg(2*i,0), b_lat_neg(sp,0)] = 1
        # + <--> - 
        syst[a_lat_pos(2*i,0), c_lat_neg(sp,0)] = 1
        syst[a_lat_neg(2*i,0), c_lat_pos(sp,0)] = 1
        # + <--> - hopping with phase
        syst[a_lat_pos(2*i,0), b_lat_neg(sp,0)] = 1
        syst[a_lat_neg(2*i,0), b_lat_pos(sp,0)] = 1
        
    

    
    
    return syst

m = diamond_chain_system(10,None)

kwant.plot(m)