Пример #1
0
def show_ldos():
    h = pickup_hamiltonian()  # get the Hamiltonian
    ew = abs(qtwrap.get("ldos_ewindow"))
    energies = np.linspace(-ew, ew, 100)
    delta = qtwrap.get("ldos_delta")
    nk = int(qtwrap.get("ldos_nk"))
    name = qtwrap.getbox("ldos_operator")
    ldos.spatial_energy_profile(h,
                                operator=h.get_operator(name),
                                nk=nk,
                                delta=delta,
                                energies=energies)
    execute_script(
        'qh-map2d --input DOSMAP.OUT --xlabel Energy --ylabel "y-position" --zlabel DOS --title "Local DOS"'
    )
def initialize():
    """ Initialize the calculation"""
    g = get_geometry()  # get the geometry
    ti = get("interlayer")
    h = g.get_hamiltonian(has_spin=True, fun=specialhopping.multilayer(ti=ti))
    h.add_zeeman([get("Bx"), get("By"), get("Bz")])  # Zeeman fields
    h.add_sublattice_imbalance(get("mAB"))  # sublattice imbalance
    if abs(get("rashba")) > 0.0: h.add_rashba(get("rashba"))  # Rashba field
    h.add_antiferromagnetism(get("mAF"))  # AF order
    h.add_crystal_field(qtwrap.get("crystalfield"))
    h.shift_fermi(get("fermi"))  # shift fermi energy
    h.shift_fermi(lambda r: get("bias") * r[2])  # interlayer bias
    if abs(get("kanemele")) > 0.0:
        h.add_kane_mele(get("kanemele"))  # intrinsic SOC
    if abs(get("haldane")) > 0.0:
        h.add_haldane(get("haldane"))  # intrinsic SOC
    if abs(get("antihaldane")) > 0.0: h.add_antihaldane(get("antihaldane"))
    if abs(get("antikanemele")) > 0.0:
        h.add_anti_kane_mele(get("antikanemele"))
    if abs(get("inplaneb")) > 0.0:
        h.add_inplane_bfield(b=get("inplaneb"), phi=get("inplaneb_phi"))
    if abs(get("swave")) > 0.0: h.add_swave(get("swave"))
    #  h.add_peierls(get("peierls")) # shift fermi energy

    return h
Пример #3
0
def get_geometry(modify=True):
    """ Create a 2d honeycomb lattice"""
    n = int(qtwrap.get("cell_size"))  # size of the unit cell
    name = qtwrap.getbox("multilayer_type")
    if name == "Twisted bilayer":
        g = specialgeometry.twisted_bilayer(n)
    elif name == "Aligned bilayer AA":
        g = specialgeometry.twisted_multilayer(n, rot=[0, 0])
    elif name == "Aligned bilayer AB":
        gb = specialgeometry.multilayer_graphene(l=[0, 1])
        g = specialgeometry.twisted_multilayer(n, rot=[0], g=gb, dz=6.0)
    elif name == "Aligned trilayer ABC":
        gb = specialgeometry.multilayer_graphene(l=[0, 1, 2])
        g = specialgeometry.twisted_multilayer(n, rot=[0], g=gb, dz=6.0)
    elif name == "Twisted trilayer 010":
        g = specialgeometry.twisted_multilayer(n, rot=[0, 1, 0])
    elif name == "Twisted trilayer 001":
        g = specialgeometry.twisted_multilayer(n, rot=[0, 0, 1])
    elif name == "Twisted bi-bilayer AB AB":
        ps = [["AB", "AB"], [0, 1]]
        g = specialgeometry.parse_twisted_multimultilayer(ps, n=n)
    elif name == "Twisted bi-bilayer AB BA":
        ps = [["AB", "BA"], [0, 1]]
        g = specialgeometry.parse_twisted_multimultilayer(ps, n=n)
    elif name == "Twisted bi-trilayer ABC":
        ps = [["ABC", "ABC"], [0, 1]]
        g = specialgeometry.parse_twisted_multimultilayer(ps, n=n)
    else:
        raise
    #  g = geometry.honeycomb_lattice()
    #  g = g.supercell(n)
    if modify: g = modify_geometry(g)  # remove atoms if necessary
    return g
