Help in Phonon density of states calculations !

HI, All

I saw previous discussion on calculation of Phonon density of states and I hope I am doing the same. However I am getting strange results.

1- I did the calculation of the velocity correlation using “VACF” command

2- Then I calculated the auto-correlation among the velocities using “ave/time” command

3- Finally I took the real part of the FFT transform.

Cant see where things went wrong ! Can any one who does this before help me ?

Part of the code

#################################Start ##################################################################

Geometry

dimension 3
boundary p p p

read_data data.dat

mass 1 69.723
mass 2 14.0

group Ga type 1
group N type 2

group sub1 id 791
group sub2 id 792

pair_style sw
pair_coeff * * GaN.sw Ga N

timestep ${dt}
thermo 100

velocity all create $T 102486 mom yes rot yes dist gaussian

fix Ensembel1 all nvt temp $T $T 1

run 1000000

unfix Ensembel21
fix Ensembel2 all nve

run 1000000

compute 10 sub2 vacf

fix 7 sub2 ave/time 10 100 1000 c_10[4] file vacf11.dat

run 1000000

################################# end ##################################################################

You could also look at the USER-PHONON package.

Steve

Hi,

I cannot really help with VACF command because i haven’t used it.

I usually produce velocity vectors using Lammps and do post-processing with those velocity vectors using Matlab because it helps me to do more careful signal processing with some details. If your system is well-equilibrated and produce good velocity vectors, then you can try doing the postprocessing without using VACF command.

By the way, what do you mean by “strange”?

Justin

What do you mean by strange results?

Is fix ave/time definitely returning the output you want? At the moment, fix ave/time is going to give you an output on every 1000th timestep, where the value returned is an average over the previous 100 values of the VACF at 10 timestep intervals. You are smoothing out some of the time dependence. It would be more typical to just sample this every timestep.

Thanks,

Niall

Niall Jackson
PhD Student, Bresme Group (Computational Chemical Physics Section)
Department of Chemistry, Imperial College London

Hi Niall

Thanks for you reply. Actually I have tried to vary the number of time steps to take from 1,10,100 and 1000 but didnt get better and dont know where things went wrong.

I have attached how the PDOS(Fist figure) and the correlated (Second figure)data looks like taken by setting " ave/time 1 1 1 c_10[4] ".

pdos.png

That VACF looks very noisy - how many atoms are in the group sub2?

I should point out that compute VACF isn’t doing every possible correlation. For each atom, it correlates the velocity on the current timestep with v(0), the velocity at the start of the run. This means that your statistics in <v(0)v(1)>, for example, don’t increase with the length of the simulation. It works well if you have a large number of atoms in the group, though.

if somebody here has interest in a C++ programming project, there is a
way to simplify the whole process and take out some of the arbitrary
choices, by assembling the spectral densities directly in fourier
space. the downside is increased use of RAM for the intermediately
accumulated vector data. it would work not only for individual
velocities, but also on per-molecule/chunk dipole moments or the total
dipole moment of the system (that is how it was originally conceived
in combination with ab initio MD simulations).

the functionality is currently available in VMD and could be used in
principle with existing LAMMPS trajectory dumps, either by using
coordinates and reading partial charges from the data file, or the
atomic velocities if they are included, however, the space
requirements in the latter case for a decent resolution from classical
MD are huge, so that a direct integration into LAMMPS would be
desirable. even in the former case, it might be desirable to compute
the total dipole in every step and write it out to a particular file
and then read that file into VMD as a long list of vectors and then
compute the spectral density. please note that this plugin is
basically a standalone program (there is a fortran version of it
bundled with CPMD) and does not use any VMD internal features.

http://www.ks.uiuc.edu/Research/vmd/plugins/signalproc/
http://www.ks.uiuc.edu/Research/vmd/plugins/irspecgui/

i've been considering repeatedly to port this over, but this is really
a perfect project for somebody to learn about integrating code into
LAMMPS. i'd be willing to provide assistance for as long as doesn't
become more work than doing it myself.

axel.