his example shows how to run an atomistic simulation to generate the generalized stacking fault (GSF) energy curve for FCC metals. This example uses a parallel molecular dynamics code, LAMMPS[1]. Excel is used to plot the energy-displacement and Ovito is used to visualize the simulation.
Author(s): Phillip M. Spear*
Advisor(s): Firas Akasheh*, Mark A. Tschopp
(*) Mechanical Engineering Department, Tuskegee University, Tuskegee, AL 36088
Corresponding Author: Mark A. Tschopp
The generalized stacking fault energy curve is obtained by rigidly displacing two halves of a crystal on a (111) plane along a <112> direction in that plane. As the displacement proceeds, the energy of the crystal changes as the atoms slip by each other. The potential used here is the Mishin et al. (1999) aluninum potential.[2] This molecular dynamics simulation first generates a simulation cell with fcc atoms of orient [112] in the x, [-110] in the y, and [-1-11] in the z direction and a total of 6,995 atoms are created. The cell size will be 10 lattice units in the x and y directions and 40 lattice units in the z direction. Note that the units in the x and y direction are modified to reflect the different periodicit boundaries of the structure in the corresponding.The top half of the crystal is shifted in the xy plane along the x direction. With this scheme, the boundary conditions used are periodic, periodic and free surface in the x, y, and z directions, respectively. After the displacement in the x direction is made, the crystal is allowed to relax in the z direction and the energy is calculated and then dumped into the dump.comp.* file.
This input script was run using the December 21 2011 version of LAMMPS. Changes in some commands in more recent versions may require revision of the input script. To run this script, store it in "in.stack_fault.txt" and then use the "lmp_win_no-mpi.exe < in.stack_fault.txt" in a Windows environment where "lmp_win_no-mpi.exe" refers to the LAMMPS executable.
# Input file for Stack Fault Energy surface of Aluminum # Phillip Spear, 2012 # ------------------------ INITIALIZATION ---------------------- units metal dimension 3 boundary p p s atom_style atomic variable latparam1 equal 4.05 variable xdim equal ${latparam1}*sqrt(6)/2*10 variable ydim equal ${latparam1}*sqrt(2)/2*10 # ----------------------- ATOM DEFINITION ---------------------- lattice fcc ${latparam1} region 1 block 0 ${xdim} 0 ${ydim} 0 20 region 2 block 0 ${xdim} 0 ${ydim} 20 40 region whole block 0 ${xdim} 0 ${ydim} 0 200 units box create_box 1 whole lattice fcc ${latparam1} orient x 1 1 2 orient y -1 1 0 orient z -1 -1 1 create_atoms 1 region 1 lattice fcc ${latparam1} orient x 1 1 2 orient y -1 1 0 orient z -1 -1 1 create_atoms 1 region 2 # ----------------------- FORCE FIELDS ----------------------- pair_style eam/alloy pair_coeff * * Al99.eam.alloy Al # ------------------------- SETTINGS -------------------------- group top region 1 group bot region 2 # ------------------------- Displacement ----------------------- displace_atoms bot move -1.0 0.0 0.0 units box compute peratom all pe/atom compute eatoms all reduce sum c_peratom # Dump to comp for Ovito post processing dump 1 all custom 1 dump.comp.* id type xs ys zs c_peratom fx fy fz thermo 1 thermo_style custom step pe c_eatoms fix 1 all setforce 0 0 NULL min_style cg minimize 1e-10 1e-10 1 1 # SIMULATION DONE #print ${x} print "All done"
The log.lammps file should look like this below
LAMMPS (21 Dec 2011) # Input file for Stack Fault Energy surface of Aluminum # Phillip Spear, 2012 # ------------------------ INITIALIZATION --------------------- units metal dimension 3 boundary p p s atom_style atomic variable latparam1 equal 4.05 #variable xlattice equal ${latparam1}*sqrt(6)/2 #variable ylattice equal ${latparam1}*sqrt(2)/2 variable xdim equal ${latparam1}*sqrt(6)/2*10 variable xdim equal 4.05*sqrt(6)/2*10 variable ydim equal ${latparam1}*sqrt(2)/2*10 variable ydim equal 4.05*sqrt(2)/2*10 # ----------------------- ATOM DEFINITION --------------------- lattice fcc ${latparam1} lattice fcc 4.05 Lattice spacing in x,y,z = 4.05 4.05 4.05 region 1 block 0 ${xdim} 0 ${ydim} 0 20 region 1 block 0 49.60216729 0 ${ydim} 0 20 region 1 block 0 49.60216729 0 28.63782464 0 20 region 2 block 0 ${xdim} 0 ${ydim} 20 40 region 2 block 0 49.60216729 0 ${ydim} 20 40 region 2 block 0 49.60216729 0 28.63782464 20 40 region whole block 0 ${xdim} 0 ${ydim} 0 162 units box region whole block 0 49.60216729 0 ${ydim} 0 162 units box region whole block 0 49.60216729 0 28.63782464 0 162 units box create_box 1 whole Created orthogonal box = (0 0 0) to (49.6022 28.6378 162) 1 by 1 by 1 MPI processor grid lattice fcc ${latparam1} orient x 1 1 2 orient y -1 1 0 orient z -1 -1 1 lattice fcc 4.05 orient x 1 1 2 orient y -1 1 0 orient z -1 -1 1 Lattice spacing in x,y,z = 6.61362 5.72756 7.01481 create_atoms 1 region 1 Created 6959 atoms lattice fcc ${latparam1} orient x 1 1 2 orient y -1 1 0 orient z -1 -1 1 lattice fcc 4.05 orient x 1 1 2 orient y -1 1 0 orient z -1 -1 1 Lattice spacing in x,y,z = 6.61362 5.72756 7.01481 create_atoms 1 region 2 Created 6995 atoms # ----------------------- FORCE FIELDS ------------------------ pair_style eam/alloy pair_coeff * * Al99.eam.alloy Al # ------------------------- SETTINGS -------------------------- group top region 1 6959 atoms in group top group bot region 2 6995 atoms in group bot displace_atoms bot move -1.0 0.0 5.0 units box compute peratom all pe/atom compute eatoms all reduce sum c_peratom # Dump to comp for Ovito post processing dump 1 all custom 1 dump.comp.* id type xs ys zs c_peratom fx fy fz thermo 1 thermo_style custom step pe c_eatoms fix 1 all setforce 0 0 NULL min_style cg minimize 1e-10 1e-10 1 1 WARNING: Resetting reneighboring criteria during minimization (min.cpp:167) Memory usage per processor = 11.5713 Mbytes Step PotEng eatoms 0 -46556.082 -46556.082 1 -46556.501 -46556.501 Loop time of 1.44408 on 1 procs for 1 steps with 13954 atoms Minimization stats: Stopping criterion = max force evaluations Energy initial, next-to-last, final = -46556.0821773 -46556.0821773 -46556.5012397 Force two-norm initial, final = 2.1518 1.04566 Force max component initial, final = 0.375727 0.189924 Final line search alpha, max atom move = 0.133075 0.0252742 Iterations, force evaluations = 1 2 Pair time (%) = 0.322017 (22.2991) Neigh time (%) = 0 (0) Comm time (%) = 0.00200115 (0.138576) Outpt time (%) = 0 (0) Other time (%) = 1.12006 (77.5624) Nlocal: 13954 ave 13954 max 13954 min Histogram: 1 0 0 0 0 0 0 0 0 0 Nghost: 15056 ave 15056 max 15056 min Histogram: 1 0 0 0 0 0 0 0 0 0 Neighs: 941163 ave 941163 max 941163 min Histogram: 1 0 0 0 0 0 0 0 0 0 Total # of neighbors = 941163 Ave neighs/atom = 67.4475 Neighbor list builds = 0 Dangerous builds = 0 ###################################### # SIMULATION DONE #print ${x} print "All done"All done
The following is an example of one of the dumpfiles poduced by the simulation
ITEM: TIMESTEP 0 ITEM: NUMBER OF ATOMS 16526 ITEM: BOX BOUNDS pp pp ss 0 40.5 0 40.5 -0.0001 161.341 ITEM: ATOMS id type xs ys zs c_peratom fx fy fz 1 1 0 0.0707107 6.19806e-007 -3.02107 -0.507551 -0.161139 0.211959 2 1 0.0204124 0.0353553 0.0144934 -3.40036 -0.509427 -0.0618367 0.382914 3 1 0.0204124 0.106066 0.0144934 -3.18184 -0.521879 -0.043691 0.320027 4 1 0 0 6.19806e-007 20.2456 43.1252 69.3146 0.284397 5 1 0.0612372 0.0353553 6.19806e-007 -3.07992 0.0151763 -0.155602 -0.0718626 10 1 0.0612372 0.106066 6.19806e-007 -2.75558 0.221845 0.129318 0.0760658 50 1 0.0816497 0.0707107 0.0144934 -3.28357 0.186384 0.113913 -0.0219166 53 1 0.0816497 0 0.0144934 10.5204 0.295648 60.6059 -0.180713 54 1 0.122474 0 6.19806e-007 -2.7993 0.189235 -0.175251 0.186386 55 1 0.142887 0.0353553 0.0144934 -3.3544 0.00659385 -0.118225 0.110351 68 1 0.142887 0.106066 0.0144934 -3.29271 -0.0153932 -0.00281737 -0.0885542 70 1 0.122474 0.0707107 6.19806e-007 -2.88973 0.0471537 0.184517 0.0487032 71 1 0.183712 0.0353553 6.19806e-007 -3.04259 -0.0275901 -0.157453 0.0477017 72 1 0.183712 0.106066 6.19806e-007 -2.89648 -0.132644 -0.0136961 0.0622947 194 1 0.204124 0 0.0144934 10.529 0.0494405 60.6236 0.101715 219 1 0.204124 0.0707107 0.0144934 -3.37019 0.0688223 0.105116 0.0661885 220 1 0.244949 0.0707107 6.19806e-007 -3.07376 -0.0116489 -0.00299865 -0.0328375 221 1 0.265361 0.0353553 0.0144934 -3.41371 0.021542 -0.103852 0.108885 222 1 0.265361 0.106066 0.0144934 -3.32621 -0.000735514 -0.140739 0.0401943 ....
This is a perspective view of the simulation cell with atoms.
The simulation can be visualized using Ovito[3] To do so, open the Ovito program and select the import data tab. Now go to the directory in which you ran the simulation. Locate the first dumpfile, which would be dump.comp.0 in this case, that results from the simulation. Select open and on the next page choose the option to use the wild card name, dump.comp*, to load all the dump files. Then choose auto-assign columns and select OK. Use the play, forward and backward skip button located at the bottom of the program to view the different snapshots.
This is a chart of Evergy at each given displacement.
Figure 1. This is a snapshot of the plane before displacement. The red atoms are on top while the blue atoms are on bottom.
Figure 2. This is a snapshot of the plane that is displaced at 1.
The author and first advisor would like to acknowledge the support to this work by the National Science Foundation, HBCUUP-RIA program, Program Manager Dr. Claudia Rankins, Award No. HRD-1137587. Additionally, the technical and logistical support of CAVS and HPC2 of Mississippi State University is acknowledged. The corresponding author author would like to acknowledge funding for the overarching EVOWiki project through the Department of Energy.