164 lines
5.4 KiB
Plaintext
164 lines
5.4 KiB
Plaintext
############################################################################
|
|
# Input file for investigating twinning nucleation under uniaxial loading with basal plane vector analysis
|
|
# Christopher Barrett, March 2013
|
|
# This script requires a Mg pair potential file to be in the same directory.
|
|
|
|
# fname is the file name. It is necessary for loops to work correctly. (See jump command)
|
|
variable fname index in.basal
|
|
|
|
######################################
|
|
# POTENTIAL VARIABLES
|
|
# lattice parameters and the minimum energy per atom which should be obtained with the current pair potential and homogeneous lattice
|
|
variable lx equal 3.181269601
|
|
variable b equal sqrt(3)
|
|
variable c equal sqrt(8/3)
|
|
variable ly equal ${b}*${lx}
|
|
variable lz equal ${c}*${lx}
|
|
variable pairlocation index almg.liu
|
|
variable pairstyle index eam/alloy/opt
|
|
|
|
######################################
|
|
# EQUILIBRATION/DEFORMATION VARIABLES
|
|
# eqpress = 10 bar = 1 MPa
|
|
# tstep (the timestep) is set to a default value of 0.001 (1 fs)
|
|
# seed randomizes the velocity
|
|
# srate is the rate of strain in 1/s
|
|
# Ndump is the number of timesteps in between each dump of the atom coordinates
|
|
variable tstep equal 0.001
|
|
variable seed equal 95812384
|
|
variable srate equal 1e9
|
|
|
|
######################################
|
|
# INITIALIZATION
|
|
units metal
|
|
dimension 3
|
|
boundary s s s
|
|
atom_style atomic
|
|
|
|
######################################
|
|
# ATOM BUILD
|
|
atom_modify map array
|
|
|
|
# lattice custom scale a1 "coordinates of a1" a2 "coordinates of a2" a3 "coordinates of a3" basis "atom1 coordinates" basis "atom2 coordinates" basis "atom3 coordinates" basis "atom4 coordinates" orient x "crystallagraphic orientation of x axis" orient y "crystallagraphic orientation of y axis" z "crystallagraphic orientation of z axis"
|
|
lattice custom 3.181269601 a1 1 0 0 a2 0 1.732050808 0 a3 0 0 1.632993162 basis 0.0 0.0 0.0 basis 0.5 0.5 0 basis 0 0.3333333 0.5 basis 0.5 0.833333 0.5 orient x 0 1 1 orient y 1 0 0 orient z 0 1 -1
|
|
variable multiple equal 20
|
|
variable mx equal "v_lx*v_multiple"
|
|
variable my equal "v_ly*v_multiple"
|
|
variable mz equal "v_lz*v_multiple"
|
|
|
|
# the simulation region should be from 0 to a multiple of the periodic boundary in x, y and z.
|
|
region whole block 0 ${mz} 0 ${mx} 0 ${my} units box
|
|
create_box 2 whole
|
|
create_atoms 1 box basis 1 1 basis 2 1 basis 3 1 basis 4 1
|
|
|
|
region fixed1 block INF INF INF INF INF 10 units box
|
|
region fixed2 block INF INF INF INF 100 INF units box
|
|
group lower region fixed1
|
|
group upper region fixed2
|
|
group boundary union upper lower
|
|
group mobile subtract all boundary
|
|
|
|
variable natoms equal "count(all)"
|
|
print "# of atoms are: ${natoms}"
|
|
|
|
######################################
|
|
# INTERATOMIC POTENTIAL
|
|
pair_style ${pairstyle}
|
|
pair_coeff * * ${pairlocation} Mg Mg
|
|
|
|
######################################
|
|
# COMPUTES REQUIRED
|
|
compute csym all centro/atom 12
|
|
compute eng all pe/atom
|
|
compute eatoms all reduce sum c_eng
|
|
compute basal all basal/atom
|
|
|
|
######################################
|
|
# MINIMIZATION
|
|
# Primarily adjusts the c/a ratio to value predicted by EAM potential
|
|
reset_timestep 0
|
|
thermo 1
|
|
thermo_style custom step pe c_eatoms
|
|
min_style cg
|
|
minimize 1e-15 1e-15 1000 2000
|
|
variable eminimum equal "c_eatoms / count(all)"
|
|
print "%%e(it,1)=${eminimum}"
|
|
|
|
######################################
|
|
# EQUILIBRATION
|
|
reset_timestep 0
|
|
timestep ${tstep}
|
|
# atoms are given a random velocity based on a temperature of 100K.
|
|
velocity all create 100 ${seed} mom yes rot no
|
|
|
|
# temperature and pressure are set to 100 and 0
|
|
fix 1 all nve
|
|
|
|
# Set thermo output
|
|
thermo 100
|
|
thermo_style custom step lx ly lz press pxx pyy pzz pe temp
|
|
|
|
# Run for at least 2 picosecond (assuming 1 fs timestep)
|
|
run 2000
|
|
|
|
# Loop to run until pressure is below the variable eqpress (defined at beginning of file)
|
|
label loopeq
|
|
variable eq loop 100
|
|
run 250
|
|
variable converge equal press
|
|
if "${converge} <= 0" then "variable converge equal -press" else "variable converge equal press"
|
|
if "${converge} <= 50" then "jump ${fname} breakeq"
|
|
next eq
|
|
jump ${fname} loopeq
|
|
label breakeq
|
|
|
|
# Store length for strain rate calculations
|
|
variable tmp equal "lx"
|
|
variable L0 equal ${tmp}
|
|
print "Initial Length, L0: ${L0}"
|
|
unfix 1
|
|
|
|
######################################
|
|
# DEFORMATION
|
|
reset_timestep 0
|
|
timestep ${tstep}
|
|
|
|
# Impose constant strain rate
|
|
variable srate1 equal "v_srate / 1.0e10"
|
|
velocity upper set 0.0 NULL 0.0 units box
|
|
velocity lower set 0.0 NULL 0.0 units box
|
|
|
|
fix 2 upper setforce 0.0 NULL 0.0
|
|
fix 3 lower setforce 0.0 NULL 0.0
|
|
fix 1 all nve
|
|
|
|
# Output strain and stress info to file
|
|
# for units metal, pressure is in [bars] = 100 [kPa] = 1/10000 [GPa]
|
|
# p2 is in GPa
|
|
variable strain equal "(lx - v_L0)/v_L0"
|
|
variable p1 equal "v_strain"
|
|
variable p2 equal "-pxz/10000"
|
|
variable p3 equal "lx"
|
|
variable p4 equal "temp"
|
|
variable p5 equal "pe"
|
|
variable p6 equal "ke"
|
|
fix def1 all print 100 "${p1} ${p2} ${p3} ${p4} ${p5} ${p6}" file output.def1.txt screen no
|
|
# Dump coordinates to file (for void size calculations)
|
|
dump 1 all custom 1000 output.dump.* id x y z c_basal[1] c_basal[2] c_basal[3]
|
|
|
|
# Display thermo
|
|
thermo_style custom step v_strain pxz lx temp pe ke
|
|
restart 50000 output.restart
|
|
|
|
# run deformation for 100000 timesteps (10% strain assuming 1 fs timestep and 1e9/s strainrate)
|
|
variable runtime equal 0
|
|
label loop
|
|
displace_atoms all ramp x 0.0 ${srate1} z 10 100 units box
|
|
run 100
|
|
variable runtime equal ${runtime}+100
|
|
if "${runtime} < 100000" then "jump ${fname} loop"
|
|
|
|
######################################
|
|
# SIMULATION DONE
|
|
print "All done"
|