def nonEqGFParametersAboveFS(nCoh, kPoint, wVec, damping):

    if (nCoh == 0):
        eta = 2.5 / np.sqrt(prms.chainLength)
    else:
        eta = np.sqrt(0.4 / nCoh) / np.sqrt(prms.chainLength)

    print("nCoh = {} ; eta = {}".format(nCoh, eta * np.sqrt(prms.chainLength)))

    gs = arbOrder.findGS(eta, 3)
    gsT = eF.T(gs)
    wTilde = np.sqrt(1. - 2. * eta**2 / prms.w0 * gsT)
    tau = 2. * np.pi / wTilde
    tauLength = 1.
    tAv = np.linspace(1000. * tau, (1000. + tauLength) * tau,
                      20,
                      endpoint=False)
    gfNonEq = nonEqGreenPoint.gfCohW(kPoint=kPoint,
                                     wRel=wVec,
                                     tAv=tAv,
                                     eta=eta,
                                     damping=damping,
                                     N=nCoh)
    gfNonEqN0 = 1. / (tauLength * tau) * (tAv[1] - tAv[0]) * np.sum(gfNonEq,
                                                                    axis=1)

    return gfNonEqN0
def getPhGS(eta):
    gs = arbOrder.findGS(eta, 3)
    gsJ = eF.J(gs)
    gsT = eF.T(gs)
    gsJ = 0.
    gsT = -2. / np.pi * prms.chainLength

    return phState.findPhotonGS([gsT, gsJ], eta, 3)
示例#3
0
def expectAnnihil(eta):
    gs = arbOrder.findGS(eta, 3)
    gsJ = eF.J(gs)
    gsT = eF.T(gs)

    ptGS = phState.findPhotonGS([gsT, gsJ], eta, 3)
    a = setUpAnnihil(eta)

    return np.dot(np.conj(ptGS), np.dot(a, ptGS))
示例#4
0
def currentGS(eta):
    gs = arbOrder.findGS(eta, 3)
    gsJ = eF.J(gs)
    gsT = eF.T(gs)

    ptGS = phState.findPhotonGS([gsT, gsJ], eta, 3)
    jOp = setupCurrentOperator(gsT, gsJ, eta)

    current = np.dot(np.conj(ptGS), np.dot(jOp, ptGS))
    return current
示例#5
0
def expectSinA(eta):
    gs = arbOrder.findGS(eta, 3)
    gsJ = eF.J(gs)
    gsT = eF.T(gs)

    ptGS = phState.findPhotonGS([gsT, gsJ], eta, 3)
    x = setUpA(eta)
    sinX = sciLin.sinm(x)

    return np.dot(np.conj(ptGS), np.dot(sinX, ptGS))
def gfNumVecTGreater(kVec, tVec, eta, damping):
    gs = arbOrder.findGS(eta, 1)
    _, occupations = np.meshgrid(np.ones(tVec.shape), gs[:])
    GF = gfNumPointTGreater(kVec, tVec, eta)
    GF = np.multiply(1 - occupations, GF)
    dampingArr, _ = np.meshgrid(np.exp(-damping * np.abs(tVec)),
                                np.ones(kVec.shape))
    GF = np.multiply(dampingArr, GF)

    return GF
示例#7
0
def gfNumVecTGreater(kVec, tVec, eta, damping):
    if (len(kVec) == prms.chainLength):
        gs = arbOrder.findGS(eta, 3)
    else:
        gs = np.ones(len(kVec), dtype=complex)
    _, occupations = np.meshgrid(np.ones(tVec.shape), gs[:])
    GF = gfNumPointTGreater(kVec, tVec, eta)
    GF = np.multiply(1 - occupations, GF)
    dampingArr, _ = np.meshgrid(np.exp(-damping * np.abs(tVec)),
                                np.ones(kVec.shape))
    GF = np.multiply(dampingArr, GF)

    return GF
