"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

kspace_style command :h3

[Syntax:]

kspace_style style value :pre

style = {none} or {ewald} or {ewald/disp} or {ewald/omp} or {pppm} or {pppm/cg} or {pppm/disp} or {pppm/tip4p} or {pppm/stagger} or {pppm/disp/tip4p} or {pppm/gpu} or {pppm/omp} or {pppm/cg/omp} or {pppm/tip4p/omp} or {msm} or {msm/cg} or {msm/omp} or {msm/cg/omp} :ulb,l
  {none} value = none
  {ewald} value = accuracy
    accuracy = desired relative error in forces
  {ewald/disp} value = accuracy
    accuracy = desired relative error in forces
  {ewald/omp} value = accuracy
    accuracy = desired relative error in forces
  {pppm} value = accuracy
    accuracy = desired relative error in forces
  {pppm/cg} value = accuracy (smallq)
    accuracy = desired relative error in forces
    smallq = cutoff for charges to be considered (optional) (charge units)
  {pppm/disp} value = accuracy
    accuracy = desired relative error in forces
  {pppm/tip4p} value = accuracy
    accuracy = desired relative error in forces
  {pppm/disp/tip4p} value = accuracy
    accuracy = desired relative error in forces
  {pppm/gpu} value = accuracy
    accuracy = desired relative error in forces
  {pppm/omp} value = accuracy
    accuracy = desired relative error in forces
  {pppm/cg/omp} value = accuracy
    accuracy = desired relative error in forces
  {pppm/tip4p/omp} value = accuracy
    accuracy = desired relative error in forces
  {pppm/stagger} value = accuracy
    accuracy = desired relative error in forces
  {msm} value = accuracy
    accuracy = desired relative error in forces
  {msm/cg} value = accuracy (smallq)
    accuracy = desired relative error in forces
    smallq = cutoff for charges to be considered (optional) (charge units)
  {msm/omp} value = accuracy
    accuracy = desired relative error in forces
  {msm/cg/omp} value = accuracy (smallq)
    accuracy = desired relative error in forces
    smallq = cutoff for charges to be considered (optional) (charge units) :pre
:ule

[Examples:]

kspace_style pppm 1.0e-4
kspace_style pppm/cg 1.0e-5 1.0e-6
kspace style msm 1.0e-4
kspace_style none :pre

[Description:]

Define a long-range solver for LAMMPS to use each timestep to compute
long-range Coulombic interactions or long-range 1/r^6 interactions.
Most of the long-range solvers perform their computation in K-space,
hence the name of this command.

When such a solver is used in conjunction with an appropriate pair
style, the cutoff for Coulombic or 1/r^N interactions is effectively
infinite.  If the Coulombic case, this means each charge in the system
interacts with charges in an infinite array of periodic images of the
simulation domain.

Note that using a long-range solver requires use of a matching "pair
style"_pair.html to perform consistent short-range pairwise
calculations.  This means that the name of the pair style contains a
matching keyword to the name of the KSpace style, as in this table:

Pair style : KSpace style 
coul/long : ewald or pppm
coul/msm : msm
lj/long or buck/long : disp (for dispersion)
tip4p/long : tip4p :tb(s=:,ea=c)

:line

The {ewald} style performs a standard Ewald summation as described in
any solid-state physics text.

The {ewald/disp} style adds a long-range dispersion sum option for
1/r^6 potentials and is useful for simulation of interfaces
"(Veld)"_#Veld.  It also performs standard Coulombic Ewald summations,
but in a more efficient manner than the {ewald} style.  The 1/r^6
capability means that Lennard-Jones or Buckingham potentials can be
used without a cutoff, i.e. they become full long-range potentials.
The {ewald/disp} style can also be used with point-dipoles
"(Toukmaji)"_#Toukmaji and is currently the only kspace solver in
LAMMPS with this capability.

:line

