def precompute(args): '''计算''' #avsb一个共有两个能带 #第一个是t=1的d能带,第二个是t=0.5的p能带 brlu = brillouin() ltris, ladjs = hexagon_split(brlu, args.mesh) if numpy.mod(args.patches, 6) != 0: raise ValueError("patch数量需要是6的倍数") pinfos = numpy.ndarray((2, args.patches), dtype=object) pinfos[0, :] = get_von_hove_patches(args.patches, d1_disp) pinfos[1, :] = get_von_hove_patches(args.patches, p2_disp) #lpats = [find_patch(tri.center, pinfos, None, None, None, mode=3) for tri in ltris] #画一下费米面 d1pats = [ find_patch(tri.center, pinfos[0, :], None, None, None, mode=3) for tri in ltris ] edges = const_energy_line(ltris, ladjs, 0.0, d1_disp) dedgs = brlu.edges + edges draw_components(pinfos[0], dedgs, ltris, sgcc=[1]*len(dedgs), rtcc=d1pats, save=\ '{0}d1sur.svg'.format(args.prefix)) #p带的费米面 p2pats = [ find_patch(tri.center, pinfos[1, :], None, None, None, mode=3) for tri in ltris ] edges = const_energy_line(ltris, ladjs, 0.0, p2_disp) dedgs = brlu.edges + edges draw_components(pinfos[1], dedgs, ltris, sgcc=[1]*len(dedgs), rtcc=p2pats, save=\ '{0}p2sur.svg'.format(args.prefix)) #两个费米面在一起 d1sur = const_energy_line(ltris, ladjs, 0.0, d1_disp) p2sur = const_energy_line(ltris, ladjs, 0.0, p2_disp) draw_components(numpy.hstack([pinfos[0], pinfos[1]]),\ d1sur + p2sur + brlu.edges, [],\ sgcc=[1]*len(d1sur) + [2]*len(p2sur) + [3]*len(brlu.edges),\ save='{0}duosur.svg'.format(args.prefix)) #保存切分的信息 tri_save_to('{0}tris.txt'.format(args.prefix), brlu, args.mesh, ltris, ladjs) #保存区域的信息 dis_save_to('{0}d1pats.txt'.format(args.prefix), d1pats) dis_save_to('{0}p2pats.txt'.format(args.prefix), p2pats) # edges, pidxs = const_energy_line_in_patches(ltris, ladjs, d1pats, 0.5, d1_disp) draw_components([], edges, [], sgcc=pidxs) edges, pidxs = const_energy_line_in_patches(ltris, ladjs, p2pats, 0.3, p2_disp) draw_components([], edges, [], sgcc=pidxs)
def precompute(args): '''计算patches''' disp = {'square': dispersion, 'hole': hole_disp}[args.disp] dispgd = { 'square': dispersion_gradient, 'hole': dispersion_gradient }[args.disp] #正方格子的布里渊区 brlu = brillouin() #找到patches pats = get_patches(brlu, args.patches, disp) #切分布里渊区,切分的三角形的数目是mesh*mesh*4 ltris, ladjs = square_split(brlu, args.mesh) tri_save_to('{0}_triangle_{1}.txt'.format(args.prefix, args.disp), brlu, args.mesh, ltris, ladjs) #patches和费米面的图片 lsur = const_energy_line(ltris, ladjs, 0., disp) patches_visualize(pats, lsur, '{0}_surface_{1}.svg'.format(args.prefix, args.disp)) #求出每个Rtriangle所在的patch #这种投影法把交点设置在Umklapp surface step = 3.1415927 / args.mesh / 2 lpats = [find_patch(tri.center, pats, disp, dispgd, step) for tri in ltris] dis_save_to('{0}_district_{1}.txt'.format(args.prefix, args.disp), lpats) district_visualize(ltris, lpats, '{0}_patches_{1}.svg'.format(args.prefix, args.disp))
def precompute(args): '''提前计算''' brlu = brillouin() #切分布里渊区 ltris, ladjs = rectangle_split(brlu, args.mesh) tri_save_to( '{0}_tris.txt'.format(args.prefix), brlu, args.mesh, ltris, ladjs ) #找到patches pinfos = get_rect_patches(args.patches, args.disp) #画一下费米面 surs = const_energy_line(ltris, ladjs, 0., dispersion) # pyplot.figure() #绘制patches对应的点 xvals = [] yvals = [] for idx, pnt in enumerate(pinfos, 0): xvals.append(pnt.coord[0]) yvals.append(pnt.coord[1]) pyplot.text(pnt.coord[0]+0.1, pnt.coord[1], 's%s' % idx) pyplot.scatter(xvals, yvals, c='g', lw=4) #绘制费米面的线 for seg in surs: if seg is None: continue xvals = [_pt.coord[0] for _pt in seg.ends] yvals = [_pt.coord[1] for _pt in seg.ends] pyplot.plot(xvals, yvals, c='y', lw=1) pyplot.savefig('{0}_surface.svg'.format(args.prefix)) pyplot.close() # step = 3.1415927 / args.mesh / 4 slpats = [] for tri in ltris: pt_ = find_patch(tri.center, pinfos, dispersion, dispersion_gradient, step) slpats.append(pt_) dis_save_to('{0}_district.txt'\ .format(args.prefix), slpats) district_visualize(ltris, slpats, '{0}_district.svg'\ .format(args.prefix))
def precompute(args): '''计算''' #需要用到的所有东西 brlu = brillouin() ltris, ladjs = hexagon_split(brlu, args.mesh) pinfos = get_patches(args.patches) lpats = [ find_patch(tri.center, pinfos, None, None, None, mode=2) for tri in ltris ] #画一下费米面 edges = const_energy_line(ltris, ladjs, 0.0, dispersion) dedgs = brlu.edges + edges draw_components(pinfos, dedgs, ltris, sgcc=[1]*len(dedgs), rtcc=lpats, save=\ '{0}_sur.svg'.format(args.prefix)) #保存切分的信息 tri_save_to('{0}_tris.txt'.format(args.prefix), brlu, args.mesh, ltris, ladjs) #保存区域的信息 dis_save_to('{0}_pats.txt'.format(args.prefix), lpats) edges, pidxs = const_energy_line_in_patches(ltris, ladjs, lpats, 0.0, dispersion) draw_components([], edges, [], sgcc=pidxs)
def precompute(args): '''提前计算''' brlu = brillouin() set_stripe(args.stripe) set_potential(args.nu) #切分布里渊区 ltris, ladjs = square_split(brlu, args.mesh) tri_save_to( '{0}_{1:.2f}_{2:.2f}_tris.txt'.\ format(args.prefix, args.stripe, args.nu), brlu, args.mesh, ltris, ladjs ) #找到patches spats = get_s_band_patches(args.patches) ppats = get_p_band_patches(args.patches) #画一下费米面 ssur = const_energy_line(ltris, ladjs, 0., s_band_disp) psur = const_energy_line(ltris, ladjs, 0., p_band_disp) # pyplot.figure() #绘制patches对应的点 xvals = [] yvals = [] for idx, pnt in enumerate(spats, 0): xvals.append(pnt.coord[0]) yvals.append(pnt.coord[1]) pyplot.text(pnt.coord[0] + 0.1, pnt.coord[1], 's%s' % idx) pyplot.scatter(xvals, yvals, c='g', lw=4) #绘制费米面的线 for seg in ssur: if seg is None: continue xvals = [_pt.coord[0] for _pt in seg.ends] yvals = [_pt.coord[1] for _pt in seg.ends] pyplot.plot(xvals, yvals, c='y', lw=1) # xvals = [] yvals = [] for idx, pnt in enumerate(ppats, 0): xvals.append(pnt.coord[0]) yvals.append(pnt.coord[1]) pyplot.text(pnt.coord[0] + 0.1, pnt.coord[1], 'p%s' % idx) pyplot.scatter(xvals, yvals, c='r', lw=4) # for seg in psur: if seg is None: continue xvals = [_pt.coord[0] for _pt in seg.ends] yvals = [_pt.coord[1] for _pt in seg.ends] pyplot.plot(xvals, yvals, c='k', lw=1) pyplot.savefig('{0}_{1:.2f}_{2:.2f}_sur.svg'.\ format(args.prefix, args.stripe, args.nu)) pyplot.close() # step = 3.1415927 / args.mesh / 2 slpats = [] for tri in ltris: pt_ = find_patch(tri.center, spats, s_band_disp, s_band_gd, step) slpats.append(pt_) dis_save_to('{0}_{1:.2f}_{2:.2f}_spt.txt'\ .format(args.prefix, args.stripe, args.nu), slpats) district_visualize(ltris, slpats, '{0}_{1:.2f}_{2:.2f}_spt.svg'\ .format(args.prefix, args.stripe, args.nu)) plpats = [] for tri in ltris: pt_ = find_patch(tri.center, ppats, p_band_disp, p_band_gd, step) plpats.append(pt_) dis_save_to('{0}_{1:.2f}_{2:.2f}_ppt.txt'\ .format(args.prefix, args.stripe, args.nu), plpats) district_visualize(ltris, plpats, '{0}_{1:.2f}_{2:.2f}_ppt.svg'\ .format(args.prefix, args.stripe, args.nu))