Hi,
I am facing a few problems in running a TAD job for a Ag adatom on Ag[001]
surface.
I am attaching the input here.
1. As far as I am running the dynamics (before switching on the TAD), its
running well without any "lost atoms" message.
But as soon as I am switching on the TAD command, the problem starts. After
~400000 steps, it crashes with a "lost atoms" message.
i don't think your problem it has much to do with TAD.
the problem is how you set your integrator and thermostat.
please see my comments in your input.
To see what is happening, I have checked the trajectory using VMD and OVITO.
It is seen that before "TAD" started working, the dynamics is as expected :
The bottom layer is fixed, the surface atoms are showing the thermal
vibration and the adatom is also vibrating about its initial position and
very rarely it makes jumps on the surface.
The problem starts after that. After TAD starts working, the dump file is
being written as soon as an event occurs. I have seen that the whole set of
atoms actually moving within the simulation box (in this case, the box has
some empty space). It appears that the center of mass is actually moving.
But to fix the COM motion, I have added an extra command "velocity all zero
linear" in the input script.
this is nonsense. the velocity command is a one shot operation.
if you properly fix your substrate, there should be no motion.
So I am confused. Can anybody suggest what to do in such a situation ?
2. There is a second problem:
I have defined a "substrate" region such that:
substrate = moving + fixed (regions)
Therefore, we expect that ,
#_of_atoms = #_moving + #_fixed
But the output shows that,
# of atoms in substrate = 350
# of atoms in moving = 150
# of atoms in fixed = 150
Part of the output:
lattice fcc 4.09
Lattice spacing in x,y,z = 4.09 4.09 4.09
region myreg block 0 5 0 5 0 5
create_box 2 myreg
Created orthogonal box = (0 0 0) to (20.45 20.45 20.45)
1 by 1 by 1 MPI processor grid
region substrate block INF INF INF INF INF 3
region moving block INF INF INF INF 2 3
region fixed block INF INF INF INF INF 1
you put your region boundaries *exactly* on
the lattice points. that will result in ill-defined
behavior as to whether atom positions are
considered inside or outside of the region
due to floating point truncation. better to use
numbers near the boundary. try for example:
region substrate block INF INF INF INF INF 3.1
region moving block INF INF INF INF 1.9 3.1
region fixed block INF INF INF INF INF 1.1
create_atoms 1 region substrate
Created 350 atoms
group Gsubstrate region substrate
350 atoms in group Gsubstrate
group Gmoving region moving
150 atoms in group Gmoving
group Gfixed region fixed
150 atoms in group Gfixed
Any help will be greatly appreciated.
Best regard,
--
Prithwish
The input is as follows:
==================================================
# temperature accelerated dynamics model for an adatom on Ag[001] surface
# SETTINGS
units metal
atom_style atomic
atom_modify map array
boundary p p f
atom_modify sort 0 0.0
# temperatures
variable tlo equal 300.0
variable thi equal 800.0
# minimization parameters
variable etol equal 1.0e-5
variable ftol equal 1.0e-5
variable maxiter equal 100
variable maxeval equal 100
variable dmax equal 1.0e-1
# deposit an adatom on Ag[0 0 1] surface
# Making the surface
variable a equal 4.09
lattice fcc $a
region myreg block 0 5 &
0 5 &
0 5
create_box 2 myreg
region substrate block INF INF INF INF INF 3
region moving block INF INF INF INF 2 3
region fixed block INF INF INF INF INF 1
create_atoms 1 region substrate
group Gsubstrate region substrate
group Gmoving region moving
group Gfixed region fixed
region slab block 0 5 0 5 4 5
group Ag type 1
group addatoms type 2
# add adatom
fix 2 addatoms deposit 1 2 10 12345 region slab global 1.8 2.0
units box
fix 3 addatoms wall/reflect zhi EDGE
# DEFINE POTENTIAL
pair_style eam
pair_coeff * * Ag_u3.eam
mass * 107.8682
neigh_modify delay 0
compute add addatoms temp
compute_modify add dynamic yes extra 0
# INITIALIZE VELOCITIES
velocity all create \{thi\} 4928459 rot yes mom yes dist gaussian
timestep 0\.001
fix 4 all nve
fix 5 all langevin {thi} ${thi} 0.1 48278
if you don't want your fixed substrate atoms
to move, you must not thermostat them.
not only is your effective temperature wrong
(as you include the DOFs from the fixed atoms)
this way, they will slowly pick up kinetic energy.
# FIX THE BOTTOM LAYER
fix 6 Gfixed setforce 0.0 0.0 0.0
velocity Gfixed set 0.0 0.0 0.0
thermo_style custom step atoms temp epair etotal press
thermo 100
thermo_modify temp add
dump 1 all atom 10 tmp.deposit
run 10000
# TAD
# COM to be fixed
velocity all zero linear
no. this will only remove COM bias once.
dump events all custom 1 dump.tad id type x y z
compute patom all pe/atom
compute pe all reduce sum c_patom
compute satom all stress/atom
compute str all reduce sum c_satom[1] c_satom[2] c_satom[3]
variable press equal (c_str[1]+c_str[2]+c_str[3])/(3*vol)
thermo\_style custom step temp pe c\_pe press v\_press
compute event all event/displace 2\.89
unfix 4
unfix 5
fix 7 all nvt temp $\{thi\} $\{thi\} 0\.1
here you integrate and thermalize all atoms again.
this is not correct and explains your losing atoms.
mind you, if you'd run the first part as long as
the TAD part, you'd probably lose atoms sooner
or later, too. this part is worse due to the relative
order of fix setforce vs fix nvt.
axel.