The {pppm} style invokes a particle-particle particle-mesh solver
"(Hockney)"_#Hockney which maps atom charge to a 3d mesh, uses 3d FFTs
to solve Poisson's equation on the mesh, then interpolates electric
fields on the mesh points back to the atoms.  It is closely related to
the particle-mesh Ewald technique (PME) "(Darden)"_#Darden used in
AMBER and CHARMM.  The cost of traditional Ewald summation scales as
N^(3/2) where N is the number of atoms in the system.  The PPPM solver
scales as Nlog(N) due to the FFTs, so it is almost always a faster
choice "(Pollock)"_#Pollock.

The {pppm/cg} style is identical to the {pppm} style except that it
has an optimization for systems where most particles are uncharged.
Similarly the {msm/cg} style implements the same optimization for {msm}.
The optional {smallq} argument defines the cutoff for the absolute
charge value which determines whether a particle is considered charged
or not.  Its default value is 1.0e-5.

The {pppm/tip4p} style is identical to the {pppm} style except that it
adds a charge at the massless 4th site in each TIP4P water molecule.
It should be used with "pair styles"_pair_style.html with a
{tip4p/long} in their style name.

The {pppm/stagger} style performs calculations using two different
meshes, one shifted slightly with respect to the other.  This can
reduce force aliasing errors and increase the accuracy of the method
for a given mesh size.  Or a coarser mesh can be used for the same
target accuracy, which saves CPU time.  However, there is a trade-off
since FFTs on two meshes are now performed which increases the
compuation required.  See "(Cerutti)"_#Cerutti, "(Neelov)"_#Neelov,
and "(Hockney)"_#Hockney for details of the method.

For high relative accuracy, using staggered PPPM allows the mesh size
to be reduced by a factor of 2 in each dimension as compared to
regular PPPM (for the same target accuracy).  This can give up to a 4x
speedup in the KSpace time (8x less mesh points, 2x more expensive).
However, for low relative accuracy, the staggered PPPM mesh size may
be essentially the same as for regular PPPM, which means the method
will be up to 2x slower in the KSpace time (simply 2x more expensive).
For more details and timings, see
"Section_accelerate"_Section_accelerate.html.

IMPORTANT NOTE: Using {pppm/stagger} may not give the same increase in
the accuracy of energy and pressure as it does in forces, so some
caution must be used if energy and/or pressure are quantities of
interest, such as when using a barostat.

:line

The {pppm/disp} and {pppm/disp/tip4p} styles add a mesh-based long-range
dispersion sum option for 1/r^6 potentials "(Isele-Holder)"_#Isele-Holder,
similar to the {ewald/disp} style. The 1/r^6 capability means
that Lennard-Jones or Buckingham potentials can be used without a cutoff,
i.e. they become full long-range potentials.

For these styles, it is currently recommended that you set the
dispersion mesh size and other parameters explicitly via the
"kspace_modify"_kspace_modify.html command, rather than let LAMMPS set
them automatically.  For example, a set of parameters that works well
for surface systems when using real units is a LJ cutoff of 10 Angstrom,
interpolation order = 5 (the default), grid spacing = 4.17 Angstroms,
and Ewald parameter = 0.28.  These parameters work well for the {ik}
differentiation.  For the {ad} setting, a smaller grid spacing is needed,
e.g. 3 Angstroms. Further information on the influence of the parameters
and how to choose them is described in "(Isele-Holder)"_#Isele-Holder.

:line

IMPORTANT NOTE: All of the PPPM styles can be used with
single-precision FFTs by using the compiler switch -DFFT_SINGLE for
the FFT_INC setting in your lo-level Makefile.  This setting also
changes some of the PPPM operations (e.g. mapping charge to mesh and
interpolating electric fields to particles) to be performed in single
precision.  This option can speed-up long-range calulations,
particularly in parallel or on GPUs.  The use of the -DFFT_SINGLE flag
is discussed in "this section"_Section_start.html#start_2_4 of the
manual. MSM does not currently support the -DFFT_SINGLE compiler switch.