Пример #4
0
def show_time_evolution():
  h = pickup_hamiltonian() # get hamiltonian
  try: i = open("SELECTED_SINGLE_ATOM.INFO").read()
  except: i = 0
  if i=="": i=0
  else: i = int(i)
  if h.has_spin: 
      i = i*2
      if qtwrap.getbox("channel_time_evolution")=="Down": i += 1
#  print(i) ; return
  if h.has_eh: i = i*4
  tmax = qtwrap.get("tmax_time_evolution") # maximum time
  timeevolution.evolve_local_state(h,i=i,ts=np.linspace(0.,tmax,100),
        mode="green")
  execute_script("qh-multitimeevolution") # plot the result
Пример #5
0
def initialize():
  """ Initialize the calculation"""
  g = get_geometry() # get the geometry
  h = g.get_hamiltonian(has_spin=True)
  h.add_zeeman([get("Bx"),get("By"),get("Bz")]) # Zeeman fields
  h.add_sublattice_imbalance(get("mAB"))  # sublattice imbalance
  h.add_rashba(get("rashba"))  # Rashba field
  h.add_antiferromagnetism(get("mAF"))  # AF order
  h.add_crystal_field(qtwrap.get("crystalfield")) # add magnetic field
  h.shift_fermi(get("fermi")) # shift fermi energy
  h.add_kane_mele(get("kanemele")) # intrinsic SOC
  h.add_haldane(get("haldane")) # intrinsic SOC
  h.add_antihaldane(get("antihaldane")) 
  h.add_peierls(get("peierls")) # magnetic field
  h.add_swave(get("swave")) 
  return h
Пример #6
0
def initialize():
    """ Initialize the calculation"""
    g = get_geometry()  # get the geometry
    twisted_matrix = specialhopping.twisted_matrix
    has_spin = False
    h = g.get_hamiltonian(is_sparse=True,
                          has_spin=has_spin,
                          is_multicell=True,
                          mgenerator=twisted_matrix(ti=get("tinter"),
                                                    lambi=7.0))
    # workaround to put Fermi energy in zero approx
    h.shift_fermi(-get("tinter") / 16.)
    h.add_crystal_field(qtwrap.get("crystalfield"))
    if abs(get("inplaneb")) > 0.0:
        h.add_inplane_bfield(b=get("inplaneb"), phi=get("inplaneb_phi"))
#  mu,ml = get("mAB_upper"),get("mAB_lower") # get the masses
#  h.add_sublattice_imbalance(lambda r: mu*(r[2]>0.))  # upper mass
#  h.add_sublattice_imbalance(lambda r: ml*(r[2]<0.))  # lower mass
    efield = get("interlayer_bias")

    def bias(r):
        if r[2] < 0.0: return efield
        else: return -efield

    h.shift_fermi(bias)
    if h.has_spin:
        h.add_zeeman([get("Bx"), get("By"), get("Bz")])  # Zeeman fields
        h.add_rashba(get("rashba"))  # Rashba field
        h.add_antiferromagnetism(get("mAF"))  # AF order
        h.add_kane_mele(get("kanemele"))  # intrinsic SOC
    h.shift_fermi(get("fermi"))  # shift fermi energy
    if is_checked("set_half_filling"): h.set_filling(nk=2)
    if False:
        h.add_swave(get("swave"))
    if False:
        if h.has_eh:
            print("SCF not implemented with Nambu")
            raise
    if False:
        custom_scf(h)  # create the tb90.in


#  else:
#    h.write("hamiltonian.in")
    klist.default(g, nk=int(get("nkpoints")))  # write klist
    #  klist.tr_path(nk=int(get("nkpoints")))  # write klist
    return h
