Beispiel #1
0
def enforce_eh(h, mf):
    """Enforce eh symmetry in a mean field Hamiltonian"""
    from superconductivity import eh_operator
    eh = eh_operator(h.intra)  # get the function
    for key in mf:
        mf[key] = np.matrix(mf[key])  # dense matrix
    mfout = dict()
    for key in mf:
        mkey = (-key[0], -key[1], -key[2])
        mfout[key] = (mf[key] - eh(mf[mkey].H)) / 2.
    return mfout
def electron_hole_symmetry(h,tol=1e-5,ntries=10):
   """Check that a system has electron-hole symmetry"""
   if not h.has_eh: return # skip if there is no e-h sector
   from superconductivity import eh_operator
   ehop = eh_operator(h.intra) # get the operator
   def ehsym(m1,m2):
     """Test eh symmetry"""
     diff = m1 + ehop(m2)
     diff = np.sum(np.abs(diff))
     if diff>tol: raise
   ehsym(h.intra,h.intra) # do it for the intra matrix
   if h.dimensionality>0:
     for i in range(ntries):
       hkgen = h.get_hk_gen() # generator
       k = np.random.random(h.dimensionality) # kpoint
       ehsym(hkgen(k),hkgen(-k))
       print("Checking k-point",k)
   print("Electron-hole symmetry is ok")
Beispiel #3
0
def check_hamiltonian(h):
    """Do various checks in Hamiltonian, to ensure that nothing weird happens"""
    hk = h.get_hk_gen()  # get generator
    m = hk(np.random.random(3))  # random k-point
    if not equal(m, m.H):
        print("CHECK FAILED, Hamiltonian is not Hermitian")
        raise  # not hermitian
    if h.has_eh:  # if it has electron hole degree of freedom
        v = np.random.random(3)  # random kpoint
        m1 = hk(v)  # Hamiltonian
        m2 = hk(-v)  # Hamiltonian in time reversal
        from superconductivity import eh_operator
        eh = eh_operator(m1)  # get the function
        if not equal(m1, -eh(m2)):
            print(
                "CHECK FAILED, Hamiltonian does not have electron-hole symmetry"
            )
            raise
        print("CHECKED that the Hamiltonian has electron-hole symmetry")
Beispiel #4
0
 def enforce_eh(self):
     """Enforce electron-hole symmetry in the Hamiltonian"""
     self.turn_multicell()  # turn to multicell mode
     from superconductivity import eh_operator
     f = eh_operator(self.intra)  # electron hole operator
     raise  # not implemented