def test_ch4_minfreq(forces_a, relaxed, vibname): # FC factor for relevant frequencies only fc = FranckCondon(relaxed, vibname, minfreq=2000) nrel = 4 # single excitations FC, freq = fc.get_Franck_Condon_factors(293, forces_a) assert len(FC[0]) == 2 * nrel + 1 assert len(freq[0]) == 2 * nrel + 1 # include double excitations FC, freq = fc.get_Franck_Condon_factors(293, forces_a, 2) assert len(FC[1]) == 2 * nrel # assert len(FC[2]) == 22 # XXX why? - gives 20 in oldlibs??? for i in range(3): assert len(freq[i]) == len(FC[i])
def test_ch4_all(forces_a, relaxed, vibname): """Evaluate Franck-Condon overlaps in a molecule suddenly exposed to a different potential""" # FC factor for all frequencies fc = FranckCondon(relaxed, vibname) ndof = 3 * len(relaxed) # by symmetry only one frequency has a non-vanishing contribution HR_a, f_a = fc.get_Huang_Rhys_factors(forces_a) assert len(HR_a) == ndof assert HR_a[:-1] == approx(0, abs=1e-10) assert HR_a[-1] == approx(0.859989171) FC, freq = fc.get_Franck_Condon_factors(293, forces_a) assert len(FC[0]) == 2 * ndof + 1 assert len(freq[0]) == 2 * ndof + 1
h = 0.3 atoms = Cluster(read_xyz(StringIO.StringIO(butadiene))) atoms.minimal_box(3.0, h) atoms.set_calculator(GPAW(h=h)) if 0: dyn = FIRE(atoms) dyn.run(fmax=0.05) atoms.write("butadiene.xyz") vibname = "fcvib" vib = Vibrations(atoms, name=vibname) vib.run() # Modul a = FranckCondon(atoms, vibname, minfreq=250) # excited state forces F = np.array( [ [-2.11413, 0.07317, -0.91682], [3.23569, -0.74520, 0.76758], [-3.44847, 0.63846, -0.81080], [2.77345, 0.01272, 0.74811], [-0.06544, -0.01078, -0.03209], [-0.01245, -0.01123, -0.00040], [0.00186, -0.05864, -0.00371], [-0.00151, 0.05815, 0.00141], [0.01625, 0.00781, -0.00202], [0.06253, 0.00902, 0.03381], ]
h = 0.3 atoms = Cluster(read_xyz(StringIO.StringIO(butadiene))) atoms.minimal_box(3., h) atoms.set_calculator(GPAW(h=h)) if 0: dyn = FIRE(atoms) dyn.run(fmax=0.05) atoms.write('butadiene.xyz') vibname = 'fcvib' vib = Vibrations(atoms, name=vibname) vib.run() # Modul a = FranckCondon(atoms, vibname, minfreq=250) # excited state forces F = np.array([[-2.11413, 0.07317, -0.91682], [3.23569, -0.74520, 0.76758], [-3.44847, 0.63846, -0.81080], [2.77345, 0.01272, 0.74811], [-0.06544, -0.01078, -0.03209], [-0.01245, -0.01123, -0.00040], [0.00186, -0.05864, -0.00371], [-0.00151, 0.05815, 0.00141], [0.01625, 0.00781, -0.00202], [0.06253, 0.00902, 0.03381]]) # Huang-Rhys factors S, fq = a.get_Huang_Rhys_factors(F) #Temperature and #quanta taken into account T = 300 n = 10