Пример #1
0
for i, V in enumerate(coupling_values):
    print 'calculating rates for coupling ' + str(V)
    rates = []
    for delta_E in delta_E_values:
        evals, evecs = utils.sorted_eig(hamiltonian(delta_E, V))
        print evals
        exciton_reorg_energies = np.array([
            os.exciton_reorg_energy(exciton, [reorg_energy, reorg_energy])
            for exciton in evecs
        ])
        print exciton_reorg_energies
        rates.append(
            os.modified_redfield_rates_general(
                evals, evecs, np.array([g_site, scaling * g_site]),
                np.array([g_site_dot, scaling * g_site_dot]),
                np.array([g_site_dot_dot, scaling * g_site_dot_dot]),
                np.array([reorg_energy, scaling * reorg_energy]), temperature,
                time)[0][0, 1])
        #rates.append(os.MRT_rates(hamiltonian(delta_E, V), np.array([reorg_energy, reorg_energy]), cutoff_freq, temperature, None)[0,1])
    plt.subplot(1, coupling_values.size, i + 1)
    rates_data.append(rates)
    plt.loglog(delta_E_values,
               np.array(rates) * utils.WAVENUMS_TO_INVERSE_PS,
               label=V)

    # plot extracted data from Ed's thesis
    #     xdata, ydata = np.loadtxt('../../data/thieved_data'+str(i)+'.txt', delimiter=', ', unpack=True)
    #     plt.loglog(xdata, ydata, color='red')
    #s = interp.UnivariateSpline(xdata, ydata, k=2, s=None)
    #plt.loglog(xdata, s(xdata), color='red')
time = np.linspace(0, time_interval, int(time_interval*2000))
lbf_coeffs = os.lbf_coeffs(reorg_energy, cutoff_freq, temperature, None, 0)
g_site = os.site_lbf_ed(time, lbf_coeffs)
g_site_dot = os.site_lbf_dot_ed(time, lbf_coeffs)
g_site_dot_dot = os.site_lbf_dot_dot_ed(time, lbf_coeffs)
scaling = 1.

for i,V in enumerate(coupling_values):
    print 'calculating rates for coupling ' + str(V)
    rates = []
    for delta_E in delta_E_values:
        evals, evecs = utils.sorted_eig(hamiltonian(delta_E, V))
        print evals
        exciton_reorg_energies = np.array([os.exciton_reorg_energy(exciton, [reorg_energy, reorg_energy]) for exciton in evecs])
        print exciton_reorg_energies
        rates.append(os.modified_redfield_rates_general(evals, evecs, np.array([g_site, scaling*g_site]), np.array([g_site_dot,scaling*g_site_dot]), np.array([g_site_dot_dot,scaling*g_site_dot_dot]), np.array([reorg_energy,scaling*reorg_energy]), temperature, time)[0][0,1])
        #rates.append(os.MRT_rates(hamiltonian(delta_E, V), np.array([reorg_energy, reorg_energy]), cutoff_freq, temperature, None)[0,1])
    plt.subplot(1, coupling_values.size, i+1)
    rates_data.append(rates)
    plt.loglog(delta_E_values, np.array(rates)*utils.WAVENUMS_TO_INVERSE_PS, label=V)
       
    # plot extracted data from Ed's thesis
#     xdata, ydata = np.loadtxt('../../data/thieved_data'+str(i)+'.txt', delimiter=', ', unpack=True)
#     plt.loglog(xdata, ydata, color='red')
    #s = interp.UnivariateSpline(xdata, ydata, k=2, s=None)
    #plt.loglog(xdata, s(xdata), color='red')
       
    plt.xlabel(r'$\Delta E$ (cm$^{-1}$)')
    plt.ylabel(r'rate')
    plt.ylim(0.01, 200)
    plt.xlim(5,1000)
Пример #3
0
    ])
    # print evals - exciton_reorg_energies
    # evals,evecs = utils.sort_evals_evecs(evals-exciton_reorg_energies, evecs)
    # print evals

    # MRT_rates2 = os.modified_redfield_rates_general_unordered(evals-exciton_reorg_energies, evecs, lbf, lbf_dot, lbf_dot_dot, total_site_reorg_energy, temperature, time)
    #
    # liouvillian2 = MRT_rates2 - np.diag(np.sum(MRT_rates2, axis=0))
    #
    # print evals
    # print MRT_rates2

    print evals - exciton_reorg_energies
    #MRT_rates,evals,evecs = os.modified_redfield_rates_general(evals-exciton_reorg_energies, evecs, lbf, lbf_dot, lbf_dot_dot, total_site_reorg_energy, temperature, time)
    MRT_rates = os.modified_redfield_rates_general(
        evals - exciton_reorg_energies, evecs, lbf, lbf_dot, lbf_dot_dot,
        total_site_reorg_energy, temperature, time)[0]
    print evals
    print MRT_rates

    # time evolution
    liouvillian = MRT_rates - np.diag(np.sum(MRT_rates, axis=0))

    # print liouvillian
    # for col in liouvillian.T:
    #     print np.sum(col)

    init_state = np.array([1., 0, 0, 0, 0, 0])

    dv_dynamics = te.liouvillian_time_evolution(init_state, liouvillian,
                                                duration, time_step)
