Eigenvectors from ase.vibrations.Vibrations

Hello,

I am trying to calculate the normal modes and associated eigenvectors with ASE (and SIESTA as calculator) for a system composed by a gold slab with a water monomer absorbed on it, however I did not find a way to output both of these data in a file (only the normal modes).

My python code containing the vibrations calculations is the following:

vib = Vibrations(
    atoms=system,
    indices=[
        [atom.index for atom in system if atom.symbol == 'O'][0],
        [atom.index for atom in system if atom.symbol == 'H'][0],
        [atom.index for atom in system if atom.symbol == 'H'][1]
    ],
    name='H2O_Au-111_Flat_Vibra',
    delta=0.02,
    nfree=2
)

vib.run()
vib.summary()

Thank you very much for the help,

João

You can use vib.get_vibrations() to get a VibrationsData object. This is a data collection that is no longer connected to the calculation files, so is a bit more stable to save and pass around. (There is a .write() method to save this Hessian data as JSON).

With a VibrationsData object you can use the .get_energies_and_modes() to get a set of energies and displacement vectors. If you want to do this in one step, then: vibs.get_vibrations().get_energies_and_modes().

2 Likes

Thank you for the help!

1 Like