Esempio n. 1
0
def test_sdf():
    alpha = 0.05
    omega_c = Quantity(5)
    sdf = SpectralDensityFunction(alpha, omega_c)
    omega_list, displacement_list = sdf.trapz(200, 0.0, 50)

    ph_list = [Phonon.simplest_phonon(o, d) for o,d in zip(omega_list, displacement_list)]
    mol_reor = sum(ph.reorganization_energy.as_au() for ph in ph_list)

    assert mol_reor == pytest.approx(alpha * omega_c.as_au() / 2, abs=0.005)
Esempio n. 2
0
def param2mollist(alpha: float, raw_delta: Quantity, omega_c: Quantity,
                  renormalization_p: float, n_phonons: int):
    sdf = SpectralDensityFunction(alpha, omega_c)
    delta, max_omega = sdf.adiabatic_renormalization(raw_delta,
                                                     renormalization_p)
    omega_list, displacement_list = sdf.trapz(n_phonons, 0.0,
                                              max_omega.as_au())

    ph_list = [
        Phonon.simplest_phonon(o, d)
        for o, d in zip(omega_list, displacement_list)
    ]
    return SpinBosonModel(Quantity(0), delta, ph_list)
Esempio n. 3
0
N_PHONONS = 35

TOTAL_HR = 0.42

if __name__ == "__main__":

    omegas_cm = np.linspace(2, 300, N_PHONONS)
    omegas_au = omegas_cm * cm2au
    hr_factors = np.interp(omegas_cm, sdf_values[:, 0], sdf_values[:, 1])

    hr_factors *= TOTAL_HR / hr_factors.sum()

    lams = hr_factors * omegas_au
    phonons = [
        Phonon.simplest_phonon(Quantity(o), Quantity(l), lam=True)
        for o, l in zip(omegas_au, lams)
    ]

    j_matrix_au = j_matrix_cm * cm2au

    mlist = []
    for j in np.diag(j_matrix_au):
        m = Mol(Quantity(j), phonons)
        mlist.append(m)

    # starts from 1
    mol_arangement = np.array([7, 5, 3, 1, 2, 4, 6]) - 1
    mol_list = MolList(list(np.array(mlist)[mol_arangement]),
                       j_matrix_au[mol_arangement][:, mol_arangement])