Пример #4
0
                   1.5*total_site_reorg_energy])

MRT_rates2 = os.modified_redfield_rates_general_unordered(evals-exciton_reorg_energies, evecs,
                                                          np.array([lbf,lbf,lbf,lbf,lbf,lbf,1.5*lbf]), \
                                                          np.array([lbf_dot,lbf_dot,lbf_dot,lbf_dot,lbf_dot,lbf_dot,1.5*lbf_dot]), \
                                                          np.array([lbf_dot_dot,lbf_dot_dot,lbf_dot_dot,lbf_dot_dot,lbf_dot_dot,lbf_dot_dot,1.5*lbf_dot_dot]), \
                                                          reorgs,\
                                                          temperature, time)

liouvillian2 = MRT_rates2 - np.diag(np.sum(MRT_rates2, axis=0))

print evals
print MRT_rates2

MRT_rates, evals, evecs = os.modified_redfield_rates_general(
    evals - exciton_reorg_energies, evecs, lbf, lbf_dot, lbf_dot_dot,
    total_site_reorg_energy, temperature, time)
print evals
print MRT_rates

MRT_rates3,evals,evecs = os.modified_redfield_rates_general(evals, evecs,\
                                                           np.array([lbf,lbf,lbf,lbf,lbf,lbf,1.5*lbf]),\
                                                           np.array([lbf_dot,lbf_dot,lbf_dot,lbf_dot,lbf_dot,lbf_dot,1.5*lbf_dot]),\
                                                           np.array([lbf_dot_dot,lbf_dot_dot,lbf_dot_dot,lbf_dot_dot,lbf_dot_dot,lbf_dot_dot,1.5*lbf_dot_dot]),\
                                                           reorgs,\
                                                           temperature, time)
print MRT_rates3

# time evolution
liouvillian = MRT_rates - np.diag(np.sum(MRT_rates, axis=0))
    lbf = os.site_lbf_ed(time, lbf_coeffs)
    lbf_dot = os.site_lbf_dot_ed(time, lbf_coeffs)
    lbf_dot_dot = os.site_lbf_dot_ed(time, lbf_coeffs)
    np.savez(lbf_fn,
             lbf=lbf,
             lbf_dot=lbf_dot,
             lbf_dot_dot=lbf_dot_dot,
             time=time)

print 'Calculating MRT rates at ' + str(time_utils.getTime())
MRT_rates = np.zeros(energy_gap_values.size)
for i, H in enumerate(hamiltonians):
    evals, evecs = utils.sorted_eig(H)
    MRT_rates[i] = os.modified_redfield_rates_general(evals, evecs, lbf,
                                                      lbf_dot, lbf_dot_dot,
                                                      reorg_energy,
                                                      temperature, time)[0][0,
                                                                            1]


# define function for HEOM calculation pool
def HEOM_calculation(hamiltonian):
    reorg_energy = 100.
    cutoff_freq = 53.
    temperature = 300.
    init_state = np.array([[1., 0], [0, 0]])

    duration = 5.
    time_step = 0.00005

    hs = HierarchySolver(hamiltonian, reorg_energy, cutoff_freq, temperature)
    data = np.load(lbf_fn)
    lbf = data['lbf']
    lbf_dot = data['lbf_dot']
    lbf_dot_dot = data['lbf_dot_dot']
except IOError:
    lbf_coeffs = os.lbf_coeffs(reorg_energy, cutoff_freq, temperature, None, num_expansion_terms)
    lbf = os.site_lbf_ed(time, lbf_coeffs)
    lbf_dot = os.site_lbf_dot_ed(time, lbf_coeffs)
    lbf_dot_dot = os.site_lbf_dot_ed(time, lbf_coeffs)
    np.savez(lbf_fn, lbf=lbf, lbf_dot=lbf_dot, lbf_dot_dot=lbf_dot_dot, time=time)

