Spectral Ewald Summation

Overview

The Ewald summation module parkipy.ewald uses a Kokkos backend to provide fast summation APIs for the combined Stokes single and double-layer [1] and Laplace [2] kernels. The Ewald method is extended to free directions with ideas from [3].

Automatic parameter selection is facilitated via the EwaldOptions class, where the user selects computational parameters and has the ability to select different Ewald methods and threading configurations.

Ewald kernel are easy to call, e.g., if you are looking to compute the combined Stokes single and double-layer potential in a fully periodic box on a GPU, you can call:

>>> import parkipy
>>> import cupy as cp
>>> nt = 43892
>>> ns = 876942
>>> # Particle Initialization
>>> trg = cp.random.rand(3, nt)
>>> src = cp.random.rand(3, ns)
>>> dsl = cp.random.rand(3, ns)
>>> ddl = cp.random.rand(3, ns)
>>> dns = cp.vstack((dsl, ddl))
>>> nrm = cp.random.rand(3, ns)
>>> # Define Ewald Options
>>> options = parkipy.ewald.EwaldOptions(box=[1,1,1], periodicity=3, tolerance=1e-5, execution_space="Cuda", cell_size=224)
>>> potential = parkipy.ewald.stokes_comb(trg, src, dns, nrm, options)

Detailed documentation of the Ewald kernels and options are given below.

Ewald Kernel Support

EwaldOptions(box, periodicity, tolerance, ...)

Data class for providing options to the stokes_comb() and laplace() Ewald kernels.

SEParams(box_dict, tolerance, periodicity, ...)

Data class for spectral Ewald (SE) parameters.

PerfModel(p2p_time, p2g_time, fft_time, ...)

Performance model for an Ewald summation run.

References