# temperature = 300. # Kelvin # beta = 1. / (utils.KELVIN_TO_WAVENUMS * temperature) # mode_params = [] #[(1111., 0.0578, 10.)] hs = HierarchySolver( system_hamiltonian, reorg_energy, cutoff_freq, beta, underdamped_mode_params=mode_params, num_matsubara_freqs=1, temperature_correction=True, sites_to_couple=np.array([1, 1]), ) hs.truncation_level = 11 print hs.system_dimension ** 2 * hs.number_density_matrices() print "Calculating time evolution..." start = tutils.getTime() init_state = np.array([[1.0, 0], [0, 0]]) # init_state = np.dot(hs.system_evectors.T, np.dot(init_state, hs.system_evectors)) # print init_state hs.init_system_dm = init_state hs.truncation_level = 11 dm_history, time = hs.calculate_time_evolution(time_step, duration) # exciton_dm_history = hs.transform_to_exciton_basis(dm_history) end = tutils.getTime()
electronic_coupling = 92. system_hamiltonian = np.array([[1042., electronic_coupling], [electronic_coupling, 0]]) reorg_energy = 110. cutoff_freq = 100. #53.08 temperature = 300. # Kelvin beta = 1. / (utils.KELVIN_TO_WAVENUMS * temperature) fig,ax1 = plt.subplots() mode_params = [] K = 0 environment = [(OBOscillator(reorg_energy, cutoff_freq, beta, K=K),), (OBOscillator(reorg_energy, cutoff_freq, beta, K=K),)] hs = HierarchySolver(system_hamiltonian, environment, beta, num_matsubara_freqs=K, temperature_correction=True) hs.truncation_level = 12 print 'Calculating time evolution...' start = tutils.getTime() init_state = np.array([[0,0],[0,1.]]) init_state = np.dot(hs.system_evectors.T, np.dot(init_state, hs.system_evectors)) hs.init_system_dm = init_state dm_history, time = hs.calculate_time_evolution(time_step, duration) exciton_dm_history = hs.transform_to_exciton_basis(dm_history) end = tutils.getTime() print 'Calculation took ' + str(tutils.duration(end, start)) # convert time in inverse wavenums to picoseconds time /= utils.WAVENUMS_TO_INVERSE_PS
empty_ground_rate = 25.e-3 * utils.EV_TO_WAVENUMS # jump_rates = np.array([excitation_rate, deexcitation_rate, chl_CT1_rate, CT1_chl_rate, \ # phe_CT1_rate, CT1_phe_rate, CT1_CT2_rate, CT2_CT1_rate, CT2_empty_rate, empty_ground_rate]) jump_rates = np.array([excitation_rate, deexcitation_rate]) for i in range(6): jump_rates = np.append(jump_rates, [forward_exciton_CT_rates[i], backward_exciton_CT_rates[i]]) #jump_rates[2:] *= 0.1 jump_rates = np.append(jump_rates, [CT1_CT2_rate, CT2_CT1_rate, CT2_empty_rate, empty_ground_rate]) single_mode_params = []#[(342., 342.*0.4, 100.)] #print jump_rates #jump_rates = np.zeros(18) hs = HierarchySolver(system_hamiltonian, reorg_energy, cutoff_freq, temperature, jump_operators=jump_operators, jump_rates=jump_rates, underdamped_mode_params=single_mode_params) hs.truncation_level = 6 init_state = np.zeros((10, 10)) init_state[0,0] = 1. init_state = np.dot(site_exciton_transform, np.dot(init_state, site_exciton_transform.T)) hs.init_system_dm = init_state dm_history, time = hs.calculate_time_evolution(0.01, 5.) # transform back to exciton basis exciton_dm_history = np.zeros((dm_history.shape[0], dm_history.shape[1], dm_history.shape[2])) for i,dm in enumerate(dm_history): exciton_dm_history[i] = np.dot(site_exciton_transform.T, np.dot(dm, site_exciton_transform)) np.savez('../../data/PSIIRC_HEOM_incoherent_rates_slow_jump_rates_data.npz', exciton_dm_history=exciton_dm_history, \ time=time, reorg_energy=reorg_energy, cutoff_freq=cutoff_freq, temperature=temperature, \ site_exciton_transform=site_exciton_transform, jump_rates=jump_rates) # np.savez('../../data/PSIIRC_HEOM_incoherent_rates_mode_data.npz', exciton_dm_history=exciton_dm_history, \ # time=time, reorg_energy=reorg_energy, cutoff_freq=cutoff_freq, temperature=temperature, \
temperature = 300. # Kelvin beta = 1. / (utils.KELVIN_TO_WAVENUMS * temperature) fig, ax1 = plt.subplots() mode_params = [] K = 0 environment = [(OBOscillator(reorg_energy, cutoff_freq, beta, K=K), ), (OBOscillator(reorg_energy, cutoff_freq, beta, K=K), )] hs = HierarchySolver(system_hamiltonian, environment, beta, num_matsubara_freqs=K, temperature_correction=True) hs.truncation_level = 12 print 'Calculating time evolution...' start = tutils.getTime() init_state = np.array([[0, 0], [0, 1.]]) init_state = np.dot(hs.system_evectors.T, np.dot(init_state, hs.system_evectors)) hs.init_system_dm = init_state dm_history, time = hs.calculate_time_evolution(time_step, duration) exciton_dm_history = hs.transform_to_exciton_basis(dm_history) end = tutils.getTime() print 'Calculation took ' + str(tutils.duration(end, start)) # convert time in inverse wavenums to picoseconds