def test_scheme4(): ph = Phonon.simple_phonon(Quantity(3.33), Quantity(1), 2) m1 = Mol(Quantity(0), [ph]) m2 = Mol(Quantity(0), [ph]*2) mlist1 = MolList([m1, m2], Quantity(17), 4) mlist2 = MolList([m1, m2], Quantity(17), 3) mpo4 = Mpo(mlist1) assert mpo4.is_hermitian() # for debugging f = mpo4.full_operator() mpo3 = Mpo(mlist2) assert mpo3.is_hermitian() # makeup two states mps4 = Mps() mps4.mol_list = mlist1 mps4.use_dummy_qn = True mps4.append(np.array([1, 0]).reshape((1,2,1))) mps4.append(np.array([0, 1]).reshape((1,2,1))) mps4.append(np.array([0.707, 0.707]).reshape((1,2,1))) mps4.append(np.array([1, 0]).reshape((1,2,1))) mps4.build_empty_qn() e4 = mps4.expectation(mpo4) mps3 = Mps() mps3.mol_list = mlist2 mps3.append(np.array([1, 0]).reshape((1,2,1))) mps3.append(np.array([1, 0]).reshape((1,2,1))) mps3.append(np.array([0, 1]).reshape((1,2,1))) mps3.append(np.array([0.707, 0.707]).reshape((1,2,1))) mps3.append(np.array([1, 0]).reshape((1,2,1))) e3 = mps3.expectation(mpo3) assert pytest.approx(e4) == e3
def approx_propagator(cls, mpo, dt, thresh=0): """ e^-iHdt : approximate propagator MPO from Runge-Kutta methods """ mps = Mps() mps.mol_list = mpo.mol_list mps.dim = [1] * (mpo.site_num + 1) mps.qn = [[0]] * (mpo.site_num + 1) mps.qnidx = mpo.site_num - 1 mps.qntot = 0 mps.threshold = thresh for impo in range(mpo.site_num): ms = xp.ones((1, mpo[impo].shape[1], 1), dtype=backend.complex_dtype) mps.append(ms) approx_mpo_t0 = cls.from_mps(mps) approx_mpo = approx_mpo_t0.evolve(mpo, dt) return approx_mpo