Merge remote-tracking branch 'lammps-ro/master' into lammps-icms

Resolved Conflicts:
	doc/Manual.html
	doc/Manual.txt
	src/atom_vec_hybrid.cpp
	src/verlet.cpp
This commit is contained in:
Axel Kohlmeyer
2014-06-07 19:29:51 -04:00
102 changed files with 107297 additions and 578 deletions

View File

@ -20,10 +20,10 @@ summary description.
------------------------------------------------------------------------ ------------------------------------------------------------------------
If the script has "cpu" in its name, it is meant to be run in CPU-only If the script has "cpu" in its name, it is meant to be run in CPU-only
mode. For example: mode (without using the GPU or USER-CUDA styles). For example:
mpirun -np 1 ../lmp_linux_double -c off -v x 8 -v y 8 -v z 8 -v t 100 < in.lj.cpu mpirun -np 1 ../lmp_linux_double -v x 8 -v y 8 -v z 8 -v t 100 < in.lj.cpu
mpirun -np 12 ../lmp_linux_double -c off -v x 16 -v y 16 -v z 16 -v t 100 < in.lj.cpu mpirun -np 12 ../lmp_linux_double -v x 16 -v y 16 -v z 16 -v t 100 < in.lj.cpu
The "xyz" settings determine the problem size. The "t" setting The "xyz" settings determine the problem size. The "t" setting
determines the number of timesteps. determines the number of timesteps.
@ -33,9 +33,9 @@ determines the number of timesteps.
If the script has "gpu" in its name, it is meant to be run using If the script has "gpu" in its name, it is meant to be run using
the GPU package. For example: the GPU package. For example:
mpirun -np 12 ../lmp_linux_single -sf gpu -c off -v g 1 -v x 32 -v y 32 -v z 64 -v t 100 < in.lj.gpu mpirun -np 12 ../lmp_linux_single -sf gpu -v g 1 -v x 32 -v y 32 -v z 64 -v t 100 < in.lj.gpu
mpirun -np 8 ../lmp_linux_mixed -sf gpu -c off -v g 2 -v x 32 -v y 32 -v z 64 -v t 100 < in.lj.gpu mpirun -np 8 ../lmp_linux_mixed -sf gpu -v g 2 -v x 32 -v y 32 -v z 64 -v t 100 < in.lj.gpu
The "xyz" settings determine the problem size. The "t" setting The "xyz" settings determine the problem size. The "t" setting
determines the number of timesteps. The "np" setting determines how determines the number of timesteps. The "np" setting determines how
@ -49,9 +49,9 @@ than GPUs (both per compute node) with the GPU package.
If the script has "cuda" in its name, it is meant to be run using If the script has "cuda" in its name, it is meant to be run using
the USER-CUDA package. For example: the USER-CUDA package. For example:
mpirun -np 1 ../lmp_linux_single -sf cuda -v g 1 -v x 16 -v y 16 -v z 16 -v t 100 < in.lj.cuda mpirun -np 1 ../lmp_linux_single -c on -sf cuda -v g 1 -v x 16 -v y 16 -v z 16 -v t 100 < in.lj.cuda
mpirun -np 2 ../lmp_linux_double -sf cuda -v g 2 -v x 32 -v y 64 -v z 64 -v t 100 < in.eam.cuda mpirun -np 2 ../lmp_linux_double -c on -sf cuda -v g 2 -v x 32 -v y 64 -v z 64 -v t 100 < in.eam.cuda
The "xyz" settings determine the problem size. The "t" setting The "xyz" settings determine the problem size. The "t" setting
determines the number of timesteps. The "np" setting determines how determines the number of timesteps. The "np" setting determines how

View File

@ -1,7 +1,7 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>LAMMPS-ICMS Users Manual</TITLE> <TITLE>LAMMPS-ICMS Users Manual</TITLE>
<META NAME="docnumber" CONTENT="29 May 2014 version"> <META NAME="docnumber" CONTENT="6 Jun 2014 version">
<META NAME="author" CONTENT="http://lammps.sandia.gov - Sandia National Laboratories"> <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."> <META NAME="copyright" CONTENT="Copyright (2003) Sandia Corporation. This software and manual is distributed under the GNU General Public License.">
</HEAD> </HEAD>
@ -22,7 +22,7 @@
<CENTER><H3>LAMMPS-ICMS Documentation <CENTER><H3>LAMMPS-ICMS Documentation
</H3></CENTER> </H3></CENTER>
<CENTER><H4>29 May 2014 version <CENTER><H4>6 Jun 2014 version
</H4></CENTER> </H4></CENTER>
<H4>Version info: <H4>Version info:
</H4> </H4>

View File

@ -1,6 +1,6 @@
<HEAD> <HEAD>
<TITLE>LAMMPS-ICMS Users Manual</TITLE> <TITLE>LAMMPS-ICMS Users Manual</TITLE>
<META NAME="docnumber" CONTENT="29 May 2014 version"> <META NAME="docnumber" CONTENT="6 Jun 2014 version">
<META NAME="author" CONTENT="http://lammps.sandia.gov - Sandia National Laboratories"> <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."> <META NAME="copyright" CONTENT="Copyright (2003) Sandia Corporation. This software and manual is distributed under the GNU General Public License.">
</HEAD> </HEAD>
@ -18,7 +18,7 @@
<H1></H1> <H1></H1>
LAMMPS-ICMS Documentation :c,h3 LAMMPS-ICMS Documentation :c,h3
29 May 2014 version :c,h4 6 Jun 2014 version :c,h4
Version info: :h4 Version info: :h4

View File

@ -644,7 +644,10 @@ settings appropriate to your system.
<P>Additional input script requirements to run styles with a <I>cuda</I> <P>Additional input script requirements to run styles with a <I>cuda</I>
suffix are as follows: suffix are as follows:
</P> </P>
<UL><LI>To invoke specific styles from the USER-CUDA package, you can either <UL><LI>The <A HREF = "Section_start.html#start_7">-cuda on command-line switch</A> must be
used when launching LAMMPS to enable the USER-CUDA package.
<LI>To invoke specific styles from the USER-CUDA package, you can either
append "cuda" to the style name (e.g. pair_style lj/cut/cuda), or use append "cuda" to the style name (e.g. pair_style lj/cut/cuda), or use
the <A HREF = "Section_start.html#start_7">-suffix command-line switch</A>, or use the <A HREF = "Section_start.html#start_7">-suffix command-line switch</A>, or use
the <A HREF = "suffix.html">suffix</A> command. One exception is that the the <A HREF = "suffix.html">suffix</A> command. One exception is that the
@ -751,8 +754,8 @@ Details of the various options are discussed below.
<PRE>make yes-kokkos # install the KOKKOS package <PRE>make yes-kokkos # install the KOKKOS package
make g++ OMP=yes # build with OpenMP, no CUDA make g++ OMP=yes # build with OpenMP, no CUDA
</PRE> </PRE>
<PRE>mpirun -np 12 lmp_g++ -k off < in.lj # MPI-only mode with no Kokkos <PRE>mpirun -np 12 lmp_g++ < in.lj # MPI-only mode with no Kokkos
mpirun -np 12 lmp_g++ -sf kk < in.lj # MPI-only mode with Kokkos mpirun -np 12 lmp_g++ -k on -sf kk < in.lj # MPI-only mode with Kokkos
mpirun -np 1 lmp_g++ -k on t 12 -sf kk < in.lj # one MPI task, 12 threads mpirun -np 1 lmp_g++ -k on t 12 -sf kk < in.lj # one MPI task, 12 threads
mpirun -np 2 lmp_g++ -k on t 6 -sf kk < in.lj # two MPI tasks, 6 threads/task mpirun -np 2 lmp_g++ -k on t 6 -sf kk < in.lj # two MPI tasks, 6 threads/task
</PRE> </PRE>
@ -825,8 +828,7 @@ section</A> of the manual.
</P> </P>
<P>Here are common options to use: <P>Here are common options to use:
</P> </P>
<UL><LI>-k off : runs an executable built with the KOKKOS pacakage, as <UL><LI>-k on : required to run any KOKKOS-enabled style
if Kokkos were not installed.
<LI>-sf kk : enables automatic use of Kokkos versions of atom, pair, <LI>-sf kk : enables automatic use of Kokkos versions of atom, pair,
fix, compute styles if they exist. This can also be done with more fix, compute styles if they exist. This can also be done with more

View File

@ -643,12 +643,15 @@ settings appropriate to your system.
Additional input script requirements to run styles with a {cuda} Additional input script requirements to run styles with a {cuda}
suffix are as follows: suffix are as follows:
The "-cuda on command-line switch"_Section_start.html#start_7 must be
used when launching LAMMPS to enable the USER-CUDA package. :ulb,l
To invoke specific styles from the USER-CUDA package, you can either To invoke specific styles from the USER-CUDA package, you can either
append "cuda" to the style name (e.g. pair_style lj/cut/cuda), or use append "cuda" to the style name (e.g. pair_style lj/cut/cuda), or use
the "-suffix command-line switch"_Section_start.html#start_7, or use the "-suffix command-line switch"_Section_start.html#start_7, or use
the "suffix"_suffix.html command. One exception is that the the "suffix"_suffix.html command. One exception is that the
"kspace_style pppm/cuda"_kspace_style.html command has to be requested "kspace_style pppm/cuda"_kspace_style.html command has to be requested
explicitly. :ulb,l explicitly. :l
To use the USER-CUDA package with its default settings, no additional To use the USER-CUDA package with its default settings, no additional
command is needed in your input script. This is because when LAMMPS command is needed in your input script. This is because when LAMMPS
@ -750,8 +753,8 @@ Details of the various options are discussed below.
make yes-kokkos # install the KOKKOS package make yes-kokkos # install the KOKKOS package
make g++ OMP=yes # build with OpenMP, no CUDA :pre make g++ OMP=yes # build with OpenMP, no CUDA :pre
mpirun -np 12 lmp_g++ -k off < in.lj # MPI-only mode with no Kokkos mpirun -np 12 lmp_g++ < in.lj # MPI-only mode with no Kokkos
mpirun -np 12 lmp_g++ -sf kk < in.lj # MPI-only mode with Kokkos mpirun -np 12 lmp_g++ -k on -sf kk < in.lj # MPI-only mode with Kokkos
mpirun -np 1 lmp_g++ -k on t 12 -sf kk < in.lj # one MPI task, 12 threads mpirun -np 1 lmp_g++ -k on t 12 -sf kk < in.lj # one MPI task, 12 threads
mpirun -np 2 lmp_g++ -k on t 6 -sf kk < in.lj # two MPI tasks, 6 threads/task :pre mpirun -np 2 lmp_g++ -k on t 6 -sf kk < in.lj # two MPI tasks, 6 threads/task :pre
@ -824,8 +827,7 @@ section"_Section_start.html#start_7 of the manual.
Here are common options to use: Here are common options to use:
-k off : runs an executable built with the KOKKOS pacakage, as -k on : required to run any KOKKOS-enabled style :ulb,l
if Kokkos were not installed. :ulb,l
-sf kk : enables automatic use of Kokkos versions of atom, pair, -sf kk : enables automatic use of Kokkos versions of atom, pair,
fix, compute styles if they exist. This can also be done with more fix, compute styles if they exist. This can also be done with more

View File

@ -4388,7 +4388,7 @@ it turns off bonds that should contribute to the energy.
<DT><I>Fix srd requires ghost atoms store velocity</I> <DT><I>Fix srd requires ghost atoms store velocity</I>
<DD>Use the communicate vel yes command to enable this. <DD>Use the comm_modify vel yes command to enable this.
<DT><I>Fix srd requires newton pair on</I> <DT><I>Fix srd requires newton pair on</I>
@ -6849,7 +6849,7 @@ rRESPA cutoffs.
<DT><I>Pair dpd requires ghost atoms store velocity</I> <DT><I>Pair dpd requires ghost atoms store velocity</I>
<DD>Use the communicate vel yes command to enable this. <DD>Use the comm_modify vel yes command to enable this.
<DT><I>Pair gayberne epsilon a,b,c coeffs are not all set</I> <DT><I>Pair gayberne epsilon a,b,c coeffs are not all set</I>
@ -6878,7 +6878,7 @@ have these 3 coefficients set at least once.
<DT><I>Pair granular requires ghost atoms store velocity</I> <DT><I>Pair granular requires ghost atoms store velocity</I>
<DD>Use the communicate vel yes command to enable this. <DD>Use the comm_modify vel yes command to enable this.
<DT><I>Pair granular with shear history requires newton pair off</I> <DT><I>Pair granular with shear history requires newton pair off</I>
@ -6918,7 +6918,7 @@ rRESPA cutoffs.
<DT><I>Pair lubricate requires ghost atoms store velocity</I> <DT><I>Pair lubricate requires ghost atoms store velocity</I>
<DD>Use the communicate vel yes command to enable this. <DD>Use the comm_modify vel yes command to enable this.
<DT><I>Pair lubricate requires monodisperse particles</I> <DT><I>Pair lubricate requires monodisperse particles</I>
@ -6934,7 +6934,7 @@ rRESPA cutoffs.
<DT><I>Pair lubricate/poly requires ghost atoms store velocity</I> <DT><I>Pair lubricate/poly requires ghost atoms store velocity</I>
<DD>Use the communicate vel yes command to enable this. <DD>Use the comm_modify vel yes command to enable this.
<DT><I>Pair lubricate/poly requires newton pair off</I> <DT><I>Pair lubricate/poly requires newton pair off</I>
@ -6946,7 +6946,7 @@ rRESPA cutoffs.
<DT><I>Pair lubricateU requires ghost atoms store velocity</I> <DT><I>Pair lubricateU requires ghost atoms store velocity</I>
<DD>Use the communicate vel yes command to enable this. <DD>Use the comm_modify vel yes command to enable this.
<DT><I>Pair lubricateU requires monodisperse particles</I> <DT><I>Pair lubricateU requires monodisperse particles</I>
@ -6954,7 +6954,7 @@ rRESPA cutoffs.
<DT><I>Pair lubricateU/poly requires ghost atoms store velocity</I> <DT><I>Pair lubricateU/poly requires ghost atoms store velocity</I>
<DD>Use the communicate vel yes command to enable this. <DD>Use the comm_modify vel yes command to enable this.
<DT><I>Pair lubricateU/poly requires newton pair off</I> <DT><I>Pair lubricateU/poly requires newton pair off</I>

View File

@ -4392,7 +4392,7 @@ Self-explanatory. :dd
{Fix srd requires ghost atoms store velocity} :dt {Fix srd requires ghost atoms store velocity} :dt
Use the communicate vel yes command to enable this. :dd Use the comm_modify vel yes command to enable this. :dd
{Fix srd requires newton pair on} :dt {Fix srd requires newton pair on} :dt
@ -6853,7 +6853,7 @@ Two atoms are further apart than the pairwise table allows. :dd
{Pair dpd requires ghost atoms store velocity} :dt {Pair dpd requires ghost atoms store velocity} :dt
Use the communicate vel yes command to enable this. :dd Use the comm_modify vel yes command to enable this. :dd
{Pair gayberne epsilon a,b,c coeffs are not all set} :dt {Pair gayberne epsilon a,b,c coeffs are not all set} :dt
@ -6882,7 +6882,7 @@ Self-explanatory. :dd
{Pair granular requires ghost atoms store velocity} :dt {Pair granular requires ghost atoms store velocity} :dt
Use the communicate vel yes command to enable this. :dd Use the comm_modify vel yes command to enable this. :dd
{Pair granular with shear history requires newton pair off} :dt {Pair granular with shear history requires newton pair off} :dt
@ -6922,7 +6922,7 @@ Self-explanatory. :dd
{Pair lubricate requires ghost atoms store velocity} :dt {Pair lubricate requires ghost atoms store velocity} :dt
Use the communicate vel yes command to enable this. :dd Use the comm_modify vel yes command to enable this. :dd
{Pair lubricate requires monodisperse particles} :dt {Pair lubricate requires monodisperse particles} :dt
@ -6938,7 +6938,7 @@ One of the particles has radius 0.0. :dd
{Pair lubricate/poly requires ghost atoms store velocity} :dt {Pair lubricate/poly requires ghost atoms store velocity} :dt
Use the communicate vel yes command to enable this. :dd Use the comm_modify vel yes command to enable this. :dd
{Pair lubricate/poly requires newton pair off} :dt {Pair lubricate/poly requires newton pair off} :dt
@ -6950,7 +6950,7 @@ Self-explanatory. :dd
{Pair lubricateU requires ghost atoms store velocity} :dt {Pair lubricateU requires ghost atoms store velocity} :dt
Use the communicate vel yes command to enable this. :dd Use the comm_modify vel yes command to enable this. :dd
{Pair lubricateU requires monodisperse particles} :dt {Pair lubricateU requires monodisperse particles} :dt
@ -6958,7 +6958,7 @@ All particles must be the same finite size. :dd
{Pair lubricateU/poly requires ghost atoms store velocity} :dt {Pair lubricateU/poly requires ghost atoms store velocity} :dt
Use the communicate vel yes command to enable this. :dd Use the comm_modify vel yes command to enable this. :dd
{Pair lubricateU/poly requires newton pair off} :dt {Pair lubricateU/poly requires newton pair off} :dt

View File

@ -1163,14 +1163,12 @@ mpirun -np 16 lmp_ibm -var f tmp.out -log my.log -screen none < in.alloy
<PRE>-cuda on/off <PRE>-cuda on/off
</PRE> </PRE>
<P>Explicitly enable or disable CUDA support, as provided by the <P>Explicitly enable or disable CUDA support, as provided by the
USER-CUDA package. If LAMMPS is built with this package, as described USER-CUDA package. Even if LAMMPS is built with this package, as
above in <A HREF = "#start_3">Section 2.3</A>, then by default LAMMPS will run in described above in <A HREF = "#start_3">Section 2.3</A>, this switch must be set to
CUDA mode. If this switch is set to "off", then it will not, even if enable running with the CUDA-enabled styles the package provides. If
it was built with the USER-CUDA package, which means you can run the switch is not set (the default), LAMMPS will operate as if the
standard LAMMPS or with the GPU package for testing or benchmarking USER-CUDA package were not installed; i.e. you can run standard LAMMPS
purposes. The only reason to set the switch to "on", is to check if or with the GPU package, for testing or benchmarking purposes.
LAMMPS was built with the USER-CUDA package, since an error will be
generated if it was not.
</P> </P>
<PRE>-echo style <PRE>-echo style
</PRE> </PRE>
@ -1204,16 +1202,14 @@ used.
</P> </P>
<PRE>-kokkos on/off keyword/value ... <PRE>-kokkos on/off keyword/value ...
</PRE> </PRE>
<P>Explicitly enable or disable Kokkos support, as provided by the KOKKOS <P>Explicitly enable or disable KOKKOS support, as provided by the KOKKOS
package. If LAMMPS is built with this package, as described above in package. Even if LAMMPS is built with this package, as described
<A HREF = "#start_3">Section 2.3</A>, then by default LAMMPS will run in Kokkos above in <A HREF = "#start_3">Section 2.3</A>, this switch must be set to enable
mode. If this switch is set to "off", then it will not, even if it running with the KOKKOS-enabled styles the package provides. If the
was built with the KOKKOS package, which means you can run standard switch is not set (the default), LAMMPS will operate as if the KOKKOS
LAMMPS styles or use styles enhanced by other acceleration packages, package were not installed; i.e. you can run standard LAMMPS or with
such as the GPU or USER-CUDA or USER-OMP packages, for testing or the GPU or USER-CUDA or USER-OMP packages, for testing or benchmarking
benchmarking purposes. The only reason to set the switch to "on", is purposes.
to check if LAMMPS was built with the KOKKOS package, since an error
will be generated if it was not.
</P> </P>
<P>Additional optional keyword/value pairs can be specified which <P>Additional optional keyword/value pairs can be specified which
determine how Kokkos will use the underlying hardware on your determine how Kokkos will use the underlying hardware on your

View File

@ -1157,14 +1157,12 @@ Here are the details on the options:
-cuda on/off :pre -cuda on/off :pre
Explicitly enable or disable CUDA support, as provided by the Explicitly enable or disable CUDA support, as provided by the
USER-CUDA package. If LAMMPS is built with this package, as described USER-CUDA package. Even if LAMMPS is built with this package, as
above in "Section 2.3"_#start_3, then by default LAMMPS will run in described above in "Section 2.3"_#start_3, this switch must be set to
CUDA mode. If this switch is set to "off", then it will not, even if enable running with the CUDA-enabled styles the package provides. If
it was built with the USER-CUDA package, which means you can run the switch is not set (the default), LAMMPS will operate as if the
standard LAMMPS or with the GPU package for testing or benchmarking USER-CUDA package were not installed; i.e. you can run standard LAMMPS
purposes. The only reason to set the switch to "on", is to check if or with the GPU package, for testing or benchmarking purposes.
LAMMPS was built with the USER-CUDA package, since an error will be
generated if it was not.
-echo style :pre -echo style :pre
@ -1198,16 +1196,14 @@ used.
-kokkos on/off keyword/value ... :pre -kokkos on/off keyword/value ... :pre
Explicitly enable or disable Kokkos support, as provided by the KOKKOS Explicitly enable or disable KOKKOS support, as provided by the KOKKOS
package. If LAMMPS is built with this package, as described above in package. Even if LAMMPS is built with this package, as described
"Section 2.3"_#start_3, then by default LAMMPS will run in Kokkos above in "Section 2.3"_#start_3, this switch must be set to enable
mode. If this switch is set to "off", then it will not, even if it running with the KOKKOS-enabled styles the package provides. If the
was built with the KOKKOS package, which means you can run standard switch is not set (the default), LAMMPS will operate as if the KOKKOS
LAMMPS styles or use styles enhanced by other acceleration packages, package were not installed; i.e. you can run standard LAMMPS or with
such as the GPU or USER-CUDA or USER-OMP packages, for testing or the GPU or USER-CUDA or USER-OMP packages, for testing or benchmarking
benchmarking purposes. The only reason to set the switch to "on", is purposes.
to check if LAMMPS was built with the KOKKOS package, since an error
will be generated if it was not.
Additional optional keyword/value pairs can be specified which Additional optional keyword/value pairs can be specified which
determine how Kokkos will use the underlying hardware on your determine how Kokkos will use the underlying hardware on your

View File

@ -29,12 +29,14 @@
angmomx, angmomy, angmomz, angmomx, angmomy, angmomz,
shapex,shapey, shapez, shapex,shapey, shapez,
quatw, quati, quatj, quatk, tqx, tqy, tqz, quatw, quati, quatj, quatk, tqx, tqy, tqz,
spin, eradius, ervel, erforce
end1x, end1y, end1z, end2x, end2y, end2z, end1x, end1y, end1z, end2x, end2y, end2z,
corner1x, corner1y, corner1z, corner1x, corner1y, corner1z,
corner2x, corner2y, corner2z, corner2x, corner2y, corner2z,
corner3x, corner3y, corner3z, corner3x, corner3y, corner3z,
nbonds, nbonds,
vfrac, s0,
spin, eradius, ervel, erforce,
rho, drho, e, de, cv,
i_name, d_name i_name, d_name
</PRE> </PRE>
<PRE> id = atom ID <PRE> id = atom ID
@ -56,13 +58,28 @@
shapex,shapey,shapez = 3 diameters of aspherical particle shapex,shapey,shapez = 3 diameters of aspherical particle
quatw,quati,quatj,quatk = quaternion components for aspherical or body particles quatw,quati,quatj,quatk = quaternion components for aspherical or body particles
tqx,tqy,tqz = torque on finite-size particles tqx,tqy,tqz = torque on finite-size particles
end12x, end12y, end12z = end points of line segment
corner123x, corner123y, corner123z = corner points of triangle
nbonds = number of bonds
</PRE>
<PRE> PERI package per-atom properties:
vfrac = ???
s0 = ???
</PRE>
<PRE> USER-EFF and USER-AWPMD package per-atom properties:
spin = electron spin spin = electron spin
eradius = electron radius eradius = electron radius
ervel = electron radial velocity ervel = electron radial velocity
erforce = electron radial force erforce = electron radial force
end12x, end12y, end12z = end points of line segment </PRE>
corner123x, corner123y, corner123z = corner points of triangle <PRE> USER-SPH package per-atom properties:
nbonds = number of bonds rho = ???
drho = ???
e = ???
de = ???
cv = ???
</PRE>
<PRE> <A HREF = "fix_property_atom.html">fix property/atom</A> per-atom properties:
i_name = custom integer vector with name i_name = custom integer vector with name
d_name = custom integer vector with name d_name = custom integer vector with name
</PRE> </PRE>

View File

@ -23,12 +23,14 @@ input = one or more atom attributes :l
angmomx, angmomy, angmomz, angmomx, angmomy, angmomz,
shapex,shapey, shapez, shapex,shapey, shapez,
quatw, quati, quatj, quatk, tqx, tqy, tqz, quatw, quati, quatj, quatk, tqx, tqy, tqz,
spin, eradius, ervel, erforce
end1x, end1y, end1z, end2x, end2y, end2z, end1x, end1y, end1z, end2x, end2y, end2z,
corner1x, corner1y, corner1z, corner1x, corner1y, corner1z,
corner2x, corner2y, corner2z, corner2x, corner2y, corner2z,
corner3x, corner3y, corner3z, corner3x, corner3y, corner3z,
nbonds, nbonds,
vfrac, s0,
spin, eradius, ervel, erforce,
rho, drho, e, de, cv,
i_name, d_name :pre i_name, d_name :pre
id = atom ID id = atom ID
mol = molecule ID mol = molecule ID
@ -49,13 +51,28 @@ input = one or more atom attributes :l
shapex,shapey,shapez = 3 diameters of aspherical particle shapex,shapey,shapez = 3 diameters of aspherical particle
quatw,quati,quatj,quatk = quaternion components for aspherical or body particles quatw,quati,quatj,quatk = quaternion components for aspherical or body particles
tqx,tqy,tqz = torque on finite-size particles tqx,tqy,tqz = torque on finite-size particles
end12x, end12y, end12z = end points of line segment
corner123x, corner123y, corner123z = corner points of triangle
nbonds = number of bonds :pre
PERI package per-atom properties:
vfrac = ???
s0 = ??? :pre
USER-EFF and USER-AWPMD package per-atom properties:
spin = electron spin spin = electron spin
eradius = electron radius eradius = electron radius
ervel = electron radial velocity ervel = electron radial velocity
erforce = electron radial force erforce = electron radial force :pre
end12x, end12y, end12z = end points of line segment
corner123x, corner123y, corner123z = corner points of triangle USER-SPH package per-atom properties:
nbonds = number of bonds rho = ???
drho = ???
e = ???
de = ???
cv = ??? :pre
"fix property/atom"_fix_property_atom.html per-atom properties:
i_name = custom integer vector with name i_name = custom integer vector with name
d_name = custom integer vector with name :pre d_name = custom integer vector with name :pre
:ule :ule

View File

@ -64,7 +64,6 @@
q, mux, muy, muz, mu, q, mux, muy, muz, mu,
radius, diameter, omegax, omegay, omegaz, radius, diameter, omegax, omegay, omegaz,
angmomx, angmomy, angmomz, tqx, tqy, tqz, angmomx, angmomy, angmomz, tqx, tqy, tqz,
spin, eradius, ervel, erforce,
c_ID, c_ID[N], f_ID, f_ID[N], v_name c_ID, c_ID[N], f_ID, f_ID[N], v_name
</PRE> </PRE>
<PRE> id = atom ID <PRE> id = atom ID
@ -86,10 +85,6 @@
omegax,omegay,omegaz = angular velocity of spherical particle omegax,omegay,omegaz = angular velocity of spherical particle
angmomx,angmomy,angmomz = angular momentum of aspherical particle angmomx,angmomy,angmomz = angular momentum of aspherical particle
tqx,tqy,tqz = torque on finite-size particles tqx,tqy,tqz = torque on finite-size particles
spin = electron spin
eradius = electron radius
ervel = electron radial velocity
erforce = electron radial force
c_ID = per-atom vector calculated by a compute with ID c_ID = per-atom vector calculated by a compute with ID
c_ID[N] = Nth column of per-atom array calculated by a compute with ID c_ID[N] = Nth column of per-atom array calculated by a compute with ID
f_ID = per-atom vector calculated by a fix with ID f_ID = per-atom vector calculated by a fix with ID
@ -108,8 +103,7 @@ dump 4a all custom 100 dump.myforce.* id type x y vx fx
dump 4b flow custom 100 dump.%.myforce id type c_myF[3] v_ke dump 4b flow custom 100 dump.%.myforce id type c_myF[3] v_ke
dump 2 inner cfg 10 dump.snap.*.cfg mass type xs ys zs vx vy vz dump 2 inner cfg 10 dump.snap.*.cfg mass type xs ys zs vx vy vz
dump snap all cfg 100 dump.config.*.cfg mass type xs ys zs id type c_Stress[2] dump snap all cfg 100 dump.config.*.cfg mass type xs ys zs id type c_Stress[2]
dump 1 all xtc 1000 file.xtc dump 1 all xtc 1000 file.xtc
dump e_data all custom 100 dump.eff id type x y z spin eradius fx fy fz eforce
</PRE> </PRE>
<P><B>Description:</B> <P><B>Description:</B>
</P> </P>
@ -523,12 +517,6 @@ the <I>ellipsoid</I> atom style defines this quantity.
can sustain a rotational torque due to interactions with other can sustain a rotational torque due to interactions with other
particles. particles.
</P> </P>
<P>The <I>spin</I>, <I>eradius</I>, <I>ervel</I>, and <I>erforce</I> attributes are for
particles that represent nuclei and electrons modeled with the
electronic force field (EFF). See <A HREF = "atom_style.html">atom_style
electron</A> and <A HREF = "pair_eff.html">pair_style eff</A> for more
details.
</P>
<P>The <I>c_ID</I> and <I>c_ID[N]</I> attributes allow per-atom vectors or arrays <P>The <I>c_ID</I> and <I>c_ID[N]</I> attributes allow per-atom vectors or arrays
calculated by a <A HREF = "compute.html">compute</A> to be output. The ID in the calculated by a <A HREF = "compute.html">compute</A> to be output. The ID in the
attribute should be replaced by the actual ID of the compute that has attribute should be replaced by the actual ID of the compute that has

View File

@ -51,7 +51,6 @@ args = list of arguments for a particular style :l
q, mux, muy, muz, mu, q, mux, muy, muz, mu,
radius, diameter, omegax, omegay, omegaz, radius, diameter, omegax, omegay, omegaz,
angmomx, angmomy, angmomz, tqx, tqy, tqz, angmomx, angmomy, angmomz, tqx, tqy, tqz,
spin, eradius, ervel, erforce,
c_ID, c_ID\[N\], f_ID, f_ID\[N\], v_name :pre c_ID, c_ID\[N\], f_ID, f_ID\[N\], v_name :pre
id = atom ID id = atom ID
@ -73,10 +72,6 @@ args = list of arguments for a particular style :l
omegax,omegay,omegaz = angular velocity of spherical particle omegax,omegay,omegaz = angular velocity of spherical particle
angmomx,angmomy,angmomz = angular momentum of aspherical particle angmomx,angmomy,angmomz = angular momentum of aspherical particle
tqx,tqy,tqz = torque on finite-size particles tqx,tqy,tqz = torque on finite-size particles
spin = electron spin
eradius = electron radius
ervel = electron radial velocity
erforce = electron radial force
c_ID = per-atom vector calculated by a compute with ID c_ID = per-atom vector calculated by a compute with ID
c_ID\[N\] = Nth column of per-atom array calculated by a compute with ID c_ID\[N\] = Nth column of per-atom array calculated by a compute with ID
f_ID = per-atom vector calculated by a fix with ID f_ID = per-atom vector calculated by a fix with ID
@ -94,8 +89,7 @@ dump 4a all custom 100 dump.myforce.* id type x y vx fx
dump 4b flow custom 100 dump.%.myforce id type c_myF\[3\] v_ke dump 4b flow custom 100 dump.%.myforce id type c_myF\[3\] v_ke
dump 2 inner cfg 10 dump.snap.*.cfg mass type xs ys zs vx vy vz dump 2 inner cfg 10 dump.snap.*.cfg mass type xs ys zs vx vy vz
dump snap all cfg 100 dump.config.*.cfg mass type xs ys zs id type c_Stress\[2\] dump snap all cfg 100 dump.config.*.cfg mass type xs ys zs id type c_Stress\[2\]
dump 1 all xtc 1000 file.xtc dump 1 all xtc 1000 file.xtc :pre
dump e_data all custom 100 dump.eff id type x y z spin eradius fx fy fz eforce :pre
[Description:] [Description:]
@ -508,12 +502,6 @@ The {tqx}, {tqy}, {tqz} attributes are for finite-size particles that
can sustain a rotational torque due to interactions with other can sustain a rotational torque due to interactions with other
particles. particles.
The {spin}, {eradius}, {ervel}, and {erforce} attributes are for
particles that represent nuclei and electrons modeled with the
electronic force field (EFF). See "atom_style
electron"_atom_style.html and "pair_style eff"_pair_eff.html for more
details.
The {c_ID} and {c_ID\[N\]} attributes allow per-atom vectors or arrays The {c_ID} and {c_ID\[N\]} attributes allow per-atom vectors or arrays
calculated by a "compute"_compute.html to be output. The ID in the calculated by a "compute"_compute.html to be output. The ID in the
attribute should be replaced by the actual ID of the compute that has attribute should be replaced by the actual ID of the compute that has

View File

@ -35,7 +35,7 @@
</P> </P>
<PRE>pair_style buck/long/coul/long cut off 2.5 <PRE>pair_style buck/long/coul/long cut off 2.5
pair_style buck/long/coul/long cut long 2.5 4.0 pair_style buck/long/coul/long cut long 2.5 4.0
pair_style buck/long/coul/long long long 2.5 4.0 pair_style buck/long/coul/long long long 4.0
pair_coeff * * 1 1 pair_coeff * * 1 1
pair_coeff 1 1 1 3 4 pair_coeff 1 1 1 3 4
</PRE> </PRE>

View File

@ -26,7 +26,7 @@ cutoff2 = global cutoff for Coulombic (optional) (distance units) :l,ule
pair_style buck/long/coul/long cut off 2.5 pair_style buck/long/coul/long cut off 2.5
pair_style buck/long/coul/long cut long 2.5 4.0 pair_style buck/long/coul/long cut long 2.5 4.0
pair_style buck/long/coul/long long long 2.5 4.0 pair_style buck/long/coul/long long long 4.0
pair_coeff * * 1 1 pair_coeff * * 1 1
pair_coeff 1 1 1 3 4 :pre pair_coeff 1 1 1 3 4 :pre

View File

@ -175,8 +175,8 @@ number of "dangerous" reneighborings (printed at the end of a
simulation), you should experiment with forcing reneighboring more simulation), you should experiment with forcing reneighboring more
often and see if system energies/trajectories change. often and see if system energies/trajectories change.
</P> </P>
<P>These pair styles requires you to use the <A HREF = "communicate.html">communicate vel <P>These pair styles requires you to use the <A HREF = "comm_modify.html">comm_modify vel
yes</A> option so that velocites are stored by ghost yes</A> command so that velocites are stored by ghost
atoms. atoms.
</P> </P>
<P>These pair styles will not restart exactly when using the <P>These pair styles will not restart exactly when using the

View File

@ -167,8 +167,8 @@ number of "dangerous" reneighborings (printed at the end of a
simulation), you should experiment with forcing reneighboring more simulation), you should experiment with forcing reneighboring more
often and see if system energies/trajectories change. often and see if system energies/trajectories change.
These pair styles requires you to use the "communicate vel These pair styles requires you to use the "comm_modify vel
yes"_communicate.html option so that velocites are stored by ghost yes"_comm_modify.html command so that velocites are stored by ghost
atoms. atoms.
These pair styles will not restart exactly when using the These pair styles will not restart exactly when using the

View File

@ -296,8 +296,8 @@ such as radius, radial velocity, and radital force, as defined by the
<A HREF = "atom_style.html">atom_style</A>. The <I>electron</I> atom style does all of <A HREF = "atom_style.html">atom_style</A>. The <I>electron</I> atom style does all of
this. this.
</P> </P>
<P>Thes pair styles require you to use the <A HREF = "communicate.html">communicate vel <P>Thes pair styles require you to use the <A HREF = "comm_modify.html">comm_modify vel
yes</A> option so that velocites are stored by ghost yes</A> command so that velocites are stored by ghost
atoms. atoms.
</P> </P>
<P><B>Related commands:</B> <P><B>Related commands:</B>

View File

@ -289,8 +289,8 @@ such as radius, radial velocity, and radital force, as defined by the
"atom_style"_atom_style.html. The {electron} atom style does all of "atom_style"_atom_style.html. The {electron} atom style does all of
this. this.
Thes pair styles require you to use the "communicate vel Thes pair styles require you to use the "comm_modify vel
yes"_communicate.html option so that velocites are stored by ghost yes"_comm_modify.html command so that velocites are stored by ghost
atoms. atoms.
[Related commands:] [Related commands:]

View File

@ -243,8 +243,8 @@ LAMMPS</A> section for more info.
require a per-particle radius is stored. The <I>sphere</I> atom style does require a per-particle radius is stored. The <I>sphere</I> atom style does
all of this. all of this.
</P> </P>
<P>This pair style requires you to use the <A HREF = "communicate.html">communicate vel <P>This pair style requires you to use the <A HREF = "comm_modify.html">comm_modify vel
yes</A> option so that velocites are stored by ghost yes</A> command so that velocites are stored by ghost
atoms. atoms.
</P> </P>
<P>These pair styles will not restart exactly when using the <P>These pair styles will not restart exactly when using the

View File

@ -229,8 +229,8 @@ These pair styles require that atoms store torque and angular velocity
require a per-particle radius is stored. The {sphere} atom style does require a per-particle radius is stored. The {sphere} atom style does
all of this. all of this.
This pair style requires you to use the "communicate vel This pair style requires you to use the "comm_modify vel
yes"_communicate.html option so that velocites are stored by ghost yes"_comm_modify.html command so that velocites are stored by ghost
atoms. atoms.
These pair styles will not restart exactly when using the These pair styles will not restart exactly when using the

View File

@ -117,7 +117,7 @@ in the pair section of <A HREF = "Section_commands.html#cmd_5">this page</A>.
<LI><A HREF = "pair_buck.html">pair_style buck/coul/cut</A> - Buckingham with cutoff Coulomb <LI><A HREF = "pair_buck.html">pair_style buck/coul/cut</A> - Buckingham with cutoff Coulomb
<LI><A HREF = "pair_buck.html">pair_style buck/coul/long</A> - Buckingham with long-range Coulombics <LI><A HREF = "pair_buck.html">pair_style buck/coul/long</A> - Buckingham with long-range Coulombics
<LI><A HREF = "pair_buck.html">pair_style buck/coul/msm</A> - Buckingham long-range MSM Coulombics <LI><A HREF = "pair_buck.html">pair_style buck/coul/msm</A> - Buckingham long-range MSM Coulombics
<LI><A HREF = "pair_buck.html">pair_style buck/long/coul/long</A> - long-range Buckingham with long-range Coulombics <LI><A HREF = "pair_buck_long.html">pair_style buck/long/coul/long</A> - long-range Buckingham with long-range Coulombics
<LI><A HREF = "pair_colloid.html">pair_style colloid</A> - integrated colloidal potential <LI><A HREF = "pair_colloid.html">pair_style colloid</A> - integrated colloidal potential
<LI><A HREF = "pair_comb.html">pair_style comb</A> - charge-optimized many-body (COMB) potential <LI><A HREF = "pair_comb.html">pair_style comb</A> - charge-optimized many-body (COMB) potential
<LI><A HREF = "pair_comb.html">pair_style comb3</A> - charge-optimized many-body (COMB3) potential <LI><A HREF = "pair_comb.html">pair_style comb3</A> - charge-optimized many-body (COMB3) potential

View File

@ -114,7 +114,7 @@ in the pair section of "this page"_Section_commands.html#cmd_5.
"pair_style buck/coul/cut"_pair_buck.html - Buckingham with cutoff Coulomb "pair_style buck/coul/cut"_pair_buck.html - Buckingham with cutoff Coulomb
"pair_style buck/coul/long"_pair_buck.html - Buckingham with long-range Coulombics "pair_style buck/coul/long"_pair_buck.html - Buckingham with long-range Coulombics
"pair_style buck/coul/msm"_pair_buck.html - Buckingham long-range MSM Coulombics "pair_style buck/coul/msm"_pair_buck.html - Buckingham long-range MSM Coulombics
"pair_style buck/long/coul/long"_pair_buck.html - long-range Buckingham with long-range Coulombics "pair_style buck/long/coul/long"_pair_buck_long.html - long-range Buckingham with long-range Coulombics
"pair_style colloid"_pair_colloid.html - integrated colloidal potential "pair_style colloid"_pair_colloid.html - integrated colloidal potential
"pair_style comb"_pair_comb.html - charge-optimized many-body (COMB) potential "pair_style comb"_pair_comb.html - charge-optimized many-body (COMB) potential
"pair_style comb3"_pair_comb.html - charge-optimized many-body (COMB3) potential "pair_style comb3"_pair_comb.html - charge-optimized many-body (COMB3) potential

View File

@ -31,7 +31,7 @@
xy, xz, yz, xlat, ylat, zlat, xy, xz, yz, xlat, ylat, zlat,
bonds, angles, dihedrals, impropers, bonds, angles, dihedrals, impropers,
pxx, pyy, pzz, pxy, pxz, pyz, pxx, pyy, pzz, pxy, pxz, pyz,
fmax, fnorm, fmax, fnorm, nbuild, ndanger,
cella, cellb, cellc, cellalpha, cellbeta, cellgamma, cella, cellb, cellc, cellalpha, cellbeta, cellgamma,
c_ID, c_ID[I], c_ID[I][J], c_ID, c_ID[I], c_ID[I][J],
f_ID, f_ID[I], f_ID[I][J], f_ID, f_ID[I], f_ID[I][J],
@ -73,6 +73,8 @@
pxx,pyy,pzz,pxy,pxz,pyz = 6 components of pressure tensor pxx,pyy,pzz,pxy,pxz,pyz = 6 components of pressure tensor
fmax = max component of force on any atom in any dimension fmax = max component of force on any atom in any dimension
fnorm = length of force vector for all atoms fnorm = length of force vector for all atoms
nbuild = # of neighbor list builds
ndanger = # of dangerous neighbor list builds
cella,cellb,cellc = periodic cell lattice constants a,b,c cella,cellb,cellc = periodic cell lattice constants a,b,c
cellalpha, cellbeta, cellgamma = periodic cell angles alpha,beta,gamma cellalpha, cellbeta, cellgamma = periodic cell angles alpha,beta,gamma
c_ID = global scalar value calculated by a compute with ID c_ID = global scalar value calculated by a compute with ID
@ -265,6 +267,19 @@ calculates the maximum force in any dimension on any atom in the
system, or the infinity-norm of the force vector for the system. The system, or the infinity-norm of the force vector for the system. The
<I>fnorm</I> keyword calculates the 2-norm or length of the force vector. <I>fnorm</I> keyword calculates the 2-norm or length of the force vector.
</P> </P>
<P>The <I>nbuild</I> and <I>ndanger</I> keywords are useful for monitoring neighbor
list builds during a run. Note that both these values are also
printed with the end-of-run statistics. The <I>nbuild</I> keyword is the
number of re-builds during the current run. The <I>ndanger</I> keyword is
the number of re-builds that LAMMPS considered potentially
"dangerous". If atom movement triggered neighbor list rebuilding (see
the <A HREF = "neigh_modify.html">neigh_modify</A> command), then dangerous
reneighborings are those that were triggered on the first timestep
atom movement was checked for. If this count is non-zero you may wish
to reduce the delay factor to insure no force interactions are missed
by atoms moving beyond the neighbor skin distance before a rebuild
takes place.
</P>
<P>The keywords <I>cella</I>, <I>cellb</I>, <I>cellc</I>, <I>cellalpha</I>, <I>cellbeta</I>, <P>The keywords <I>cella</I>, <I>cellb</I>, <I>cellc</I>, <I>cellalpha</I>, <I>cellbeta</I>,
<I>cellgamma</I>, correspond to the usual crystallographic quantities that <I>cellgamma</I>, correspond to the usual crystallographic quantities that
define the periodic unit cell of a crystal. See <A HREF = "Section_howto.html#howto_12">this define the periodic unit cell of a crystal. See <A HREF = "Section_howto.html#howto_12">this

View File

@ -26,7 +26,7 @@ args = list of arguments for a particular style :l
xy, xz, yz, xlat, ylat, zlat, xy, xz, yz, xlat, ylat, zlat,
bonds, angles, dihedrals, impropers, bonds, angles, dihedrals, impropers,
pxx, pyy, pzz, pxy, pxz, pyz, pxx, pyy, pzz, pxy, pxz, pyz,
fmax, fnorm, fmax, fnorm, nbuild, ndanger,
cella, cellb, cellc, cellalpha, cellbeta, cellgamma, cella, cellb, cellc, cellalpha, cellbeta, cellgamma,
c_ID, c_ID\[I\], c_ID\[I\]\[J\], c_ID, c_ID\[I\], c_ID\[I\]\[J\],
f_ID, f_ID\[I\], f_ID\[I\]\[J\], f_ID, f_ID\[I\], f_ID\[I\]\[J\],
@ -68,6 +68,8 @@ args = list of arguments for a particular style :l
pxx,pyy,pzz,pxy,pxz,pyz = 6 components of pressure tensor pxx,pyy,pzz,pxy,pxz,pyz = 6 components of pressure tensor
fmax = max component of force on any atom in any dimension fmax = max component of force on any atom in any dimension
fnorm = length of force vector for all atoms fnorm = length of force vector for all atoms
nbuild = # of neighbor list builds
ndanger = # of dangerous neighbor list builds
cella,cellb,cellc = periodic cell lattice constants a,b,c cella,cellb,cellc = periodic cell lattice constants a,b,c
cellalpha, cellbeta, cellgamma = periodic cell angles alpha,beta,gamma cellalpha, cellbeta, cellgamma = periodic cell angles alpha,beta,gamma
c_ID = global scalar value calculated by a compute with ID c_ID = global scalar value calculated by a compute with ID
@ -259,6 +261,19 @@ calculates the maximum force in any dimension on any atom in the
system, or the infinity-norm of the force vector for the system. The system, or the infinity-norm of the force vector for the system. The
{fnorm} keyword calculates the 2-norm or length of the force vector. {fnorm} keyword calculates the 2-norm or length of the force vector.
The {nbuild} and {ndanger} keywords are useful for monitoring neighbor
list builds during a run. Note that both these values are also
printed with the end-of-run statistics. The {nbuild} keyword is the
number of re-builds during the current run. The {ndanger} keyword is
the number of re-builds that LAMMPS considered potentially
"dangerous". If atom movement triggered neighbor list rebuilding (see
the "neigh_modify"_neigh_modify.html command), then dangerous
reneighborings are those that were triggered on the first timestep
atom movement was checked for. If this count is non-zero you may wish
to reduce the delay factor to insure no force interactions are missed
by atoms moving beyond the neighbor skin distance before a rebuild
takes place.
The keywords {cella}, {cellb}, {cellc}, {cellalpha}, {cellbeta}, The keywords {cella}, {cellb}, {cellc}, {cellalpha}, {cellbeta},
{cellgamma}, correspond to the usual crystallographic quantities that {cellgamma}, correspond to the usual crystallographic quantities that
define the periodic unit cell of a crystal. See "this define the periodic unit cell of a crystal. See "this

View File

@ -67,7 +67,7 @@ reset_timestep 0
neighbor 0.3 bin neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes neigh_modify delay 0 every 1 check yes
communicate multi group big vel yes comm_modify mode multi group big vel yes
neigh_modify include big neigh_modify include big
# no pairwise interactions with small particles # no pairwise interactions with small particles

View File

@ -67,7 +67,7 @@ reset_timestep 0
neighbor 0.3 bin neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes neigh_modify delay 0 every 1 check yes
communicate multi group big vel yes comm_modify mode multi group big vel yes
neigh_modify include big neigh_modify include big
# no pairwise interactions with small particles # no pairwise interactions with small particles

View File

@ -64,7 +64,7 @@ reset_timestep 0
neighbor 0.3 bin neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes neigh_modify delay 0 every 1 check yes
communicate multi group big vel yes comm_modify mode multi group big vel yes
neigh_modify include big neigh_modify include big
# no pairwise interactions with small particles # no pairwise interactions with small particles

View File

@ -64,7 +64,7 @@ reset_timestep 0
neighbor 0.3 bin neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes neigh_modify delay 0 every 1 check yes
communicate multi group big vel yes comm_modify mode multi group big vel yes
neigh_modify include big neigh_modify include big
# no pairwise interactions with small particles # no pairwise interactions with small particles

View File

@ -75,7 +75,7 @@ reset_timestep 0
neighbor 0.3 bin neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes neigh_modify delay 0 every 1 check yes
communicate multi group big vel yes comm_modify mode multi group big vel yes
neigh_modify include big neigh_modify include big
# no pairwise interactions with small particles # no pairwise interactions with small particles

View File

@ -75,7 +75,7 @@ reset_timestep 0
neighbor 0.3 bin neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes neigh_modify delay 0 every 1 check yes
communicate multi group big vel yes comm_modify mode multi group big vel yes
neigh_modify include big neigh_modify include big
# no pairwise interactions with small particles # no pairwise interactions with small particles

View File

@ -38,7 +38,7 @@ neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes neigh_modify delay 0 every 1 check yes
neigh_modify exclude molecule big include big neigh_modify exclude molecule big include big
communicate multi group big vel yes comm_modify mode multi group big vel yes
neigh_modify include big neigh_modify include big
# no pairwise interactions with small particles # no pairwise interactions with small particles

View File

@ -72,7 +72,7 @@ reset_timestep 0
neighbor 0.3 bin neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes neigh_modify delay 0 every 1 check yes
communicate multi group big vel yes comm_modify mode multi group big vel yes
neigh_modify include big neigh_modify include big
# no pairwise interactions with small particles # no pairwise interactions with small particles

View File

@ -72,7 +72,7 @@ reset_timestep 0
neighbor 0.3 bin neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes neigh_modify delay 0 every 1 check yes
communicate multi group big vel yes comm_modify mode multi group big vel yes
neigh_modify include big neigh_modify include big
# no pairwise interactions with small particles # no pairwise interactions with small particles

View File

@ -67,7 +67,7 @@ reset_timestep 0
neighbor 0.3 bin neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes neigh_modify delay 0 every 1 check yes
communicate multi group big vel yes comm_modify mode multi group big vel yes
neigh_modify include big neigh_modify include big
# no pairwise interactions with small particles # no pairwise interactions with small particles

View File

@ -67,7 +67,7 @@ reset_timestep 0
neighbor 0.3 bin neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes neigh_modify delay 0 every 1 check yes
communicate multi group big vel yes comm_modify mode multi group big vel yes
neigh_modify include big neigh_modify include big
# no pairwise interactions with small particles # no pairwise interactions with small particles

View File

@ -37,7 +37,7 @@ neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes neigh_modify delay 0 every 1 check yes
neigh_modify exclude molecule big include big neigh_modify exclude molecule big include big
communicate multi group big vel yes comm_modify mode multi group big vel yes
neigh_modify include big neigh_modify include big
# no pairwise interactions with small particles # no pairwise interactions with small particles

View File

@ -9,6 +9,8 @@ These scripts are provided for illustration purposes. No guarantee is
made that the systems are fully equilibrated or that the runs are long made that the systems are fully equilibrated or that the runs are long
enough to generate good statistics and highly accurate results. enough to generate good statistics and highly accurate results.
These scripts could easily be adapted to work with solids as well.
------------- -------------
These are the 4 methods for computing thermal conductivity. The first These are the 4 methods for computing thermal conductivity. The first

33
examples/MC/README Normal file
View File

@ -0,0 +1,33 @@
This directory has an input script that illustrates how to use LAMMPS
as an energy-evaluation engine in a Monte Carlo (MC) relaxation loop.
It is just an illustration of how to do this for a toy 2d problem, but
the script is fairly sophisticated in its use of variables, looping,
and an if-the-else statement which applies the Boltzmann factor to
accept or reject a trial atomic-displacement move.
The script sets up a perfect 2d hex lattice, then perturbs all
the atom positions to "disorder" the system. It then
loops in the following manner:
pick a random atom and displace it to a random new position
evaluate the change in energy of the system due to
the single-atom displacement
accept or reject the trial move
if accepted, continue to the next iteration
if rejected, restore the atom to its original position
before continuing to the next iteration
The 6 variables at the top of the input script can be adjusted
to play with various MC parameters.
When the script is finished, statistics about the MC procedure
are printed.
Dump file snapshots or images or a movie of the MC relaxation can be
produced by uncommenting the appropriate dump lines in the script.
At some point, we will add a Python script to the python/examples
directory that performs the same operation as this script. It will
invoke LAMMPS as a library and use Python to implement the MC
accept/reject logic more cleanly than the LAMMPS input script can do
it.

119
examples/MC/in.mc Normal file
View File

@ -0,0 +1,119 @@
# Monte Carlo relaxation of perturbed 2d hex lattice
# set these parameters
# make sure neigh skin > 2*deltamove
variable iter loop 3000 # number of Monte Carlo moves
variable deltaperturb equal 0.2 # max size of initial perturbation per dim
variable deltamove equal 0.1 # max size of MC move in one dimension
variable density equal 1.0 # reduced LJ density of atoms on lattice
variable kT equal 0.05 # effective T in Boltzmann factor
variable seed equal 582783 # RNG seed
# problem setup
units lj
atom_style atomic
atom_modify map array sort 0 0.0
dimension 2
lattice hex ${density}
region box block 0 10 0 5 -0.5 0.5
create_box 1 box
create_atoms 1 box
mass 1 1.0
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0 2.5
pair_modify shift yes
neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes
variable e equal pe
# run 0 to get energy of perfect lattice
# emin = minimum energy
run 0
variable emin equal $e
# disorder the system
# estart = initial energy
variable x atom x+v_deltaperturb*random(-1.0,1.0,${seed})
variable y atom y+v_deltaperturb*random(-1.0,1.0,${seed})
set group all x v_x
set group all y v_y
#dump 1 all atom 25 dump.mc
#dump 2 all image 25 image.*.jpg type type &
# zoom 1.6 adiam 1.0
#dump_modify 2 pad 5
#dump 3 all movie 25 movie.mpg type type &
# zoom 1.6 adiam 1.0
#dump_modify 3 pad 5
variable elast equal $e
thermo_style custom step v_emin v_elast pe
run 0
variable estart equal $e
variable elast equal $e
# loop over Monte Carlo moves
variable naccept equal 0
variable increment equal v_naccept+1
variable irandom equal floor(atoms*random(0.0,1.0,${seed})+1)
variable rn equal random(0.0,1.0,${seed})
variable boltzfactor equal "exp(atoms*(v_elast - v_e) / v_kT)"
variable xnew equal x[v_i]+v_deltamove*random(-1.0,1.0,${seed})
variable ynew equal y[v_i]+v_deltamove*random(-1.0,1.0,${seed})
variable xi equal x[v_i]
variable yi equal y[v_i]
label loop
variable i equal ${irandom}
variable x0 equal ${xi}
variable y0 equal ${yi}
set atom $i x ${xnew}
set atom $i y ${ynew}
run 1 pre no post no
if "$e <= ${elast}" then &
"variable elast equal $e" &
"variable naccept equal ${increment}" &
elif "${rn} <= ${boltzfactor}" &
"variable elast equal $e" &
"variable naccept equal ${increment}" &
else &
"set atom $i x ${x0}" &
"set atom $i y ${y0}"
next iter
jump SELF loop
# final energy and stats
variable nb equal nbuild
variable nbuild equal ${nb}
run 0
print "MC stats:"
print " starting energy = ${estart}"
print " final energy = $e"
print " minimum energy of perfect lattice = ${emin}"
print " accepted MC moves = ${naccept}"
print " neighbor list rebuilds = ${nbuild}"

106235
examples/MC/log.mc.6Jun14 Normal file

File diff suppressed because it is too large Load Diff

View File

@ -132,12 +132,19 @@ The ELASTIC directory has an example script for computing elastic
constants, using a zero temperature Si example. See the constants, using a zero temperature Si example. See the
ELASTIC/in.elastic file for more info. ELASTIC/in.elastic file for more info.
The KAPPA directory has an example scripts for computing the thermal The KAPPA directory has example scripts for computing the thermal
conductivity (kappa) of a LJ liquid using 4 different methods. See conductivity (kappa) of a LJ liquid using 4 different methods. See
the KAPPA/README file for more info. the KAPPA/README file for more info.
The MC directory has an example script for using LAMMPS as an
energy-evaluation engine in a iterative Monte Carlo energy-relaxation
loop.
The USER directory contains subdirectories of user-provided example The USER directory contains subdirectories of user-provided example
scripts for ser packages. See the README files in those directories scripts for ser packages. See the README files in those directories
for more info. See the doc/Section_start.html file for more info for more info. See the doc/Section_start.html file for more info
about installing and building user packages. about installing and building user packages.
The VISCOSITY directory has example scripts for computing the
viscosity of a LJ liquid using 4 different methods. See the
VISCOSITY/README file for more info.

View File

@ -12,7 +12,7 @@ read_data data.${sname}
pair_style eff/cut 100.0 pair_style eff/cut 100.0
pair_coeff * * pair_coeff * *
communicate single vel yes comm_modify vel yes
compute effTemp all temp/eff compute effTemp all temp/eff

View File

@ -12,7 +12,7 @@ read_data data.${sname}
pair_style eff/cut 31.6125 pair_style eff/cut 31.6125
pair_coeff * * pair_coeff * *
communicate single vel yes comm_modify vel yes
neigh_modify one 10000 page 100000 neigh_modify one 10000 page 100000

View File

@ -12,7 +12,7 @@ read_data data.${sname}
pair_style eff/cut 100.0 pair_style eff/cut 100.0
pair_coeff * * pair_coeff * *
communicate single vel yes comm_modify vel yes
# Minimize # Minimize
min_style cg min_style cg

View File

@ -12,7 +12,7 @@ read_data data.${sname}
pair_style eff/cut 100.0 pair_style eff/cut 100.0
pair_coeff * * pair_coeff * *
communicate single vel yes comm_modify vel yes
compute effTemp all temp/eff compute effTemp all temp/eff

View File

@ -12,7 +12,7 @@ read_data data.${sname}
pair_style eff/cut 5000.0 0 0 pair_style eff/cut 5000.0 0 0
pair_coeff * * pair_coeff * *
communicate single vel yes comm_modify vel yes
# minimize # minimize
min_style cg min_style cg

View File

@ -12,7 +12,7 @@ read_data data.${sname}
pair_style eff/cut 0.529177249 pair_style eff/cut 0.529177249
pair_coeff * * pair_coeff * *
communicate single vel yes comm_modify vel yes
compute energies all pair eff/cut compute energies all pair eff/cut
variable eke equal c_energies[1] variable eke equal c_energies[1]

View File

@ -12,7 +12,7 @@ read_data data.${sname}
pair_style eff/cut 1.0 pair_style eff/cut 1.0
pair_coeff * * pair_coeff * *
communicate single vel yes comm_modify vel yes
compute energies all pair eff/cut compute energies all pair eff/cut
variable eke equal c_energies[1] variable eke equal c_energies[1]

View File

@ -12,7 +12,7 @@ read_data data.${sname}
pair_style eff/cut 6.447968 pressure/evirials pair_style eff/cut 6.447968 pressure/evirials
pair_coeff * * pair_coeff * *
communicate single vel yes comm_modify vel yes
min_style cg min_style cg
min_modify line quadratic min_modify line quadratic

View File

@ -14,7 +14,7 @@ pair_coeff * *
neigh_modify one 20000 page 200000 neigh_modify one 20000 page 200000
communicate single vel yes comm_modify vel yes
compute effTemp all temp/eff compute effTemp all temp/eff

View File

@ -14,7 +14,7 @@ pair_coeff * *
neigh_modify one 10000 page 100000 neigh_modify one 10000 page 100000
communicate single vel yes comm_modify vel yes
compute effTemp all temp/eff compute effTemp all temp/eff

View File

@ -14,7 +14,7 @@ pair_coeff * *
neigh_modify one 10000 page 100000 neigh_modify one 10000 page 100000
communicate single vel yes comm_modify vel yes
compute peratom all stress/atom NULL compute peratom all stress/atom NULL
compute p all reduce sum c_peratom[1] c_peratom[2] c_peratom[3] compute p all reduce sum c_peratom[1] c_peratom[2] c_peratom[3]

View File

@ -13,7 +13,7 @@ read_restart ${sname}.min.restart2
pair_style eff/cut 50.112 pair_style eff/cut 50.112
pair_coeff * * pair_coeff * *
communicate single vel yes comm_modify vel yes
compute effTemp all temp/eff compute effTemp all temp/eff

View File

@ -13,7 +13,7 @@ read_data data.${sname}
pair_style eff/cut 50.112 pair_style eff/cut 50.112
pair_coeff * * pair_coeff * *
communicate single vel yes comm_modify vel yes
compute effTemp all temp/eff compute effTemp all temp/eff
compute effPress all pressure effTemp compute effPress all pressure effTemp

View File

@ -14,7 +14,7 @@ read_data data.${sname}
pair_style eff/cut 11.049221 limit/eradius pressure/evirials pair_style eff/cut 11.049221 limit/eradius pressure/evirials
pair_coeff * * pair_coeff * *
communicate single vel yes comm_modify vel yes
neigh_modify one 2000 page 20000 neigh_modify one 2000 page 20000

View File

@ -13,7 +13,7 @@ read_data data.${sname}
pair_style eff/cut 20.88 limit/eradius pressure/evirials pair_style eff/cut 20.88 limit/eradius pressure/evirials
pair_coeff * * pair_coeff * *
communicate single vel yes comm_modify vel yes
neigh_modify one 2000 page 20000 neigh_modify one 2000 page 20000

View File

@ -19,10 +19,10 @@ make cuda CUDA=yes -> lmp_cuda
Then the following runs were made. The "->" means that the run Then the following runs were made. The "->" means that the run
produced log.lammps which was then copied to the named log file. produced log.lammps which was then copied to the named log file.
* MPI-only runs * MPI-only (non-KOKKOS) runs
lmp_cpu -k off < in.kokkos -> log.kokkos.date.mpionly.1 lmp_cpu < in.kokkos -> log.kokkos.date.mpionly.1
mpirun -np 4 lmp_cpu -k off < in.kokkos -> log.kokkos.date.mpionly.4 mpirun -np 4 lmp_cpu < in.kokkos -> log.kokkos.date.mpionly.4
* OpenMP threaded runs on CPUs only * OpenMP threaded runs on CPUs only

View File

@ -35,6 +35,7 @@ scripts in the examples sub-directory:
trivial.py read/run a LAMMPS input script thru Python trivial.py read/run a LAMMPS input script thru Python
demo.py invoke various LAMMPS library interface routines demo.py invoke various LAMMPS library interface routines
simple.py mimic operation of couple/simple/simple.cpp in Python simple.py mimic operation of couple/simple/simple.cpp in Python
mc.py Monte Carlo energy relaxation wrapper on LAMMPS
gui.py GUI go/stop/temperature-slider to control LAMMPS gui.py GUI go/stop/temperature-slider to control LAMMPS
plot.py real-time temeperature plot with GnuPlot via Pizza.py plot.py real-time temeperature plot with GnuPlot via Pizza.py
viz_tool.py real-time viz via some viz package viz_tool.py real-time viz via some viz package

22
python/examples/in.mc Normal file
View File

@ -0,0 +1,22 @@
# problem setup for Monte Carlo relaxation of perturbed 2d hex lattice
# same as example/MC/in.mc
units lj
atom_style atomic
atom_modify map array sort 0 0.0
dimension 2
lattice hex 1.0
region box block 0 10 0 5 -0.5 0.5
create_box 1 box
create_atoms 1 box
mass 1 1.0
pair_style lj/cut 2.5
pair_coeff 1 1 1.0 1.0 2.5
pair_modify shift yes
neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes

108
python/examples/mc.py Executable file
View File

@ -0,0 +1,108 @@
#!/usr/bin/env python -i
# preceeding line should have path for Python on your machine
# mc.py
# Purpose: mimic operation of example/MC/in.mc via Python
# Syntax: mc.py in.mc
# in.mc = LAMMPS input script
import sys,random,math
# set these parameters
# make sure neigh skin (in in.mc) > 2*deltamove
nloop = 3000
deltaperturb = 0.2
deltamove = 0.1
kT = 0.05
random.seed(27848)
# parse command line
argv = sys.argv
if len(argv) != 2:
print "Syntax: mc.py in.mc"
sys.exit()
infile = sys.argv[1]
from lammps import lammps
lmp = lammps()
# run infile one line at a time
# just sets up MC problem
lines = open(infile,'r').readlines()
for line in lines: lmp.command(line)
lmp.command("variable e equal pe")
# run 0 to get energy of perfect lattice
# emin = minimum energy
lmp.command("run 0")
natoms = lmp.extract_global("natoms",0)
emin = lmp.extract_compute("thermo_pe",0,0) / natoms
lmp.command("variable emin equal $e")
# disorder the system
# estart = initial energy
x = lmp.extract_atom("x",3)
for i in xrange(natoms):
x[i][0] += deltaperturb * (2*random.random()-1)
x[i][1] += deltaperturb * (2*random.random()-1)
lmp.command("variable elast equal $e")
lmp.command("thermo_style custom step v_emin v_elast pe")
lmp.command("run 0")
x = lmp.extract_atom("x",3)
lmp.command("variable elast equal $e")
estart = lmp.extract_compute("thermo_pe",0,0) / natoms
# loop over Monte Carlo moves
# extract x after every run, in case reneighboring changed ptr in LAMMPS
elast = estart
naccept = 0
for i in xrange(nloop):
iatom = random.randrange(0,natoms)
x0 = x[iatom][0]
y0 = x[iatom][1]
x[iatom][0] += deltamove * (2*random.random()-1)
x[iatom][1] += deltamove * (2*random.random()-1)
lmp.command("run 1 pre no post no")
x = lmp.extract_atom("x",3)
e = lmp.extract_compute("thermo_pe",0,0) / natoms
if e <= elast:
elast = e
lmp.command("variable elast equal $e")
naccept += 1
elif random.random() <= math.exp(natoms*(elast-e)/kT):
elast = e
lmp.command("variable elast equal $e")
naccept += 1
else:
x[iatom][0] = x0
x[iatom][1] = y0
# final energy and stats
lmp.command("variable nbuild equal nbuild")
nbuild = lmp.extract_variable("nbuild",None,0)
lmp.command("run 0")
estop = lmp.extract_compute("thermo_pe",0,0) / natoms
print "MC stats:"
print " starting energy =",estart
print " final energy =",estop
print " minimum energy of perfect lattice =",emin
print " accepted MC moves =",naccept
print " neighbor list rebuilds =",nbuild

View File

@ -86,7 +86,7 @@ Self-explanatory.
E: Pair lubricate requires ghost atoms store velocity E: Pair lubricate requires ghost atoms store velocity
Use the communicate vel yes command to enable this. Use the comm_modify vel yes command to enable this.
E: Pair lubricate requires monodisperse particles E: Pair lubricate requires monodisperse particles

View File

@ -101,7 +101,7 @@ Self-explanatory.
E: Pair lubricateU requires ghost atoms store velocity E: Pair lubricateU requires ghost atoms store velocity
Use the communicate vel yes command to enable this. Use the comm_modify vel yes command to enable this.
E: Pair lubricateU requires monodisperse particles E: Pair lubricateU requires monodisperse particles

View File

@ -66,7 +66,7 @@ Self-explanatory.
E: Pair lubricateU/poly requires ghost atoms store velocity E: Pair lubricateU/poly requires ghost atoms store velocity
Use the communicate vel yes command to enable this. Use the comm_modify vel yes command to enable this.
E: Pair lubricate/poly requires atom style sphere E: Pair lubricate/poly requires atom style sphere

View File

@ -45,7 +45,7 @@ Self-explanatory.
E: Pair lubricate/poly requires ghost atoms store velocity E: Pair lubricate/poly requires ghost atoms store velocity
Use the communicate vel yes command to enable this. Use the comm_modify vel yes command to enable this.
E: Pair lubricate/poly requires atom style sphere E: Pair lubricate/poly requires atom style sphere

View File

@ -93,7 +93,7 @@ Self-explanatory.
E: Pair granular requires ghost atoms store velocity E: Pair granular requires ghost atoms store velocity
Use the communicate vel yes command to enable this. Use the comm_modify vel yes command to enable this.
E: Pair granular with shear history requires newton pair off E: Pair granular with shear history requires newton pair off

File diff suppressed because one or more lines are too long

View File

@ -17,6 +17,7 @@
#include "float.h" #include "float.h"
#include "stdlib.h" #include "stdlib.h"
#include "string.h"
#include "atom_vec_peri.h" #include "atom_vec_peri.h"
#include "atom.h" #include "atom.h"
#include "comm.h" #include "comm.h"
@ -894,6 +895,45 @@ int AtomVecPeri::write_data_hybrid(FILE *fp, double *buf)
return 2; return 2;
} }
/* ----------------------------------------------------------------------
assign an index to named atom property and return index
return -1 if name is unknown to this atom style
------------------------------------------------------------------------- */
int AtomVecPeri::property_atom(char *name)
{
if (strcmp(name,"vfrac") == 0) return 0;
if (strcmp(name,"s0") == 0) return 1;
return -1;
}
/* ----------------------------------------------------------------------
pack per-atom data into buf for ComputePropertyAtom
index maps to data specific to this atom style
------------------------------------------------------------------------- */
void AtomVecPeri::pack_property_atom(int index, double *buf,
int nvalues, int groupbit)
{
int *mask = atom->mask;
int nlocal = atom->nlocal;
int n = 0;
if (index == 0) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = vfrac[i];
else buf[n] = 0.0;
n += nvalues;
}
} else if (index == 1) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = s0[i];
else buf[n] = 0.0;
n += nvalues;
}
}
}
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
return # of bytes of allocated memory return # of bytes of allocated memory
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */

View File

@ -56,6 +56,8 @@ class AtomVecPeri : public AtomVec {
int pack_data_hybrid(int, double *); int pack_data_hybrid(int, double *);
void write_data(FILE *, int, double **); void write_data(FILE *, int, double **);
int write_data_hybrid(FILE *, double *); int write_data_hybrid(FILE *, double *);
int property_atom(char *);
void pack_property_atom(int, double *, int, int);
bigint memory_usage(); bigint memory_usage();
private: private:

View File

@ -276,7 +276,7 @@ Self-explanatory.
E: Fix srd requires ghost atoms store velocity E: Fix srd requires ghost atoms store velocity
Use the communicate vel yes command to enable this. Use the comm_modify vel yes command to enable this.
E: Fix SRD no-slip requires atom attribute torque E: Fix SRD no-slip requires atom attribute torque

View File

@ -17,6 +17,7 @@
#include "math.h" #include "math.h"
#include "stdlib.h" #include "stdlib.h"
#include "string.h"
#include "atom_vec_wavepacket.h" #include "atom_vec_wavepacket.h"
#include "atom.h" #include "atom.h"
#include "comm.h" #include "comm.h"
@ -37,6 +38,7 @@ AtomVecWavepacket::AtomVecWavepacket(LAMMPS *lmp) : AtomVec(lmp)
mass_type = 1; mass_type = 1;
molecular = 0; molecular = 0;
forceclearflag = 1;
size_forward = 4; // coords[3]+radius[1] size_forward = 4; // coords[3]+radius[1]
size_reverse = 10; // force[3]+erforce[1]+ervelforce[1]+vforce[3]+csforce[2] size_reverse = 10; // force[3]+erforce[1]+ervelforce[1]+vforce[3]+csforce[2]
@ -108,7 +110,6 @@ void AtomVecWavepacket::grow_reset()
vforce = atom->vforce; vforce = atom->vforce;
ervelforce = atom->ervelforce; ervelforce = atom->ervelforce;
etag = atom->etag; etag = atom->etag;
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
@ -143,6 +144,13 @@ void AtomVecWavepacket::copy(int i, int j, int delflag)
modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag);
} }
/* ---------------------------------------------------------------------- */
void AtomVecWavepacket::force_clear(int n, size_t nbytes)
{
memset(&erforce[n],0,nbytes);
}
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
// this will be used as partial pack for unsplit Hartree packets (v, ervel not regarded as separate variables) // this will be used as partial pack for unsplit Hartree packets (v, ervel not regarded as separate variables)
@ -1101,6 +1109,59 @@ int AtomVecWavepacket::write_vel_hybrid(FILE *fp, double *buf)
return 1; return 1;
} }
/* ----------------------------------------------------------------------
assign an index to named atom property and return index
return -1 if name is unknown to this atom style
------------------------------------------------------------------------- */
int AtomVecWavepacket::property_atom(char *name)
{
if (strcmp(name,"spin") == 0) return 0;
if (strcmp(name,"eradius") == 0) return 1;
if (strcmp(name,"ervel") == 0) return 2;
if (strcmp(name,"erforce") == 0) return 3;
return -1;
}
/* ----------------------------------------------------------------------
pack per-atom data into buf for ComputePropertyAtom
index maps to data specific to this atom style
------------------------------------------------------------------------- */
void AtomVecWavepacket::pack_property_atom(int index, double *buf,
int nvalues, int groupbit)
{
int *mask = atom->mask;
int nlocal = atom->nlocal;
int n = 0;
if (index == 0) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = spin[i];
else buf[n] = 0.0;
n += nvalues;
}
} else if (index == 1) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = eradius[i];
else buf[n] = 0.0;
n += nvalues;
}
} else if (index == 2) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = ervel[i];
else buf[n] = 0.0;
n += nvalues;
}
} else if (index == 3) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = erforce[i];
else buf[n] = 0.0;
n += nvalues;
}
}
}
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
return # of bytes of allocated memory return # of bytes of allocated memory
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */

View File

@ -36,6 +36,7 @@ public:
void grow(int); void grow(int);
void grow_reset(); void grow_reset();
void copy(int, int, int); void copy(int, int, int);
void force_clear(int, size_t);
int pack_comm(int, int *, double *, int, int *); int pack_comm(int, int *, double *, int, int *);
int pack_comm_vel(int, int *, double *, int, int *); int pack_comm_vel(int, int *, double *, int, int *);
int pack_comm_hybrid(int, int *, double *); int pack_comm_hybrid(int, int *, double *);
@ -70,6 +71,8 @@ public:
int pack_vel_hybrid(int, double *); int pack_vel_hybrid(int, double *);
void write_vel(FILE *, int, double **); void write_vel(FILE *, int, double **);
int write_vel_hybrid(FILE *, double *); int write_vel_hybrid(FILE *, double *);
int property_atom(char *);
void pack_property_atom(int, double *, int, int);
bigint memory_usage(); bigint memory_usage();
private: private:

View File

@ -17,6 +17,7 @@
#include "math.h" #include "math.h"
#include "stdlib.h" #include "stdlib.h"
#include "string.h"
#include "atom_vec_electron.h" #include "atom_vec_electron.h"
#include "atom.h" #include "atom.h"
#include "comm.h" #include "comm.h"
@ -51,6 +52,7 @@ AtomVecElectron::AtomVecElectron(LAMMPS *lmp) : AtomVec(lmp)
mass_type = 1; mass_type = 1;
molecular = 0; molecular = 0;
forceclearflag = 1;
size_forward = 4; size_forward = 4;
size_reverse = 4; size_reverse = 4;
@ -140,6 +142,13 @@ void AtomVecElectron::copy(int i, int j, int delflag)
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
void AtomVecElectron::force_clear(int n, size_t nbytes)
{
memset(&erforce[n],0,nbytes);
}
/* ---------------------------------------------------------------------- */
int AtomVecElectron::pack_comm(int n, int *list, double *buf, int AtomVecElectron::pack_comm(int n, int *list, double *buf,
int pbc_flag, int *pbc) int pbc_flag, int *pbc)
{ {
@ -964,6 +973,59 @@ int AtomVecElectron::write_vel_hybrid(FILE *fp, double *buf)
return 1; return 1;
} }
/* ----------------------------------------------------------------------
assign an index to named atom property and return index
return -1 if name is unknown to this atom style
------------------------------------------------------------------------- */
int AtomVecElectron::property_atom(char *name)
{
if (strcmp(name,"spin") == 0) return 0;
if (strcmp(name,"eradius") == 0) return 1;
if (strcmp(name,"ervel") == 0) return 2;
if (strcmp(name,"erforce") == 0) return 3;
return -1;
}
/* ----------------------------------------------------------------------
pack per-atom data into buf for ComputePropertyAtom
index maps to data specific to this atom style
------------------------------------------------------------------------- */
void AtomVecElectron::pack_property_atom(int index, double *buf,
int nvalues, int groupbit)
{
int *mask = atom->mask;
int nlocal = atom->nlocal;
int n = 0;
if (index == 0) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = spin[i];
else buf[n] = 0.0;
n += nvalues;
}
} else if (index == 1) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = eradius[i];
else buf[n] = 0.0;
n += nvalues;
}
} else if (index == 2) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = ervel[i];
else buf[n] = 0.0;
n += nvalues;
}
} else if (index == 3) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = erforce[i];
else buf[n] = 0.0;
n += nvalues;
}
}
}
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
return # of bytes of allocated memory return # of bytes of allocated memory
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */

View File

@ -31,6 +31,7 @@ class AtomVecElectron : public AtomVec {
void grow(int); void grow(int);
void grow_reset(); void grow_reset();
void copy(int, int, int); void copy(int, int, int);
void force_clear(int, size_t);
int pack_comm(int, int *, double *, int, int *); int pack_comm(int, int *, double *, int, int *);
int pack_comm_vel(int, int *, double *, int, int *); int pack_comm_vel(int, int *, double *, int, int *);
int pack_comm_hybrid(int, int *, double *); int pack_comm_hybrid(int, int *, double *);
@ -65,6 +66,8 @@ class AtomVecElectron : public AtomVec {
int pack_vel_hybrid(int, double *); int pack_vel_hybrid(int, double *);
void write_vel(FILE *, int, double **); void write_vel(FILE *, int, double **);
int write_vel_hybrid(FILE *, double *); int write_vel_hybrid(FILE *, double *);
int property_atom(char *);
void pack_property_atom(int, double *, int, int);
bigint memory_usage(); bigint memory_usage();
private: private:

View File

@ -11,6 +11,7 @@
See the README file in the top-level LAMMPS directory. See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
#include "string.h"
#include "stdlib.h" #include "stdlib.h"
#include "atom_vec_meso.h" #include "atom_vec_meso.h"
#include "atom.h" #include "atom.h"
@ -29,6 +30,7 @@ AtomVecMeso::AtomVecMeso(LAMMPS *lmp) : AtomVec(lmp)
{ {
molecular = 0; molecular = 0;
mass_type = 1; mass_type = 1;
forceclearflag = 1;
comm_x_only = 0; // we communicate not only x forward but also vest ... comm_x_only = 0; // we communicate not only x forward but also vest ...
comm_f_only = 0; // we also communicate de and drho in reverse direction comm_f_only = 0; // we also communicate de and drho in reverse direction
@ -131,6 +133,14 @@ void AtomVecMeso::copy(int i, int j, int delflag) {
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
void AtomVecMeso::force_clear(int n, size_t nbytes)
{
memset(&de[n],0,nbytes);
memset(&drho[n],0,nbytes);
}
/* ---------------------------------------------------------------------- */
int AtomVecMeso::pack_comm_hybrid(int n, int *list, double *buf) { int AtomVecMeso::pack_comm_hybrid(int n, int *list, double *buf) {
//printf("in AtomVecMeso::pack_comm_hybrid\n"); //printf("in AtomVecMeso::pack_comm_hybrid\n");
int i, j, m; int i, j, m;
@ -933,6 +943,66 @@ int AtomVecMeso::write_data_hybrid(FILE *fp, double *buf)
return 3; return 3;
} }
/* ----------------------------------------------------------------------
assign an index to named atom property and return index
return -1 if name is unknown to this atom style
------------------------------------------------------------------------- */
int AtomVecMeso::property_atom(char *name)
{
if (strcmp(name,"rho") == 0) return 0;
if (strcmp(name,"drho") == 0) return 1;
if (strcmp(name,"e") == 0) return 2;
if (strcmp(name,"de") == 0) return 3;
if (strcmp(name,"cv") == 0) return 4;
return -1;
}
/* ----------------------------------------------------------------------
pack per-atom data into buf for ComputePropertyAtom
index maps to data specific to this atom style
------------------------------------------------------------------------- */
void AtomVecMeso::pack_property_atom(int index, double *buf,
int nvalues, int groupbit)
{
int *mask = atom->mask;
int nlocal = atom->nlocal;
int n = 0;
if (index == 0) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = rho[i];
else buf[n] = 0.0;
n += nvalues;
}
} else if (index == 1) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = drho[i];
else buf[n] = 0.0;
n += nvalues;
}
} else if (index == 2) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = e[i];
else buf[n] = 0.0;
n += nvalues;
}
} else if (index == 3) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = de[i];
else buf[n] = 0.0;
n += nvalues;
}
} else if (index == 4) {
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = cv[i];
else buf[n] = 0.0;
n += nvalues;
}
}
}
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
return # of bytes of allocated memory return # of bytes of allocated memory
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */

View File

@ -31,6 +31,7 @@ class AtomVecMeso : public AtomVec {
void grow(int); void grow(int);
void grow_reset(); void grow_reset();
void copy(int, int, int); void copy(int, int, int);
void force_clear(int, size_t);
int pack_comm(int, int *, double *, int, int *); int pack_comm(int, int *, double *, int, int *);
int pack_comm_vel(int, int *, double *, int, int *); int pack_comm_vel(int, int *, double *, int, int *);
void unpack_comm(int, int, double *); void unpack_comm(int, int, double *);
@ -59,6 +60,8 @@ class AtomVecMeso : public AtomVec {
int pack_data_hybrid(int, double *); int pack_data_hybrid(int, double *);
void write_data(FILE *, int, double **); void write_data(FILE *, int, double **);
int write_data_hybrid(FILE *, double *); int write_data_hybrid(FILE *, double *);
int property_atom(char *);
void pack_property_atom(int, double *, int, int);
bigint memory_usage(); bigint memory_usage();
private: private:

View File

@ -54,6 +54,7 @@ int FixMeso::setmask() {
int mask = 0; int mask = 0;
mask |= INITIAL_INTEGRATE; mask |= INITIAL_INTEGRATE;
mask |= FINAL_INTEGRATE; mask |= FINAL_INTEGRATE;
mask |= PRE_FORCE;
return mask; return mask;
} }
@ -64,6 +65,25 @@ void FixMeso::init() {
dtf = 0.5 * update->dt * force->ftm2v; dtf = 0.5 * update->dt * force->ftm2v;
} }
void FixMeso::setup_pre_force(int vflag)
{
// set vest equal to v
double **v = atom->v;
double **vest = atom->vest;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (igroup == atom->firstgroup)
nlocal = atom->nfirst;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) {
vest[i][0] = v[i][0];
vest[i][1] = v[i][1];
vest[i][2] = v[i][2];
}
}
}
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
allow for both per-type and per-atom mass allow for both per-type and per-atom mass
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */

View File

@ -29,6 +29,7 @@ class FixMeso : public Fix {
FixMeso(class LAMMPS *, int, char **); FixMeso(class LAMMPS *, int, char **);
int setmask(); int setmask();
virtual void init(); virtual void init();
virtual void setup_pre_force(int);
virtual void initial_integrate(int); virtual void initial_integrate(int);
virtual void final_integrate(); virtual void final_integrate();
void reset_dt(); void reset_dt();

View File

@ -79,16 +79,17 @@ Atom::Atom(LAMMPS *lmp) : Pointers(lmp)
mu = NULL; mu = NULL;
omega = angmom = torque = NULL; omega = angmom = torque = NULL;
radius = rmass = NULL; radius = rmass = NULL;
ellipsoid = line = tri = body = NULL;
vfrac = s0 = NULL; vfrac = s0 = NULL;
x0 = NULL; x0 = NULL;
ellipsoid = line = tri = body = NULL;
spin = NULL; spin = NULL;
eradius = ervel = erforce = NULL; eradius = ervel = erforce = NULL;
cs = csforce = vforce = ervelforce = NULL; cs = csforce = vforce = ervelforce = NULL;
etag = NULL; etag = NULL;
rho = drho = NULL;
e = de = NULL; rho = drho = e = de = cv = NULL;
cv = NULL;
vest = NULL; vest = NULL;
bond_per_atom = extra_bond_per_atom = 0; bond_per_atom = extra_bond_per_atom = 0;
@ -130,14 +131,19 @@ Atom::Atom(LAMMPS *lmp) : Pointers(lmp)
// initialize atom style and array existence flags // initialize atom style and array existence flags
// customize by adding new flag // customize by adding new flag
sphere_flag = ellipsoid_flag = line_flag = tri_flag = body_flag = 0; sphere_flag = peri_flag = electron_flag = 0;
peri_flag = electron_flag = 0;
wavepacket_flag = sph_flag = 0; wavepacket_flag = sph_flag = 0;
molecule_flag = q_flag = mu_flag = 0; molecule_flag = 0;
rmass_flag = radius_flag = omega_flag = torque_flag = angmom_flag = 0; q_flag = mu_flag = 0;
vfrac_flag = spin_flag = eradius_flag = ervel_flag = erforce_flag = 0; omega_flag = torque_flag = angmom_flag = 0;
cs_flag = csforce_flag = vforce_flag = ervelforce_flag= etag_flag = 0; radius_flag = rmass_flag = 0;
ellipsoid_flag = line_flag = tri_flag = body_flag = 0;
vfrac_flag = 0;
spin_flag = eradius_flag = ervel_flag = erforce_flag = ervelforce_flag = 0;
cs_flag = csforce_flag = vforce_flag = etag_flag = 0;
rho_flag = e_flag = cv_flag = vest_flag = 0; rho_flag = e_flag = cv_flag = vest_flag = 0;
// Peridynamic scale factor // Peridynamic scale factor
@ -200,6 +206,10 @@ Atom::~Atom()
memory->destroy(v); memory->destroy(v);
memory->destroy(f); memory->destroy(f);
memory->destroy(molecule);
memory->destroy(molindex);
memory->destroy(molatom);
memory->destroy(q); memory->destroy(q);
memory->destroy(mu); memory->destroy(mu);
memory->destroy(omega); memory->destroy(omega);
@ -207,21 +217,31 @@ Atom::~Atom()
memory->destroy(torque); memory->destroy(torque);
memory->destroy(radius); memory->destroy(radius);
memory->destroy(rmass); memory->destroy(rmass);
memory->destroy(vfrac);
memory->destroy(s0);
memory->destroy(x0);
memory->destroy(ellipsoid); memory->destroy(ellipsoid);
memory->destroy(line); memory->destroy(line);
memory->destroy(tri); memory->destroy(tri);
memory->destroy(body); memory->destroy(body);
memory->destroy(vfrac);
memory->destroy(s0);
memory->destroy(x0);
memory->destroy(spin); memory->destroy(spin);
memory->destroy(eradius); memory->destroy(eradius);
memory->destroy(ervel); memory->destroy(ervel);
memory->destroy(erforce); memory->destroy(erforce);
memory->destroy(ervelforce);
memory->destroy(cs);
memory->destroy(csforce);
memory->destroy(vforce);
memory->destroy(etag);
memory->destroy(molecule); memory->destroy(rho);
memory->destroy(molindex); memory->destroy(drho);
memory->destroy(molatom); memory->destroy(e);
memory->destroy(de);
memory->destroy(cv);
memory->destroy(vest);
memory->destroy(nspecial); memory->destroy(nspecial);
memory->destroy(special); memory->destroy(special);
@ -250,11 +270,6 @@ Atom::~Atom()
memory->destroy(improper_atom3); memory->destroy(improper_atom3);
memory->destroy(improper_atom4); memory->destroy(improper_atom4);
// delete user-defined molecules
for (int i = 0; i < nmolecule; i++) delete molecules[i];
memory->sfree(molecules);
// delete custom atom arrays // delete custom atom arrays
for (int i = 0; i < nivector; i++) { for (int i = 0; i < nivector; i++) {
@ -271,6 +286,11 @@ Atom::~Atom()
memory->sfree(ivector); memory->sfree(ivector);
memory->sfree(dvector); memory->sfree(dvector);
// delete user-defined molecules
for (int i = 0; i < nmolecule; i++) delete molecules[i];
memory->sfree(molecules);
// delete per-type arrays // delete per-type arrays
delete [] mass; delete [] mass;
@ -320,12 +340,20 @@ void Atom::create_avec(const char *style, int narg, char **arg, char *suffix)
// may have been set by old avec // may have been set by old avec
// customize by adding new flag // customize by adding new flag
sphere_flag = ellipsoid_flag = line_flag = tri_flag = 0; sphere_flag = peri_flag = electron_flag = 0;
peri_flag = electron_flag = 0; wavepacket_flag = sph_flag = 0;
molecule_flag = q_flag = mu_flag = 0; molecule_flag = 0;
rmass_flag = radius_flag = omega_flag = torque_flag = angmom_flag = 0; q_flag = mu_flag = 0;
vfrac_flag = spin_flag = eradius_flag = ervel_flag = erforce_flag = 0; omega_flag = torque_flag = angmom_flag = 0;
radius_flag = rmass_flag = 0;
ellipsoid_flag = line_flag = tri_flag = body_flag = 0;
vfrac_flag = 0;
spin_flag = eradius_flag = ervel_flag = erforce_flag = ervelforce_flag = 0;
cs_flag = csforce_flag = vforce_flag = etag_flag = 0;
rho_flag = e_flag = cv_flag = vest_flag = 0;
// create instance of AtomVec // create instance of AtomVec
// use grow() to initialize atom-based arrays to length 1 // use grow() to initialize atom-based arrays to length 1
@ -1867,12 +1895,34 @@ void *Atom::extract(char *name)
if (strcmp(name,"q") == 0) return (void *) q; if (strcmp(name,"q") == 0) return (void *) q;
if (strcmp(name,"mu") == 0) return (void *) mu; if (strcmp(name,"mu") == 0) return (void *) mu;
if (strcmp(name,"omega") == 0) return (void *) omega; if (strcmp(name,"omega") == 0) return (void *) omega;
if (strcmp(name,"amgmom") == 0) return (void *) angmom; if (strcmp(name,"angmom") == 0) return (void *) angmom;
if (strcmp(name,"torque") == 0) return (void *) torque; if (strcmp(name,"torque") == 0) return (void *) torque;
if (strcmp(name,"radius") == 0) return (void *) radius; if (strcmp(name,"radius") == 0) return (void *) radius;
if (strcmp(name,"rmass") == 0) return (void *) rmass; if (strcmp(name,"rmass") == 0) return (void *) rmass;
if (strcmp(name,"ellipsoid") == 0) return (void *) ellipsoid;
if (strcmp(name,"line") == 0) return (void *) line;
if (strcmp(name,"tri") == 0) return (void *) tri;
if (strcmp(name,"vfrac") == 0) return (void *) vfrac; if (strcmp(name,"vfrac") == 0) return (void *) vfrac;
if (strcmp(name,"s0") == 0) return (void *) s0; if (strcmp(name,"s0") == 0) return (void *) s0;
if (strcmp(name,"x0") == 0) return (void *) x0;
if (strcmp(name,"spin") == 0) return (void *) spin;
if (strcmp(name,"eradius") == 0) return (void *) eradius;
if (strcmp(name,"ervel") == 0) return (void *) ervel;
if (strcmp(name,"erforce") == 0) return (void *) erforce;
if (strcmp(name,"ervelforce") == 0) return (void *) ervelforce;
if (strcmp(name,"cs") == 0) return (void *) cs;
if (strcmp(name,"csforce") == 0) return (void *) csforce;
if (strcmp(name,"vforce") == 0) return (void *) vforce;
if (strcmp(name,"etag") == 0) return (void *) etag;
if (strcmp(name,"rho") == 0) return (void *) rho;
if (strcmp(name,"drho") == 0) return (void *) drho;
if (strcmp(name,"e") == 0) return (void *) e;
if (strcmp(name,"de") == 0) return (void *) de;
if (strcmp(name,"cv") == 0) return (void *) cv;
if (strcmp(name,"vest") == 0) return (void *) vest;
return NULL; return NULL;
} }

View File

@ -53,19 +53,28 @@ class Atom : protected Pointers {
tagint *molecule; tagint *molecule;
int *molindex,*molatom; int *molindex,*molatom;
double *q,**mu; double *q,**mu;
double **omega,**angmom,**torque; double **omega,**angmom,**torque;
double *radius,*rmass,*vfrac,*s0; double *radius,*rmass;
double **x0;
int *ellipsoid,*line,*tri,*body; int *ellipsoid,*line,*tri,*body;
// PERI package
double *vfrac,*s0;
double **x0;
// USER-EFF and USER-AWPMD packages
int *spin; int *spin;
double *eradius,*ervel,*erforce,*ervelforce; double *eradius,*ervel,*erforce,*ervelforce;
double *cs,*csforce,*vforce; double *cs,*csforce,*vforce;
int *etag; int *etag;
double *rho,*drho;
double *e,*de; // USER-SPH package
double *rho,*drho,*e,*de,*cv;
double **vest; double **vest;
double *cv;
int **nspecial; // 0,1,2 = cummulative # of 1-2,1-3,1-4 neighs int **nspecial; // 0,1,2 = cummulative # of 1-2,1-3,1-4 neighs
tagint **special; // IDs of 1-2,1-3,1-4 neighs of each atom tagint **special; // IDs of 1-2,1-3,1-4 neighs of each atom

View File

@ -31,6 +31,7 @@ AtomVec::AtomVec(LAMMPS *lmp) : Pointers(lmp)
nmax = 0; nmax = 0;
bonds_allow = angles_allow = dihedrals_allow = impropers_allow = 0; bonds_allow = angles_allow = dihedrals_allow = impropers_allow = 0;
mass_type = dipole_type = 0; mass_type = dipole_type = 0;
forceclearflag = 0;
size_data_bonus = 0; size_data_bonus = 0;
cudable = kokkosable = 0; cudable = kokkosable = 0;

View File

@ -26,6 +26,7 @@ class AtomVec : protected Pointers {
int dihedrals_allow,impropers_allow; // 1 if dihedrals, impropers used int dihedrals_allow,impropers_allow; // 1 if dihedrals, impropers used
int mass_type; // 1 if per-type masses int mass_type; // 1 if per-type masses
int dipole_type; // 1 if per-type dipole moments int dipole_type; // 1 if per-type dipole moments
int forceclearflag; // 1 if has forceclear() method
int comm_x_only; // 1 if only exchange x in forward comm int comm_x_only; // 1 if only exchange x in forward comm
int comm_f_only; // 1 if only exchange f in reverse comm int comm_f_only; // 1 if only exchange f in reverse comm
@ -59,6 +60,7 @@ class AtomVec : protected Pointers {
virtual void grow_reset() = 0; virtual void grow_reset() = 0;
virtual void copy(int, int, int) = 0; virtual void copy(int, int, int) = 0;
virtual void clear_bonus() {} virtual void clear_bonus() {}
virtual void force_clear(int, size_t) {}
virtual int pack_comm(int, int *, double *, int, int *) = 0; virtual int pack_comm(int, int *, double *, int, int *) = 0;
virtual int pack_comm_vel(int, int *, double *, int, int *) = 0; virtual int pack_comm_vel(int, int *, double *, int, int *) = 0;
@ -111,6 +113,9 @@ class AtomVec : protected Pointers {
void write_dihedral(FILE *, int, tagint **, int); void write_dihedral(FILE *, int, tagint **, int);
void pack_improper(tagint **); void pack_improper(tagint **);
void write_improper(FILE *, int, tagint **, int); void write_improper(FILE *, int, tagint **, int);
virtual int property_atom(char *) {return -1;}
virtual void pack_property_atom(int, double *, int, int) {}
virtual bigint memory_usage() = 0; virtual bigint memory_usage() = 0;

View File

@ -107,6 +107,8 @@ void AtomVecHybrid::process_args(int narg, char **arg)
impropers_allow = MAX(impropers_allow,styles[k]->impropers_allow); impropers_allow = MAX(impropers_allow,styles[k]->impropers_allow);
mass_type = MAX(mass_type,styles[k]->mass_type); mass_type = MAX(mass_type,styles[k]->mass_type);
dipole_type = MAX(dipole_type,styles[k]->dipole_type); dipole_type = MAX(dipole_type,styles[k]->dipole_type);
forceclearflag = MAX(forceclearflag,styles[k]->forceclearflag);
if (styles[k]->molecular == 2) onemols = styles[k]->onemols; if (styles[k]->molecular == 2) onemols = styles[k]->onemols;
comm_x_only = MIN(comm_x_only,styles[k]->comm_x_only); comm_x_only = MIN(comm_x_only,styles[k]->comm_x_only);
@ -203,6 +205,14 @@ void AtomVecHybrid::clear_bonus()
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
void AtomVecHybrid::force_clear(int n, size_t nbytes)
{
for (int k = 0; k < nstyles; k++)
if (styles[k]->forceclearflag) styles[k]->force_clear(n,nbytes);
}
/* ---------------------------------------------------------------------- */
int AtomVecHybrid::pack_comm(int n, int *list, double *buf, int AtomVecHybrid::pack_comm(int n, int *list, double *buf,
int pbc_flag, int *pbc) int pbc_flag, int *pbc)
{ {
@ -994,6 +1004,34 @@ void AtomVecHybrid::write_vel(FILE *fp, int n, double **buf)
} }
} }
/* ----------------------------------------------------------------------
assign an index to named atom property and return index
returned value encodes which sub-style and index returned by sub-style
return -1 if name is unknown to any sub-styles
------------------------------------------------------------------------- */
int AtomVecHybrid::property_atom(char *name)
{
for (int k = 0; k < nstyles; k++) {
int index = styles[k]->property_atom(name);
if (index >= 0) return index*nstyles + k;
}
return -1;
}
/* ----------------------------------------------------------------------
pack per-atom data into buf for ComputePropertyAtom
index maps to data specific to this atom style
------------------------------------------------------------------------- */
void AtomVecHybrid::pack_property_atom(int multiindex, double *buf,
int nvalues, int groupbit)
{
int k = multiindex % nstyles;
int index = multiindex/nstyles;
styles[k]->pack_property_atom(index,buf,nvalues,groupbit);
}
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
allstyles = list of all atom styles in this LAMMPS executable allstyles = list of all atom styles in this LAMMPS executable
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */

View File

@ -39,6 +39,7 @@ class AtomVecHybrid : public AtomVec {
void grow_reset(); void grow_reset();
void copy(int, int, int); void copy(int, int, int);
void clear_bonus(); void clear_bonus();
void force_clear(int, size_t);
int pack_comm(int, int *, double *, int, int *); int pack_comm(int, int *, double *, int, int *);
int pack_comm_vel(int, int *, double *, int, int *); int pack_comm_vel(int, int *, double *, int, int *);
void unpack_comm(int, int, double *); void unpack_comm(int, int, double *);
@ -62,6 +63,8 @@ class AtomVecHybrid : public AtomVec {
void write_data(FILE *, int, double **); void write_data(FILE *, int, double **);
void pack_vel(double **); void pack_vel(double **);
void write_vel(FILE *, int, double **); void write_vel(FILE *, int, double **);
int property_atom(char *);
void pack_property_atom(int, double *, int, int);
bigint memory_usage(); bigint memory_usage();
private: private:

View File

@ -16,6 +16,7 @@
#include "compute_property_atom.h" #include "compute_property_atom.h"
#include "math_extra.h" #include "math_extra.h"
#include "atom.h" #include "atom.h"
#include "atom_vec.h"
#include "atom_vec_ellipsoid.h" #include "atom_vec_ellipsoid.h"
#include "atom_vec_line.h" #include "atom_vec_line.h"
#include "atom_vec_tri.h" #include "atom_vec_tri.h"
@ -239,27 +240,6 @@ ComputePropertyAtom::ComputePropertyAtom(LAMMPS *lmp, int narg, char **arg) :
"atom property that isn't allocated"); "atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_tqz; pack_choice[i] = &ComputePropertyAtom::pack_tqz;
} else if (strcmp(arg[iarg],"spin") == 0) {
if (!atom->spin_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_spin;
} else if (strcmp(arg[iarg],"eradius") == 0) {
if (!atom->eradius_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_eradius;
} else if (strcmp(arg[iarg],"ervel") == 0) {
if (!atom->ervel_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_ervel;
} else if (strcmp(arg[iarg],"erforce") == 0) {
if (!atom->erforce_flag)
error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_erforce;
} else if (strcmp(arg[iarg],"end1x") == 0) { } else if (strcmp(arg[iarg],"end1x") == 0) {
avec_line = (AtomVecLine *) atom->style_match("line"); avec_line = (AtomVecLine *) atom->style_match("line");
if (!avec_line) error->all(FLERR,"Compute property/atom for " if (!avec_line) error->all(FLERR,"Compute property/atom for "
@ -342,6 +322,7 @@ ComputePropertyAtom::ComputePropertyAtom(LAMMPS *lmp, int narg, char **arg) :
error->all(FLERR,"Compute property/atom for " error->all(FLERR,"Compute property/atom for "
"atom property that isn't allocated"); "atom property that isn't allocated");
pack_choice[i] = &ComputePropertyAtom::pack_nbonds; pack_choice[i] = &ComputePropertyAtom::pack_nbonds;
} else if (strstr(arg[iarg],"i_") == arg[iarg]) { } else if (strstr(arg[iarg],"i_") == arg[iarg]) {
int flag; int flag;
index[i] = atom->find_custom(&arg[iarg][2],flag); index[i] = atom->find_custom(&arg[iarg][2],flag);
@ -357,7 +338,14 @@ ComputePropertyAtom::ComputePropertyAtom(LAMMPS *lmp, int narg, char **arg) :
"vector does not exist"); "vector does not exist");
pack_choice[i] = &ComputePropertyAtom::pack_dname; pack_choice[i] = &ComputePropertyAtom::pack_dname;
} else error->all(FLERR,"Invalid keyword in compute property/atom command"); // check if atom style recognizes keyword
} else {
index[i] = atom->avec->property_atom(arg[iarg]);
if (index[i] < 0)
error->all(FLERR,"Invalid keyword in compute property/atom command");
pack_choice[i] = &ComputePropertyAtom::pack_property_atom;
}
} }
nmax = 0; nmax = 0;
@ -1341,66 +1329,6 @@ void ComputePropertyAtom::pack_tqz(int n)
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_spin(int n)
{
int *spin = atom->spin;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = spin[i];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_eradius(int n)
{
double *eradius = atom->eradius;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = eradius[i];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_ervel(int n)
{
double *ervel = atom->ervel;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = ervel[i];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_erforce(int n)
{
double *erforce = atom->erforce;
int *mask = atom->mask;
int nlocal = atom->nlocal;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & groupbit) buf[n] = erforce[i];
else buf[n] = 0.0;
n += nvalues;
}
}
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_end1x(int n) void ComputePropertyAtom::pack_end1x(int n)
{ {
AtomVecLine::Bonus *bonus = avec_line->bonus; AtomVecLine::Bonus *bonus = avec_line->bonus;
@ -1734,3 +1662,10 @@ void ComputePropertyAtom::pack_dname(int n)
n += nvalues; n += nvalues;
} }
} }
/* ---------------------------------------------------------------------- */
void ComputePropertyAtom::pack_property_atom(int n)
{
atom->avec->pack_property_atom(index[n],&buf[n],nvalues,groupbit);
}

View File

@ -101,10 +101,6 @@ class ComputePropertyAtom : public Compute {
void pack_tqx(int); void pack_tqx(int);
void pack_tqy(int); void pack_tqy(int);
void pack_tqz(int); void pack_tqz(int);
void pack_spin(int);
void pack_eradius(int);
void pack_ervel(int);
void pack_erforce(int);
void pack_end1x(int); void pack_end1x(int);
void pack_end1y(int); void pack_end1y(int);
void pack_end1z(int); void pack_end1z(int);
@ -125,6 +121,8 @@ class ComputePropertyAtom : public Compute {
void pack_iname(int); void pack_iname(int);
void pack_dname(int); void pack_dname(int);
void pack_property_atom(int);
}; };
} }

View File

@ -41,7 +41,7 @@ enum{ID,MOL,TYPE,ELEMENT,MASS,
VX,VY,VZ,FX,FY,FZ, VX,VY,VZ,FX,FY,FZ,
Q,MUX,MUY,MUZ,MU,RADIUS,DIAMETER, Q,MUX,MUY,MUZ,MU,RADIUS,DIAMETER,
OMEGAX,OMEGAY,OMEGAZ,ANGMOMX,ANGMOMY,ANGMOMZ, OMEGAX,OMEGAY,OMEGAZ,ANGMOMX,ANGMOMY,ANGMOMZ,
TQX,TQY,TQZ,SPIN,ERADIUS,ERVEL,ERFORCE, TQX,TQY,TQZ,
COMPUTE,FIX,VARIABLE}; COMPUTE,FIX,VARIABLE};
enum{LT,LE,GT,GE,EQ,NEQ}; enum{LT,LE,GT,GE,EQ,NEQ};
enum{INT,DOUBLE,STRING,BIGINT}; // same as in DumpCFG enum{INT,DOUBLE,STRING,BIGINT}; // same as in DumpCFG
@ -804,33 +804,6 @@ int DumpCustom::count()
ptr = &atom->torque[0][2]; ptr = &atom->torque[0][2];
nstride = 3; nstride = 3;
} else if (thresh_array[ithresh] == SPIN) {
if (!atom->spin_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
int *spin = atom->spin;
for (i = 0; i < nlocal; i++) dchoose[i] = spin[i];
ptr = dchoose;
nstride = 1;
} else if (thresh_array[ithresh] == ERADIUS) {
if (!atom->eradius_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = atom->eradius;
nstride = 1;
} else if (thresh_array[ithresh] == ERVEL) {
if (!atom->ervel_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = atom->ervel;
nstride = 1;
} else if (thresh_array[ithresh] == ERFORCE) {
if (!atom->erforce_flag)
error->all(FLERR,
"Threshhold for an atom property that isn't allocated");
ptr = atom->erforce;
nstride = 1;
} else if (thresh_array[ithresh] == COMPUTE) { } else if (thresh_array[ithresh] == COMPUTE) {
i = nfield + ithresh; i = nfield + ithresh;
if (argindex[i] == 0) { if (argindex[i] == 0) {
@ -1171,27 +1144,6 @@ int DumpCustom::parse_fields(int narg, char **arg)
pack_choice[i] = &DumpCustom::pack_tqz; pack_choice[i] = &DumpCustom::pack_tqz;
vtype[i] = DOUBLE; vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"spin") == 0) {
if (!atom->spin_flag)
error->all(FLERR,"Dumping an atom quantity that isn't allocated");
pack_choice[i] = &DumpCustom::pack_spin;
vtype[i] = INT;
} else if (strcmp(arg[iarg],"eradius") == 0) {
if (!atom->eradius_flag)
error->all(FLERR,"Dumping an atom quantity that isn't allocated");
pack_choice[i] = &DumpCustom::pack_eradius;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"ervel") == 0) {
if (!atom->ervel_flag)
error->all(FLERR,"Dumping an atom quantity that isn't allocated");
pack_choice[i] = &DumpCustom::pack_ervel;
vtype[i] = DOUBLE;
} else if (strcmp(arg[iarg],"erforce") == 0) {
if (!atom->erforce_flag)
error->all(FLERR,"Dumping an atom quantity that isn't allocated");
pack_choice[i] = &DumpCustom::pack_erforce;
vtype[i] = DOUBLE;
// compute value = c_ID // compute value = c_ID
// if no trailing [], then arg is set to 0, else arg is int between [] // if no trailing [], then arg is set to 0, else arg is int between []
@ -1506,11 +1458,6 @@ int DumpCustom::modify_param(int narg, char **arg)
else if (strcmp(arg[1],"tqy") == 0) thresh_array[nthresh] = TQY; else if (strcmp(arg[1],"tqy") == 0) thresh_array[nthresh] = TQY;
else if (strcmp(arg[1],"tqz") == 0) thresh_array[nthresh] = TQZ; else if (strcmp(arg[1],"tqz") == 0) thresh_array[nthresh] = TQZ;
else if (strcmp(arg[1],"spin") == 0) thresh_array[nthresh] = SPIN;
else if (strcmp(arg[1],"eradius") == 0) thresh_array[nthresh] = ERADIUS;
else if (strcmp(arg[1],"ervel") == 0) thresh_array[nthresh] = ERVEL;
else if (strcmp(arg[1],"erforce") == 0) thresh_array[nthresh] = ERFORCE;
// compute value = c_ID // compute value = c_ID
// if no trailing [], then arg is set to 0, else arg is between [] // if no trailing [], then arg is set to 0, else arg is between []
// must grow field2index and argindex arrays, since access is beyond nfield // must grow field2index and argindex arrays, since access is beyond nfield
@ -2418,51 +2365,3 @@ void DumpCustom::pack_tqz(int n)
n += size_one; n += size_one;
} }
} }
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_spin(int n)
{
int *spin = atom->spin;
for (int i = 0; i < nchoose; i++) {
buf[n] = spin[clist[i]];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_eradius(int n)
{
double *eradius = atom->eradius;
for (int i = 0; i < nchoose; i++) {
buf[n] = eradius[clist[i]];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_ervel(int n)
{
double *ervel = atom->ervel;
for (int i = 0; i < nchoose; i++) {
buf[n] = ervel[clist[i]];
n += size_one;
}
}
/* ---------------------------------------------------------------------- */
void DumpCustom::pack_erforce(int n)
{
double *erforce = atom->erforce;
for (int i = 0; i < nchoose; i++) {
buf[n] = erforce[clist[i]];
n += size_one;
}
}

View File

@ -168,10 +168,6 @@ class DumpCustom : public Dump {
void pack_tqx(int); void pack_tqx(int);
void pack_tqy(int); void pack_tqy(int);
void pack_tqz(int); void pack_tqz(int);
void pack_spin(int);
void pack_eradius(int);
void pack_ervel(int);
void pack_erforce(int);
}; };
} }

View File

@ -83,8 +83,8 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator)
int logflag = 0; int logflag = 0;
int partscreenflag = 0; int partscreenflag = 0;
int partlogflag = 0; int partlogflag = 0;
int cudaflag = -1; int cudaflag = 0;
int kokkosflag = -1; int kokkosflag = 0;
int restartflag = 0; int restartflag = 0;
int citeflag = 1; int citeflag = 1;
int helpflag = 0; int helpflag = 0;
@ -487,18 +487,11 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator)
// create Cuda class if USER-CUDA installed, unless explicitly switched off // create Cuda class if USER-CUDA installed, unless explicitly switched off
// instantiation creates dummy Cuda class if USER-CUDA is not installed // instantiation creates dummy Cuda class if USER-CUDA is not installed
if (cudaflag == 0) { cuda = NULL;
cuda = NULL; if (cudaflag == 1) {
} else if (cudaflag == 1) {
cuda = new Cuda(this); cuda = new Cuda(this);
if (!cuda->cuda_exists) if (!cuda->cuda_exists)
error->all(FLERR,"Cannot use -cuda on without USER-CUDA installed"); error->all(FLERR,"Cannot use -cuda on without USER-CUDA installed");
} else {
cuda = new Cuda(this);
if (!cuda->cuda_exists) {
delete cuda;
cuda = NULL;
}
} }
int me; int me;
@ -509,18 +502,11 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator)
// instantiation creates dummy Kokkos class if KOKKOS is not installed // instantiation creates dummy Kokkos class if KOKKOS is not installed
// add args between kkfirst and kklast to Kokkos instantiation // add args between kkfirst and kklast to Kokkos instantiation
if (kokkosflag == 0) { kokkos = NULL;
kokkos = NULL; if (kokkosflag == 1) {
} else if (kokkosflag == 1) {
kokkos = new KokkosLMP(this,kklast-kkfirst,&arg[kkfirst]); kokkos = new KokkosLMP(this,kklast-kkfirst,&arg[kkfirst]);
if (!kokkos->kokkos_exists) if (!kokkos->kokkos_exists)
error->all(FLERR,"Cannot use -kokkos on without KOKKOS installed"); error->all(FLERR,"Cannot use -kokkos on without KOKKOS installed");
} else {
kokkos = new KokkosLMP(this,kklast-kkfirst,&arg[kkfirst]);
if (!kokkos->kokkos_exists) {
delete kokkos;
kokkos = NULL;
}
} }
MPI_Comm_rank(world,&me); MPI_Comm_rank(world,&me);

View File

@ -24,6 +24,7 @@
#include "string.h" #include "string.h"
#include "min.h" #include "min.h"
#include "atom.h" #include "atom.h"
#include "atom_vec.h"
#include "domain.h" #include "domain.h"
#include "comm.h" #include "comm.h"
#include "update.h" #include "update.h"
@ -139,17 +140,11 @@ void Min::init()
int ifix = modify->find_fix("package_omp"); int ifix = modify->find_fix("package_omp");
if (ifix >= 0) external_force_clear = 1; if (ifix >= 0) external_force_clear = 1;
// set flags for what arrays to clear in force_clear() // set flags for arrays to clear in force_clear()
// need to clear additionals arrays if they exist
torqueflag = 0; torqueflag = extraflag = 0;
if (atom->torque_flag) torqueflag = 1; if (atom->torque_flag) torqueflag = 1;
erforceflag = 0; if (atom->avec->forceclearflag) extraflag = 1;
if (atom->erforce_flag) erforceflag = 1;
e_flag = 0;
if (atom->e_flag) e_flag = 1;
rho_flag = 0;
if (atom->rho_flag) rho_flag = 1;
// allow pair and Kspace compute() to be turned off via modify flags // allow pair and Kspace compute() to be turned off via modify flags
@ -552,7 +547,7 @@ double Min::energy_force(int resetflag)
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
clear force on own & ghost atoms clear force on own & ghost atoms
setup and clear other arrays as needed clear other arrays as needed
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
void Min::force_clear() void Min::force_clear()
@ -560,20 +555,15 @@ void Min::force_clear()
if (external_force_clear) return; if (external_force_clear) return;
// clear global force array // clear global force array
// nall includes ghosts only if either newton flag is set // if either newton flag is set, also include ghosts
int nall; size_t nbytes = sizeof(double) * atom->nlocal;
if (force->newton) nall = atom->nlocal + atom->nghost; if (force->newton) nbytes += sizeof(double) * atom->nghost;
else nall = atom->nlocal;
size_t nbytes = sizeof(double) * nall;
if (nbytes) { if (nbytes) {
memset(&(atom->f[0][0]),0,3*nbytes); memset(&atom->f[0][0],0,3*nbytes);
if (torqueflag) memset(&(atom->torque[0][0]),0,3*nbytes); if (torqueflag) memset(&atom->torque[0][0],0,3*nbytes);
if (erforceflag) memset(&(atom->erforce[0]), 0, nbytes); if (extraflag) atom->avec->force_clear(0,nbytes);
if (e_flag) memset(&(atom->de[0]), 0, nbytes);
if (rho_flag) memset(&(atom->drho[0]), 0, nbytes);
} }
} }

View File

@ -63,8 +63,7 @@ class Min : protected Pointers {
int triclinic; // 0 if domain is orthog, 1 if triclinic int triclinic; // 0 if domain is orthog, 1 if triclinic
int pairflag; int pairflag;
int torqueflag,erforceflag; int torqueflag,extraflag;
int e_flag,rho_flag;
int pair_compute_flag; // 0 if pair->compute is skipped int pair_compute_flag; // 0 if pair->compute is skipped
int kspace_compute_flag; // 0 if kspace->compute is skipped int kspace_compute_flag; // 0 if kspace->compute is skipped

View File

@ -515,7 +515,7 @@ void Output::reset_timestep(bigint ntimestep)
next_thermo = static_cast<bigint> next_thermo = static_cast<bigint>
(input->variable->compute_equal(ivar_thermo)); (input->variable->compute_equal(ivar_thermo));
if (next_thermo < ntimestep) if (next_thermo < ntimestep)
error->all(FLERR,"Thermo every variable returned a bad timestep"); error->all(FLERR,"Thermo_modify every variable returned a bad timestep");
update->ntimestep++; update->ntimestep++;
next_thermo = MIN(next_thermo,update->laststep); next_thermo = MIN(next_thermo,update->laststep);
modify->addstep_compute(next_thermo); modify->addstep_compute(next_thermo);

View File

@ -71,7 +71,7 @@ Self-explanatory. Check the input script or data file.
E: Pair dpd requires ghost atoms store velocity E: Pair dpd requires ghost atoms store velocity
Use the communicate vel yes command to enable this. Use the comm_modify vel yes command to enable this.
W: Pair dpd needs newton pair on for momentum conservation W: Pair dpd needs newton pair on for momentum conservation

View File

@ -127,7 +127,7 @@ void Rerun::command(int narg, char **arg)
// perform the psuedo run // perform the psuedo run
// invoke lmp->init() only once // invoke lmp->init() only once
// read all relevant snapshots // read all relevant snapshots
// uset setup_minimal() since atoms are already owned by correct procs // use setup_minimal() since atoms are already owned by correct procs
// addstep_compute_all() insures energy/virial computed on every snapshot // addstep_compute_all() insures energy/virial computed on every snapshot
update->whichflag = 1; update->whichflag = 1;

View File

@ -20,6 +20,7 @@
#include "respa.h" #include "respa.h"
#include "neighbor.h" #include "neighbor.h"
#include "atom.h" #include "atom.h"
#include "atom_vec.h"
#include "domain.h" #include "domain.h"
#include "comm.h" #include "comm.h"
#include "force.h" #include "force.h"
@ -283,17 +284,11 @@ void Respa::init()
int ifix = modify->find_fix("package_omp"); int ifix = modify->find_fix("package_omp");
if (ifix >= 0) external_force_clear = 1; if (ifix >= 0) external_force_clear = 1;
// set flags for what arrays to clear in force_clear() // set flags for arrays to clear in force_clear()
// need to clear additionals arrays if they exist
torqueflag = 0; torqueflag = extraflag = 0;
if (atom->torque_flag) torqueflag = 1; if (atom->torque_flag) torqueflag = 1;
erforceflag = 0; if (atom->avec->forceclearflag) extraflag = 1;
if (atom->erforce_flag) erforceflag = 1;
e_flag = 0;
if (atom->e_flag) e_flag = 1;
rho_flag = 0;
if (atom->rho_flag) rho_flag = 1;
// step[] = timestep for each level // step[] = timestep for each level
@ -643,6 +638,7 @@ void Respa::recurse(int ilevel)
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
clear force on own & ghost atoms clear force on own & ghost atoms
clear other arrays as needed
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
void Respa::force_clear(int newtonflag) void Respa::force_clear(int newtonflag)
@ -650,20 +646,15 @@ void Respa::force_clear(int newtonflag)
if (external_force_clear) return; if (external_force_clear) return;
// clear global force array // clear global force array
// nall includes ghosts only if newton flag is set // if either newton flag is set, also include ghosts
int nall; size_t nbytes = sizeof(double) * atom->nlocal;
if (newtonflag) nall = atom->nlocal + atom->nghost; if (force->newton) nbytes += sizeof(double) * atom->nghost;
else nall = atom->nlocal;
size_t nbytes = sizeof(double) * nall; if (nbytes) {
memset(&atom->f[0][0],0,3*nbytes);
if (nbytes > 0 ) { if (torqueflag) memset(&atom->torque[0][0],0,3*nbytes);
memset(&(atom->f[0][0]),0,3*nbytes); if (extraflag) atom->avec->force_clear(0,nbytes);
if (torqueflag) memset(&(atom->torque[0][0]),0,3*nbytes);
if (erforceflag) memset(&(atom->erforce[0]), 0, nbytes);
if (e_flag) memset(&(atom->de[0]), 0, nbytes);
if (rho_flag) memset(&(atom->drho[0]), 0, nbytes);
} }
} }

View File

@ -53,8 +53,7 @@ class Respa : public Integrate {
protected: protected:
int triclinic; // 0 if domain is orthog, 1 if triclinic int triclinic; // 0 if domain is orthog, 1 if triclinic
int torqueflag,erforceflag; int torqueflag,extraflag;
int e_flag,rho_flag;
int *newton; // newton flag at each level int *newton; // newton flag at each level
class FixRespa *fix_respa; // Fix to store the force level array class FixRespa *fix_respa; // Fix to store the force level array

View File

@ -29,6 +29,7 @@
#include "compute.h" #include "compute.h"
#include "input.h" #include "input.h"
#include "variable.h" #include "variable.h"
#include "neighbor.h"
#include "force.h" #include "force.h"
#include "pair.h" #include "pair.h"
#include "bond.h" #include "bond.h"
@ -57,7 +58,7 @@ using namespace MathConst;
// xlat, ylat, zlat // xlat, ylat, zlat
// bonds, angles, dihedrals, impropers, // bonds, angles, dihedrals, impropers,
// pxx, pyy, pzz, pxy, pxz, pyz // pxx, pyy, pzz, pxy, pxz, pyz
// fmax, fnorm // fmax, fnorm, nbuild, ndanger,
// cella, cellb, cellc, cellalpha, cellbeta, cellgamma // cella, cellb, cellc, cellalpha, cellbeta, cellgamma
// customize a new thermo style by adding a DEFINE to this list // customize a new thermo style by adding a DEFINE to this list
@ -801,6 +802,11 @@ void Thermo::parse_fields(char *str)
} else if (strcmp(word,"fnorm") == 0) { } else if (strcmp(word,"fnorm") == 0) {
addfield("Fnorm",&Thermo::compute_fnorm,FLOAT); addfield("Fnorm",&Thermo::compute_fnorm,FLOAT);
} else if (strcmp(word,"nbuild") == 0) {
addfield("Nbuild",&Thermo::compute_nbuild,BIGINT);
} else if (strcmp(word,"ndanger") == 0) {
addfield("Ndanger",&Thermo::compute_ndanger,BIGINT);
} else if (strcmp(word,"cella") == 0) { } else if (strcmp(word,"cella") == 0) {
addfield("Cella",&Thermo::compute_cella,FLOAT); addfield("Cella",&Thermo::compute_cella,FLOAT);
} else if (strcmp(word,"cellb") == 0) { } else if (strcmp(word,"cellb") == 0) {
@ -1371,10 +1377,19 @@ int Thermo::evaluate_keyword(char *word, double *answer)
pressure->invoked_flag |= INVOKED_VECTOR; pressure->invoked_flag |= INVOKED_VECTOR;
} }
compute_pyz(); compute_pyz();
}
} else if (strcmp(word,"fmax") == 0) compute_fmax(); else if (strcmp(word,"fmax") == 0) compute_fmax();
else if (strcmp(word,"fnorm") == 0) compute_fnorm(); else if (strcmp(word,"fnorm") == 0) compute_fnorm();
else if (strcmp(word,"nbuild") == 0) {
compute_nbuild();
dvalue = bivalue;
} else if (strcmp(word,"ndanger") == 0) {
compute_ndanger();
dvalue = bivalue;
}
else if (strcmp(word,"cella") == 0) compute_cella(); else if (strcmp(word,"cella") == 0) compute_cella();
else if (strcmp(word,"cellb") == 0) compute_cellb(); else if (strcmp(word,"cellb") == 0) compute_cellb();
else if (strcmp(word,"cellc") == 0) compute_cellc(); else if (strcmp(word,"cellc") == 0) compute_cellc();
@ -1975,6 +1990,20 @@ void Thermo::compute_fnorm()
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
void Thermo::compute_nbuild()
{
bivalue = neighbor->ncalls;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_ndanger()
{
bivalue = neighbor->ndanger;
}
/* ---------------------------------------------------------------------- */
void Thermo::compute_cella() void Thermo::compute_cella()
{ {
dvalue = domain->xprd; dvalue = domain->xprd;

View File

@ -184,6 +184,9 @@ class Thermo : protected Pointers {
void compute_fmax(); void compute_fmax();
void compute_fnorm(); void compute_fnorm();
void compute_nbuild();
void compute_ndanger();
void compute_cella(); void compute_cella();
void compute_cellb(); void compute_cellb();
void compute_cellc(); void compute_cellc();

View File

@ -139,6 +139,8 @@ void Variable::set(int narg, char **arg)
{ {
if (narg < 2) error->all(FLERR,"Illegal variable command"); if (narg < 2) error->all(FLERR,"Illegal variable command");
int replaceflag = 0;
// DELETE // DELETE
// doesn't matter if variable no longer exists // doesn't matter if variable no longer exists
@ -262,24 +264,28 @@ void Variable::set(int narg, char **arg)
"All universe/uloop variables must have same # of values"); "All universe/uloop variables must have same # of values");
// STRING // STRING
// remove pre-existing var if also style STRING (allows it to be reset) // replace pre-existing var if also style STRING (allows it to be reset)
// num = 1, which = 1st value // num = 1, which = 1st value
// data = 1 value, string to eval // data = 1 value, string to eval
} else if (strcmp(arg[1],"string") == 0) { } else if (strcmp(arg[1],"string") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command"); if (narg != 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) { int ivar = find(arg[0]);
if (style[find(arg[0])] != STRING) if (ivar >= 0) {
if (style[ivar] != STRING)
error->all(FLERR,"Cannot redefine variable as a different style"); error->all(FLERR,"Cannot redefine variable as a different style");
remove(find(arg[0])); delete [] data[ivar][0];
copy(1,&arg[2],data[ivar]);
replaceflag = 1;
} else {
if (nvar == maxvar) grow();
style[nvar] = STRING;
num[nvar] = 1;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
} }
if (nvar == maxvar) grow();
style[nvar] = STRING;
num[nvar] = 1;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
// GETENV // GETENV
// remove pre-existing var if also style GETENV (allows it to be reset) // remove pre-existing var if also style GETENV (allows it to be reset)
@ -357,52 +363,63 @@ void Variable::set(int narg, char **arg)
data[nvar][2] = NULL; data[nvar][2] = NULL;
// EQUAL // EQUAL
// remove pre-existing var if also style EQUAL (allows it to be reset) // replace pre-existing var if also style EQUAL (allows it to be reset)
// num = 2, which = 1st value // num = 2, which = 1st value
// data = 2 values, 1st is string to eval, 2nd is filled on retrieval // data = 2 values, 1st is string to eval, 2nd is filled on retrieval
} else if (strcmp(arg[1],"equal") == 0) { } else if (strcmp(arg[1],"equal") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command"); if (narg != 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) { int ivar = find(arg[0]);
if (style[find(arg[0])] != EQUAL) if (ivar >= 0) {
if (style[ivar] != EQUAL)
error->all(FLERR,"Cannot redefine variable as a different style"); error->all(FLERR,"Cannot redefine variable as a different style");
remove(find(arg[0])); delete [] data[ivar][0];
if (data[ivar][1]) delete [] data[ivar][1];
copy(1,&arg[2],data[ivar]);
data[ivar][1] = NULL;
replaceflag = 1;
} else {
if (nvar == maxvar) grow();
style[nvar] = EQUAL;
num[nvar] = 2;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
data[nvar][1] = NULL;
} }
if (nvar == maxvar) grow();
style[nvar] = EQUAL;
num[nvar] = 2;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
data[nvar][1] = NULL;
// ATOM // ATOM
// remove pre-existing var if also style ATOM (allows it to be reset) // replace pre-existing var if also style ATOM (allows it to be reset)
// num = 1, which = 1st value // num = 1, which = 1st value
// data = 1 value, string to eval // data = 1 value, string to eval
} else if (strcmp(arg[1],"atom") == 0) { } else if (strcmp(arg[1],"atom") == 0) {
if (narg != 3) error->all(FLERR,"Illegal variable command"); if (narg != 3) error->all(FLERR,"Illegal variable command");
if (find(arg[0]) >= 0) { int ivar = find(arg[0]);
if (style[find(arg[0])] != ATOM) if (ivar >= 0) {
if (style[ivar] != ATOM)
error->all(FLERR,"Cannot redefine variable as a different style"); error->all(FLERR,"Cannot redefine variable as a different style");
remove(find(arg[0])); delete [] data[ivar][0];
copy(1,&arg[2],data[ivar]);
replaceflag = 1;
} else {
if (nvar == maxvar) grow();
style[nvar] = ATOM;
num[nvar] = 1;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
} }
if (nvar == maxvar) grow();
style[nvar] = ATOM;
num[nvar] = 1;
which[nvar] = 0;
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
} else error->all(FLERR,"Illegal variable command"); } else error->all(FLERR,"Illegal variable command");
// set name of variable // set name of variable, if not replacing (STRING/EQUAL/ATOM)
// must come at end, since STRING/EQUAL/ATOM reset may have removed name
// name must be all alphanumeric chars or underscores // name must be all alphanumeric chars or underscores
if (replaceflag) return;
int n = strlen(arg[0]) + 1; int n = strlen(arg[0]) + 1;
names[nvar] = new char[n]; names[nvar] = new char[n];
strcpy(names[nvar],arg[0]); strcpy(names[nvar],arg[0]);

View File

@ -17,6 +17,7 @@
#include "domain.h" #include "domain.h"
#include "comm.h" #include "comm.h"
#include "atom.h" #include "atom.h"
#include "atom_vec.h"
#include "force.h" #include "force.h"
#include "pair.h" #include "pair.h"
#include "bond.h" #include "bond.h"
@ -69,17 +70,11 @@ void Verlet::init()
int ifix = modify->find_fix("package_omp"); int ifix = modify->find_fix("package_omp");
if (ifix >= 0) external_force_clear = 1; if (ifix >= 0) external_force_clear = 1;
// set flags for what arrays to clear in force_clear() // set flags for arrays to clear in force_clear()
// need to clear additionals arrays if they exist
torqueflag = 0; torqueflag = extraflag = 0;
if (atom->torque_flag) torqueflag = 1; if (atom->torque_flag) torqueflag = 1;
erforceflag = 0; if (atom->avec->forceclearflag) extraflag = 1;
if (atom->erforce_flag) erforceflag = 1;
e_flag = 0;
if (atom->e_flag) e_flag = 1;
rho_flag = 0;
if (atom->rho_flag) rho_flag = 1;
// orthogonal vs triclinic simulation box // orthogonal vs triclinic simulation box
@ -345,6 +340,7 @@ void Verlet::cleanup()
void Verlet::force_clear() void Verlet::force_clear()
{ {
int i; int i;
size_t nbytes;
if (external_force_clear) return; if (external_force_clear) return;
@ -352,19 +348,16 @@ void Verlet::force_clear()
// if either newton flag is set, also include ghosts // if either newton flag is set, also include ghosts
// when using threads always clear all forces. // when using threads always clear all forces.
int nlocal = atom->nlocal;
if (neighbor->includegroup == 0) { if (neighbor->includegroup == 0) {
int nall; nbytes = sizeof(double) * nlocal;
if (force->newton) nall = atom->nlocal + atom->nghost; if (force->newton) nbytes += sizeof(double) * atom->nghost;
else nall = atom->nlocal;
size_t nbytes = sizeof(double) * nall; if (nbytes) {
memset(&atom->f[0][0],0,3*nbytes);
if (nbytes > 0) { if (torqueflag) memset(&atom->torque[0][0],0,3*nbytes);
memset(&(atom->f[0][0]),0,3*nbytes); if (extraflag) atom->avec->force_clear(0,nbytes);
if (torqueflag) memset(&(atom->torque[0][0]),0,3*nbytes);
if (erforceflag) memset(&(atom->erforce[0]), 0, nbytes);
if (e_flag) memset(&(atom->de[0]), 0, nbytes);
if (rho_flag) memset(&(atom->drho[0]), 0, nbytes);
} }
// neighbor includegroup flag is set // neighbor includegroup flag is set
@ -372,70 +365,21 @@ void Verlet::force_clear()
// if either newton flag is set, also include ghosts // if either newton flag is set, also include ghosts
} else { } else {
int nall = atom->nfirst; nbytes = sizeof(double) * atom->nfirst;
double **f = atom->f; if (nbytes) {
for (i = 0; i < nall; i++) { memset(&atom->f[0][0],0,3*nbytes);
f[i][0] = 0.0; if (torqueflag) memset(&atom->torque[0][0],0,3*nbytes);
f[i][1] = 0.0; if (extraflag) atom->avec->force_clear(0,nbytes);
f[i][2] = 0.0;
}
if (torqueflag) {
double **torque = atom->torque;
for (i = 0; i < nall; i++) {
torque[i][0] = 0.0;
torque[i][1] = 0.0;
torque[i][2] = 0.0;
}
}
if (erforceflag) {
double *erforce = atom->erforce;
for (i = 0; i < nall; i++) erforce[i] = 0.0;
}
if (e_flag) {
double *de = atom->de;
for (i = 0; i < nall; i++) de[i] = 0.0;
}
if (rho_flag) {
double *drho = atom->drho;
for (i = 0; i < nall; i++) drho[i] = 0.0;
} }
if (force->newton) { if (force->newton) {
nall = atom->nlocal + atom->nghost; nbytes = sizeof(double) * atom->nghost;
for (i = atom->nlocal; i < nall; i++) { if (nbytes) {
f[i][0] = 0.0; memset(&atom->f[nlocal][0],0,3*nbytes);
f[i][1] = 0.0; if (torqueflag) memset(&atom->torque[nlocal][0],0,3*nbytes);
f[i][2] = 0.0; if (extraflag) atom->avec->force_clear(nlocal,nbytes);
}
if (torqueflag) {
double **torque = atom->torque;
for (i = atom->nlocal; i < nall; i++) {
torque[i][0] = 0.0;
torque[i][1] = 0.0;
torque[i][2] = 0.0;
}
}
if (erforceflag) {
double *erforce = atom->erforce;
for (i = atom->nlocal; i < nall; i++) erforce[i] = 0.0;
}
if (e_flag) {
double *de = atom->de;
for (i = 0; i < nall; i++) de[i] = 0.0;
}
if (rho_flag) {
double *drho = atom->drho;
for (i = 0; i < nall; i++) drho[i] = 0.0;
} }
} }
} }

Some files were not shown because too many files have changed in this diff Show More