def FullGammaG(IrGammaG, W0, _map): sub = 0 BKPolar = weight.Weight("SmoothT", _map, "FourSpins", "Symmetric", "R", "T") UPUP = _map.Spin2Index(UP, UP) DOWNDOWN = _map.Spin2Index(DOWN, DOWN) UPDOWN = _map.Spin2Index(UP, DOWN) DOWNUP = _map.Spin2Index(DOWN, UP) IrGammaGuu = np.zeros((_map.Vol, _map.MaxTauBin)) + 0.0 * 1j IrGammaGdu = np.zeros((_map.Vol, _map.MaxTauBin)) + 0.0 * 1j for i in range(_map.MaxTauBin): IrGammaGuu[:, i] = IrGammaG[UP, :, i, i] IrGammaGdu[:, i] = IrGammaG[DOWN, :, i, i] BKPolar.Data[UPUP, sub, UPUP, sub, :, :] = IrGammaGuu BKPolar.Data[DOWNDOWN, sub, DOWNDOWN, sub, :, :] = IrGammaGuu BKPolar.Data[DOWNDOWN, sub, UPUP, sub, :, :] = IrGammaGdu BKPolar.Data[UPUP, sub, DOWNDOWN, sub, :, :] = IrGammaGdu # print "BKPolar[UP,UP]=\n", BKPolar.Data[UPUP,0,UPUP,0,0,:] BKPolar.FFT("K", "W") W0.FFT("K") Denorm, JP = calc.Calculate_Denorminator(W0, BKPolar, _map) # JPJ=np.einsum("ijklvt,klmnv->ijmnvt", JP, W0.Data) BKChiTensor = weight.Weight("SmoothT", _map, "FourSpins", "Symmetric", "K", "W") lu_piv, Determ = weight.LUFactor(Denorm) Check_Denorminator(Denorm, Determ, _map) BKChiTensor.LUSolve(lu_piv, -BKPolar.Data) return BKChiTensor, Determ
def G_Dyson(G0, SigmaDeltaT, Sigma, map): Beta = map.Beta G = weight.Weight("SmoothT", map, "TwoSpins", "AntiSymmetric", "K", "W") G0.FFT("K", "W") SigmaDeltaT.FFT("K") Sigma.FFT("K", "W") NSpin, NSub = G.NSpin, G.NSublat G0SigmaDeltaT = np.einsum("ijklvt,klmnv->ijmnvt", G0.Data, SigmaDeltaT.Data) G0Sigma = np.einsum("ijklvt,klmnvt->ijmnvt", G0.Data, Sigma.Data) ####correction term for tau in range(map.MaxTauBin): G0SigmaDeltaT[..., tau] *= np.cos(np.pi * map.IndexToTau(tau) / Beta) GS = Beta / map.MaxTauBin * (Beta / map.MaxTauBin * G0Sigma + G0SigmaDeltaT) #GS shape: NSpin,NSub,NSpin,NSub,Vol,Tau I = np.eye(NSpin * NSub).reshape([NSpin, NSub, NSpin, NSub]) Denorm = I[..., np.newaxis, np.newaxis] - GS lu_piv, Determ = weight.LUFactor(Denorm) Check_Denorminator(Denorm, Determ, map) G.LUSolve(lu_piv, G0.Data) return G
def W_Dyson(W0, Polar, map, Lat): W=weight.Weight("SmoothT", map, "FourSpins", "Symmetric", "K","W") ChiTensor=weight.Weight("SmoothT", map, "FourSpins", "Symmetric", "K","W") Polar.FFT("K","W") Denorm,JP=Calculate_Denorminator(W0, Polar, map) W0.FFT("K") JPJ=np.einsum("ijklvt,klmnv->ijmnvt", JP, W0.Data) lu_piv,Determ=weight.LUFactor(Denorm) Check_Denorminator(Determ,map) W.LUSolve(lu_piv, JPJ) ChiTensor.LUSolve(lu_piv, -Polar.Data) return W, ChiTensor, Determ