print 'Calculating MRT rates at ' + str(time_utils.getTime())
MRT_rates = np.zeros(energy_gap_values.size)
for i,H in enumerate(hamiltonians):
    evals,evecs = utils.sorted_eig(H)
    MRT_rates[i] = os.modified_redfield_rates_general(evals, evecs, lbf, lbf_dot, lbf_dot_dot, reorg_energy, temperature, time)[0][0,1]

# define function for HEOM calculation pool
def HEOM_calculation(hamiltonian):
    reorg_energy = 100.
    cutoff_freq = 53.
    temperature = 300.
    init_state = np.array([[1., 0], [0, 0]])
    
    duration = 5.
    time_step = 0.00005
    
    hs = HierarchySolver(hamiltonian, reorg_energy, cutoff_freq, temperature)
    HEOM_history, time = hs.hierarchy_time_evolution(init_state, 18, time_step, duration)
    return HEOM_history
 
 exciton_reorg_energies = np.array([os.exciton_reorg_energy(exciton, site_reorg_energies) for exciton in evecs])
 # print evals - exciton_reorg_energies
 # evals,evecs = utils.sort_evals_evecs(evals-exciton_reorg_energies, evecs)
 # print evals
 
 # MRT_rates2 = os.modified_redfield_rates_general_unordered(evals-exciton_reorg_energies, evecs, lbf, lbf_dot, lbf_dot_dot, total_site_reorg_energy, temperature, time)
 # 
 # liouvillian2 = MRT_rates2 - np.diag(np.sum(MRT_rates2, axis=0))
 # 
 # print evals
 # print MRT_rates2
 
 print evals - exciton_reorg_energies
 #MRT_rates,evals,evecs = os.modified_redfield_rates_general(evals-exciton_reorg_energies, evecs, lbf, lbf_dot, lbf_dot_dot, total_site_reorg_energy, temperature, time)
 MRT_rates = os.modified_redfield_rates_general(evals-exciton_reorg_energies, evecs, lbf, lbf_dot, lbf_dot_dot, total_site_reorg_energy, temperature, time)[0]
 print evals
 print MRT_rates
 
 # time evolution
 liouvillian = MRT_rates - np.diag(np.sum(MRT_rates, axis=0))
 
 # print liouvillian
 # for col in liouvillian.T:
 #     print np.sum(col)
 
 init_state = np.array([1., 0, 0, 0, 0, 0])
 
 dv_dynamics = te.liouvillian_time_evolution(init_state, liouvillian, duration, time_step)
 dv_dynamics = np.array(dv_dynamics)
 dynamics[i] = dv_dynamics
                   total_site_reorg_energy, total_site_reorg_energy, total_site_reorg_energy,\
                   1.5*total_site_reorg_energy])

MRT_rates2 = os.modified_redfield_rates_general_unordered(evals-exciton_reorg_energies, evecs,
                                                          np.array([lbf,lbf,lbf,lbf,lbf,lbf,1.5*lbf]), \
                                                          np.array([lbf_dot,lbf_dot,lbf_dot,lbf_dot,lbf_dot,lbf_dot,1.5*lbf_dot]), \
                                                          np.array([lbf_dot_dot,lbf_dot_dot,lbf_dot_dot,lbf_dot_dot,lbf_dot_dot,lbf_dot_dot,1.5*lbf_dot_dot]), \
                                                          reorgs,\
                                                          temperature, time)

liouvillian2 = MRT_rates2 - np.diag(np.sum(MRT_rates2, axis=0))

print evals
print MRT_rates2

MRT_rates,evals,evecs = os.modified_redfield_rates_general(evals-exciton_reorg_energies, evecs, lbf, lbf_dot, lbf_dot_dot, total_site_reorg_energy, temperature, time)
print evals
print MRT_rates

MRT_rates3,evals,evecs = os.modified_redfield_rates_general(evals, evecs,\
                                                           np.array([lbf,lbf,lbf,lbf,lbf,lbf,1.5*lbf]),\
                                                           np.array([lbf_dot,lbf_dot,lbf_dot,lbf_dot,lbf_dot,lbf_dot,1.5*lbf_dot]),\
                                                           np.array([lbf_dot_dot,lbf_dot_dot,lbf_dot_dot,lbf_dot_dot,lbf_dot_dot,lbf_dot_dot,1.5*lbf_dot_dot]),\
                                                           reorgs,\
                                                           temperature, time)
print MRT_rates3

# time evolution
liouvillian = MRT_rates - np.diag(np.sum(MRT_rates, axis=0))

# print liouvillian