File: in.basal

package info (click to toggle)
lammps 20210122~gita77bb%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 331,996 kB
  • sloc: cpp: 802,213; python: 24,256; xml: 14,949; f90: 10,448; ansic: 8,476; perl: 4,161; sh: 3,466; fortran: 2,805; makefile: 1,250; objc: 238; lisp: 163; csh: 16; awk: 14; tcl: 6
file content (163 lines) | stat: -rw-r--r-- 5,519 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
############################################################################
# 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"