# sample LAMMPS input script for viscosity of 2d LJ liquid
# Einstein form of Green-Kubo

# settings

variable	x equal 20
variable	y equal 20

variable	rho equal 0.6
variable        t equal 1.0
variable	rc equal 2.5

variable    p equal 400     # correlation length
variable    s equal 5       # sample interval
variable    d equal $p*$s   # dump interval 

# problem setup

units		lj
dimension	2
atom_style	atomic
neigh_modify	delay 0 every 1

lattice         sq2 ${rho}
region          simbox block 0 $x 0 $y -0.1 0.1
create_box      1 simbox
create_atoms    1 box

pair_style      lj/cut ${rc}
pair_coeff      * * 1 1

mass            * 1.0
velocity        all create $t 97287

# equilibration run

fix             1 all nve
fix	        2 all langevin $t $t 0.1 498094
fix	        3 all enforce2d

thermo          $d
run	        10000

velocity	all scale $t

unfix		2

# Einstein viscosity calculation

reset_timestep  0

# Define distinct components of symmetric traceless stress tensor

variable         pxy equal pxy
variable         pxx equal pxx-press

fix              avstress all ave/time $s $p $d v_pxy v_pxx ave one file einstein.dat

# Diagonal components of SS are larger by factor 2-2/d,
# which is 4/3 for d=3, but 1 for d=2.
# See Daivis and Evans, J.Chem.Phys, 100, 541-547 (1994)

variable         scale equal vol/(2.0*$t*dt*$d)
variable         diagfac equal 2-2/2
variable         deltasqxy equal (f_avstress[1]*$d*dt)^2
variable         deltasqxx equal (f_avstress[2]*$d*dt)^2/${diagfac}

# compute mean square displacements as running averages

fix              avdeltasq all ave/time $d 1 $d v_deltasqxy v_deltasqxx ave running

# convert to viscosities

variable         vxy equal f_avdeltasq[1]*${scale}
variable         vxx equal f_avdeltasq[2]*${scale}

thermo_style     custom step temp pe press pxy v_vxy v_vxx

run              500000

variable         etaxy equal v_vxy
variable         etaxx equal v_vxx
variable         eta equal 0.5*(${etaxy}+${etaxx})
print            "running average viscosity: ${eta}"
