Perform Nanoindentation on Al-Mg Alloy

From Micro and Nano Mechanics Group
Jump to navigation Jump to search

Perform Nanoindentation on an Aluminum-Magnesium Alloy

Yifan Wang

Created May 2017


This tutorial explains how to create an FCC sample of Al-Mg alloy and perform nanoindentation on the sample in LAMMPS.


Prerequisite

For this simulation, we will use the LAMMPS 5 Nov 2016 version. The newer version may have changes of the commands. When compiling LAMMPS, please switch on the package MANYBODY in order to use the EAM potential. More details about compiling LAMMPS, please see the manual page (http://lammps.sandia.gov/doc/Section_start.html) for more information.

Prepare The Sample of Al-Mg Alloy

In this note, we will use the following geometric parameters as an example, to show how to perform nanoindentation MD simulation in LAMMPS:

Weight percentage: 0.6% (~0.67% atomic percentage)
Simulation Box: 32.4x32.4x32.4nm (free surface on z-direction, pbc on x- and y-directions)
Indenter radius: 16.2nm

Thermodynamics

According to the phase diagram of Al-Mg alloy (Fig.1), the solubility of Mg in Al is smaller than 1% at room temperature. For our case, since the atomic concentration is 0.67%, we can generate the sample by first creating pure FCC Al metal, and then randomly exchange required Al atoms to Mg.

Fig.1 Phase Diagram of Aluminum-Magnesium (Murray, 1982)
Fig.2 Size Factors of Al-Mg solid solution (Cai&Nix, 2016)

However, the size factor of Mg as the solute in Al is not negligible (Fig.2). We have to consider the volume change of the sample by adding Mg into pure Al. There are two ways to account for the size effect:

  1. Relax the sample under zero pressure after we generate the Al-Mg alloy.
  2. Estimate the volume change theoretically from the size factor.

Although the first method is more correct in the physical sense, the relaxation process will create surface steps on the free surface which will interfere the nanoindentation process. Here we estimate the volume change by correcting the lattice constant:

.

For now, we use the linear size factor from King's table. For a more accurate value, a constant pressure relaxation can be performed to determine the size factor.

Generate the Sample of Al-Mg Alloy

First we generate the simulation box of 32.4x32.4x32.4nm. We set up the simulation based on the lattice so that the entire simulation box is filled with atoms. First we define the lattice in LAMMPS ( indentation surface (001) ):

lattice         fcc 4.053 orient x 1 0 0 orient y 0 1 0 orient z 0 0 1
region          BOX block -40.0 40.0 -40.0 40.0 -80.0 0.0 units lattice

Here the lattice constant 4.053 is the size after we consider the size effect, and 80 lattice distance is around 32.4nm. Note that if we change the indentation surface to other FCC planes ((110), (111), etc.), we should change the orientation in lattice definition, for example we take (110) plane as the indentation surface.

lattice         fcc 4.053 orient x 0.707 0 -0.707 orient y 0 1 0 orient z 0.707 0 0.707
region          BOX block -40.0 40.0 -40.0 40.0 -80.0 0.0 units lattice

Then we create the simulation box and the Al atoms based on the region we defined:

create_box      2 BOX
create_atoms    1 region BOX
set             region BOX type 1

And we randomly change 0.67% atoms to Mg atoms:

set             region BOX type/fraction 2 0.0067 20170517  # random seed

Finally, after we add the Mg atoms, we perform relaxation to the entire sample to make the sample equilibrated. In this simulation, we use the EAM potential from Liu and Adams (1998) (https://www.ctcms.nist.gov/potentials/Download/Al-Mg-LA/almg.liu):

pair_style      eam/alloy
pair_coeff      * * almg.liu.eam.alloy Al Mg
minimize        1e-9 1e-9 10000 10000

We can visualize the sample as shown in Fig.3.

Fig.3 Visualization of the Al-Mg alloy sample. Red: Al atoms; Blue: Mg atoms

Perform MD Simulation of Nanoindentation on The Alloy Sample

Before the actual simulation, we first determine the dynamics of the indenter:

Indenter stiffness constant K: 1.0eV/Å3
Temperature T: 1.0K
Indent rate: 0.81Å/ps = 81m/s
Loading steps: 40000 (0.001ps/step)
Indent depth: 3.24nm

Note: The units are defined by units command in LAMMPS, we use metal units (http://lammps.sandia.gov/doc/99/units.html)

The Force Field for the Indenter

In LAMMPS, a spherical indeter exerts a force of magnitude:

on each atom where K is the indenter stiffness constant, r is the distance from the atom to the center of the indenter, and R is the radius of the indenter. The force is repulsive and F(r)=0 for r>R.

We have tested the K value ranging from 1 to 1000. Note that with this force field function, the indenter is not an elastic sphere. The effective elastic modulus of the indenter is shown in Fig.4. We can see that the K value does not have significant influence on the effective modulus of the indenter. In our simulation, we choose K = 1.0eV/Å for all the simulation.

Fig.4 The Effective Modulus of the Indenter in Terms of the Indent Depth.

Fix the bottom

First, We define 5 bottom layers as the bottom layer, these atom layers will be fixed to support the entire sample. Otherwise the sample will move downwards during the indentation.

region          fixed_region block INF INF INF INF INF -75.0 units lattice
group           bottom region fixed_region
group           mobile subtract all bottom
fix             bottom bottom setforce 0.0 0.0 0.0
velocity        bottom set 0.0 0.0 0.0

Then we set up the temperature for the system:

compute         new mobile temp
velocity        mobile create 1.0 20110723 temp new     # create temperature
fix             ensemble mobile nvt temp 1.0 1.0 1.0

Loading and Unloading

Fig.5 is a diagram showing the loading process of the nanoindentation.

Fig.5 Loading of the nanoindentation process

In LAMMPS, the command used for indentation is "fix indent". This command can use the information of time steps and thus perform dynamic indentation during the MD simulation.

1. Calculate the indentation depth

variable        indent_rate equal 0.81    # indent rate = 0.81Å/ps
variable        depth equal step*dt*${indent_rate}

2. Calculate the z-direction position of the indenter center for loading steps:

variable        indenter_R equal 162
variable        z equal "v_indenter_R - v_depth"

Note that you cannot use ${depth} in this expression, otherwise only the depth value at the first time step will be substituted here and no time step information will be kept.

3. Fix the indenter. To use the standard units defined by units command, remember to add "units box" at the end of the fix command:

variable        indent_K equal 1.0
fix             indent all indent ${indent_K} sphere 0.0 0.0 v_z ${indenter_R} units box

Since the indenter is a "fix" command, the responsive force of the fixed constraint can be retrieved from variable "f_indent", which is a 3-component vector that represents the responsive force of this fixed constraint. In our case, we only need the force on z-direction, i.e. f_indent[3].

4. Run MD simulation to perform the loading steps:

variable        loading_steps equal 40000
run             ${loading_steps}

5. Similarly, when we perform the unloading steps, we recalculate the depth and z position of the indenter:

variable        depth equal (2*${loading_steps}-step)*dt*${indent_rate}
variable        z equal "v_indent_R - v_depth"
fix             indent all indent ${indent_K} sphere 0.0 0.0 v_z ${indenter_R} units box
run             ${loading_steps}

Retrieve the Forth-Depth Curve for the Nanoindentation