Dear Kwant developers and users,
Thank you for your contributions to the great software. I am trying to
reproduce the result demonstrated in Figure 7(a)
https://journals.aps.org/prb/abstract/10.1103/PhysRevB.79.205430
The model includes hopping term t and Hubbard potential U in a hexagonal
lattice. I did the self-consistent process by Kwant to calculate the spin
density distribution of the system. But the results seem to be incorrect on the
distribution of spin density.
I attached my code:
sys = my_sys().finalized()
def Fermi(E, mu, T):
return 1/(exp((E - mu)/T) + 1)
def sorted_eigs(ev):
evals,evecs=ev
evals,evecs=map(np.array,zip(*sorted(zip(evals,evecs.transpose()))))
return evals,evecs.transpose()
def Hartree_Fock(Du,Dd,ncc=200):
m=50
H=sys.hamiltonian_submatrix(sparse=True)
for nc in range(ncc):
H0=H
D=list(itertools.chain(*zip(Du,Dd)))
H1=np.diag(D)
H2=H0+H1
evals,evecs=sorted_eigs(sla.eigsh(H2,k=m,sigma=0))
up=evecs[::2]
down=evecs[1::2]
fermi_up= Fermi(evals,mu, T).reshape(1,m)
fermi_down= Fermi(evals,mu, T).reshape(1,m)
Du=(up*up.conj()*fermi_up).sum(axis=1,dtype='double')
Dd=(down*down.conj()*fermi_down).sum(axis=1,dtype='double')
if nc%5==0:
print(f"N_step {nc} Loop")
return Du,Dd
Du=0.5*np.ones(605)
Dd=np.zeros(605)
Du,Dd=Hartree_Fock(Du,Dd)
Dz=Du-Dd
Dv=Du+Dd
kwant.plotter.density(sys,Dd,relwidth=0.02,colorbar=True)
kwant.plotter.density(sys,Du,relwidth=0.02,colorbar=True)
kwant.plotter.density(sys,Dz,relwidth=0.02,colorbar=True)
kwant.plotter.density(sys,Dv,relwidth=0.02,colorbar=True)
1. In the above code I use sys.hamiltonian_submatrix in Kwant to calculate
the Hamitonian of the system. This Hamiltonian is not only a scattering region
but it might have lead part in it, so how do I distinguish the matrix elements
in wires and scattering center? Is it would induce the error in my results?
2. Since I did not find the self-consistent process of Hubbard model in the
kwant documentation, I set a loop to calculate the spin density distribution of
the system and draw the spin density distribution with kwant.plotter.density in
kwant, I am not sure whether this part is correct. Anyone can give some
suggestions or comments to have a different method on this part?
Thank you in advance for your kindly help,
Best wishes,
Yufei Guo