Wave packet simulation

Hi all,
I generated a Gaussian wave packet with a specific velocity on a CNT structure. The wave packet was generated on an energy-minimized structure. During the NVE ensemble, the wave packet is not propagating. Instead the amplitude keeps increasing during the NVE integration, though the initial wave packet has a fixed amplitude. May I know the reason behind this issue ?

Thanking you,

With regards,
Vivek

There is not enough information here to understand what you are doing and how.
Thus it is impossible to give any specific advice or explanations.

Dear Akohlmey,

  • To make my question clearer, I’d like to rephrase it. Consider a scenario where a 1-dimensional chain of atoms is displaced with an amplitude of A=0.01pm at t=0, as shown in the figure.

  • I want to propagate this wave along the x-direction. The issue I am encountering is that when I apply the velocities Vx=Ux⋅ω and Vy=Uy⋅ω (with ω=10 THz, Ux and Uy are the displacement of atoms along x and y -direction), the wave does not propagate as expected. Instead, it starts spreading from its initial position. For time integration, let’s consider the NVE ensemble. In LAMMPS, how should I specify the velocities to propagate the wave along the x-direction as shown in the figure?

(Note: I initially tried to propagate a wave along a CNT channel. Based on those observations, I simplified the problem for better understanding. I have not yet attempted the 1-D simulation discussed in the rephrased question. The question concerns how to specify the velocities to propagate a wave.)

Thanking you,

With regards,
Vivek

Your script almost certainly does not do what you think you want to do. (It is impossible to discuss further more definitively unless you show us the script you have written and started using.)

Quite apart from script correctness, an MD simulated material will almost certainly have some non-zero dispersion (that is, different frequencies of the wave will move at different speeds), making coherence unlikely. But that is a later problem, and not a LAMMPS problem at all.

Dear @srtee !
Here I have provided the LAMMPS scripts that use a simple Lennard-Jones (LJ) model to propagate a Gaussian wave packet along the z-direction. As anticipated, the wave does not propagate.

Thanking you,

With regards,
Vivek

# LAMMPS Input Script for a 1D Atomic Chain with gaussian wave packet

units lj
dimension 3
boundary p p p
atom_style atomic

# # ******************       simulation box        *********************  #

region box block -5 5 -5 5 0 100  # Create a box with dimensions along z-direction (20 atoms)
create_box 1 box

mass 1 1.0
variable spacing equal 1.0
create_atoms 1 single 0 0 0

variable i loop 100
label loop
variable zpos equal ${i}*${spacing}
create_atoms 1 single 0 0 ${zpos}
next i
jump SELF loop

# ******************  gaussian wave packet input   *********************  #

variable amplitude equal 1.0
variable sigma equal 5.0
variable x0 equal 50.0
variable freq equal 5

# ****************** gaussian wave packet generation   *****************  #
variable j loop 101
label loop_start
    
    variable x equal ${j}-1 
    variable gaussian equal ${amplitude}*exp(-(((${x}-${x0})^2)/(2*${sigma}^2)))
    variable vel_vy   equal ${gaussian}*${freq}
    
   
    set atom ${j} x 0.0 y ${gaussian} z ${x}
    set atom ${j} vx 0.0 vy -${vel_vy} vz 0.0

    next j
    jump SELF loop_start
    
# ****************** gaussian wave packet end   *****************  #  

pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0  

neighbor 0.3 bin
neigh_modify every 1 delay 0 check yes

timestep 0.01
thermo 100

fix 1 all nve
dump save_cor all custom 1 atom.data id  x y z
dump_modify save_cor sort id
run 1000

# **********************************************************************  #  

The use of the term “wave packet” is a complete misnomer here.
What you are modeling is not a wave packet where you propagate the wave function and then compute its density by taking the square. Instead you have a string of interacting atoms.

How is this unexpected? The atoms will try to minimize the forces between them. Have you checked what happens without adding a velocity?

If you want the string of atoms move at constant velocity without changing their relative positions you must remove the forces on those atoms. Or just skip the whole process and just use fix move. In both cases the question remains of what the purpose of such a calculation is.

This doesn’t make sense either. If you want the shape to be preserved, you have to set all atoms to the same velocity.

Dear @akohlmey !
Thank you for your response. To provide better context, I am including the reference article I am basing my simulation on.

A phonon wave packet study of thermal energy transport across functionalized hard-soft interfaces. DOI: 10.1063/1.5095775

  • According to the authors, the wave packet (displacement of atoms Un​) can be generated using the following equation:

    Eq1

  • The initial velocity condition is,

    Eq2

  • The authors mentioned that once the velocity is specified, the wave packet will propagate during NVE integration. I have used Equations (1) and (4) to create the wave packet and the initial velocity for the system, but it hasn’t resolved the issue. Here, I have modified my LAMMPS script which considers the wave number (k0) also.

# LAMMPS Input Script for a 1D Atomic Chain with gaussian wave packet

units lj
dimension 3
boundary p p p
atom_style atomic

# # ******************       simulation box        *********************  #

region box block -5 5 -5 5 0 100  # Create a box with dimensions along z-direction (20 atoms)
create_box 1 box

mass 1 1.0
variable spacing equal 1.0
create_atoms 1 single 0 0 0

