As its name implies the Smoothed Particle Mesh Ewald (SPME) method
is a modification of the standard Ewald method. DL_POLY_2 implements the SPME method of
Essmann et al. [31]. Formally this method
is capable of treating van der Waals forces also, but in DL_POLY_2 it is confined to
electrostatic forces only. The main difference from the standard Ewald method is in its
treatment of the the reciprocal space terms. By means of an interpolation procedure
involving (complex) B-splines, the sum in reciprocal space is represented on a three
dimensional rectangular grid. In this form the Fast Fourier Transform (FFT) may be used to
perform the primary mathematical operation, which is a 3D convolution. The efficiency of
these procedures greatly reduces the cost of the reciprocal space sum when the range of vectors is large. The method (briefly) is as follows (for
full details see [31]):
![]() |
(2.139) |
in which is the integer index of the
vector in a principal
direction,
is the total number of grid points in the same direction and
is the fractional
coordinate of ion
scaled by a factor
(i.e.
). Note that the definition of the B-splines
implies a dependence on the integer
, which limits the formally infinite sum over
. The coefficients
are
B-splines of order
and the factor
is a constant computable from the formula:
![]() |
(2.140) |
![]() |
(2.141) |
where is the discrete Fourier transform of the charge
array
defined as
![]() |
(2.142) |
(in which the sums over etc are required to capture contributions from all
relevant periodic cell images, which in practice means the nearest images.)
![]() |
(2.143) |
in which is the discrete Fourier transform of the function
![]() |
(2.144) |
and where
![]() |
(2.145) |
and is the complex conjgate of
. The function
is thus a
relatively simple product of the gaussian screening term appearing in the conventional
Ewald sum, the function
and the discrete Fourier transform of
![]() |
(2.146) |
Fortunately, due to the recursive properties of the B-splines, these formulae are easily evaluated.
The virial and the stress tensor are calculated in the same manner as for the conventional Ewald sum.
The DL_POLY_2 subroutines required to calculate the SPME contributions are:
BSPGEN, which calculates the B-splines; BSPCOE, which
calculates B-spline coefficients; SPL_CEXP, which calculates the FFT and
B-spline complex exponentials; EWALD_SPME, which calculates the reciprocal
space contributions; SPME_FOR, which calculates the reciprocal space
forces; and DLPFFT3, which calculates the 3D complex fast Fourier transform
(default code only, Cray, SGI, IBM SP machines have their own FFT routines, selected at
compile time and the FFTW public FFT is also an option). These subroutines calculate the
reciprocal space components of the Ewald sum only, the real-space calculations are
performed by EWALD2, EWALD3 and EWALD 4, as
for the normal Ewald sum. In addition there are a few minor utility routines : CPY_RTC
copies a real array to a complex array; ELE_PRD is an element-for-element
product of two arrays; SCL_CSUM is a scalar sum of elements of a complex
array; and SET_BLOCK initialises an array to a present value (usually
zero).