Пример #1
0
# 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
Пример #3
0
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