:line

The {msm} style invokes a multi-level summation method MSM solver,
"(Hardy)"_#Hardy or "(Hardy2)"_#Hardy2, which maps atom charge to a 3d
mesh, and uses a multi-level hierarchy of coarser and coarser meshes
on which direct coulomb solves are done.  This method does not use
FFTs and scales as N. It may therefore be faster than the other
K-space solvers for relatively large problems when running on large
core counts. MSM can also be used for non-periodic boundary conditions and 
for mixed periodic and non-periodic boundaries.

MSM is most competitive versus Ewald and PPPM when only relatively 
low accuracy forces, about 1e-4 relative error or less accurate, 
are needed. Note that use of a larger coulomb cutoff (i.e. 15 
angstroms instead of 10 angstroms) provides better MSM accuracy for 
both the real space and grid computed forces.

Currently the pressure calculation in MSM is expensive,
so calculating the pressure at every timestep or using a fixed pressure
simulation with MSM will cause the code to run slower.

:line

The specified {accuracy} determines the relative RMS error in per-atom
forces calculated by the long-range solver.  It is set as a
dimensionless number, relative to the force that two unit point
charges (e.g. 2 monovalent ions) exert on each other at a distance of
1 Angstrom.  This reference value was chosen as representative of the
magnitude of electrostatic forces in atomic systems.  Thus an accuracy
value of 1.0e-4 means that the RMS error will be a factor of 10000
smaller than the reference force.

The accuracy setting is used in conjunction with the pairwise cutoff
to determine the number of K-space vectors for style {ewald} or the
grid size for style {pppm} or {msm}. 

Note that style {pppm} only computes the grid size at the beginning of
a simulation, so if the length or triclinic tilt of the simulation cell
increases dramatically during the course of the simulation, the accuracy
of the simulation may degrade. For example, for a triclinic system with 
all three tilt factors set to the maximum limit, the PPPM grid should be
increased roughly by a factor of 1.5 in the y direction and 2.0 in the z
direction as compared to the same system using a cubic orthogonal simulation
cell. One way to ensure the accuracy requirement is being met is to run a 
short simulation at the maximum expected tilt or length, note the required
grid size, and then use the "kspace_modify"_kspace_modify.html {mesh} 
command to manually set the PPPM grid size to this value.

RMS force errors in real space for {ewald} and {pppm} are estimated
using equation 18 of "(Kolafa)"_#Kolafa, which is also referenced as
equation 9 of "(Petersen)"_#Petersen. RMS force errors in K-space for
{ewald} are estimated using equation 11 of "(Petersen)"_#Petersen,
which is similar to equation 32 of "(Kolafa)"_#Kolafa. RMS force
errors in K-space for {pppm} are estimated using equation 38 of
"(Deserno)"_#Deserno. RMS force errors for {msm} are estimated 
using ideas from chapter 3 of "(Hardy)"_#Hardy, with equation 3.197
of particular note. When using {msm} with non-periodic boundary 
conditions, it is expected that the error estimation will be too
pessimistic. RMS force errors for dipoles when using {ewald/disp}
are estimated using equations 33 and 46 of "(Wang)"_#Wang.

See the "kspace_modify"_kspace_modify.html command for additional
options of the K-space solvers that can be set, including a {force}
option for setting an absoulte RMS error in forces, as opposed to a
relative RMS error.

:line

Styles with a {cuda}, {gpu}, {omp}, or {opt} suffix are functionally
the same as the corresponding style without the suffix.  They have
been optimized to run faster, depending on your available hardware, as
discussed in "Section_accelerate"_Section_accelerate.html of the
manual.  The accelerated styles take the same arguments and should
produce the same results, except for round-off and precision issues.

