def test_ZeroTcorr_TDVP(method, evolve_dt, use_rk, rtol): # procedure = [[50, 0], [50, 0], [50, 0]] procedure = [[20, 0], [20, 0], [20, 0]] optimize_config = OptimizeConfig(procedure=procedure) mol_list = parameter.mol_list evolve_config = EvolveConfig(method, evolve_dt=evolve_dt, adaptive=False) evolve_config.tdvp_ps_rk4 = use_rk zero_t_corr = SpectraTwoWayPropZeroT( mol_list, "abs", optimize_config, evolve_config=evolve_config, offset=Quantity(2.28614053, "ev"), ) zero_t_corr.info_interval = 30 nsteps = 200 # nsteps = 1200 zero_t_corr.evolve(evolve_dt, nsteps) with open( os.path.join( cur_dir, "zero_t_%s.npy" % str(evolve_config.method).split(".")[1]), "rb", ) as f: ZeroTabs_std = np.load(f) assert np.allclose(zero_t_corr.autocorr[:nsteps], ZeroTabs_std[:nsteps], rtol=rtol)
def test_thermal_prop(mol_list, etot_std, occ_std, nsteps, evolve_method, use_rk, rtol): init_mps = MpDm.max_entangled_ex(mol_list) mpo = Mpo(mol_list) beta = Quantity(298, "K").to_beta() evolve_time = beta / 2j if nsteps is None: evolve_config = EvolveConfig(evolve_method, adaptive=True, evolve_dt=beta / 100j) else: evolve_config = EvolveConfig(evolve_method) if evolve_method is EvolveMethod.tdvp_ps: evolve_config.tdvp_ps_rk4 = use_rk tp = ThermalProp(init_mps, mpo, evolve_config=evolve_config) tp.evolve(nsteps=nsteps, evolve_time=evolve_time) mps = tp.latest_mps MPO, HAM, Etot, A_el = mps.construct_hybrid_Ham(mpo, debug=True) assert np.allclose(Etot, etot_std, rtol=rtol) assert np.allclose(A_el, occ_std, rtol=rtol)
def test_finite_t_spectra_emi_TDVP(method, nsteps, evolve_dt, use_rk, rtol, interval): mol_list = parameter.mol_list temperature = Quantity(298, "K") offset = Quantity(2.28614053, "ev") evolve_config = EvolveConfig(method) evolve_config.tdvp_ps_rk4 = use_rk finite_t_corr = SpectraFiniteT(mol_list, "emi", temperature, 50, offset, evolve_config=evolve_config) finite_t_corr.evolve(evolve_dt, nsteps) with open( os.path.join( cur_dir, "finite_t_%s.npy" % str(evolve_config.method).split(".")[1]), "rb", ) as fin: std = np.load(fin) assert np.allclose(finite_t_corr.autocorr[:nsteps], std[:interval * nsteps:interval], rtol=rtol)