Dear kwant users,
Hello, I am a new user of kwant, I want to build a 3d structure model, and add leads, I refer to a similar code, but I keep getting errors during the process, the program says "RuntimeError: All sites of this builder have been deleted because an exception occurred during the execution of fill(): see above. ", I feel that it may be the position of the lead, but I do not know how to modify it, can you give me some suggestions to modify it? Thank you very much!
*This is the code I have errors in:
----------------------------------------
import kwant
import numpy as np
from matplotlib import pyplot
#3d test
def syst_3d(a=16, b=16, c=10,t=1):
lat = kwant.lattice.general([(0, 0.5, 0.5), (0.5, 0, 0.5), (0.5, 0.5, 0)])
# [(0,0,0),(0.25, 0.25, 0.25)])
# a,b= lat.sublattices
syst = kwant.Builder()
def cuboid_shape(pos):
x, y, z = pos
return 0 <= x < a and 0 <= y < b and 0 <= z < c
syst[lat.shape(cuboid_shape, (0, 0, 0))] = 4 * t
syst[lat.neighbors()] = -t
sym_lead0 = kwant.TranslationalSymmetry(lat.vec((1, 0, 0)))
lead0 = kwant.Builder(sym_lead0)
lead_shape = lambda pos: (-b / 2 <= pos[1] < b / 2) and abs(pos[2]) < c
lead0[lat.shape(lead_shape, (-1, 0, 0))] = 4 * t
lead0[lat.neighbors()] = -t
lead1 = lead0.reversed()
syst.attach_lead(lead0)
syst.attach_lead(lead1)
return syst
def main():
syst = syst_3d()
kwant.plot(syst)
if __name__ == '__main__':
main()
---------------------------------------------------
*This is the code I refer to, as if this works correctly:
-------------------------------------------------------
import kwant
import numpy as np
from matplotlib import pyplot
def syst_3d(W=3, r1=2, r2=4, a=1, t=1.0):
lat = kwant.lattice.general(((a, 0, 0), (0, a, 0), (0, 0, a)))
syst = kwant.Builder()
def ring(pos):
(x, y, z) = pos
rsq = x**2 + y**2
return (r1**2 < rsq < r2**2) and abs(z) < 2
syst[lat.shape(ring, (0, -r2 + 1, 0))] = 4 * t
syst[lat.neighbors()] = -t
sym_lead0 = kwant.TranslationalSymmetry(lat.vec((-1, 0, 0)))
lead0 = kwant.Builder(sym_lead0)
lead_shape = lambda pos: (-W / 2 < pos[1] < W / 2) and abs(pos[2]) < 2
lead0[lat.shape(lead_shape, (0, 0, 0))] = 4 * t
lead0[lat.neighbors()] = -t
lead1 = lead0.reversed()
syst.attach_lead(lead0)
syst.attach_lead(lead1)
return syst
def main():
syst = syst_3d()
kwant.plot(syst)
if __name__ == '__main__':
main()
Sincerely,
Yue Xiang