More specifically, the {pppm/gpu} style performs charge assignment and
force interpolation calculations on the GPU.  These processes are
performed either in single or double precision, depending on whether
the -DFFT_SINGLE setting was specified in your lo-level Makefile, as
discussed above.  The FFTs themselves are still calculated on the CPU.
If {pppm/gpu} is used with a GPU-enabled pair style, part of the PPPM
calculation can be performed concurrently on the GPU while other
calculations for non-bonded and bonded force calculation are performed
on the CPU.

These accelerated styles are part of the USER-CUDA, GPU, USER-OMP, and
OPT packages respectively.  They are only enabled if LAMMPS was built
with those packages.  See the "Making LAMMPS"_Section_start.html#start_3
section for more info.

See "Section_accelerate"_Section_accelerate.html of the manual for
more instructions on how to use the accelerated styles effectively.

[Restrictions:]

Note that the long-range electrostatic solvers in LAMMPS assume conducting
metal (tinfoil) boundary conditions for both charge and dipole
interactions. Vacuum boundary conditions are not currently supported.

The {ewald/disp}, {ewald}, {pppm}, and {msm} styles support 
non-orthogonal (triclinic symmetry) simulation boxes. However, triclinic
simulation cells may not yet be supported by suffix versions of these 
styles (such as {pppm/cuda}). 

All of the kspace styles are part of the KSPACE 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.  Note that
the KSPACE package is installed by default.

For MSM, a simulation must be 3d and one can use any combination of 
periodic, non-periodic, or shrink-wrapped boundaries (specified using 
the "boundary"_boundary.html command). 

For Ewald and PPPM, a simulation must be 3d and periodic in all dimensions.  
The only exception is if the slab option is set with "kspace_modify"_kspace_modify.html, 
in which case the xy dimensions must be periodic and the z dimension must be 
non-periodic.

[Related commands:]

"kspace_modify"_kspace_modify.html, "pair_style
lj/cut/coul/long"_pair_lj.html, "pair_style
lj/charmm/coul/long"_pair_charmm.html, "pair_style
lj/long/coul/long"_pair_lj_long.html, "pair_style buck/coul/long"_pair_buck.html

[Default:]

kspace_style none :pre

:line

:link(Darden)
[(Darden)] Darden, York, Pedersen, J Chem Phys, 98, 10089 (1993).

:link(Deserno)
[(Deserno)] Deserno and Holm, J Chem Phys, 109, 7694 (1998).

:link(Hockney) 
[(Hockney)] Hockney and Eastwood, Computer Simulation Using Particles,
Adam Hilger, NY (1989).

:link(Kolafa)
[(Kolafa)] Kolafa and Perram, Molecular Simualtion, 9, 351 (1992).

:link(Petersen)
[(Petersen)] Petersen, J Chem Phys, 103, 3668 (1995).

:link(Wang)
[(Wang)] Wang and Holm, J Chem Phys, 115, 6277 (2001).

:link(Pollock)
[(Pollock)] Pollock and Glosli, Comp Phys Comm, 95, 93 (1996).

:link(Cerutti)
[(Cerutti)] Cerutti, Duke, Darden, Lybrand, Journal of Chemical Theory
and Computation 5, 2322 (2009)

:link(Neelov)
[(Neelov)] Neelov, Holm, J Chem Phys 132, 234103 (2010)

:link(Veld)
[(Veld)] In 't Veld, Ismail, Grest, J Chem Phys, 127, 144711 (2007).

:link(Toukmaji)
[(Toukmaji)] Toukmaji, Sagui, Board, and Darden, J Chem Phys, 113,
10913 (2000).

:link(Isele-Holder)
[(Isele-Holder)] Isele-Holder, Mitchell, Ismail, J Chem Phys, 137, 174107 (2012). 

:link(Hardy)
[(Hardy)] David Hardy thesis: Multilevel Summation for the Fast
Evaluation of Forces for the Simulation of Biomolecules, University of
Illinois at Urbana-Champaign, (2006).

:link(Hardy2)
[(Hardy)] Hardy, Stone, Schulten, Parallel Computing 35 (2009)
164-177.
