sync with SVN

This commit is contained in:
Steve Plimpton 2016-09-23 14:52:45 -06:00
parent b3217218d6
commit 6f4b7268de
6 changed files with 51 additions and 30 deletions

View File

@ -1,7 +1,7 @@
<!-- HTML_ONLY -->
<HEAD>
<TITLE>LAMMPS Users Manual</TITLE>
<META NAME="docnumber" CONTENT="22 Sep 2016 version">
<META NAME="docnumber" CONTENT="21 Sep 2016 version">
<META NAME="author" CONTENT="http://lammps.sandia.gov - Sandia National Laboratories">
<META NAME="copyright" CONTENT="Copyright (2003) Sandia Corporation. This software and manual is distributed under the GNU General Public License.">
</HEAD>
@ -21,7 +21,7 @@
<H1></H1>
LAMMPS Documentation :c,h3
22 Sep 2016 version :c,h4
21 Sep 2016 version :c,h4
Version info: :h4

View File

@ -43,10 +43,11 @@ fix 1 all phonon 10 5000 500000 GAMMA EAM0D nasr 100 :pre
Calculate the dynamical matrix from molecular dynamics simulations
based on fluctuation-dissipation theory for a group of atoms.
Consider a crystal with \(N\) unit cells in three dimensions labelled \(l = (l_1, l_2, l_3)\) where \(l_i\)
are integers. Each unit cell is defined by three linearly independent
vectors \(\mathbf\{a\}_1\), \(\mathbf\{a\}_2\), \(\mathbf\{a\}_3\) forming a
parallelipiped, containing \(K\) basis atoms labeled \(k\).
Consider a crystal with \(N\) unit cells in three dimensions labelled
\(l = (l_1, l_2, l_3)\) where \(l_i\) are integers. Each unit cell is
defined by three linearly independent vectors \(\mathbf\{a\}_1\),
\(\mathbf\{a\}_2\), \(\mathbf\{a\}_3\) forming a parallelipiped,
containing \(K\) basis atoms labeled \(k\).
Based on fluctuation-dissipation theory, the force constant
coefficients of the system in reciprocal space are given by
@ -62,18 +63,16 @@ where \(\mathbf\{G\}\) is the Green's functions coefficients given by
\mathbf\{G\}_\{k\alpha,k^\prime \beta\}(\mathbf\{q\}) = \left< \mathbf\{u\}_\{k\alpha\}(\mathbf\{q\}) \bullet \mathbf\{u\}_\{k^\prime \beta\}^*(\mathbf\{q\}) \right>
\end\{equation\}
where \(\left< \ldots \right>\) denotes the ensemble average, and
\begin\{equation\}
\mathbf\{u\}_\{k\alpha\}(\mathbf\{q\}) = \sum_l \mathbf\{u\}_\{l k \alpha\} \exp\{(i\mathbf\{qr\}_l)\}
\end\{equation\}
is the \(\alpha\) component of the atomic displacement for the \(k\) th atom
in the unit cell in reciprocal space at \(\mathbf\{q\}\). In practice, the Green's
functions coefficients can also be measured according to the following
formula,
is the \(\alpha\) component of the atomic displacement for the \(k\)
th atom in the unit cell in reciprocal space at \(\mathbf\{q\}\). In
practice, the Green's functions coefficients can also be measured
according to the following formula,
\begin\{equation\}
\mathbf\{G\}_\{k\alpha,k^\prime \beta\}(\mathbf\{q\}) =
@ -81,12 +80,13 @@ formula,
- \left<\mathbf\{R\}\right>_\{k \alpha\}(\mathbf\{q\}) \bullet \left<\mathbf\{R\}\right>^*_\{k^\prime \beta\}(\mathbf\{q\})
\end\{equation\}
where \(\mathbf\{R\}\) is the instantaneous positions of atoms, and \(\left<\mathbf\{R\}\right>\) is the
averaged atomic positions. It gives essentially the same results as
the displacement method and is easier to implement in an MD code.
where \(\mathbf\{R\}\) is the instantaneous positions of atoms, and
\(\left<\mathbf\{R\}\right>\) is the averaged atomic positions. It
gives essentially the same results as the displacement method and is
easier to implement in an MD code.
Once the force constant matrix is known, the dynamical matrix \(\mathbf\{D\}\) can
then be obtained by
Once the force constant matrix is known, the dynamical matrix
\(\mathbf\{D\}\) can then be obtained by
\begin\{equation\}
\mathbf\{D\}_\{k\alpha, k^\prime\beta\}(\mathbf\{q\}) =
@ -100,10 +100,11 @@ two-point correlations. To achieve this. the positions of the atoms
are examined every {Nevery} steps and are Fourier-transformed into
reciprocal space, where the averaging process and correlation
computation is then done. After every {Noutput} measurements, the
matrix \(\mathbf\{G\}(\mathbf\{q\})\) is calculated and inverted to obtain the elastic
stiffness coefficients. The dynamical matrices are then constructed
and written to {prefix}.bin.timestep files in binary format and to the
file {prefix}.log for each wavevector \(\mathbf\{q\}\).
matrix \(\mathbf\{G\}(\mathbf\{q\})\) is calculated and inverted to
obtain the elastic stiffness coefficients. The dynamical matrices are
then constructed and written to {prefix}.bin.timestep files in binary
format and to the file {prefix}.log for each wavevector
\(\mathbf\{q\}\).
A detailed description of this method can be found in
("Kong2011"_#Kong2011).
@ -126,12 +127,13 @@ which lattice point; the lattice indices start from 0. An auxiliary
code, "latgen"_http://code.google.com/p/latgen, can be employed to
generate the compatible map file for various crystals.
In case one simulates an aperiodic system, where the whole simulation box
is treated as a unit cell, one can set {map_file} as {GAMMA}, so that the mapping
info will be generated internally and a file is not needed. In this case, the
dynamical matrix at only the gamma-point will/can be evaluated. Please keep in
mind that fix-phonon is designed for cyrstals, it will be inefficient and
even degrade the performance of lammps in case the unit cell is too large.
In case one simulates an aperiodic system, where the whole simulation
box is treated as a unit cell, one can set {map_file} as {GAMMA}, so
that the mapping info will be generated internally and a file is not
needed. In this case, the dynamical matrix at only the gamma-point
will/can be evaluated. Please keep in mind that fix-phonon is designed
for cyrstals, it will be inefficient and even degrade the performance
of lammps in case the unit cell is too large.
The calculated dynamical matrix elements are written out in
"energy/distance^2/mass"_units.html units. The coordinates for {q}

View File

@ -85,8 +85,10 @@ to feel no force (they don't "see" the wall) when in one location,
then move a distance epsilon, and suddenly feel a large force because
they now "see" the wall. In a worst-case scenario, this can blow
particles out of the simulation box. Thus, as a general rule you
should not use the fix wall/region command with {union} or
{interesect} regions that have convex points or edges.
should not use the fix wall/gran/region command with {union} or
{interesect} regions that have convex points or edges resulting from
the union/intersection (convex points/edges in the union/intersection
due to a single sub-region are still OK).
NOTE: Similarly, you should not define {union} or {intersert} regions
for use with this command that share an overlapping common face that

View File

@ -40,6 +40,7 @@ vstore(NULL), astore(NULL), rbuf(NULL)
// 0/1 flag = not-store or store peratom values in restart file
// nvalues = # of peratom values, N = 1 is vector, N > 1 is array
disable = 0;
nvalues = vecflag = 0;
flavor = UNKNOWN;
@ -230,6 +231,8 @@ void FixStore::grow_arrays(int nmax)
void FixStore::copy_arrays(int i, int j, int delflag)
{
if (disable) return;
if (vecflag) vstore[j] = vstore[i];
else
for (int m = 0; m < nvalues; m++)
@ -242,6 +245,8 @@ void FixStore::copy_arrays(int i, int j, int delflag)
int FixStore::pack_exchange(int i, double *buf)
{
if (disable) return 0;
if (vecflag) buf[0] = vstore[i];
else
for (int m = 0; m < nvalues; m++)
@ -255,6 +260,8 @@ int FixStore::pack_exchange(int i, double *buf)
int FixStore::unpack_exchange(int nlocal, double *buf)
{
if (disable) return 0;
if (vecflag) vstore[nlocal] = buf[0];
else
for (int m = 0; m < nvalues; m++)
@ -268,6 +275,11 @@ int FixStore::unpack_exchange(int nlocal, double *buf)
int FixStore::pack_restart(int i, double *buf)
{
if (disable) {
buf[0] = 0;
return 1;
}
buf[0] = nvalues+1;
if (vecflag) buf[1] = vstore[i];
else
@ -282,6 +294,8 @@ int FixStore::pack_restart(int i, double *buf)
void FixStore::unpack_restart(int nlocal, int nth)
{
if (disable) return;
double **extra = atom->extra;
// skip to Nth set of extra values
@ -302,6 +316,7 @@ void FixStore::unpack_restart(int nlocal, int nth)
int FixStore::maxsize_restart()
{
if (disable) return 1;
return nvalues+1;
}
@ -311,6 +326,7 @@ int FixStore::maxsize_restart()
int FixStore::size_restart(int nlocal)
{
if (disable) return 1;
return nvalues+1;
}

View File

@ -31,6 +31,7 @@ class FixStore : public Fix {
int nvalues; // number of per-atom values
double *vstore; // vector storage for GLOBAL or PERATOM
double **astore; // array storage for GLOBAL or PERATOM
int disable; // 1 if operations (except grow) are currently disabled
FixStore(class LAMMPS *, int, char **);
~FixStore();

View File

@ -1 +1 @@
#define LAMMPS_VERSION "22 Sep 2016"
#define LAMMPS_VERSION "21 Sep 2016"