git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@12435 f3b2605a-c512-4ea7-a41b-209d697bcdaa

This commit is contained in:
sjplimp 2014-09-08 15:46:08 +00:00
parent a0b94e9053
commit 9cefb57272
6 changed files with 503 additions and 31 deletions

View File

@ -11,6 +11,8 @@ Section</A>
<HR>
<P>NOTE: USER-CUDA: no newton setting needed?
</P>
<H3>5. Accelerating LAMMPS performance
</H3>
<P>This section describes various methods for improving LAMMPS
@ -44,12 +46,12 @@ on different hardware platforms.
understand how it currently performs and where the bottlenecks are.
</P>
<P>The best way to do this is run the your system (actual number of
atoms) for a modest number of timesteps (say 100, or a few 100 at
most) on several different processor counts, including a single
processor if possible. Do this for an equilibrium version of your
system, so that the 100-step timings are representative of a much
longer run. There is typically no need to run for 1000s or timesteps
to get accurate timings; you can simply extrapolate from short runs.
atoms) for a modest number of timesteps (say 100 steps) on several
different processor counts, including a single processor if possible.
Do this for an equilibrium version of your system, so that the
100-step timings are representative of a much longer run. There is
typically no need to run for 1000s of timesteps to get accurate
timings; you can simply extrapolate from short runs.
</P>
<P>For the set of runs, look at the timing data printed to the screen and
log file at the end of each LAMMPS run. <A HREF = "Section_start.html#start_8">This
@ -244,6 +246,13 @@ Technologies). It contains a handful of pair styles whose compute()
methods were rewritten in C++ templated form to reduce the overhead
due to if tests and other conditional code.
</P>
<P>Here is a quick overview of how to use the OPT package:
</P>
<UL><LI>include the OPT package and build LAMMPS
<LI>use OPT pair styles in your input script
</UL>
<P>Details follow.
</P>
<P><B>Required hardware/software:</B>
</P>
<P>None.
@ -255,8 +264,8 @@ due to if tests and other conditional code.
<PRE>make yes-opt
make machine
</PRE>
<P>No additional compile/link flags are needed in your lo-level
src/MAKE/Makefile.machine.
<P>No additional compile/link flags are needed in your machine
Makefile in src/MAKE.
</P>
<P><B>Running with the OPT package:</B>
</P>
@ -296,6 +305,16 @@ nearly all bonded styles (bond, angle, dihedral, improper), several
Kspace styles, and a few fix styles. The package currently
uses the OpenMP interface for multi-threading.
</P>
<P>Here is a quick overview of how to use the USER-OMP package:
</P>
<UL><LI>specify the -fopenmp flag for compiling and linking in your machine Makefile
<LI>include the USER-OMP package and build LAMMPS
<LI>specify how many threads per MPI task to run with via an environment variable or the package omp command
<LI>enable the USER-OMP package via the "-sf omp" command-line switch, or the package omp commmand
<LI>use USER-OMP styles in your input script
</UL>
<P>Details follow.
</P>
<P><B>Required hardware/software:</B>
</P>
<P>Your compiler must support the OpenMP interface. You should have one
@ -362,8 +381,7 @@ style in your input script:
<PRE>pair_style lj/cut/omp 2.5
fix nve/omp
</PRE>
<P><
Or you can run with the "-sf omp" <A HREF = "Section_start.html#start_7">command-line
<P>Or you can run with the "-sf omp" <A HREF = "Section_start.html#start_7">command-line
switch</A>, which will automatically append
"omp" to styles that support it.
</P>
@ -393,7 +411,7 @@ benchmark runs for a specific simulation running on a specific
machine, paying attention to guidelines discussed in the next
sub-section.
</P>
<P>A description of the multi-threading strategy used in the UESR-OMP
<P>A description of the multi-threading strategy used in the USER-OMP
package and some performance examples are <A HREF = "http://sites.google.com/site/akohlmey/software/lammps-icms/lammps-icms-tms2011-talk.pdf?attredirects=0&d=1">presented
here</A>
</P>
@ -502,6 +520,19 @@ NVIDIA support as well as more general OpenCL support, so that the
same functionality can eventually be supported on a variety of GPU
hardware.
</UL>
<P>Here is a quick overview of how to use the GPU package:
</P>
<UL><LI>build the library in lib/gpu for your GPU hardware (CUDA_ARCH) with desired precision (CUDA_PREC)
<LI>include the GPU package and build LAMMPS
<LI>decide how many MPI tasks per GPU to run with, i.e. set MPI tasks/node via mpirun
<LI>specify how many GPUs per node to use (default = 1) via the package gpu command
<LI>enable the GPU package via the "-sf gpu" command-line switch, or the package gpu commmand
<LI>use the newton command to turn off Newton's law for pairwise interactions
<LI>use the package gpu command to enable neighbor list building on the GPU if desired
<LI>use GPU pair styles and kspace styles in your input script
</UL>
<P>Details follow.
</P>
<P><B>Required hardware/software:</B>
</P>
<P>To use this package, you currently need to have an NVIDIA GPU and
@ -714,10 +745,20 @@ transparently.
<LI>The package only supports use of a single MPI task, running on a
single CPU (core), assigned to each GPU.
</UL>
<P>Here is a quick overview of how to use the USER-CUDA package:
</P>
<UL><LI>build the library in lib/cuda for your GPU hardware (arch with desired precision (precision)
<LI>include the USER-CUDA package and build LAMMPS
<LI>use the mpirun command to specify 1 MPI task per GPU (on each node)
<LI>specify how many GPUs per node to use (default = 1) via the package cuda command
<LI>enable the USER-CUDA package via the "-c on" command-line switch
<LI>use USER-CUDA styles in your input script
</UL>
<P>Details follow.
</P>
<P><B>Required hardware/software:</B>
</P>
<P>To use this package, you need to have an NVIDIA GPU and
install the NVIDIA Cuda software on your system:
<P>To use this package, you need to have one or more NVIDIA GPUs and install the NVIDIA Cuda software on your system:
</P>
<P>Your NVIDIA GPU needs to support Compute Capability 1.3. This list may
help you to find out the Compute Capability of your card:
@ -1260,6 +1301,24 @@ suffix to "omp" so that styles from the USER-OMP package will be used
if available, after first testing if a style from the USER-INTEL
package is available.
</P>
<P>Here is a quick overview of how to use the USER-INTEL package
for CPU acceleration:
</P>
<UL><LI>specify these CCFLAGS in your machine Makefile: -fopenmp, -DLAMMPS_MEMALIGN=64, and -restrict, -xHost
<LI>specify -fopenmp with LINKFLAGS in your machine Makefile
<LI>include the USER-INTEL package and (optionally) USER-OMP package and build LAMMP
<LI>if also using the USER-OMP package, specify how many threads per MPI task to run with via an environment variable or the package omp command
<LI>use USER-INTEL styles in your input script
</UL>
<P>Running with the USER-INTEL package to offload to the Intel(R) Xeon Phi(TM)
is the same except for these additional steps:
</P>
<UL><LI>add the flag -DLMP_INTEL_OFFLOAD to CCFLAGS in your Machine makefile
<LI>add the flag -offload to the LINKFLAGS in your Machine makefile
<LI>the package intel command can be used to adjust threads per coprocessor
</UL>
<P>Details follow.
</P>
<P><B>Required hardware/software:</B>
</P>
<P>To use the offload option, you must have one or more Intel(R) Xeon

View File

@ -8,6 +8,8 @@ Section"_Section_howto.html :c
:line
NOTE: USER-CUDA: no newton setting needed?
5. Accelerating LAMMPS performance :h3
This section describes various methods for improving LAMMPS
@ -40,12 +42,12 @@ Before trying to make your simulation run faster, you should
understand how it currently performs and where the bottlenecks are.
The best way to do this is run the your system (actual number of
atoms) for a modest number of timesteps (say 100, or a few 100 at
most) on several different processor counts, including a single
processor if possible. Do this for an equilibrium version of your
system, so that the 100-step timings are representative of a much
longer run. There is typically no need to run for 1000s or timesteps
to get accurate timings; you can simply extrapolate from short runs.
atoms) for a modest number of timesteps (say 100 steps) on several
different processor counts, including a single processor if possible.
Do this for an equilibrium version of your system, so that the
100-step timings are representative of a much longer run. There is
typically no need to run for 1000s of timesteps to get accurate
timings; you can simply extrapolate from short runs.
For the set of runs, look at the timing data printed to the screen and
log file at the end of each LAMMPS run. "This
@ -238,6 +240,13 @@ Technologies). It contains a handful of pair styles whose compute()
methods were rewritten in C++ templated form to reduce the overhead
due to if tests and other conditional code.
Here is a quick overview of how to use the OPT package:
include the OPT package and build LAMMPS
use OPT pair styles in your input script :ul
Details follow.
[Required hardware/software:]
None.
@ -249,8 +258,8 @@ Include the package and build LAMMPS.
make yes-opt
make machine :pre
No additional compile/link flags are needed in your lo-level
src/MAKE/Makefile.machine.
No additional compile/link flags are needed in your machine
Makefile in src/MAKE.
[Running with the OPT package:]
@ -290,6 +299,16 @@ nearly all bonded styles (bond, angle, dihedral, improper), several
Kspace styles, and a few fix styles. The package currently
uses the OpenMP interface for multi-threading.
Here is a quick overview of how to use the USER-OMP package:
specify the -fopenmp flag for compiling and linking in your machine Makefile
include the USER-OMP package and build LAMMPS
specify how many threads per MPI task to run with via an environment variable or the package omp command
enable the USER-OMP package via the "-sf omp" command-line switch, or the package omp commmand
use USER-OMP styles in your input script :ul
Details follow.
[Required hardware/software:]
Your compiler must support the OpenMP interface. You should have one
@ -355,7 +374,7 @@ style in your input script:
pair_style lj/cut/omp 2.5
fix nve/omp :pre
<
Or you can run with the "-sf omp" "command-line
switch"_Section_start.html#start_7, which will automatically append
"omp" to styles that support it.
@ -386,7 +405,7 @@ benchmark runs for a specific simulation running on a specific
machine, paying attention to guidelines discussed in the next
sub-section.
A description of the multi-threading strategy used in the UESR-OMP
A description of the multi-threading strategy used in the USER-OMP
package and some performance examples are "presented
here"_http://sites.google.com/site/akohlmey/software/lammps-icms/lammps-icms-tms2011-talk.pdf?attredirects=0&d=1
@ -495,6 +514,19 @@ NVIDIA support as well as more general OpenCL support, so that the
same functionality can eventually be supported on a variety of GPU
hardware. :l,ule
Here is a quick overview of how to use the GPU package:
build the library in lib/gpu for your GPU hardware (CUDA_ARCH) with desired precision (CUDA_PREC)
include the GPU package and build LAMMPS
decide how many MPI tasks per GPU to run with, i.e. set MPI tasks/node via mpirun
specify how many GPUs per node to use (default = 1) via the package gpu command
enable the GPU package via the "-sf gpu" command-line switch, or the package gpu commmand
use the newton command to turn off Newton's law for pairwise interactions
use the package gpu command to enable neighbor list building on the GPU if desired
use GPU pair styles and kspace styles in your input script :ul
Details follow.
[Required hardware/software:]
To use this package, you currently need to have an NVIDIA GPU and
@ -707,10 +739,20 @@ Neighbor lists are constructed on the GPU. :l
The package only supports use of a single MPI task, running on a
single CPU (core), assigned to each GPU. :l,ule
Here is a quick overview of how to use the USER-CUDA package:
build the library in lib/cuda for your GPU hardware (arch with desired precision (precision)
include the USER-CUDA package and build LAMMPS
use the mpirun command to specify 1 MPI task per GPU (on each node)
specify how many GPUs per node to use (default = 1) via the package cuda command
enable the USER-CUDA package via the "-c on" command-line switch
use USER-CUDA styles in your input script :ul
Details follow.
[Required hardware/software:]
To use this package, you need to have an NVIDIA GPU and
install the NVIDIA Cuda software on your system:
To use this package, you need to have one or more NVIDIA GPUs and install the NVIDIA Cuda software on your system:
Your NVIDIA GPU needs to support Compute Capability 1.3. This list may
help you to find out the Compute Capability of your card:
@ -1253,6 +1295,24 @@ suffix to "omp" so that styles from the USER-OMP package will be used
if available, after first testing if a style from the USER-INTEL
package is available.
Here is a quick overview of how to use the USER-INTEL package
for CPU acceleration:
specify these CCFLAGS in your machine Makefile: -fopenmp, -DLAMMPS_MEMALIGN=64, and -restrict, -xHost
specify -fopenmp with LINKFLAGS in your machine Makefile
include the USER-INTEL package and (optionally) USER-OMP package and build LAMMP
if also using the USER-OMP package, specify how many threads per MPI task to run with via an environment variable or the package omp command
use USER-INTEL styles in your input script :ul
Running with the USER-INTEL package to offload to the Intel(R) Xeon Phi(TM)
is the same except for these additional steps:
add the flag -DLMP_INTEL_OFFLOAD to CCFLAGS in your Machine makefile
add the flag -offload to the LINKFLAGS in your Machine makefile
the package intel command can be used to adjust threads per coprocessor :ul
Details follow.
[Required hardware/software:]
To use the offload option, you must have one or more Intel(R) Xeon

View File

@ -406,12 +406,13 @@ g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.
<TR ALIGN="center"><TD ><A HREF = "fix_msst.html">msst</A></TD><TD ><A HREF = "fix_neb.html">neb</A></TD><TD ><A HREF = "fix_nh.html">nph (o)</A></TD><TD ><A HREF = "fix_nphug.html">nphug (o)</A></TD><TD ><A HREF = "fix_nph_asphere.html">nph/asphere (o)</A></TD><TD ><A HREF = "fix_nph_sphere.html">nph/sphere (o)</A></TD><TD ><A HREF = "fix_nh.html">npt (co)</A></TD><TD ><A HREF = "fix_npt_asphere.html">npt/asphere (o)</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "fix_npt_sphere.html">npt/sphere (o)</A></TD><TD ><A HREF = "fix_nve.html">nve (cko)</A></TD><TD ><A HREF = "fix_nve_asphere.html">nve/asphere</A></TD><TD ><A HREF = "fix_nve_asphere_noforce.html">nve/asphere/noforce</A></TD><TD ><A HREF = "fix_nve_body.html">nve/body</A></TD><TD ><A HREF = "fix_nve_limit.html">nve/limit</A></TD><TD ><A HREF = "fix_nve_line.html">nve/line</A></TD><TD ><A HREF = "fix_nve_noforce.html">nve/noforce</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "fix_nve_sphere.html">nve/sphere (o)</A></TD><TD ><A HREF = "fix_nve_tri.html">nve/tri</A></TD><TD ><A HREF = "fix_nh.html">nvt (co)</A></TD><TD ><A HREF = "fix_nvt_asphere.html">nvt/asphere (o)</A></TD><TD ><A HREF = "fix_nvt_sllod.html">nvt/sllod (o)</A></TD><TD ><A HREF = "fix_nvt_sphere.html">nvt/sphere (o)</A></TD><TD ><A HREF = "fix_oneway.html">oneway</A></TD><TD ><A HREF = "fix_orient_fcc.html">orient/fcc</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "fix_planeforce.html">planeforce</A></TD><TD ><A HREF = "fix_poems.html">poems</A></TD><TD ><A HREF = "fix_pour.html">pour</A></TD><TD ><A HREF = "fix_press_berendsen.html">press/berendsen</A></TD><TD ><A HREF = "fix_print.html">print</A></TD><TD ><A HREF = "fix_property_atom.html">property/atom</A></TD><TD ><A HREF = "fix_qeq_comb.html">qeq/comb (o)</A></TD><TD ><A HREF = "fix_reax_bonds.html">reax/bonds</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "fix_recenter.html">recenter</A></TD><TD ><A HREF = "fix_restrain.html">restrain</A></TD><TD ><A HREF = "fix_rigid.html">rigid (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/nph (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/npt (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/nve (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/nvt (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/small (o)</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "fix_rigid.html">rigid/small/nph</A></TD><TD ><A HREF = "fix_rigid.html">rigid/small/npt</A></TD><TD ><A HREF = "fix_rigid.html">rigid/small/nve</A></TD><TD ><A HREF = "fix_rigid.html">rigid/small/nvt</A></TD><TD ><A HREF = "fix_setforce.html">setforce (c)</A></TD><TD ><A HREF = "fix_shake.html">shake (c)</A></TD><TD ><A HREF = "fix_spring.html">spring</A></TD><TD ><A HREF = "fix_spring_rg.html">spring/rg</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "fix_spring_self.html">spring/self</A></TD><TD ><A HREF = "fix_srd.html">srd</A></TD><TD ><A HREF = "fix_store_force.html">store/force</A></TD><TD ><A HREF = "fix_store_state.html">store/state</A></TD><TD ><A HREF = "fix_temp_berendsen.html">temp/berendsen (c)</A></TD><TD ><A HREF = "fix_temp_csvr.html">temp/csvr</A></TD><TD ><A HREF = "fix_temp_rescale.html">temp/rescale (c)</A></TD><TD ><A HREF = "fix_thermal_conductivity.html">thermal/conductivity</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "fix_tmd.html">tmd</A></TD><TD ><A HREF = "fix_ttm.html">ttm</A></TD><TD ><A HREF = "fix_tune_kspace.html">tune/kspace</A></TD><TD ><A HREF = "fix_vector.html">vector</A></TD><TD ><A HREF = "fix_viscosity.html">viscosity</A></TD><TD ><A HREF = "fix_viscous.html">viscous (c)</A></TD><TD ><A HREF = "fix_wall.html">wall/colloid</A></TD><TD ><A HREF = "fix_wall_gran.html">wall/gran</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "fix_wall.html">wall/harmonic</A></TD><TD ><A HREF = "fix_wall.html">wall/lj1043</A></TD><TD ><A HREF = "fix_wall.html">wall/lj126</A></TD><TD ><A HREF = "fix_wall.html">wall/lj93</A></TD><TD ><A HREF = "fix_wall_piston.html">wall/piston</A></TD><TD ><A HREF = "fix_wall_reflect.html">wall/reflect</A></TD><TD ><A HREF = "fix_wall_region.html">wall/region</A></TD><TD ><A HREF = "fix_wall_srd.html">wall/srd</A>
<TR ALIGN="center"><TD ><A HREF = "fix_planeforce.html">planeforce</A></TD><TD ><A HREF = "fix_poems.html">poems</A></TD><TD ><A HREF = "fix_pour.html">pour</A></TD><TD ><A HREF = "fix_press_berendsen.html">press/berendsen</A></TD><TD ><A HREF = "fix_print.html">print</A></TD><TD ><A HREF = "fix_property_atom.html">property/atom</A></TD><TD ><A HREF = "fix_qeq.html">qeq</A></TD><TD ><A HREF = "fix_qeq_comb.html">qeq/comb (o)</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "fix_reax_bonds.html">reax/bonds</A></TD><TD ><A HREF = "fix_recenter.html">recenter</A></TD><TD ><A HREF = "fix_restrain.html">restrain</A></TD><TD ><A HREF = "fix_rigid.html">rigid (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/nph (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/npt (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/nve (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/nvt (o)</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "fix_rigid.html">rigid/small (o)</A></TD><TD ><A HREF = "fix_rigid.html">rigid/small/nph</A></TD><TD ><A HREF = "fix_rigid.html">rigid/small/npt</A></TD><TD ><A HREF = "fix_rigid.html">rigid/small/nve</A></TD><TD ><A HREF = "fix_rigid.html">rigid/small/nvt</A></TD><TD ><A HREF = "fix_setforce.html">setforce (c)</A></TD><TD ><A HREF = "fix_shake.html">shake (c)</A></TD><TD ><A HREF = "fix_spring.html">spring</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "fix_spring_rg.html">spring/rg</A></TD><TD ><A HREF = "fix_spring_self.html">spring/self</A></TD><TD ><A HREF = "fix_srd.html">srd</A></TD><TD ><A HREF = "fix_store_force.html">store/force</A></TD><TD ><A HREF = "fix_store_state.html">store/state</A></TD><TD ><A HREF = "fix_temp_berendsen.html">temp/berendsen (c)</A></TD><TD ><A HREF = "fix_temp_csvr.html">temp/csvr</A></TD><TD ><A HREF = "fix_temp_rescale.html">temp/rescale (c)</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "fix_thermal_conductivity.html">thermal/conductivity</A></TD><TD ><A HREF = "fix_tmd.html">tmd</A></TD><TD ><A HREF = "fix_ttm.html">ttm</A></TD><TD ><A HREF = "fix_tune_kspace.html">tune/kspace</A></TD><TD ><A HREF = "fix_vector.html">vector</A></TD><TD ><A HREF = "fix_viscosity.html">viscosity</A></TD><TD ><A HREF = "fix_viscous.html">viscous (c)</A></TD><TD ><A HREF = "fix_wall.html">wall/colloid</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "fix_wall_gran.html">wall/gran</A></TD><TD ><A HREF = "fix_wall.html">wall/harmonic</A></TD><TD ><A HREF = "fix_wall.html">wall/lj1043</A></TD><TD ><A HREF = "fix_wall.html">wall/lj126</A></TD><TD ><A HREF = "fix_wall.html">wall/lj93</A></TD><TD ><A HREF = "fix_wall_piston.html">wall/piston</A></TD><TD ><A HREF = "fix_wall_reflect.html">wall/reflect</A></TD><TD ><A HREF = "fix_wall_region.html">wall/region</A></TD></TR>
<TR ALIGN="center"><TD ><A HREF = "fix_wall_srd.html">wall/srd</A>
</TD></TR></TABLE></DIV>
<P>These are additional fix styles in USER packages, which can be used if

View File

@ -527,6 +527,7 @@ g = GPU, i = USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.
"press/berendsen"_fix_press_berendsen.html,
"print"_fix_print.html,
"property/atom"_fix_property_atom.html,
"qeq"_fix_qeq.html,
"qeq/comb (o)"_fix_qeq_comb.html,
"reax/bonds"_fix_reax_bonds.html,
"recenter"_fix_recenter.html,

182
doc/fix_qeq.html Normal file
View File

@ -0,0 +1,182 @@
<HTML>
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
</CENTER>
<HR>
<H3>fix qeq/point command
</H3>
<H3>fix qeq/shielded command
</H3>
<H3>fix qeq/slater command
</H3>
<H3>fix qeq/dynamic command
</H3>
<P><B>Syntax:</B>
</P>
<PRE>fix ID group-ID style Nevery cutoff tolerance maxiter params
</PRE>
<UL><LI>ID, group-ID are documented in <A HREF = "fix.html">fix</A> command
<LI>style = <I>qeq/point</I> or <I>qeq/shielded</I> or <I>qeq/slater</I> or <I>qeq/dynamic</I>
<LI>Nevery = perform charge equilibration every this many steps
<LI>cutoff = global cutoff for charge-charge interactions (distance unit)
<LI>tolerance = precision to which charges will be equilibrated
<LI>maxiter = maximum iterations to perform charge equilibration
<LI>params = a filename
</UL>
<P><B>Examples:</B>
</P>
<PRE>fix 1 all qeq/point 1 10 1.0e-6 200 param.qeq1
fix 1 qeq qeq/shielded 1 8 1.0e-6 100 param.qeq2
fix 1 all qeq/slater 5 10 1.0e-6 100 params
fix 1 qeq qeq/dynamic 1 12 1.0e-3 100 my_qeq
</PRE>
<P><B>Description:</B>
</P>
<P>Perform the charge equilibration (QEq) method as described in <A HREF = "#Rappe">(Rappe
and Goddard)</A> and formulated in <A HREF = "#Nakano">(Nakano)</A> (also
known as the matrix inversion method)
and in <A HREF = "#Rick">(Rick and Stuart)</A> (also known as the extended
Lagrangian method) based on the electronegativity equilization principle.
These fixes can be used with any potential in LAMMPS, so long as it defines and
uses charges on each atom and that QEq parameters are provided.
</P>
<P>IMPORTANT NOTE: The <A HREF = "fix_qeq_comb.html">fix qeq/comb</A>
command should be used to perform charge equliibration with the <A HREF = "pair_comb.html">COMB
potential</A>. The <A HREF = "fix_qeq_reax.html">fix qeq/reax</A>
command can be used to perform charge equilibration with the <A HREF = "pair_reax_c.html">ReaxFF force
field</A>, although fix qeq/shielded yields exact same
results as fix qeq/reax if <I>Nevery</I>, cutoff</I>, and <I>tolerance</I> are the same.
</P>
<P>The QEq method minimizes the electrostatic energy of the system (or
equalizes the derivative of energy with respect to charge of all the
atoms) by adjusting the partial charge on individual atoms based on
interactions with their neighbors within <I>cutoff</I>.
It reqires some parameters for each atom type provided in a file
specified by <I>params</I>. First line of the file should be the unit
style of these parameters. These
fixes support real, metal, si, cgs, and electron units. Using lj,
micro, and nano units will result in an error.
Each of the following lines should be formatted as follows:
</P>
<PRE>itype chi eta gamma zeta qcore
</PRE>
<P>where <I>itype</I> is the atom type from 1 to Ntypes, <I>chi</I> denotes the
electronegativity in energy units, <I>eta</I> denotes the self-Coulomb
potential in energy units, <I>gamma</I> denotes the shielded Coulomb
constant defined by <A HREF = "#vanDuin">ReaxFF force field</A> in distance units,
<I>zeta</I> denotes the Slater type orbital exponent defined by the
<A HREF = "#Streitz">Streitz-Mintmire</A> potential (not yet available in LAMMPS)
in reverse distance units, and <I>qcore</I> denotes the charge of the
nucleus defined by the Streitz-Mintmire potential in charge units.
</P>
<P>The <I>qeq/point</I> style describes partial charges on atoms as point charges.
Interaction between a pair of charged particles is 1/r, which is the simplest
description of the interaction between charges. Only <I>chi</I> and <I>eta</I>
parameters in the <I>params</I> file are used. Note that Coulomb catastrophe
can occur if repulsion between the pair of charged particles is too weak.
This style solves partial charges on atoms via the matrix inversion method.
A tolerance of 1.0e-6 is usually a good number.
</P>
<P>The <I>qeq/shielded</I> style describes partial charges on atoms also as point
charges, but uses a shielded Coulomb potential to describe
the interaction between a pair of charged particles. Interaction through
the shielded Coulomb is given by equation (13) of the
<A HREF = "#vanDuin">ReaxFF force field</A> paper. The shielding accounts for charge overlap
between charged particles at small separation. This style is the same as
<A HREF = "fix_qeq_reax.html">fix qeq/reax</A>, and can be used with
<A HREF = "pair_reax_c.html">pair_style reax/c</A>. Only <I>chi</I>, <I>eta</I>, and <I>gamma</I> parameters
in the <I>params</I> file are used.
This style solves partial charges on atoms via the matrix inversion method.
A tolerance of 1.0e-6 is usually a good number.
</P>
<P>The <I>qeq/slater</I> style describes partial charges on atoms as spherical
charge densities centered around atoms via the Slater 1<I>s</I> orbital, so that
the interaction between a pair of charged particles is the product of two
Slater 1<I>s</I> orbitals. The expression for the Slater 1<I>s</I> orbital is given under
equation (6) of the <A HREF = "#Streitz">Streitz-Mintmire</A> paper. <I>chi</I>, <I>eta</I>, <I>zeta</I>,
and <I>qcore</I> parameters in the <I>params</I> file are used.
This style solves partial charges on atoms via the matrix inversion method.
A tolerance of 1.0e-6 is usually a good number.
</P>
<P>The <I>qeq/dynamic</I> style describes partial charges on atoms as point charges
that interact through 1/r, but the extended Lagrangian method is used to solve
partial charges on atoms. Only <I>chi</I> and <I>eta</I> parameters in the <I>params</I> file
are used. Note that Coulomb catastrophe can occur if repulsion between the
pair of charged particles is too weak.
A tolerance of 1.0e-3 is usually a good number.
</P>
<P>Note that <I>qeq/point</I>, <I>qeq/shielded</I>, and <I>qeq/slater</I> describe different charge
models, whereas the matrix inversion method and the extended Lagrangian method
(<I>qeq/dynamic</I>) are different solvers.
</P>
<P>Note that the <I>qeq/point</I> and the <I>qeq/dynamic</I> styles both describe charges as
point charges that interact through 1/r relationship, but solve partial charges
on atoms using different solvers. <I>qeq/point</I> and the <I>qeq/dynamic</I> styles should
yield comparable results if the QEq parameters and <I>Nevery</I>, cutoff</I>,
and <I>tolerance</I> are the same. <I>qeq/point</I> is typically faster, but <I>qeq/dynamic</I>
scales better on larger sizes.
</P>
<P>IMPORTANT NOTE: To avoid the evaluation of the derivative of charge with
respect to position, which is typically ill-defined, the system should have a
zero net charge.
</P>
<P>IMPORTANT NOTE: Developing QEq parameters (chi, eta, gamma, zeta, and qcore)
is an "art". Charges on atoms are not guaranteed to equilibrate with arbitrary
choices of these parameters. We do not develop these QEq paramters.
</P>
<P><B>Restart, fix_modify, output, run start/stop, minimize info:</B>
</P>
<P>No information about these fixes is written to <A HREF = "restart.html">binary restart
files</A>. No global scalar or vector or per-atom
quantities are stored by these fixes for access by various <A HREF = "Section_howto.html#howto_15">output
commands</A>. No parameter of these fixes can
be used with the <I>start/stop</I> keywords of the <A HREF = "run.html">run</A> command.
</P>
<P>Thexe fixes are invoked during <A HREF = "minimize.html">energy minimization</A>.
</P>
<P><B>Restrictions:</B>
</P>
<P>These fixes are part of the USER-QEQ package. They are only enabled if
LAMMPS was built with that package. See the <A HREF = "Section_start.html#start_3">Making
LAMMPS</A> section for more info.
</P>
<P><B>Related commands:</B>
</P>
<P><A HREF = "fix_qeq_reax.html">fix qeq/reax</A>
<A HREF = "fix_qeq_comb.html">fix qeq/comb</A>
</P>
<P><B>Default:</B> none
</P>
<HR>
<A NAME = "Rappe"></A>
<P><B>(Rappe and Goddard)</B> A. K. Rappe and W. A. Goddard III, J Physical Chemistry, 105,
3358-3363 (1991).
</P>
<A NAME = "Nakano"></A>
<P><B>(Nakano)</B> A. Nakano, Computer Physics Communications, 104, 59-69 (1997).
</P>
<A NAME = "Rick"></A>
<P><B>(Rick and Stuart)</B> S. W. Rick, S. J. Stuart, B. J. Berne, J Chemical Physics
101, 16141 (1994).
</P>
<A NAME = "Streitz"></A>
<P><B>(Streitz-Mintmire)</B> F. H. Streitz, J. W. Mintmire, Physical Review B, 50,
16, 11996 (1994)
</P>
<A NAME = "vanDuin"></A>
<P><B>(ReaxFF)</B> A. C. T. van Duin, S. Dasgupta, F. Lorant, W. A. Goddard III, J
Physical Chemistry, 105, 9396-9049 (2001)
</P>
</HTML>

169
doc/fix_qeq.txt Normal file
View File

@ -0,0 +1,169 @@
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
:link(lws,http://lammps.sandia.gov)
:link(ld,Manual.html)
:link(lc,Section_commands.html#comm)
:line
fix qeq/point command :h3
fix qeq/shielded command :h3
fix qeq/slater command :h3
fix qeq/dynamic command :h3
[Syntax:]
fix ID group-ID style Nevery cutoff tolerance maxiter params :pre
ID, group-ID are documented in "fix"_fix.html command
style = {qeq/point} or {qeq/shielded} or {qeq/slater} or {qeq/dynamic}
Nevery = perform charge equilibration every this many steps
cutoff = global cutoff for charge-charge interactions (distance unit)
tolerance = precision to which charges will be equilibrated
maxiter = maximum iterations to perform charge equilibration
params = a filename :ul
[Examples:]
fix 1 all qeq/point 1 10 1.0e-6 200 param.qeq1
fix 1 qeq qeq/shielded 1 8 1.0e-6 100 param.qeq2
fix 1 all qeq/slater 5 10 1.0e-6 100 params
fix 1 qeq qeq/dynamic 1 12 1.0e-3 100 my_qeq :pre
[Description:]
Perform the charge equilibration (QEq) method as described in "(Rappe
and Goddard)"_#Rappe and formulated in "(Nakano)"_#Nakano (also
known as the matrix inversion method)
and in "(Rick and Stuart)"_#Rick (also known as the extended
Lagrangian method) based on the electronegativity equilization principle.
These fixes can be used with any potential in LAMMPS, so long as it defines and
uses charges on each atom and that QEq parameters are provided.
IMPORTANT NOTE: The "fix qeq/comb"_fix_qeq_comb.html
command should be used to perform charge equliibration with the "COMB
potential"_pair_comb.html. The "fix qeq/reax"_fix_qeq_reax.html
command can be used to perform charge equilibration with the "ReaxFF force
field"_pair_reax_c.html, although fix qeq/shielded yields exact same
results as fix qeq/reax if {Nevery}, cutoff}, and {tolerance} are the same.
The QEq method minimizes the electrostatic energy of the system (or
equalizes the derivative of energy with respect to charge of all the
atoms) by adjusting the partial charge on individual atoms based on
interactions with their neighbors within {cutoff}.
It reqires some parameters for each atom type provided in a file
specified by {params}. First line of the file should be the unit
style of these parameters. These
fixes support real, metal, si, cgs, and electron units. Using lj,
micro, and nano units will result in an error.
Each of the following lines should be formatted as follows:
itype chi eta gamma zeta qcore :pre
where {itype} is the atom type from 1 to Ntypes, {chi} denotes the
electronegativity in energy units, {eta} denotes the self-Coulomb
potential in energy units, {gamma} denotes the shielded Coulomb
constant defined by "ReaxFF force field"_#vanDuin in distance units,
{zeta} denotes the Slater type orbital exponent defined by the
"Streitz-Mintmire"_#Streitz potential (not yet available in LAMMPS)
in reverse distance units, and {qcore} denotes the charge of the
nucleus defined by the Streitz-Mintmire potential in charge units.
The {qeq/point} style describes partial charges on atoms as point charges.
Interaction between a pair of charged particles is 1/r, which is the simplest
description of the interaction between charges. Only {chi} and {eta}
parameters in the {params} file are used. Note that Coulomb catastrophe
can occur if repulsion between the pair of charged particles is too weak.
This style solves partial charges on atoms via the matrix inversion method.
A tolerance of 1.0e-6 is usually a good number.
The {qeq/shielded} style describes partial charges on atoms also as point
charges, but uses a shielded Coulomb potential to describe
the interaction between a pair of charged particles. Interaction through
the shielded Coulomb is given by equation (13) of the
"ReaxFF force field"_#vanDuin paper. The shielding accounts for charge overlap
between charged particles at small separation. This style is the same as
"fix qeq/reax"_fix_qeq_reax.html, and can be used with
"pair_style reax/c"_pair_reax_c.html. Only {chi}, {eta}, and {gamma} parameters
in the {params} file are used.
This style solves partial charges on atoms via the matrix inversion method.
A tolerance of 1.0e-6 is usually a good number.
The {qeq/slater} style describes partial charges on atoms as spherical
charge densities centered around atoms via the Slater 1{s} orbital, so that
the interaction between a pair of charged particles is the product of two
Slater 1{s} orbitals. The expression for the Slater 1{s} orbital is given under
equation (6) of the "Streitz-Mintmire"_#Streitz paper. {chi}, {eta}, {zeta},
and {qcore} parameters in the {params} file are used.
This style solves partial charges on atoms via the matrix inversion method.
A tolerance of 1.0e-6 is usually a good number.
The {qeq/dynamic} style describes partial charges on atoms as point charges
that interact through 1/r, but the extended Lagrangian method is used to solve
partial charges on atoms. Only {chi} and {eta} parameters in the {params} file
are used. Note that Coulomb catastrophe can occur if repulsion between the
pair of charged particles is too weak.
A tolerance of 1.0e-3 is usually a good number.
Note that {qeq/point}, {qeq/shielded}, and {qeq/slater} describe different charge
models, whereas the matrix inversion method and the extended Lagrangian method
({qeq/dynamic}) are different solvers.
Note that the {qeq/point} and the {qeq/dynamic} styles both describe charges as
point charges that interact through 1/r relationship, but solve partial charges
on atoms using different solvers. {qeq/point} and the {qeq/dynamic} styles should
yield comparable results if the QEq parameters and {Nevery}, cutoff},
and {tolerance} are the same. {qeq/point} is typically faster, but {qeq/dynamic}
scales better on larger sizes.
IMPORTANT NOTE: To avoid the evaluation of the derivative of charge with
respect to position, which is typically ill-defined, the system should have a
zero net charge.
IMPORTANT NOTE: Developing QEq parameters (chi, eta, gamma, zeta, and qcore)
is an "art". Charges on atoms are not guaranteed to equilibrate with arbitrary
choices of these parameters. We do not develop these QEq paramters.
[Restart, fix_modify, output, run start/stop, minimize info:]
No information about these fixes is written to "binary restart
files"_restart.html. No global scalar or vector or per-atom
quantities are stored by these fixes for access by various "output
commands"_Section_howto.html#howto_15. No parameter of these fixes can
be used with the {start/stop} keywords of the "run"_run.html command.
Thexe fixes are invoked during "energy minimization"_minimize.html.
[Restrictions:]
These fixes are part of the USER-QEQ package. They are only enabled if
LAMMPS was built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
[Related commands:]
"fix qeq/reax"_fix_qeq_reax.html
"fix qeq/comb"_fix_qeq_comb.html
[Default:] none
:line
:link(Rappe)
[(Rappe and Goddard)] A. K. Rappe and W. A. Goddard III, J Physical Chemistry, 105,
3358-3363 (1991).
:link(Nakano)
[(Nakano)] A. Nakano, Computer Physics Communications, 104, 59-69 (1997).
:link(Rick)
[(Rick and Stuart)] S. W. Rick, S. J. Stuart, B. J. Berne, J Chemical Physics
101, 16141 (1994).
:link(Streitz)
[(Streitz-Mintmire)] F. H. Streitz, J. W. Mintmire, Physical Review B, 50,
16, 11996 (1994)
:link(vanDuin)
[(ReaxFF)] A. C. T. van Duin, S. Dasgupta, F. Lorant, W. A. Goddard III, J
Physical Chemistry, 105, 9396-9049 (2001)