Ejemplo n.º 1
0
def chi1d(h,energies = [0.],t=0.0001,delta=0.01,q=0.001,nk=1000,U=None,adaptive=True,ks=None):
  hkgen = h.get_hk_gen() # get the generating hamiltonian
  n = len(h.geometry.x) # initialice response
  m = np.zeros((len(energies),n*n),dtype=np.complex) # initialice
  if not adaptive: # full algorithm  
    if ks==None: ks = np.linspace(0.,1.,nk)  # create klist
    for k in ks:
#      print "Doing k=",k
      hk = hkgen(k) # fist point
      e1,ev1 = lg.eigh(hk) # get eigenvalues
      hk = hkgen(k+q) # second point
      e2,ev2 = lg.eigh(hk) # get eigenvalues
      ct = calculate_xychi(ev1.T,e1,ev2.T,e2,energies,t,delta) # contribution
      m += ct
    m = m/nk # normalice by the number of kpoints  
    ms = [m[i,:].reshape(n,n) for i in range(len(m))] # convert to matrices
  if adaptive: # adaptive algorithm 
    from integration import integrate_matrix
    def get_chik(k): # function which returns a matrix
      """ Get response at a cetain energy"""
      hk = hkgen(k) # first point
      e1,ev1 = lg.eigh(hk) # get eigenvalues
      hk = hkgen(k+q) # second point
      e2,ev2 = lg.eigh(hk) # get eigenvalues
      ct = calculate_xychi(ev1.T,e1,ev2.T,e2,energies,t,delta) # contribution
      return ct # return response
    ms = []
    m = integrate_matrix(get_chik,xlim=[0.,1.],eps=.1,only_imag=False) # add energy
    ms = [m[i,:].reshape(n,n) for i in range(len(m))] # convert to matrices

  if U==None: # raw calculation
    return ms 
  else: # RPA calculation
    return rpachi(ms,U=U)
Ejemplo n.º 2
0
def chi1d(h,energies = [0.],t=0.0001,delta=0.01,q=0.001,nk=1000,U=None,adaptive=True,ks=None):
  hkgen = h.get_hk_gen() # get the generating hamiltonian
  n = len(h.geometry.x) # initialice response
  m = np.zeros((len(energies),n*n),dtype=np.complex) # initialice
  if not adaptive: # full algorithm  
    if ks==None: ks = np.linspace(0.,1.,nk)  # create klist
    for k in ks:
#      print "Doing k=",k
      hk = hkgen(k) # fist point
      e1,ev1 = lg.eigh(hk) # get eigenvalues
      hk = hkgen(k+q) # second point
      e2,ev2 = lg.eigh(hk) # get eigenvalues
      ct = calculate_xychi(ev1.T,e1,ev2.T,e2,energies,t,delta) # contribution
      m += ct
    m = m/nk # normalice by the number of kpoints  
    ms = [m[i,:].reshape(n,n) for i in range(len(m))] # convert to matrices
  if adaptive: # adaptive algorithm 
    from integration import integrate_matrix
    def get_chik(k): # function which returns a matrix
      """ Get response at a cetain energy"""
      hk = hkgen(k) # first point
      e1,ev1 = lg.eigh(hk) # get eigenvalues
      hk = hkgen(k+q) # second point
      e2,ev2 = lg.eigh(hk) # get eigenvalues
      ct = calculate_xychi(ev1.T,e1,ev2.T,e2,energies,t,delta) # contribution
      return ct # return response
    ms = []
    m = integrate_matrix(get_chik,xlim=[0.,1.],eps=.1,only_imag=False) # add energy
    ms = [m[i,:].reshape(n,n) for i in range(len(m))] # convert to matrices

  if U==None: # raw calculation
    return ms 
  else: # RPA calculation
    return rpachi(ms,U=U)
Ejemplo n.º 3
0
def chi0d(m,energies = [0.],t=0.0001):
  """ Calculate spin response"""
  e,ev = lg.eigh(m) # get eigenvalues
  ev = np.matrix(ev.transpose())
  n = np.shape(ev)
#  import check
#  check.check(ev,e)
  ct = calculate_xychi(ev,e,ev,e,energies,t)
Ejemplo n.º 4
0
 def get_chik(k): # function which returns a matrix
   """ Get response at a cetain energy"""
   hk = hkgen(k) # first point
   e1,ev1 = lg.eigh(hk) # get eigenvalues
   hk = hkgen(k+q) # second point
   e2,ev2 = lg.eigh(hk) # get eigenvalues
   ct = calculate_xychi(ev1.T,e1,ev2.T,e2,energies,t,delta) # contribution
   return ct # return response
Ejemplo n.º 5
0
def chi0d(m,energies = [0.],t=0.0001):
  """ Calculate spin response"""
  e,ev = lg.eigh(m) # get eigenvalues
  ev = np.matrix(ev.transpose())
  n = np.shape(ev)
#  import check
#  check.check(ev,e)
  ct = calculate_xychi(ev,e,ev,e,energies,t)
Ejemplo n.º 6
0
 def get_chik(k): # function which returns a matrix
   """ Get response at a cetain energy"""
   hk = hkgen(k) # first point
   e1,ev1 = lg.eigh(hk) # get eigenvalues
   hk = hkgen(k+q) # second point
   e2,ev2 = lg.eigh(hk) # get eigenvalues
   ct = calculate_xychi(ev1.T,e1,ev2.T,e2,energies,t,delta) # contribution
   return ct # return response
Ejemplo n.º 7
0
 def get_chik(k):
   """Function to integrate"""
   hk = hkgen(k) # fist point
   if collinear: hk = np.matrix([[hk[2*i,2*j] for i in range(len(hk)/2)] for j in range(len(hk)/2)])  # up component
   e1,ev1 = lg.eigh(hk) # get eigenvalues
   hk = hkgen(k+q) # second point
   if collinear: hk = np.matrix([[hk[2*i+1,2*j+1] for i in range(len(hk)/2)] for j in range(len(hk)/2)])  # down component
   e2,ev2 = lg.eigh(hk) # get eigenvalues
   if collinear:
     ct = collinear_xychi(ev1.T,e1,ev2.T,e2,energies,t,delta) # contribution
   else:
     ct = calculate_xychi(ev1.T,e1,ev2.T,e2,energies,t,delta) # contribution
   return ct
Ejemplo n.º 8
0
 def get_chik(k):
   """Function to integrate"""
   hk = hkgen(k) # fist point
   if collinear: hk = np.matrix([[hk[2*i,2*j] for i in range(len(hk)/2)] for j in range(len(hk)/2)])  # up component
   e1,ev1 = lg.eigh(hk) # get eigenvalues
   hk = hkgen(k+q) # second point
   if collinear: hk = np.matrix([[hk[2*i+1,2*j+1] for i in range(len(hk)/2)] for j in range(len(hk)/2)])  # down component
   e2,ev2 = lg.eigh(hk) # get eigenvalues
   if collinear:
     ct = collinear_xychi(ev1.T,e1,ev2.T,e2,energies,t,delta) # contribution
   else:
     ct = calculate_xychi(ev1.T,e1,ev2.T,e2,energies,t,delta) # contribution
   return ct