def anaGreenVecTLesser(kVec, tVec, eta, damping):
    if (len(kVec) == prms.chainLength):
        gs = arbOrder.findGS(eta, 3)
    else:
        gs = np.ones(kVec.shape, dtype=complex)
    _, occupations = np.meshgrid(np.ones(tVec.shape), gs[:])
    gsJ = 0.
    GF = anaGreenPointTLesser(kVec, tVec, gsJ, eta)
    GF = np.multiply(occupations, GF)
    dampingArr, _ = np.meshgrid(np.exp(-damping * np.abs(tVec)),
                                np.ones(kVec.shape))
    GF = np.multiply(dampingArr, GF)

    return GF
def anaGreenVecT(kVec, tVec, eta, damping):
    if (len(kVec) == prms.chainLength):
        gs = arbOrder.findGS(eta, 3)
    else:  #don't include occupations if length of kVec doesnt match chain length
        gs = np.ones(len(kVec), dtype=complex)
    _, occupations = np.meshgrid(np.ones(tVec.shape), gs[:])
    gsJ = 0.
    GF = anaGreenPointT(kVec, tVec, gsJ, eta)
    GF = np.multiply(1 - occupations, GF)
    dampingArr, _ = np.meshgrid(np.exp(-damping * np.abs(tVec)),
                                np.ones(kVec.shape))
    GF = np.multiply(dampingArr, GF)

    return GF
示例#10
0
def anaGreenVecTGreater(kVec, tVec, eta, damping):

    #gs = anaGS.findGS1st(eta)
    #gsJ = eF.J(gs[0: -1])
    gs = arbOrder.findGS(eta, 3)
    gsJ = eF.J(gs)
    gsT = eF.T(gs)

    _, occupations = np.meshgrid(np.ones(tVec.shape), gs)
    GF = anaGreenPointTGreater(kVec, tVec, gsJ, eta)
    GF = np.multiply(1 - occupations, GF)

    dampingArr, _ = np.meshgrid(np.exp(- damping * np.abs(tVec)), np.ones(kVec.shape))
    GF = np.multiply(dampingArr, GF)

    return GF
示例#11
0
def electronicGSMatches1st():
    eta = 1. / np.sqrt(prms.chainLength)

    gsAna = analytical.findGS1st(eta)
    gsAna = gsAna[:-1]

    gsNum = numerical.findGS(eta, 1)

    failArr = (np.abs(gsAna - gsNum) > 1e-8)

    #print("gsAna = {}".format(gsAna))
    #print("gsNum = {}".format(gsNum))

    if (np.any(failArr)):
        print(" Numerical and Analytical result differ for GS 1st!!! ------ CHECK FAILED!!!")
        return False
    else:
        print(" Numerical and Analytical result consistent for GS 1st! ------ CHECK PASSED :)")
        return True
示例#12
0
def anaGreenPointTLesser(kPoint, tPoint, gsJ, eta):

    gs = arbOrder.findGS(eta, 3)
    gsJ = eF.J(gs)
    gsT = eF.T(gs)

    #gsT = - 2. / np.pi * prms.chainLength
    z = 2. * eta**2 / prms.w0 * gsT
    wTilde = prms.w0 * np.sqrt(1. - z)

    epsK = 2. * prms.t * np.cos(
        kPoint[:, None]) * (1. - 0.5 * eta**2 * prms.w0 / wTilde)
    selfE = eta**2 * prms.w0 / (wTilde**2) * (-2. * prms.t *
                                              np.sin(kPoint[:, None]))**2

    eTime = -1j * epsK * tPoint[None, :] - 1j * selfE * tPoint[None, :]
    ptTime = -(-2. * eta * prms.t * np.sin(kPoint[:, None]))**2 * prms.w0 / (
        wTilde**3) * (1. - np.exp(1j * wTilde * tPoint[None, :]))

    return -1j * np.exp(eTime + ptTime)
示例#13
0
def getH(eta):
    gs = arbOrder.findGS(eta, 3)
    gsJ = eF.J(gs)
    gsT = eF.T(gs)
    return numH.setupPhotonHamiltonianInf(gsT, gsJ, eta)
示例#14
0
def getPhGS(eta):
    gs = arbOrder.findGS(eta, 3)
    gsJ = eF.J(gs)
    gsT = eF.T(gs)
    return phState.findPhotonGS([gsT, gsJ], eta, 3)