Skip to content
Snippets Groups Projects
Commit 2e5b4c14 authored by Hélène Spring's avatar Hélène Spring
Browse files

Add different chemical potentials for different sublattices, effect of external out of plane field

parent 24ad2528
No related branches found
No related tags found
No related merge requests found
# +
import kwant
import numpy as np
import matplotlib.pyplot as plt
from modules.diamond_chain import diamond_chain_system
from modules.analysis_funcs import ldos_from_kpm
from modules.analysis_funcs import ldos_from_kpm, ldos_modes_from_leads
# -
system_params = dict(
j2 = 0,
mu_a = 0,
mu_b = 0,
mu_c = 0,
j2 = 1,
j3 = 1,
semi_infinite = True
phi = np.pi/2,
phi_d = 0
)
chain = diamond_chain_system(20,system_params)
kwant.plot(chain)
inf_chain = diamond_chain_system(5,system_params, semi_infinite = True)
fin_chain = diamond_chain_system(5,system_params, semi_infinite = False)
# o = kwant.plot(fin_chain)
# +
# ldos_modes_from_leads(fin_chain.finalized(), system_params) #doesn't work for flat bands
# -
o = ldos_from_kpm(fin_chain.finalized(), system_params, vmax = 10, energy = 0 )
o = ldos_from_kpm(fin_chain.finalized(), system_params, vmax = 1, energy = 2*system_params['j2'] )
o = ldos_from_kpm(fin_chain.finalized(), system_params, vmax = 10, energy = 2*np.sqrt(2)*system_params['j2'] )
kwant.plotter.bands(inf_chain.finalized(), momenta = np.linspace(-np.pi,np.pi,1000))
ham = fin_chain.finalized().hamiltonian_submatrix()
ev, es = np.linalg.eigh(ham)
ev
plt.plot(ev, marker='o',lw=0)
ldos_from_kpm(chain.finalized(), system_params, vmax = 3)
np.exp(1j*np.pi/2).imag
# -*- coding: utf-8 -*-
import kwant
import numpy as np
......@@ -10,12 +11,14 @@ def diamond_chain_system(N_c, system_params, semi_infinite = False, leads = Fals
| C_i_- | ...
/ ------- \ ______ /
... | A_i_+ | ...
| A_i_- |
\ ______ / ------- \
Φ | A_i_- |
\ ______ //------- \
... | B_i_+ | ...
| B_i_- |
-------
The Φ represents an out-of-plane magnetic field. The phase is added along the // bond in each unit cell
:param int N_c: number of unit cells to include in the cell
:param dict system_params: parameters
:param bool semi_infinite: whether to make a semi-infinite chain or not
......@@ -40,20 +43,20 @@ def diamond_chain_system(N_c, system_params, semi_infinite = False, leads = Fals
#staggered point
sp = i
syst[a_lat_pos(sp,0)] = system_params['mu_a']
syst[a_lat_neg(sp,0)] = system_params['mu_a']
syst[b_lat_pos(sp,0)] = system_params['mu_b']
syst[b_lat_neg(sp,0)] = system_params['mu_b']
syst[c_lat_pos(sp,0)] = system_params['mu_c']
syst[c_lat_neg(sp,0)] = system_params['mu_c']
syst[a_lat_pos(sp,0)] = system_params['mu_a_pos']
syst[a_lat_neg(sp,0)] = system_params['mu_a_neg']
syst[b_lat_pos(sp,0)] = system_params['mu_b_pos']
syst[b_lat_neg(sp,0)] = system_params['mu_b_neg']
syst[c_lat_pos(sp,0)] = system_params['mu_c_pos']
syst[c_lat_neg(sp,0)] = system_params['mu_c_neg']
if i < N_c - 1:
syst[c_lat_pos(sp+1,0)] = system_params['mu_c']
syst[b_lat_pos(sp+1,0)] = system_params['mu_b']
syst[c_lat_neg(sp+1,0)] = system_params['mu_c']
syst[b_lat_neg(sp+1,0)] = system_params['mu_b']
syst[c_lat_pos(sp+1,0)] = system_params['mu_c_pos']
syst[b_lat_pos(sp+1,0)] = system_params['mu_b_pos']
syst[c_lat_neg(sp+1,0)] = system_params['mu_c_neg']
syst[b_lat_neg(sp+1,0)] = system_params['mu_b_neg']
# + <--> +
syst[a_lat_pos(sp,0), c_lat_pos(sp+1,0)] = system_params['j2']
......@@ -68,21 +71,25 @@ def diamond_chain_system(N_c, system_params, semi_infinite = False, leads = Fals
syst[a_lat_neg(sp,0), b_lat_pos(sp+1,0)] = system_params['j3']
# + <--> - hopping with phase
syst[a_lat_pos(sp,0), c_lat_neg(sp+1,0)] = -system_params['j3'] #phase e^i pi
syst[a_lat_neg(sp,0), c_lat_pos(sp+1,0)] = -system_params['j3'] #phase e^i pi
syst[a_lat_pos(sp,0), c_lat_neg(sp+1,0)] = system_params['j3']*np.exp(1j*2*system_params['phi']) #phase e^i phi
syst[a_lat_neg(sp,0), c_lat_pos(sp+1,0)] = system_params['j3']*np.exp(1j*2*system_params['phi']) #phase e^i phi
# + <--> +
syst[a_lat_pos(sp,0), c_lat_pos(sp,0)] = system_params['j2']
syst[a_lat_pos(sp,0), b_lat_pos(sp,0)] = system_params['j2']
if i == 0:
added_phase = 1
else:
added_phase = np.exp(1j*2*system_params['phi_d'])
syst[a_lat_pos(sp,0), b_lat_pos(sp,0)] = system_params['j2']*added_phase #phase e^i phi_d due to mag field
# - <--> -
syst[a_lat_neg(sp,0), c_lat_neg(sp,0)] = system_params['j2']
syst[a_lat_neg(sp,0), b_lat_neg(sp,0)] = system_params['j2']
syst[a_lat_neg(sp,0), b_lat_neg(sp,0)] = system_params['j2']*added_phase #phase e^i phi_d due to mag field
# + <--> -
syst[a_lat_pos(sp,0), c_lat_neg(sp,0)] = system_params['j3']
syst[a_lat_neg(sp,0), c_lat_pos(sp,0)] = system_params['j3']
# + <--> - hopping with phase
syst[a_lat_pos(sp,0), b_lat_neg(sp,0)] = -system_params['j3'] #phase e^i pi
syst[a_lat_neg(sp,0), b_lat_pos(sp,0)] = -system_params['j3'] #phase e^i pi
syst[a_lat_pos(sp,0), b_lat_neg(sp,0)] = system_params['j3']*np.exp(1j*2*system_params['phi'])*added_phase #phase e^i phi_d due to mag field #phase e^i phi
syst[a_lat_neg(sp,0), b_lat_pos(sp,0)] = system_params['j3']*np.exp(1j*2*system_params['phi'])*added_phase #phase e^i phi_d due to mag field #phase e^i phi
if leads:
......
# -*- coding: utf-8 -*-
import kwant
import numpy as np
......@@ -10,12 +11,14 @@ def diamond_chain_system(N_c, system_params, semi_infinite = False, leads = Fals
| C_i_- | ...
/ ------- \ ______ /
... | A_i_+ | ...
| A_i_- |
\ ______ / ------- \
Φ | A_i_- |
\ ______ //------- \
... | B_i_+ | ...
| B_i_- |
-------
The Φ represents an out-of-plane magnetic field. The phase is added along the // bond in each unit cell
:param int N_c: number of unit cells to include in the cell
:param dict system_params: parameters
:param bool semi_infinite: whether to make a semi-infinite chain or not
......@@ -40,20 +43,20 @@ def diamond_chain_system(N_c, system_params, semi_infinite = False, leads = Fals
#staggered point
sp = i
syst[a_lat_pos(sp,0)] = system_params['mu_a']
syst[a_lat_neg(sp,0)] = system_params['mu_a']
syst[b_lat_pos(sp,0)] = system_params['mu_b']
syst[b_lat_neg(sp,0)] = system_params['mu_b']
syst[c_lat_pos(sp,0)] = system_params['mu_c']
syst[c_lat_neg(sp,0)] = system_params['mu_c']
syst[a_lat_pos(sp,0)] = system_params['mu_a_pos']
syst[a_lat_neg(sp,0)] = system_params['mu_a_neg']
syst[b_lat_pos(sp,0)] = system_params['mu_b_pos']
syst[b_lat_neg(sp,0)] = system_params['mu_b_neg']
syst[c_lat_pos(sp,0)] = system_params['mu_c_pos']
syst[c_lat_neg(sp,0)] = system_params['mu_c_neg']
if i < N_c - 1:
syst[c_lat_pos(sp+1,0)] = system_params['mu_c']
syst[b_lat_pos(sp+1,0)] = system_params['mu_b']
syst[c_lat_neg(sp+1,0)] = system_params['mu_c']
syst[b_lat_neg(sp+1,0)] = system_params['mu_b']
syst[c_lat_pos(sp+1,0)] = system_params['mu_c_pos']
syst[b_lat_pos(sp+1,0)] = system_params['mu_b_pos']
syst[c_lat_neg(sp+1,0)] = system_params['mu_c_neg']
syst[b_lat_neg(sp+1,0)] = system_params['mu_b_neg']
# + <--> +
syst[a_lat_pos(sp,0), c_lat_pos(sp+1,0)] = system_params['j2']
......@@ -68,21 +71,25 @@ def diamond_chain_system(N_c, system_params, semi_infinite = False, leads = Fals
syst[a_lat_neg(sp,0), b_lat_pos(sp+1,0)] = system_params['j3']
# + <--> - hopping with phase
syst[a_lat_pos(sp,0), c_lat_neg(sp+1,0)] = -system_params['j3'] #phase e^i pi
syst[a_lat_neg(sp,0), c_lat_pos(sp+1,0)] = -system_params['j3'] #phase e^i pi
syst[a_lat_pos(sp,0), c_lat_neg(sp+1,0)] = system_params['j3']*np.exp(1j*2*system_params['phi']) #phase e^i phi
syst[a_lat_neg(sp,0), c_lat_pos(sp+1,0)] = system_params['j3']*np.exp(1j*2*system_params['phi']) #phase e^i phi
# + <--> +
syst[a_lat_pos(sp,0), c_lat_pos(sp,0)] = system_params['j2']
syst[a_lat_pos(sp,0), b_lat_pos(sp,0)] = system_params['j2']
if i == 0:
added_phase = 1
else:
added_phase = np.exp(1j*2*system_params['phi_d'])
syst[a_lat_pos(sp,0), b_lat_pos(sp,0)] = system_params['j2']*added_phase #phase e^i phi_d due to mag field
# - <--> -
syst[a_lat_neg(sp,0), c_lat_neg(sp,0)] = system_params['j2']
syst[a_lat_neg(sp,0), b_lat_neg(sp,0)] = system_params['j2']
syst[a_lat_neg(sp,0), b_lat_neg(sp,0)] = system_params['j2']*added_phase #phase e^i phi_d due to mag field
# + <--> -
syst[a_lat_pos(sp,0), c_lat_neg(sp,0)] = system_params['j3']
syst[a_lat_neg(sp,0), c_lat_pos(sp,0)] = system_params['j3']
# + <--> - hopping with phase
syst[a_lat_pos(sp,0), b_lat_neg(sp,0)] = -system_params['j3'] #phase e^i pi
syst[a_lat_neg(sp,0), b_lat_pos(sp,0)] = -system_params['j3'] #phase e^i pi
syst[a_lat_pos(sp,0), b_lat_neg(sp,0)] = system_params['j3']*np.exp(1j*2*system_params['phi'])*added_phase #phase e^i phi_d due to mag field #phase e^i phi
syst[a_lat_neg(sp,0), b_lat_pos(sp,0)] = system_params['j3']*np.exp(1j*2*system_params['phi'])*added_phase #phase e^i phi_d due to mag field #phase e^i phi
if leads:
......
......@@ -9,24 +9,33 @@ from modules.analysis_funcs import ldos_from_kpm, ldos_modes_from_leads
# -
system_params = dict(
mu_a = 0,
mu_b = 0,
mu_c = 0,
mu_a_pos = 0.4,
mu_a_neg = -0.2,
mu_b_pos = -0.3,
mu_b_neg = 0.3,
mu_c_pos = 0.1,
mu_c_neg = -0.1,
j2 = 1,
j3 = 1,
phi = np.pi/2,
phi_d = 0.3
)
inf_chain = diamond_chain_system(20,system_params, semi_infinite = True)
fin_chain = diamond_chain_system(20,system_params, semi_infinite = False)
inf_chain = diamond_chain_system(5,system_params, semi_infinite = True)
fin_chain = diamond_chain_system(5,system_params, semi_infinite = False)
# o = kwant.plot(fin_chain)
# +
# ldos_modes_from_leads(fin_chain.finalized(), system_params) #doesn't work for flat bands
# -
o = ldos_from_kpm(fin_chain.finalized(), system_params, vmax = 10, energy = -2.82842712)
o = ldos_from_kpm(fin_chain.finalized(), system_params, vmax = 10, energy = 0 )
kwant.plotter.bands(inf_chain.finalized(), momenta = np.linspace(-4,4,100))
o = ldos_from_kpm(fin_chain.finalized(), system_params, vmax = 1, energy = 2*system_params['j2'] )
o = ldos_from_kpm(fin_chain.finalized(), system_params, vmax = 10, energy = 2*np.sqrt(2)*system_params['j2'] )
kwant.plotter.bands(inf_chain.finalized(), momenta = np.linspace(-np.pi,np.pi,1000))
ham = fin_chain.finalized().hamiltonian_submatrix()
......@@ -36,4 +45,6 @@ ev
plt.plot(ev, marker='o',lw=0)
np.exp(1j*np.pi/2).imag
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment