mirror of https://github.com/lammps/lammps.git
sync with SVN
This commit is contained in:
parent
b3217218d6
commit
6f4b7268de
|
@ -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
|
||||
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -1 +1 @@
|
|||
#define LAMMPS_VERSION "22 Sep 2016"
|
||||
#define LAMMPS_VERSION "21 Sep 2016"
|
||||
|
|
Loading…
Reference in New Issue