def __call__(self, G): D = self.HalfBandwidth Id = numpy.identity(G.N1, numpy.complex_) if G.mesh.TypeGF == GF_Type.Imaginary_Frequency: f = lambda om: (om - 1j * sign(om.imag) * sqrt(abs(om) ** 2 + D * D)) / D / D * 2 * Id elif G.mesh.TypeGF == GF_Type.Real_Frequency: dos = _SemiCircularDOS(D) f = lambda om: -1j * pi * dos(om) * Id else: raise TypeError, "This initializer is only correct in frequency" # assert G.N1==1, "Not valid for large GF" t = G._tail t.zero() for i in range(G.N1): t[1].array[i, i] = 1.0 t[3].array[i, i] = D ** 2 / 4.0 t[5].array[i, i] = D ** 4 / 8.0 # t[1].array[:,:] = 1.0 # t[3].array[:,:] = D**2/4.0 # t[5].array[:,:] = D**4/8.0 t.changeOrderMax(5) # expansion is not valid above this # Mom[2,0,0] = 1.0 # Mom[4,0,0] = D**2/4.0 # Mom[6,0,0] = D**4/8.0 Function(f, None)(G) return G
def __call__(self, G): D = self.HalfBandwidth Id = numpy.identity(G.N1, numpy.complex_) if G.mesh.TypeGF == GF_Type.Imaginary_Frequency: f = lambda om: (om - 1j * sign(om.imag) * sqrt(abs(om)**2 + D * D) ) / D / D * 2 * Id elif G.mesh.TypeGF == GF_Type.Real_Frequency: dos = _SemiCircularDOS(D) f = lambda om: -1j * pi * dos(om) * Id else: raise TypeError, "This initializer is only correct in frequency" #assert G.N1==1, "Not valid for large GF" t = G._tail t.zero() for i in range(G.N1): t[1].array[i, i] = 1.0 t[3].array[i, i] = D**2 / 4.0 t[5].array[i, i] = D**4 / 8.0 #t[1].array[:,:] = 1.0 #t[3].array[:,:] = D**2/4.0 #t[5].array[:,:] = D**4/8.0 t.changeOrderMax(5) # expansion is not valid above this #Mom[2,0,0] = 1.0 #Mom[4,0,0] = D**2/4.0 #Mom[6,0,0] = D**4/8.0 Function(f, None)(G) return G
def __call__(self,G) : D= self.HalfBandwidth Id = numpy.identity(G.N1,numpy.complex_) if G.mesh.TypeGF == GF_Type.Imaginary_Frequency: f = lambda om : (om - 1j*sign(om.imag)*sqrt(abs(om)**2 + D*D))/D/D*2*Id elif G.mesh.TypeGF == GF_Type.Real_Frequency: def f(om): if (om > -D) and (om < D): return (2.0/D**2) * (om - 1j* sqrt(D**2 - om**2)) else: return (2.0/D**2) * (om - sign(om) * sqrt(om**2 - D**2)) else : raise TypeError, "This initializer is only correct in frequency" t =G._tail t.zero() for i in range(G.N1): t[1].array[i,i] = 1.0 t[3].array[i,i] = D**2/4.0 t[5].array[i,i] = D**4/8.0 t.changeOrderMax(5) # expansion is not valid above this Function(f,None)(G) return G
def f(om): if (om > -D) and (om < D): return (2.0/D**2) * (om - 1j* sqrt(D**2 - om**2)) else: return (2.0/D**2) * (om - sign(om) * sqrt(om**2 - D**2))