Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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