def __call__(self,G) : D= self.half_bandwidth 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" 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.half_bandwidth Id = numpy.identity(G.N1,numpy.complex_) if type(G.mesh) == MeshImFreq: f = lambda om: (om - 1j*sign(om.imag)*sqrt(abs(om)**2 + D*D))/D/D*2*Id elif type(G.mesh) == MeshRealFrequency: 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" # Let's create a new tail G.tail = TailGf(shape = G.tail.shape, size=5, order_min=1) for i in range(G.N1): G.tail[1][i,i] = 1.0 G.tail[3][i,i] = D**2/4.0 G.tail[5][i,i] = D**4/8.0 Function(f,None)(G) return G
def __call__(self,G) : D= self.half_bandwidth 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))