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
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
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
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
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
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
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
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