def matrixExpGEMM():

    eta = .2
    gsT = 10.
    gsJ = 1.

    H = numHamiltonians.setupPhotonHamiltonianInf(gsT, gsJ, eta)

    expH1 = sciLin.expm(H)

    eVals, eVecs = np.linalg.eigh(H)
    expH2 = np.dot(
        eVecs, np.dot(np.diag(np.exp(eVals)), np.transpose(np.conj(eVecs))))

    #print(np.abs(expH1 - expH2))

    diff = np.sum(np.abs(expH1 - expH2)) / (np.sum(np.abs(expH1)))
    print("rel diff exp summed = {}".format(diff))
    fail = diff > 1e-5
    if (fail):
        print(
            " Diagonalization with matrix multiplication failed!!! ------ CHECK FAILED!!!"
        )
        return False
    else:
        print(
            " Diagonalization via matrix multiplication worked! ------ CHECK PASSED :)"
        )
        return True
Beispiel #2
0
def setupHOrder(TJ, eta, orderH):
    if (orderH == 1):
        return numH.setupPhotonHamiltonian1st(TJ[0], TJ[1], eta)
    elif (orderH == 2):
        return numH.setupPhotonHamiltonian2nd(TJ[0], TJ[1], eta)
    else:
        return numH.setupPhotonHamiltonianInf(TJ[0], TJ[1], eta)
Beispiel #3
0
def getH(eta):
    gsJ = 0.
    gsE = np.zeros(prms.chainLength)
    gsE[0:prms.numberElectrons // 2 + 1] = 1.
    gsE[-prms.numberElectrons // 2 + 1:] = 1.
    kVec = np.linspace(0, 2. * np.pi, prms.chainLength, endpoint=False)
    cosK = np.cos(kVec)
    gsT = 2. * prms.t * np.sum(np.multiply(cosK, gsE))

    return numH.setupPhotonHamiltonianInf(gsT, gsJ, eta)
def matrixDiagGEMM():

    eta = .2
    gsT = 10.
    gsJ = 1.

    H = numHamiltonians.setupPhotonHamiltonianInf(gsT, gsJ, eta)

    eVals, eVecs = np.linalg.eigh(H)
    HDiag1 = np.diag(eVals)
    HDiag2 = np.dot(np.transpose(np.conj(eVecs)), np.dot(H, eVecs))

    diff = np.sum(np.abs(HDiag1 - HDiag2))
    fail = diff > 1e-10
    if (fail):
        print(
            " Diagonalization with matrix multiplication failed!!! ------ CHECK FAILED!!!"
        )
        return False
    else:
        print(
            " Diagonalization via matrix multiplication worked! ------ CHECK PASSED :)"
        )
        return True
def getH(eta):
    gs = arbOrder.findGS(eta, 3)
    gsJ = eF.J(gs)
    gsT = eF.T(gs)
    return numH.setupPhotonHamiltonianInf(gsT, gsJ, eta)