Particle method

Particle methods is a widely used class of numerical algorithms in scientific computing. Its application ranges from computational fluid dynamics (CFD) over molecular dynamics (MD) to discrete element methods.

History
One of the earliest particle methods is smoothed particle hydrodynamics, presented in 1977. Libersky et al. were the first to apply SPH in solid mechanics. The main drawbacks of SPH are inaccurate results near boundaries and tension instability that was first investigated by Swegle.

In the 1990s a new class of particle methods emerged. The reproducing kernel particle method (RKPM) emerged, the approximation motivated in part to correct the kernel estimate in SPH: to give accuracy near boundaries, in non-uniform discretizations, and higher-order accuracy in general. Notably, in a parallel development, the Material point methods were developed around the same time which offer similar capabilities. During the 1990s and thereafter several other varieties were developed including those listed below.

List of methods and acronyms
The following numerical methods are generally considered to fall within the general class of "particle" methods. Acronyms are provided in parentheses.


 * Smoothed particle hydrodynamics (SPH) (1977)
 * Dissipative particle dynamics (DPD) (1992)
 * Reproducing kernel particle method (RKPM) (1995)
 * Moving particle semi-implicit (MPS)
 * Particle-in-cell (PIC)
 * Moving particle finite element method (MPFEM)
 * Cracking particles method (CPM) (2004)
 * Immersed particle method (IPM) (2006)

Definition
The mathematical definition of particle methods captures the structural commonalities of all particle methods. It, therefore, allows for formal reasoning across application domains. The definition is structured into three parts: First, the particle method algorithm structure, including structural components, namely data structures, and functions. Second, the definition of a particle method instance. A particle method instance describes a specific problem or setting, which can be solved or simulated using the particle method algorithm. Third, the definition of the particle state transition function. The state transition function describes how a particle method proceeds from the instance to the final state using the data structures and functions from the particle method algorithm.

A particle method algorithm is a 7-tuple $$(P, G, u, f, i, e, \overset{\circ}{e})$$, consisting of the two data structures $$ \begin{align} &P := A_1 \times A_2 \times ... \times A_n &&\text{the particle space,}\\ &G := B_1 \times B_2 \times ... \times B_m &&\text{the global variable space,} \end{align} $$

such that $$[G\times P^*]$$ is the state space of the particle method, and five functions: $$ \begin{align} &u: [G \times P^*] \times \mathbb N \rightarrow \mathbb N^* &&\text{the neighborhood function,}\\ &f: G \rightarrow \{ \top,\bot \} &&\text{the stopping condition,}\\ &i: G \times P \times P \rightarrow P\times P          &&\text{the interact  function,}\\ &e: G \times P\rightarrow G \times P^*  \ &&\text{the evolve function,} \\ &\overset{\circ}{e} : G \rightarrow G           &&\text{the evolve function of the global variable.} \end{align} $$

An initial state defines a particle method instance for a given particle method algorithm $$(P, G, u, f, i, e, \overset{\circ}{e})$$:

$$ [g^1,\mathbf{p}^1] \in [G\times P^*]. $$

The instance consists of an initial value for the global variable $$g^1 \in G$$ and an initial tuple of particles $$\mathbf p^1 \in P^*$$.

In a specific particle method, the elements of the tuple $$(P, G, u, f, i, e, \overset{\circ}{e})$$ need to be specified. Given a specific starting point defined by an instance $$[g^{1},\mathbf{p}^{1}]$$, the algorithm proceeds in iterations. Each iteration corresponds to one state transition step $$s$$ that advances the current state of the particle method $$[g^{t},\mathbf{p}^{t}]$$ to the next state $$[g^{t+1},\mathbf{p}^{t+1}]$$. The state transition uses the functions $$u, i, e, \overset{\circ}{e}$$ to determine the next state. The state transition function $$S$$ generates a series of state transition steps until the stopping function $$f$$ is $$true$$. The so-calculated final state is the result of the state transition function. The state transition function is identical for every particle method.

The state transition function is defined as

$$	S : [G\times P^*] \rightarrow [G\times P^*] $$

with

$$	[g^T, \mathbf p^T]:=S([g^1, \mathbf p^1]) $$.

The pseudo-code illustrates the particle method state transition function:

1 $$[g, \mathbf p] = [g^1, \mathbf p^1]$$ 2 while $$f(g)=false$$ 3  for $$j = 1$$ to $$|\mathbf p|$$ 4    $$\mathbf k=u([g,\mathbf p],j)$$ 5    for $$l = 1$$ to $$|\mathbf k|$$ 6      $$(p_j,p_{k_j})=i(g,p_j,p_{k_j})$$ 7  $$\mathbf q = $$ 8  for $$j = 1$$ to $$|\mathbf p|$$ 9    $$(g,\overline{\mathbf q})=e(g,p_j)$$ 10    $$\mathbf q=\mathbf q\circ\overline{\mathbf q}$$ 11  $$\mathbf p=\mathbf q$$ 12  $$g=\overset{\circ}{e}(g)$$ 13 $$[g^T, \mathbf p^T] = [g, \mathbf p]$$

The fat symbols are tuples, $$\mathbf p, \mathbf q$$ are particle tuples and $$ \mathbf k$$ is an index tuple. $$ $$ is the empty tuple. The operator $$\circ$$ is the concatenation of the particle tuples, e.g. $$(p_1,p_2)\circ(p_3,p_4,p_5)=(p_1,p_2,p_3,p_4,p_5)$$. And $$ |\mathbf p|$$ is the number of elements in the tuple $$ \mathbf p$$, e.g. $$|(p_1,p_2)|=2$$.