# The units we assume we'll use. The kim-lammps-preprocessor may swap this line out if
# running against a Simulator Model whose units are not 'metal'
units metal

# Variables that can be adjusted by kim-lammps-preprocessor to switch unit sets for
# Simulator Models
variable _u_distance equal 1.0
variable _u_energy equal 1.0
variable _u_mass equal 1.0
variable _u_force equal 1.0

# This line may be swapped out by kim-lammps-preprocessor if running against a Simulator
# Model whose atom_style is not 'atomic'
atom_style atomic

boundary f f f

variable boxextent equal 25.0
region box block -${boxextent} ${boxextent} &
                 -${boxextent} ${boxextent} &
                 -${boxextent} ${boxextent}

create_box 1 box

read_dump output/lammps_inputs/cluster.xyz 0 x y z box no add yes format xyz

group all region box

variable mass1_converted equal 28.0855*${_u_mass}
mass 1 ${mass1_converted}


change_box all x scale ${_u_distance} &
               y scale ${_u_distance} &
               z scale ${_u_distance} &
               remap

atom_modify sort 0 0

pair_style kim MFF_MistriotisFlytzanisFarantos_1989_Si__MO_080526771943_001
pair_coeff * * Si

# Use nsq neighlist method instead of binning since this is a small system
variable neigh_skin equal 2.0*${_u_distance}
neighbor ${neigh_skin} nsq

# Variables used to rescale the positions and forces so that the quantities in the
# dumpfile are in the original metal units (angstrom and eV/angstrom) even if we're
# running with a Simulator Model that uses different units
variable  pe_metal  equal  "c_thermo_pe/v__u_energy"
variable   x_metal   atom         x/${_u_distance}
variable   y_metal   atom         y/${_u_distance}
variable   z_metal   atom         z/${_u_distance}
variable  fx_metal   atom           fx/${_u_force}
variable  fy_metal   atom           fy/${_u_force}
variable  fz_metal   atom           fz/${_u_force}

dump dumpid all custom 1 output/lammps_dump/lammps.dump id type v_x_metal v_y_metal v_z_metal &
                                    v_fx_metal v_fy_metal v_fz_metal
dump_modify dumpid sort id format line "%d %d %16.7f %16.7f %16.7f %16.7f %16.7f %16.7f"

thermo_style custom v_pe_metal

# Define minimization (note that etol is actually unitless, but ftol has units of force)
min_style cg
variable dmax equal 0.1*${_u_distance}
min_modify dmax ${dmax}
variable ftol equal 1e-10*${_u_force}
minimize 1e-10 ${ftol} 2000 100000