def test_exact(self): ix, iy, iph_dof_list, inconfigs = exact_solver.pre_Hmat(0, mol) iHmat = exact_solver.construct_Hmat(inconfigs, mol, J, indirect=[iph_dof_list, ix, iy]) ie, ic = exact_solver.Hmat_diagonalization(iHmat, method="full") fx, fy, fph_dof_list, fnconfigs = exact_solver.pre_Hmat(1, mol) fHmat = exact_solver.construct_Hmat(fnconfigs, mol, J, indirect=[fph_dof_list, fx, fy]) fe, fc = exact_solver.Hmat_diagonalization(fHmat, method="full") #ic = np.load("std_data/exact_solver_timeautocorr/ic.npy") #fc = np.load("std_data/exact_solver_timeautocorr/fc.npy") #ie = np.load("std_data/exact_solver_timeautocorr/ie.npy") #fe = np.load("std_data/exact_solver_timeautocorr/fe.npy") dipolemat = exact_solver.construct_dipoleMat( inconfigs, fnconfigs, mol, indirecti=[iph_dof_list, ix, iy], indirectf=[fph_dof_list, fx, fy]) nsteps = 200 dt = 30. T = 298.0 # abs autocorr, E2 = exact_solver.ZT_time_autocorr(dipolemat, ic, fc, ie, fe, "+", nsteps, dt) #np.save("absZT1",autocorr) absZT1 = np.load("std_data/exact_solver_timeautocorr/absZT1.npy") self.assertTrue(np.allclose(autocorr, absZT1)) autocorr, E1, E2 = exact_solver.FT_time_autocorr( T, dipolemat, ic, fc, ie, fe, "+", nsteps, dt) #np.save("absFT1",autocorr) absFT1 = np.load("std_data/exact_solver_timeautocorr/absFT1.npy") self.assertTrue(np.allclose(autocorr, absFT1)) #emi autocorr, E2 = exact_solver.ZT_time_autocorr(dipolemat, fc, ic, fe, ie, "-", nsteps, dt) #np.save("emiZT1",autocorr) emiZT1 = np.load("std_data/exact_solver_timeautocorr/emiZT1.npy") self.assertTrue(np.allclose(autocorr, emiZT1)) autocorr, E1, E2 = exact_solver.FT_time_autocorr( T, dipolemat, fc, ic, fe, ie, "-", nsteps, dt) #np.save("emiFT1",autocorr) emiFT1 = np.load("std_data/exact_solver_timeautocorr/emiFT1.npy") self.assertTrue(np.allclose(autocorr, emiFT1))
def test_nparticle(self): configi_dict = nparticle.construct_config_dict(mol, 0, nparticle=2) iHmat = exact_solver.construct_Hmat(len(configi_dict), mol, J,\ direct=[nmols, configi_dict]) ie, ic = exact_solver.Hmat_diagonalization(iHmat, method="full") configf_dict = nparticle.construct_config_dict(mol, 1, nparticle=2) fHmat = exact_solver.construct_Hmat(len(configf_dict), mol, J, direct=[nmols, configf_dict]) fe, fc = exact_solver.Hmat_diagonalization(fHmat, method="full") dipolemat = exact_solver.construct_dipoleMat(len(configi_dict),len(configf_dict),\ mol, directi=[nmols, configi_dict], directf=[nmols, configf_dict]) nsteps = 200 dt = 30. T = 298.0 # abs autocorr, E2 = exact_solver.ZT_time_autocorr(dipolemat, ic, fc, ie, fe, "+", nsteps, dt) #np.save("absZT2",autocorr) absZT2 = np.load("std_data/exact_solver_timeautocorr/absZT2.npy") self.assertTrue(np.allclose(autocorr, absZT2)) autocorr, E1, E2 = exact_solver.FT_time_autocorr(T, dipolemat, ic, fc, ie, fe,\ "+", nsteps, dt, nset=100) #np.save("absFT2",autocorr) absFT2 = np.load("std_data/exact_solver_timeautocorr/absFT2.npy") self.assertTrue(np.allclose(autocorr, absFT2)) #emi autocorr, E2 = exact_solver.ZT_time_autocorr(dipolemat, fc, ic, fe, ie, "-", nsteps, dt) #np.save("emiZT2",autocorr) emiZT2 = np.load("std_data/exact_solver_timeautocorr/emiZT2.npy") self.assertTrue(np.allclose(autocorr, emiZT2)) autocorr, E1, E2 = exact_solver.FT_time_autocorr(T, dipolemat, fc, ic, fe, ie,\ "-", nsteps, dt, nset=100) #np.save("emiFT2",autocorr) emiFT2 = np.load("std_data/exact_solver_timeautocorr/emiFT2.npy") self.assertTrue(np.allclose(autocorr, emiFT2))
def test_nonlinear_omega_2(self): nmols = 2 J = np.array([[0.0, 1000],[1000, 0.0]])*constant.cm2au nlevels = [5,5] mol = [] phinfo = [list(a) for a in zip(omega, D, nlevels)] for imol in xrange(nmols): mol_local = obj.Mol(elocalex, nphs, dipole_abs) mol_local.create_ph(phinfo) mol.append(mol_local) MPS, MPSdim, MPSQN, MPO, MPOdim, MPOQN, MPOQNidx, MPOQNtot, ephtable, pbond = \ MPSsolver.construct_MPS_MPO_2(mol, J, procedure[0][0], nexciton, MPOscheme=2) energy = MPSsolver.optimization(MPS, MPSdim, MPSQN, MPO, MPOdim, ephtable, pbond, nexciton, procedure, method="2site") fx, fy, fph_dof_list, fnconfigs = exact_solver.pre_Hmat(nexciton, mol) fHmat = exact_solver.construct_Hmat(fnconfigs, mol, J, indirect=[fph_dof_list, fx, fy]) fe, fc = exact_solver.Hmat_diagonalization(fHmat, method="full") print np.min(energy), fe[0] self.assertAlmostEqual(np.min(energy),fe[0])
def test_lanczos(self): dyn_omega = np.linspace(1.4, 3.0, num=1000) / au2ev nsamp = 500 M = 100 ix, iy, iph_dof_list, inconfigs = exact_solver.pre_Hmat(0, mol) iHmat = exact_solver.construct_Hmat(inconfigs, mol, J, indirect=[iph_dof_list, ix, iy]) fx, fy, fph_dof_list, fnconfigs = exact_solver.pre_Hmat(1, mol) fHmat = exact_solver.construct_Hmat(fnconfigs, mol, J, indirect=[fph_dof_list, fx, fy]) dipolemat = exact_solver.construct_dipoleMat( inconfigs, fnconfigs, mol, indirecti=[iph_dof_list, ix, iy], indirectf=[fph_dof_list, fx, fy]) # lanczos method ie, ic = exact_solver.Hmat_diagonalization(iHmat, method="Arnoldi") self.assertAlmostEqual(ie[0] * au2ev, 0.0) fe, fc = exact_solver.Hmat_diagonalization(fHmat, method="Arnoldi") self.assertAlmostEqual(fe[0] * au2ev, 2.2861405313) # absorption # T=0 AiC = exact_solver.dipoleC(mol, ic[:,0], inconfigs, fnconfigs, '+', \ indirect1=[iph_dof_list, ix, iy], indirect2=[fph_dof_list, fx, fy]) dyn_corr5 = exact_solver.dyn_lanczos(0.0, dipolemat, iHmat, fHmat, dyn_omega,\ ie[0], AC=AiC, eta=eta) spectra5 = exact_solver.spectra_normalize(dyn_corr5) with open("std_data/exact_solver/lanc_T0abs.npy", 'rb') as f: spectra5_std = np.load(f) self.assertTrue(np.allclose(spectra5, spectra5_std, atol=1e-03)) # T>0 dyn_corr3 = exact_solver.dyn_lanczos(T, dipolemat, iHmat, fHmat,\ dyn_omega, ie[0], AC=AiC, eta=eta, nsamp=nsamp, M=M) spectra3 = exact_solver.spectra_normalize(dyn_corr3) with open("std_data/exact_solver/lanc_TTabs.npy", 'rb') as f: spectra3_std = np.load(f) self.assertTrue(np.allclose(spectra3, spectra3_std, atol=1e-02)) # emission dyn_omega = dyn_omega[::-1] * -1.0 # T=0 AfC = exact_solver.dipoleC(mol, fc[:,0], fnconfigs, inconfigs, '-', \ indirect1=[fph_dof_list, fx, fy], indirect2=[iph_dof_list, ix, iy]) dyn_corr6 = exact_solver.dyn_lanczos(0.0, dipolemat.T, fHmat, iHmat, dyn_omega,\ fe[0], AC=AfC, eta=eta) spectra6 = exact_solver.spectra_normalize(dyn_corr6) with open("std_data/exact_solver/lanc_T0emi.npy", 'rb') as f: spectra6_std = np.load(f) self.assertTrue(np.allclose(spectra6, spectra6_std, atol=1e-03)) # T>0 dyn_corr4 = exact_solver.dyn_lanczos(T, dipolemat.T, fHmat, iHmat,\ dyn_omega, fe[0], AC=AfC, eta=eta, nsamp=nsamp, M=M) spectra4 = exact_solver.spectra_normalize(dyn_corr4) with open("std_data/exact_solver/lanc_TTemi.npy", 'rb') as f: spectra4_std = np.load(f) self.assertTrue(np.allclose(spectra4, spectra4_std, atol=1e-02))
def test_n_particle(self): dyn_omega = np.linspace(1.4, 3.0, num=1000) / au2ev configi_dict, ie = exact_solver.exciton0H(mol, T, 0.00001) ic = np.diag([1.0] * len(ie)) # absorption # T > 0 # 1-p configf_dict = nparticle.construct_config_dict(mol, 1, nparticle=1) fHmat = exact_solver.construct_Hmat(len(configf_dict), mol, J, direct=[nmols, configf_dict]) fe, fc = exact_solver.Hmat_diagonalization(fHmat, method="full") dipolemat = exact_solver.construct_dipoleMat( len(configi_dict), len(configf_dict), mol, directi=[nmols, configi_dict], directf=[nmols, configf_dict]) dipdip = exact_solver.full_diagonalization_spectrum( ic, ie, fc, fe, dipolemat) dyn_corr1 = exact_solver.dyn_exact(dipdip, T, ie, omega=dyn_omega, eta=eta) spectra1 = exact_solver.spectra_normalize(dyn_corr1) with open("std_data/exact_solver/1-p.npy", 'rb') as f: spectra1_std = np.load(f) self.assertTrue(np.allclose(spectra1, spectra1_std, atol=1e-03)) # 2-p configf_dict = nparticle.construct_config_dict(mol, 1, nparticle=2) fHmat = exact_solver.construct_Hmat(len(configf_dict), mol, J, direct=[nmols, configf_dict]) fe, fc = exact_solver.Hmat_diagonalization(fHmat, method="full") dipolemat = exact_solver.construct_dipoleMat( len(configi_dict), len(configf_dict), mol, directi=[nmols, configi_dict], directf=[nmols, configf_dict]) dipdip = exact_solver.full_diagonalization_spectrum( ic, ie, fc, fe, dipolemat) dyn_corr2 = exact_solver.dyn_exact(dipdip, T, ie, omega=dyn_omega, eta=eta) spectra2 = exact_solver.spectra_normalize(dyn_corr2) with open("std_data/exact_solver/2-p.npy", 'rb') as f: spectra2_std = np.load(f) self.assertTrue(np.allclose(spectra2, spectra2_std, atol=1e-03)) # 3-p configf_dict = nparticle.construct_config_dict(mol, 1, nparticle=3) fHmat = exact_solver.construct_Hmat(len(configf_dict), mol, J, direct=[nmols, configf_dict]) fe, fc = exact_solver.Hmat_diagonalization(fHmat, method="full") dipolemat = exact_solver.construct_dipoleMat( len(configi_dict), len(configf_dict), mol, directi=[nmols, configi_dict], directf=[nmols, configf_dict]) dipdip = exact_solver.full_diagonalization_spectrum( ic, ie, fc, fe, dipolemat) dyn_corr3 = exact_solver.dyn_exact(dipdip, T, ie, omega=dyn_omega, eta=eta) spectra3 = exact_solver.spectra_normalize(dyn_corr3) with open("std_data/exact_solver/TTabs.npy", 'rb') as f: spectra3_std = np.load(f) self.assertTrue(np.allclose(spectra3, spectra3_std, atol=1e-03))
def test_full_diagonalization(self): dyn_omega = np.linspace(1.4, 3.0, num=1000) / au2ev ix, iy, iph_dof_list, inconfigs = exact_solver.pre_Hmat(0, mol) iHmat = exact_solver.construct_Hmat(inconfigs, mol, J, indirect=[iph_dof_list, ix, iy]) ie, ic = exact_solver.Hmat_diagonalization(iHmat, method="full") fx, fy, fph_dof_list, fnconfigs = exact_solver.pre_Hmat(1, mol) fHmat = exact_solver.construct_Hmat(fnconfigs, mol, J, indirect=[fph_dof_list, fx, fy]) fe, fc = exact_solver.Hmat_diagonalization(fHmat, method="full") dipolemat = exact_solver.construct_dipoleMat( inconfigs, fnconfigs, mol, indirecti=[iph_dof_list, ix, iy], indirectf=[fph_dof_list, fx, fy]) dipdip = exact_solver.full_diagonalization_spectrum( ic, ie, fc, fe, dipolemat) iefe_std = np.load("std_data/exact_solver/iefe.npz") iHmat_std = scipy.sparse.load_npz("std_data/exact_solver/iHmat.npz") fHmat_std = scipy.sparse.load_npz("std_data/exact_solver/fHmat.npz") dipolemat_std = scipy.sparse.load_npz( "std_data/exact_solver/dipolemat.npz") self.assertTrue(np.allclose(ie, iefe_std['ie'])) self.assertTrue(np.allclose(fe, iefe_std['fe'])) self.assertTrue(np.allclose(iHmat.todense(), iHmat_std.todense())) self.assertTrue(np.allclose(fHmat.todense(), fHmat_std.todense())) self.assertTrue( np.allclose(dipolemat.todense(), dipolemat_std.todense())) # absorption # T = 0 dyn_corr_absexact = exact_solver.dyn_exact(dipdip, 0, ie) spectra_absexact = exact_solver.spectra_normalize( dyn_corr_absexact[1, :]) with open("std_data/exact_solver/T0abs.npy", 'rb') as f: spectra_absexact_std = np.load(f) self.assertTrue(np.allclose(spectra_absexact, spectra_absexact_std)) # T > 0 dyn_corr1 = exact_solver.dyn_exact(dipdip, T, ie, omega=dyn_omega, eta=eta) spectra1 = exact_solver.spectra_normalize(dyn_corr1) with open("std_data/exact_solver/TTabs.npy", 'rb') as f: spectra1_std = np.load(f) self.assertTrue(np.allclose(spectra1, spectra1_std)) # emission # T = 0 dyn_corr_emiexact = exact_solver.dyn_exact( np.transpose(dipdip, (0, 2, 1)), 0, fe) spectra_emiexact = exact_solver.spectra_normalize( dyn_corr_emiexact[1, :]) with open("std_data/exact_solver/T0emi.npy", 'rb') as f: spectra_emiexact_std = np.load(f) self.assertTrue(np.allclose(spectra_emiexact, spectra_emiexact_std)) # T > 0 dyn_corr2 = exact_solver.dyn_exact(np.transpose(dipdip,(0,2,1)), T, fe, \ omega=dyn_omega, eta=eta) spectra2 = exact_solver.spectra_normalize(dyn_corr2) with open("std_data/exact_solver/TTemi.npy", 'rb') as f: spectra2_std = np.load(f) self.assertTrue(np.allclose(spectra2, spectra2_std))