variable i loop 100
label loop
variable zpos equal ${i}*${spacing}
create_atoms 1 single 0 0 ${zpos}
next i
jump SELF loop

# ******************  gaussian wave packet input   *********************  #

variable PI equal 3.141592653589793
variable amplitude equal 1.0
variable sigma equal 5.0
variable x0 equal 50.0
variable freq equal 5

variable k0 equal 50.0

# ****************** gaussian wave packet generation   *****************  #
variable j loop 101
label loop_start
    
variable x equal ${j}-1 

# Real part of wave packet equation

variable gaussian equal ${amplitude}*exp(-(((${x}-${x0})^2)/(2*${sigma}^2)))*cos((2*${PI}/100)*(${x}-${x0})*${k0})

# Imaginary part of wave packet times frequency

variable vel_vy equal ${gaussian}*${freq}*sin((2*${PI}/100)*(${x}-${x0})*${k0})

    
    set atom ${j} x 0.0 y ${gaussian} z ${x}
    set atom ${j} vx 0.0 vy ${vel_vy} vz 0.0

    next j
    jump SELF loop_start
    
# ****************** gaussian wave packet end   *****************  #  

pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0  

neighbor 0.3 bin
neigh_modify every 1 delay 0 check yes

timestep 0.01
thermo_style   custom step temp pe ke etotal 
thermo 100

fix 1 all nve
dump save_cor all custom 1 atom.data id  x y z
dump_modify save_cor sort id

dump save_vel all custom 1 atom_vel.data id  vx vy vz
dump_modify save_vel sort id

run 1000

# **********************************************************************  #
  • Further I plotted my simulation results at various time steps for your reference.

From the above figure it is visible that the wave is not propagating along z-direction. I wonder what causing this issue. Also without any initial velocity I still face the same.

Thanking you,

With regards,
Vivek

In all your previous posts you missed the crucial

This is not a LAMMPS issue, but an issue of the science and - while I am not an expert in these matters - your input appears wrong in a way that there seems to be a fundamental lack of understanding on your side. If you want to set up a phonon in a 1-d system you should only have assigned positions and velocities in this one dimension, everything else should be 0.0. Yet, you are changing the y values and positions. In stead the phonon would be represented by a changing in density in z, i.e. atoms would be closer together and further apart.

There is not much that we can do for you from the LAMMPS side, since your problems are of the conceptual kind. LAMMPS will do what you tell it to do, but what you tell it is effectively your problem and something that you need to discuss with those that know and care about your research.

1 Like

Dear akohlmey !
Thank you for your replies. Your recent response helped me to identify the fundamental flaw in my solution approach.

–
With regards,
Vivek

Dear all !
Finally, the issue has been resolved after a discussion with Dr. Xingfei Wei, one of the authors of the aforementioned paper. I identified that the issue was with my initial velocity and the respective wave vectors, which were not assigned according to the phonon dispersion of a 1D atomic chain. With the proper initial conditions, the wave packet is now propagating correctly. Here, I share my updated LAMMPS script and system file. These may be helpful to those whose research interests align with this study.

With regards,
Vivek


dimension   2
boundary    p f p

units		   lj
atom_style	bond
atom_modify sort 0 1.
bond_style  harmonic
pair_style  none
comm_modify cutoff 2.0

# geometry
read_data	data_1D.lmpsys

#
neighbor 0.5 nsq
neigh_modify delay 0 check no

minimize 0 0 100000 100000
reset_timestep 0

# ******************  gaussian wave packet input   *********************  #

variable PI equal 3.141592653589793
variable amplitude equal 0.001
variable sigma equal 50.0
variable x0 equal 300.0
variable freq equal 0.419786

variable k0 equal 0.0625

variable lat_const equal 1

# ****************** gaussian wave packet generation   *****************  #
variable j loop 1001
label loop_start
    
variable x equal ${j}-1 

# Real part of wave packet equation

variable gaussian equal ${amplitude}*exp(-(((${x}-${x0})^2)/(2*${sigma}^2)))*cos((${x}-${x0})*${k0}*2*${PI}/${lat_const})

variable ux equal ${x}+${gaussian}

# Imaginary part of wave packet times frequency

variable vel_vx equal ${freq}*${amplitude}*exp(-(((${x}-${x0})^2)/(2*${sigma}^2)))*sin((${x}-${x0})*${k0}*2*${PI}/${lat_const})

    
    set atom ${j} x ${ux} y 0.0 z 0.0
    set atom ${j} vx ${vel_vx} vy 0.0 vz 0.0

    next j
    jump SELF loop_start
    
# ****************** gaussian wave packet end   *****************  #  


timestep 0.01
thermo_style   custom step temp pe ke etotal 
thermo 1000

fix 1 all nve
dump save_cor all custom 1000 atom.data id  x y z
dump_modify save_cor sort id
dump_modify save_cor format line "%d %.20e %.20e %.20e" 

dump save_vel all custom 1000 atom_vel.data id  vx vy vz
dump_modify save_vel sort id
dump_modify save_vel format line "%d %.20e %.20e %.20e" 

run 100000

# **********************************************************************  #

data_1D.lmpsys (29.1 KB)

2 Likes