Query about PLOT-phonon-anim.py

Dear exciting community,

I am interested in the algorithms that are used to convert phonon eigenvectors / eigendisplacements (i.e. the eigenvectors normalised by 1/sqrt(atomic mass)) into movies of the phonon modes.

I’ve searched through the PLOT-phonon-anim.py - the script which converts eigenvectors into time-dependent displacements of actual atoms - and I’ve found the following code snippet:

datcoord[isp][iat][ipol] = R + d +
dispr[isp][iat][ipol] * cos(twopiqR -
istep/nsteps) -
dispi[isp][iat][ipol] * sin(twopiqR -

My understanding is then that the time-dependent atomic position is the equilibrium position plus:

{real part of eigendisplacement} cos(2 pi qr - twopiistep/nsteps) -
{imag part of eigendisplacement} sin(2 pi qr - twopi

My question is, why is the second term - containing sin(2 pi qr - twopi*istep/nsteps) - included? Usually, when I think of converting a complex displacement into a real displacement I usually think about just taking the real part. There are some basic transformations which might be in play here:

i.e. u(x,t) = u_o cos(δ) cos(kx - ωt) + u_o sin(δ) sin(kx - ωt)
cos(x–y) = cos(x) cos(y) + sin(x) sin(y)
u(z,t) = u_o cos[(kx - ωt)) – δ]

but I can’t figure how this gets rid of the ‘i’ in the second term.

I suspect I’m missing something very obvious, but - please - if anyone has any guidance here I would be very grateful.

With thanks

Ian Shuttleworth
(Nottingham Trent University)