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)
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))
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
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
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
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
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
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)
def getH(eta): gs = arbOrder.findGS(eta, 3) gsJ = eF.J(gs) gsT = eF.T(gs) return numH.setupPhotonHamiltonianInf(gsT, gsJ, eta)
def getPhGS(eta): gs = arbOrder.findGS(eta, 3) gsJ = eF.J(gs) gsT = eF.T(gs) return phState.findPhotonGS([gsT, gsJ], eta, 3)