Пример #7
0
def initialize():
    """ Initialize the calculation"""
    def check(name):
        if abs(get(name)) > 0.0: return True
        else: return False

    g = get_geometry()  # get the geometry
    if check("strain"):  # custom function
        dfun = get("strain")  # get function

        def fun(r1, r2):  # function to compute distance
            dr = r1 - r2
            dr2 = dr.dot(dr)  # distance
            if 0.9 < dr2 < 1.1:
                if 0.9 < abs(dr[2]) < 1.1: return 1.0 + dfun  # first neighbor
                return 1.0
            else:
                return 0.0

        h = g.get_hamiltonian(fun)  # get the Hamiltonian
    else:
        h = g.get_hamiltonian(has_spin=True)
    j = np.array([get("Bx"), get("By"), get("Bz")])
    h.add_zeeman(j)  # Zeeman field
    h.add_sublattice_imbalance(get("mAB"))  # sublattice imbalance
    if check("rashba"): h.add_rashba(get("rashba"))  # Rashba field
    h.add_antiferromagnetism(get("mAF"))  # AF order
    h.add_crystal_field(qtwrap.get("crystalfield"))
    h.shift_fermi(get("fermi"))  # shift fermi energy
    if abs(get("kanemele")) > 0.0:
        h.add_kane_mele(get("kanemele"))  # intrinsic SOC
    if abs(get("antikanemele")) > 0.0:
        h.add_anti_kane_mele(get("antikanemele"))
    if abs(get("haldane")) > 0.0:
        h.add_haldane(get("haldane"))  # intrinsic SOC
    if abs(get("antihaldane")) > 0.0: h.add_antihaldane(get("antihaldane"))
    #  h.add_peierls(get("peierls")) # shift fermi energy
    if abs(get("inplaneb")) > 0.0:
        h.add_inplane_bfield(b=get("inplaneb"), phi=get("inplaneb_phi"))
    if abs(get("swave")) > 0.0:
        h = h.get_multicell()
        special_pairing(h)
    return h
Пример #8
0
def initialize():
    """ Initialize the calculation"""
    g = get_geometry()  # get the geometry
    t2, t3 = get("t2"), get("t3")  # get hoppings
    if t2 != 0.0 or t3 != 0.0:
        ts = [1., t2, t3]
        fm = specialhopping.neighbor_hopping_matrix(g, ts)
        h = g.get_hamiltonian(mgenerator=fm, has_spin=True)
    else:
        h = g.get_hamiltonian(has_spin=True)
    h.add_zeeman([get("Bx"), get("By"), get("Bz")])  # Zeeman fields
    h.add_sublattice_imbalance(get("mAB"))  # sublattice imbalance
    h.add_rashba(get("rashba"))  # Rashba field
    h.add_antiferromagnetism(get("mAF"))  # AF order
    h.add_crystal_field(qtwrap.get("crystalfield"))  # add magnetic field
    h.shift_fermi(get("fermi"))  # shift fermi energy
    h.add_kane_mele(get("kanemele"))  # intrinsic SOC
    h.add_haldane(get("haldane"))  # intrinsic SOC
    h.add_antihaldane(get("antihaldane"))
    h.add_peierls(get("peierls"))  # magnetic field
    if get("swave") != 0.0: h.add_swave(get("swave"))
    return h
Пример #9
0
def initialize():
    """ Initialize the calculation"""
    t0 = time.clock()
    os.system("rm SELECTED_ATOMS.INFO")  # remove the file for the DOS
    g = get_geometry0d()  # get the geometry
    h = hamiltonians.hamiltonian(g)  # get the hamiltonian
    h.has_spin = False  # spin treatment
    if h.has_spin:  # spinful hamiltonian
        print("Spinful hamiltonian, DO NOT USE VERY LARGE ISLANDS!!!")
        h.is_sparse = False
        h.first_neighbors()  # first neighbor hoppin
        h.add_zeeman([get("Bx"), get("By"), get("Bz")])  # Zeeman fields
        if abs(get("rashba")) > 0.0:
            h.add_rashba(get("rashba"))  # Rashba field
        h.add_antiferromagnetism(get("mAF"))  # AF order
        if abs(get("kanemele")) > 0.0:
            h.add_kane_mele(get("kanemele"))  # intrinsic SOC
        h.shift_fermi(get("fermi"))  # shift fermi energy
        h.turn_sparse()  # turn it sparse
    else:  # spinless treatment
        h.is_sparse = True
        print("Spinless hamiltonian")
        h.first_neighbors()  # first neighbor hopping
    h.add_sublattice_imbalance(get("mAB"))  # sublattice imbalance
    h.add_peierls(get("peierls"))  # add magnetic field
    h.add_crystal_field(qtwrap.get("crystalfield"))  # add magnetic field
    if get("haldane") != 0.0:
        h.add_haldane(get("haldane"))  # add Haldane coupling
    if get("edge_potential") != 0.0:  # if there is edge potential
        edgesites = edge_atoms(h.geometry)  # get the edge atoms
        h.shift_fermi(get("edge_potential") * edgesites)  # add onsites
    # part for bilayer systems
    #####
    print("Time spent in creating the Hamiltonian =", time.clock() - t0)
    h.geometry.write()
    h.save()  # save the Hamiltonian