[lammps-users] calcuating Young's modulus

Hi everybody,

I am very new to MD and LAMMPS. To acquaint myself with the program I am
trying to calculate the Young's modulus of Al. For this I have used fix
npt with aniso keyword to apply a tensile pressure in z direction.
Using, DE = 0.5 Ye2, I can then calculate Y from the change in potential
energy as the strain increases (in a simplistic way, neglecting strain
in x and y directions). However, due to fluctuations in values, as well
as the fact that a small quantity (e) is squared, values of Y vary
significantly and even take negative values. (see attached)

My questions are:
1. Is what I am doing conceptually okay (except for the neglect of
strains in other directions even though they are not small)?
2. What can I do to get less variation in Y values?
3. Is there a better way to calculate Young modulus and say Poison
ratio?
4. Alternatively If I want to plot the stress strain curve, what is
the easiest way to calculate the stress at a given cross-section?

An unrelated question is:
To create a polycrystalline solution domain in LAMMPS or VMD, do I have
to create each grain individually by using lattice orient commands or
can this be done automatically?

Thanks a lot for your help

Rohit Rai

2 in.tensile (977 Bytes)

tensile.xls (64.5 KB)

There are 2 computes in LAMMPS which will compute stress:
compute pressure and compute stress/atom. The latter can
be done for subsets of atoms, if that gets closer to what you want.

Re: polycrystalline samples, the only option in LAMMPS for
that is create_atoms on a lattice (multiple times if you like)
and delete_atoms overlap to delete overlaps. You'd be
better off to build such sample yourself external to LAMMPS
and simply input the resulting atom coords in a data file.

Steve

Hi,

To calculate axial stress in z direction, I define a group of atoms
(middle) forming a cross-section transverse to z. I then calculate
stress/atom for atoms in the group, sum them up, and divide by volume of
that layer (since stress/atom is a Pressure-volume quantity). Is this a
right way to calculate stress in z direction?

compute stress middle stress/atom
compute strsum middle reduce sum c_stress[1] c_stress[2]
c_stress[3]
variable zstress equal c_strsum[3]/(50*vol/2000.)

!2000= total no. of atoms, 50 = atoms in that cross-section.
I am using fix npt with aniso option.

I am seeing large fluctuations in this quantity including negative
values. How can I get reasonable stress values so that I can calculate
elastic constants from them?

Steve, thanks for earlier pointing out the problem with my input script
for reading atom co-ordinates.

Thanks everybody

Rohit Rai

Fluctuations are normal - you may want to time average.
I think Pzz is closer to what you are after - the force
across a cross-section, not total stress divided by area.

Steve

Hi

Doesn't the pressure calculation involve all atoms in the simulation domain, rather than a subset of atoms (like a transverse cross-section)? How can I specify the cross-section at which pzz is calculated?

The fluctuations in the calculated stress are very high (high -ve and +ve values) and time averaging doesn't seem to help much. Do you have any suggestions on how to reduce the fluctuations before resorting to averaging?

Thanks again

Rohit

Compute pressure does involve all the atoms. You seem to want
force across a plane of the simulation box. That isn't what compute pressure
or compute stress/atom calculate. I think what they compute is
equivalent to that, but you'll have to study the formulas and see if
what they compute is what you want.

Steve