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)
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)
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])