#!/bin/sh
# autopkgtest check
# (C) 2014 Anton Gladky

set -e

case "$(uname -m)" in arm*)
  echo "Don't run the openmpi tests on armhf"
  exit 0
esac

export OMPI_MCA_plm_rsh_agent=/bin/false

WORKDIR=$(mktemp -d)
trap "rm -rf $WORKDIR" 0 INT QUIT ABRT PIPE TERM
cd $WORKDIR
mkdir post

cat <<EOF > in.hugo
# This script reproduces stress trajectories from Fig. 1 in
# Ravelo, Holian, Germann, and Lomdahl, PRB 70 014103 (2004)
#
# Three thermostatting scenarios are visited: undamped (nodrag), 
# damped (drag) and Nose-Hoover chain (nhchains).
#
# The axial and shear stress trajectories are printed to the
# file "stress_vs_t.dat". For the damped case, the original figure
# seems to be a plot of 2*tau, rather than tau.
#
# The script also demonstrates how to 
# orient a crystal along <110>,
# and how to use the lj/cubic pair style. 

units           lj
boundary        p p p

atom_style	atomic

# Set up FCC lattice with z axis along <110>

lattice                fcc 1.4142136 &
                       orient x 0 0 1 &
                       orient y 1 -1 0 &
                       orient z 1 1 0

region         mycell block 0.0 5.0 0.0 5.0 0.0 5.0 units lattice
create_box     1 mycell
mass           * 1.0
create_atoms   1 box

# Using units of Rmin, so sigma = 2^-1/6 = 0.8908987

pair_style lj/cubic
pair_coeff * * 1.0 0.8908987

# Relax box dimensions

fix             3 all box/relax aniso 0.0 vmax 1.0e-4 nreset 100

thermo          100
thermo_style	custom step temp pe etotal pxx pyy pzz lx ly lz 

min_modify      line quadratic
minimize	0.0 1.0e-6 10000 100000

# Define initial velocity

velocity        all create 0.01 87287 mom yes rot yes dist gaussian
write_restart restart.equil

# Start Run #1

log log.nodrag

clear
read_restart restart.equil

neighbor        0.2 bin
neigh_modify    every 1 delay 0 check yes
timestep        0.001
reset_timestep 0

# Pzz = 40.0, drag/damping term off

fix myhug all nphug temp 1.0 1.0 10.0 z 40.0 40.0 70.0 drag 0.0 tchain 1 pchain 0 

# Specify reference state from paper, times 1000 atoms

fix_modify myhug e0 -6334.0 p0 0.0 v0 680.73519

# Add fix energy to ouput etotal
 
fix_modify myhug energy yes 

# Define output

variable dele  equal f_myhug[1] # energy delta [temperature]
variable us    equal f_myhug[2] # shock velocity [distance/time]
variable up    equal f_myhug[3] # particle velocity [distance/time]
variable pzz   equal pzz  # axial stress
variable tau equal 0.5*(pzz-0.5*(pxx+pyy)) # shear stress
variable time equal dt*step

thermo          1000
thermo_style custom step temp ke epair etotal pzz v_tau lz f_myhug v_dele v_us v_up

fix stress all print 10 "\${time} \${pzz} \${tau} " screen no append stress_vs_t.dat title '#time pzz tau (no drag)'

#dump		id all atom 500 dump.hugoniostat

#dump		2 all image 500 image.*.jpg type type &
#		axes yes 0.8 0.02 view 60 -30
#dump_modify	2 pad 5

#dump		3 all movie 500 movie.mpg type type &
#		axes yes 0.8 0.02 view 60 -30
#dump_modify	3 pad 5

run		10000

# Start Run #2

log log.drag

clear
read_restart restart.equil

neighbor        0.2 bin
neigh_modify    every 1 delay 0 check yes
timestep        0.001
reset_timestep 0

# Pzz = 40.0, drag/damping term on

fix myhug all nphug temp 1.0 1.0 1.0 z 40.0 40.0 70.0 drag 200.0 tchain 1 pchain 0 

# Specify reference state from paper, times 1000 atoms

fix_modify myhug e0 -6334.0 p0 0.0 v0 680.73519

# Add fix energy to ouput etotal
 
fix_modify myhug energy yes 

# Define output

variable dele  equal f_myhug[1] # energy delta [temperature]
variable us    equal f_myhug[2] # shock velocity [distance/time]
variable up    equal f_myhug[3] # particle velocity [distance/time]
variable pzz   equal pzz  # axial stress
variable tau equal 0.5*(pzz-0.5*(pxx+pyy)) # shear stress
variable time equal dt*step

thermo          1000
thermo_style custom step temp ke epair etotal pzz v_tau lz f_myhug v_dele v_us v_up

fix stress all print 10 "\${time} \${pzz} \${tau} " screen no append stress_vs_t.dat title '#time pzz tau (with drag)'

run		10000

# Start Run #3

log log.nhchains

clear
read_restart restart.equil

neighbor        0.2 bin
neigh_modify    every 1 delay 0 check yes
timestep        0.001
reset_timestep 0

# Pzz = 40.0, drag/damping term off, Nose-Hoover chains

fix myhug all nphug temp 1.0 1.0 1.0 z 40.0 40.0 70.0

# Specify reference state from paper, times 1000 atoms

fix_modify myhug e0 -6334.0 p0 0.0 v0 680.73519

# Add fix energy to ouput etotal
 
fix_modify myhug energy yes 

# Define output

variable dele  equal f_myhug[1] # energy delta [temperature]
variable us    equal f_myhug[2] # shock velocity [distance/time]
variable up    equal f_myhug[3] # particle velocity [distance/time]
variable pzz   equal pzz  # axial stress
variable tau equal 0.5*(pzz-0.5*(pxx+pyy)) # shear stress
variable time equal dt*step

thermo          1000
thermo_style custom step temp ke epair etotal pzz v_tau lz f_myhug v_dele v_us v_up

fix stress all print 10 "\${time} \${pzz} \${tau} " screen no append stress_vs_t.dat title '#time pzz tau (Nose-Hoover chain)'

run		10000


EOF

mpirun -np 2 --oversubscribe lammps < in.hugo
lammps < in.hugo
echo "run: OK"
