# temperature accelerated dynamics model for a single vacancy in bulk Si
# events occur when a neighboring atom diffuses to the vacant site
# run this on multiple partitions as
#   mpirun -np 3 lmp_g++ -partition 3x1 -in in.tad

units           metal

atom_style      atomic
atom_modify     map array
boundary        p p p
atom_modify	sort 0 0.0

# temperatures
variable tlo equal 1800.0
variable thi equal 2400.0

# coordination number cutoff

variable r equal 2.835

# 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

# diamond unit cell

variable a equal 5.431
lattice         custom $a               &
                a1 1.0 0.0 0.0          &
                a2 0.0 1.0 0.0          &
                a3 0.0 0.0 1.0          &
                basis 0.0 0.0 0.0       &
                basis 0.0 0.5 0.5       &
                basis 0.5 0.0 0.5       &
                basis 0.5 0.5 0.0       &
                basis 0.25 0.25 0.25    &
                basis 0.25 0.75 0.75    &
                basis 0.75 0.25 0.75    &
                basis 0.75 0.75 0.25

region          myreg block     0 4 &
                                0 4 &
                                0 4
create_box      1 myreg
create_atoms    1 region myreg

mass            1       28.06

group Si type 1

velocity all create ${thi} 5287286 mom yes rot yes dist gaussian

# make a vacancy

group del id 300
delete_atoms group del

pair_style      sw
pair_coeff * * Si.sw Si

thermo          10

fix             1 all nve
fix 		2 all langevin ${thi} ${thi} 0.1 48278

timestep        1.0e-3
neighbor        1.0 bin
neigh_modify    every 1 delay 10 check yes

# equilibrate

run             1000

# Eliminate COM motion
velocity all zero linear 

# only output atoms near vacancy

compute coord all coord/atom $r

#dump events all custom 1 dump.prd id type x y z
#dump_modify events thresh c_coord != 4

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 1.0

unfix 1
unfix 2
fix 		1 all nvt temp ${thi} ${thi} 0.1

# tad nsteps nevent tlo thi delta_conf tmax compute
#     [min etol ftol niter neval]
#     [neb etol_neb ftol_neb n1steps n2steps nevery]
#     [min_style min_style]
#     [neb_style min_style]
#     [neb_log logfile]
 
tad 2000 50 ${tlo} ${thi} 0.05 1.0 event &
    min ${etol} ${ftol} ${maxiter} ${maxeval} &
    neb 0.0 0.01 200 200 20 &
    min_style cg &
    neb_style fire &
    neb_log log.neb
