lammps/doc/compute_stress_atom.txt

121 lines
4.9 KiB
Plaintext
Raw Normal View History

"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
:link(lws,http://lammps.sandia.gov)
:link(ld,Manual.html)
:link(lc,Section_commands.html#comm)
:line
compute stress/atom command :h3
[Syntax:]
compute ID group-ID stress/atom keyword ... :pre
ID, group-ID are documented in "compute"_compute.html command
stress/atom = style name of this compute command
zero or more keywords may be appended
keyword = {ke} or {pair} or {bond} or {angle} or {dihedral} or {improper} or {fix} :ul
[Examples:]
compute 1 mobile stress/atom :pre
compute 1 all stress/atom pair bond :pre
[Description:]
Define a computation that computes the symmetric per-atom stress
tensor for each atom in a group. The tensor for each atom has 6
components: xx, yy, zz, xy, xz, yz. See the "compute
pressure"_compute_pressure.html command if you want the stress tensor
(pressure) of the entire system. The 6 components can be accessed by
indices 1-6 by any command that uses per-atom computes as input,
e.g. the "dump custom"_dump.html command or "fix
ave/spatial"_fix_ave_spatial.html command or "fix
ave/atom"_fix_ave_atom.html command. See "this
section"_Section_howto.html#4_15 for an overview.
The stress tensor for atom {I} is given by the following formula,
where {a} and {b} take on values x,y,z to generate the 6 components of
the symmetric tensor:
:c,image(Eqs/stress_tensor.jpg)
The first term is a kinetic energy contribution for atom {I}. The
second term is a pairwise energy contribution where {n} loops over the
{Np} neighbors of atom {I}, {r1} and {r2} are the positions of the 2
atoms in the pairwise interaction, and {F1} and {F2} are the forces on
the 2 atoms resulting from the pairwise interaction. The third term
is a bond contribution of similar form for the {Nb} bonds which atom
{I} is part of. There are similar terms for the {Na} angle, {Nd}
dihedral, and {Ni} improper interactions atom {I} is part of.
Finally, there is a term for the {Nf} "fixes"_fix.html that apply
internal constraint forces to atom {I}. Currently, only the "fix
shake"_fix_shake.html and "fix rigid"_fix_rigid.html commands
contribute to this term.
As the coefficients in the formula imply, a virial contribution
produced by a small set of atoms (e.g. 4 atoms in a dihedral or 3
atoms in a Tersoff 3-body interaction) is assigned in equal portions
to each atom in the set. E.g. 1/4 of the dihedral virial to each of
the 4 atoms, or 1/3 of the fix virial due to SHAKE constraints applied
to atoms in a a water molecule via the "fix shake"_fix_shake.html
command.
If no extra keywords are listed, all of the terms in this formula are
included in the per-atom stress tensor. If any extra keywords are
listed, only those terms are summed to compute the tensor.
Note that the stress for each atom is due to its interaction with all
other atoms in the simulation, not just with other atoms in the group.
The "dihedral_style charmm"_dihedral_charmm.html style calculates
pairwise interactions between 1-4 atoms. The virial contribution of
these terms is included in the pair virial, not the dihedral virial.
Note that as defined in the formula, per-atom stress is the negative
of the per-atom pressure tensor. It is also really a stress-volume
formulation. It would need to be divided by a per-atom volume to have
units of stress, but an individual atom's volume is not easy to
compute in a deformed solid or a liquid. Thus, if the diagonal
components of the per-atom stress tensor are summed for all atoms in
the system and the sum is divided by 3V, where V is the volume of the
system, the result should be -P, where P is the total pressure of the
system.
These lines in an input script should yield that result. I.e. the
last 2 columns of thermo output will be the same:
compute peratom all stress/atom
compute p all sum c_peratom\[1\] c_peratom\[2\] c_peratom\[3\]
variable press equal -(c_p\[1\]+c_p\[2\]+c_p\[3\])/(3*vol)
thermo_style custom step temp etotal press v_press :pre
IMPORTANT NOTE: The per-atom stress does NOT include contributions due
to long-range Coulombic interactions (via the
"kspace_style"_kspace_style.html command). It's not clear this
contribution can easily be computed. There are also a few pair styles
for manybody potentials that are not yet instrumented to yield
per-atom stress. See the Restrictions below.
[Output info:]
This compute calculates a vector of length 6 for each atom, which can
be accessed by indices 1-6 by any command that uses per-atom computes
as input. See "this section"_Section_howto.html#4_15 for an overview
of LAMMPS output options. The 6 components of the vector are ordered
xx, yy, zz, xy, xz, yz.
[Restrictions:]
These pair styles do not yet tabulate per-atom virials to allow them
to work with this compute: "airebo"_pair_airebo.html,
"meam"_pair_meam.html, and "TIP4P"_pair_lj.html.
[Related commands:]
"compute pe"_compute_pe.html, "compute
stress/atom"_compute_stress_atom.html
[Default:] none