Example #1
0
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)
Example #2
0
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))
Example #3
0
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))
Example #4
0
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)
Example #5
0
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))